agni-kai
Zuko's Agni Kai for bakeoffs. The formal firebending duel, where competing implementations fight under the same rules and a judge…
Zuko's steady flame for vetting a performance number. A flame that flickers is not a measurement. Use for benchmark-checklist, /benchmark-checklist, before you report or act on a speedup, a regression, a latency, a throughput, a hillclimb harness, or a library or config choice
$ npx -y skills add tmcfarlane/team-avatar --skill steady-flame --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/steady-flameContext preview
The summary Claude sees to decide when to auto-load this skill.
Zuko's steady flame for vetting a performance number. A flame that flickers is not a measurement. Use for benchmark-checklist, /benchmark-checklist, before you report or act on a speedup, a regression, a latency, a throughput, a hillclimb harness, or a library or config choice
name: steady-flame description: Zuko's steady flame for vetting a performance number. A flame that flickers is not a measurement. Use for benchmark-checklist, /benchmark-checklist, before you report or act on a speedup, a regression, a latency, a throughput, a hillclimb harness, or a library or config choice you measured. Checks the limiter, tuning, physical limits, errors, repeatability, relevance, and whether the work happened at all.
Iroh made Zuko hold a single flame until it stopped flickering. Only then could he trust what it would do. A benchmark number is the same. A number that jumps between runs, or that came from the wrong fire, tells you nothing. Hold it steady before you act on it.
Use this whenever you produce a performance number: a PR's before and after, a regression claim, a `dragon-dance` harness, or a library or config choice. Answer each question with evidence from a run, not a guess about the code.
For a quick ballpark the user asked for, one run is enough. Still check questions 4 and 7, and say that it is one run. Skip the rest unless that run looks wrong. A choice between options is never a ballpark.
1. **Why not double?** Name the limiter. Profile in a run you do not report, because profilers and tracers slow the work down. Use CPU per process (`top`, `pidstat`), a runtime profiler (`node --cpu-prof`, `py-spy`, `perf`), I/O wait, and syscall counts (`strace -c` on Linux), then map the hot spot to source. Watch the load generator too. If it saturates first, you measured the load generator. If a change did not move the number, the limiter explains why, so find it before you call the change useless. 2. **Was it tuned?** Run every side the way production runs it. That means release builds, production flags and env, batching and transaction settings, connection pools, caches as warm or cold as production sees them, and the same versions and data. If one side runs on defaults, you compared configurations, not implementations. A limiter that is a setting (a commit per row, a debug build, a missing index) means that side is untuned. Tune it and measure again before you pick a winner. If you cannot tune it, do not pick a winner from that run. When the user is choosing what to adopt, narrowing the claim to the code as it ships today does not fix this, because they adopt the option, not today's settings. 3. **Did it break limits?** Do the arithmetic. Compare bytes per second with disk and network bandwidth, operations per second times cost per operation with your cores, and the time saved with the time the changed piece took. Removing a piece that takes 10% of the run can make the run at most about 11% faster. A result past a limit measured something other than the work, such as a cache, a no-op, or a bug. 4. **Did it error?** Count failures and non-success responses, and check that outputs are correct, not just present. Rejections are often fast, and timeouts and retries are slow. If the script does not count errors, add the count. 5. **Does it reproduce?** Run each side at least 5 times, alternating (A, B, A, B, and so on) so warmup, lazy initialization, caches, and drift favor neither. Report the median and range. A gap smaller than the run-to-run variation is no measurable difference. When the call is close, use a rank-sum test or the harness's own statistics. 6. **Does it matter?** Next to any micro result, measure the end-to-end path a user waits on, with realistic data sizes and concurrency, and report the micro result as a share of the whole. A helper that takes 1% of a request can make the request at most 1% faster, however fast the helper gets. 7. **Did it even happen?** Confirm the work ran inside the timed region. The request reached the server, the rows were written, the bytes were read, and the code used the result. Lazy code (generators nobody iterates, promises nobody awaits, results the JIT can discard) and timeouts produce numbers for work that never happened.
Team Avatar: a universal agent orchestrator for Claude Code, Codex, and Cursor. Nine Avatar characters, 58 engineering skills. pstack with Avatar characters on top.
Zuko's Agni Kai for bakeoffs. The formal firebending duel, where competing implementations fight under the same rules and a judge…
Aang showing a new friend around the team. Explains Team Avatar to a user, the roster and who owns what, how to invoke a skill on…
Aang's operating mode for Team Avatar, principal-level engineering where each task goes to the character who owns that…
Aang choosing which bender takes which fight. Configures which model each Team Avatar character runs on, the default reasoning…
Sokka's battle map, the decision trail he keeps so anyone can see how the campaign was won. Use for show-me-your-work,…
Appa's morning departure for picking up paused or handed-off work. The team breaks camp, reads the map they left, and flies on…