Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Wire a new agent-CLI Source adapter into pixtuoid (a new coding CLI whose sessions become office sprites). Use when the user says 'add support for <CLI>', 'add a source for <tool>', or 'integrate <agent CLI>'. Orchestrates the cross-crate checklist whose steps have TEST TEETH — the ones a diff-scoped edit silently misses (site manifest bridge, per-source badge hue, home-dir fn, plus the two `pixtuoid/tests/*` integration goldens that `-p <crate> --lib` never builds).
.claude/skills/ivanwng97-add-source/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -24% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -13% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 21% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -47% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 5% | 0% |
Adding an agent CLI is not a single-file change — it spans pixtuoid-core (decoder + registry + tests), the pixtuoid binary (runtime wiring + install target + badge hue), and the site manifest. Several steps have test teeth that only just preflight's FULL run catches, not the targeted source/install suites — so an agent that stops at "it compiles" ships a red PR.
The complete, current step list lives in crates/pixtuoid-core/CLAUDE.md ("multi-source decoding" / "Adding a new agent CLI") — read it first; it is the source of truth and stays current. The Copilot-format summary is .github/prompts/add-source.prompt.md. Before you start, decide transcript-bearing vs hook-only (invariant #3): a hook-only CLI (Reasonix/CodeWhale/opencode/Cursor) sets transcript: None, skips the runtime wiring + Source impl, and ships a hook.custom decoder + an install/ target instead.
These are the ones with a failing test attached — do NOT stop before them:
site/src/sources.json row — a manifest bridge test fails until it exists;then just gen-readme to sync the README.
Theme::source (SourceColors) field in EVERYtheme file + a dashboard_line match arm; two guard tests fail otherwise.
pub fn <cli>_home() if the CLI has a custom config root — one fn honoringits *_HOME precedence, called from BOTH the watcher's default_paths() AND the installer's default_config_path() so they can't disagree. Audit that precedence against the CLI's OWN resolver per axis first (#880; axis list in CONTRIBUTING.md step 1) — guessed rather than read, it is fail-silent.
tests/sources/fixtures/<name>/<scenario>/exercising the SessionStart hook — the conformance test forces one, and its one-AgentId assertion guards against the reason-field ghost.
sources --json CLI golden — crates/pixtuoid/tests/snapshots/cli/sources.json,the real-binary end-to-end golden the Raycast --json contract rides. The new source's row must appear or cli_json::sources_json_lists_every_source_in_an_isolated_home reds; regenerate with SNAPSHOTS=overwrite cargo test -p pixtuoid --test cli_json.
wire_to_pixels matrix row — crates/pixtuoid/tests/wire_to_pixels.rs: add aWireCase (reuse your SessionStart fixture; a hook-only source uses DecodeKind::Hook + Transport::Hook, like cursor/hermes — a transcript source the JSONL variant) AND the per-source <name>_..._renders_a_painted_sprite test, or wire_matrix_covers_every_registered_source reds ("registration is not coverage").
Those last two live in pixtuoid/tests/*.rs INTEGRATION BINARIES that -p <crate> --lib never builds — the #692 (kimi) miss: a green --lib run AND a multi-lens review BOTH passed while these two were red, caught only by the pre-push just preflight. Run cargo nextest run --workspace / just test (NOT just --lib) before declaring green — a targeted --lib run is not the full suite.
(The exact test names + full step list are in crates/pixtuoid-core/CLAUDE.md "Adding a new agent CLI" and add-source.prompt.md — this skill headlines the teeth, those own the specifics.)
runtime/driver.rs::build_source_set (transcript-bearing only —the one construction site, called by run_async). This step HAS teeth: build_source_set_wires_every_transcript_bearing_source_plus_the_hook_router (driver.rs) FAILS for a registered source left unwired, so just preflight catches the miss — don't make it wait that long.
verified_version ("unknown" until abyte-real capture anchors it). Drift-watch it (see the add-a-CLI list's drift-watch note in crates/pixtuoid-core/CLAUDE.md).
just gen-contract only if you touched the --json/SourceStatus/OutcomeRowSHAPE (adding a row doesn't).
just preflight before the PR, then run the two-lens-review skill.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 25,089 | 12,769 | -49% | 1 | 1 | 0% | 4,800 | 3,661 | -24% | 0 | 0 | — |
case-02 | fail→pass | 20,995 | 10,374 | -51% | 1 | 1 | 0% | 3,546 | 3,098 | -13% | 0 | 0 | — |
case-03 | fail→fail | 40,436 | 10,958 | -73% | 1 | 1 | 0% | 3,668 | 3,155 | -14% | 0 | 0 | — |
case-04 | pass→pass | 17,021 | 14,552 | -15% | 1 | 1 | 0% | 2,975 | 3,729 | +25% | 0 | 0 | — |
case-05 | pass→pass | 20,388 | 17,085 | -16% | 1 | 1 | 0% | 3,685 | 3,833 | +4% | 0 | 0 | — |
case-06 | pass→pass | 18,446 | 15,385 | -17% | 1 | 1 | 0% | 3,034 | 3,581 | +18% | 0 | 0 | — |
case-07 | pass→pass | 9,465 | 2,544 | -73% | 1 | 1 | 0% | 1,429 | 1,668 | +17% | 0 | 0 | — |
case-08 | fail→pass | 12,293 | 5,626 | -54% | 1 | 1 | 0% | 1,848 | 2,245 | +21% | 0 | 0 | — |
case-09 | fail→pass | 17,810 | 1,584 | -91% | 1 | 1 | 0% | 2,813 | 1,477 | -47% | 0 | 0 | — |
case-10 | fail→pass | 10,894 | 3,197 | -71% | 1 | 1 | 0% | 1,638 | 1,717 | +5% | 0 | 0 | — |
case-11 | fail→pass | 36,098 | 7,694 | -79% | 1 | 1 | 0% | 1,591 | 2,489 | +56% | 0 | 0 | — |
case-12 | fail→pass | 11,337 | 1,946 | -83% | 1 | 1 | 0% | 1,613 | 1,560 | -3% | 0 | 0 | — |
case-17 | fail→pass | 18,373 | 1,549 | -92% | 1 | 1 | 0% | 1,310 | 1,475 | +13% | 0 | 0 | — |
case-13 | fail→pass | 25,990 | 2,288 | -91% | 1 | 1 | 0% | 4,101 | 1,645 | -60% | 0 | 0 | — |
case-14 | fail→pass | 10,925 | 3,284 | -70% | 1 | 1 | 0% | 1,933 | 1,823 | -6% | 0 | 0 | — |
case-15 | pass→pass | 10,147 | 7,482 | -26% | 1 | 1 | 0% | 1,663 | 2,607 | +57% | 0 | 0 | — |
case-16 | fail→pass | 14,105 | 3,111 | -78% | 1 | 1 | 0% | 2,099 | 1,807 | -14% | 0 | 0 | — |
case-18 | fail→pass | 8,990 | 2,801 | -69% | 1 | 1 | 0% | 1,458 | 1,706 | +17% | 0 | 0 | — |
case-19 | fail→pass | 10,346 | 2,424 | -77% | 1 | 1 | 0% | 1,528 | 1,660 | +9% | 0 | 0 | — |
case-20 | fail→pass | 5,062 | 2,349 | -54% | 1 | 1 | 0% | 242 | 1,607 | +564% | 0 | 0 | — |
case-21 | fail→fail | 24,312 | 3,342 | -86% | 1 | 1 | 0% | 1,657 | 1,810 | +9% | 0 | 0 | — |
case-22 | fail→pass | 12,124 | 2,677 | -78% | 1 | 1 | 0% | 1,990 | 1,701 | -15% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +68 percentage points is the difference between those two pass rates over the 20 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.