[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M77M1VZ1AY63TT78ZPFXRJA4":3,"skill-same:01M77M1VZ1AY63TT78ZPFXRJA4":113},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":28,"repositoryHtmlUrl":29,"repositoryHomepageUrl":6,"ownerHtmlUrl":30,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":31,"install":32,"resources":44},"01M77M1VZ1AY63TT78ZPFXRJA4","improve-harness",null,"Periodically mine recent work + harness state into one consolidated improvement plan, grill it, then execute prune → vendor → upgrade → docs → memory and merge across your harness surfaces.","Roeelfs\u002Fkeel","Roeelfs","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F77358299?v=4","01M77KYYCM1M5SB4RSAD5NKZWH","Roee Alfasi","01M77KYYDD96C6P8AT0ZF0VTYY",1,"MIT","https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nlicense: MIT\nname: improve-harness\ndescription: Periodically mine recent work + harness state into one consolidated improvement plan, grill it, then execute prune → vendor → upgrade → docs → memory and merge across your harness surfaces.\ndisable-model-invocation: true\n---\n\n# Improve Harness\n\nA periodic ritual that turns the last stretch of work into a **better agent harness**. It mines recent sessions for lessons, surveys every harness surface, researches what's gone stale, **consolidates** one sequenced plan, grills it, and converges the harness to a new **canonical** state — then merges that state across all your harness surfaces.\n\nRun it like `\u002Fimprove-codebase-architecture`: every week or two, or after a burst of heavy work has accumulated lessons and version drift. It is **user-invoked** — it only fires when you type it, because it mutates your live global harness.\n\n## The harness surfaces it touches\n\nEvery change lands in exactly one of these — name the target before editing:\n\n- **product repo** — the repo you ship from. `AGENTS.md`\u002F`CLAUDE.md` rule edits land here. Ships as a **PR**; if merging is a prod-deploy-class gate in your project, it needs explicit go-ahead.\n- **skills repo** — the repo holding your vendored skills (cloned locally, e.g. `~\u002Fcode\u002F\u003Cyour-skills-repo>`); commit + push, installed via `npx skills update -g`. **Not just skills** — any standalone asset belongs here once it is genuinely reusable across projects and machines, e.g. a `tooling\u002F` script consumed by symlink into `~\u002F.claude\u002Fscripts\u002F`. The test is reusability, not where you happened to author it and not whether that repo currently references it: \"the skills repo has no copy to sync\" answers *is it out of sync*, never *should it live there*. Measured 2026-08-02: that exact conflation filed a cross-project capability in the private harness repo, reachable from no other project, and took three human corrections to relocate.\n- **harness repo** — your `~\u002F.claude` (itself a git repo, optionally backed by a private remote): agents, commands, hooks, global `CLAUDE.md`, settings, memory. Commit + push; **never weaken its `.gitignore`**.\n\n## Reversibility first\n\nThis ritual mutates your live global harness. **Back up before any mutation** — that is step 4(a), nothing destructive runs before it, and it runs before **every** mutation round, not once per session. Measured 2026-07-20: one session mutated the harness in three separate rounds and backed up before only the first; the second round shipped a compaction threshold four times tighter than the text it committed alongside it, live about two and a half hours, caught by an unrelated follow-up rather than by any gate. Every step is individually reversible (git revert, lock restore, plugin re-pin).\n\n## Process\n\n**Command-args may narrow the ask** — one surface, one defect, one operation instead of the periodic sweep. A narrowed ask is a real branch of this ritual, not an exit from it.\n\n- Say in the first reply that this is a **scoped run**, and name which of the five steps you are skipping and why. Silence here is how the whole ritual gets dropped: on 2026-07-15 a scoped run merged 41 files, reversed a three-day-old dated vendoring policy, and wrote nothing about itself, because the scoping decision quietly took steps 1, 3, 4b, 4d and 4f with it.\n- **Three things hold regardless of scope**: step 4a (back up before *every* mutation round), step 5's merge gate, and step 4f (the run writes its own lessons down).\n- A scoped run that would **reverse a previously-recorded dated decision** — a vendoring entry, a standing rule, a prior conclusion — routes that reversal through step 3 even when everything else is skipped. A policy pivot decided inside one clarifying answer is precisely the contradiction step 3 exists to catch.\n- **A scoped run still names the target surface before editing.** On 2026-08-02 a scoped run landed genuinely cross-project tooling in one surface only, declared \"Done\", and took three human corrections to relocate it.\n\n### 1. Launch the investigation — parallel dynamic Workflows\n\nFan the read-only investigation out into **parallel background Workflows** so they run while you do nothing. Run **A, B, E and G every time**; add **C on a deeper\u002F~quarterly pass** (the agent-stack landscape moves slowly), and **D whenever the period included a regression cluster, a prod incident, or an unstable-prod stretch** (the production-stability pass).\n\n**Read the previous run's `analytics\u002Fharness-improvement\u002F\u003Cdate>-program.md` first and pass its `SKIP_OR_WATCH`, `DID_NOT_SURVIVE` and `OPEN` sections into every lane's prompt** — B and C must not re-research a recorded negative, A must not re-mine a window a prior run already delta-scoped, and every `OPEN` item is re-derived by its own recorded command before this run decides anything. A run that starts from zero is a run that pays twice. Author the lanes from the templates — [WORKFLOW.md](WORKFLOW.md) is the index and the shared contract; each lane is its own file, so load only the ones you are firing:\n\n- **Workflow A — mine + consolidate** ([WORKFLOW-A.md](WORKFLOW-A.md)). Session miners over the past week of BOTH runtimes — `~\u002F.claude\u002Fprojects\u002F*\u002F*.jsonl` and `~\u002F.codex\u002Fsessions\u002F**\u002Frollout-*.jsonl` + `history.jsonl` — so friction lessons correlate across the whole harness, not just Claude. Seven survey lanes: GitHub merges, GitHub merge\u002FCI *friction*, the issue tracker, worktrees + memory, a harness deep-audit, an instructions-file audit (per [docs\u002Finstructions-files.md](..\u002F..\u002F..\u002Fdocs\u002Finstructions-files.md)), and a self-audit of the previous run. A falsifier wave runs before consolidation. → one consolidated, sequenced plan with ranked new lessons and a concrete prune list.\n  - **A recurring friction loop is the highest-signal lesson there is** — the same operation retried ≥3× to no effect. It is the canonical case for a **hook** (a `settings.json` `PreToolUse`\u002F`Stop` guard that mechanically blocks the wrong move), not a doc edit. The motivating case: stuck on `gh pr merge` four times before learning \"resolve all PR review comments before merging\" — that friction should have surfaced itself as a hook proposal, never waited on the human to notice it.\n  - **Lesson↔rule correlation feeds the doc edits.** A mined lesson an existing rule *should have prevented* strengthens that rule or promotes it to a hook; a lesson with no rule home proposes the addition at the right layer; a rule whose subject no longer exists gets pruned.\n- **Workflow B — vendor delta: news, changelogs, docs + models** ([WORKFLOW-B.md](WORKFLOW-B.md)). What the vendors actually **shipped** since the last run — CLI release deltas, agent\u002Fskill spec changes, model lineups + deprecations, published agent-design guidance, the second runtime's CLI, adjacent agent platforms — each mapped to a concrete harness edit. Every claim carries a dated primary source; config keys, env vars and flags are corroborated against the **installed binary**. Includes the pin-vs-enforcement check. → a version matrix, an upgrade plan, and a `skip_or_watch` list.\n- **Workflow C — agent-stack landscape (periodic)** ([WORKFLOW-C.md](WORKFLOW-C.md)). Live-verify the best\u002Fnewest GitHub agent stacks and gap-analyze our owned agents against them. → stay\u002Fcherry-pick\u002Fadopt. The standing answer is **own + cherry-pick specific roles, never adopt a stack wholesale** — a competing framework violates one-architecture (see [GOTCHAS.md](GOTCHAS.md)).\n- **Workflow D — production-stability \u002F regression RCA (conditional)** ([WORKFLOW-D.md](WORKFLOW-D.md)). One agent RCAs each incident grounded in its diff and deploy-timestamp-vs-onset; findings are liveness-checked at HEAD; classes get a guardrail each; a separate skeptic adversarially REFUTES every guardrail (3 of 5 ship as false-security otherwise). → a prioritized program spanning documentation, CI gates, harness rules, cross-session coordination and standing invariants. It operationalizes the load-bearing finding that **local green is structurally blind** to whole defect classes, so the lever is a cheap standing invariant at the un-mockable layer — never \"understand the feature better\".\n- **Workflow G — vendor-surface adoption + interaction quality (every run)** ([WORKFLOW-G.md](WORKFLOW-G.md)). B asks what the vendor **shipped**; G asks what the vendor **already offers that we never adopted**, and whether the surfaces we did adopt are working. Measured 2026-08-09: the operator's loudest standing complaint — replies too long and hard to follow up — had a vendor surface sitting entirely unused (`~\u002F.claude\u002Foutput-styles\u002F` absent, `outputStyle` zero hits in settings) while the same rule had been written into `CLAUDE.md` twice and reversed once. Nothing had *shipped*, so B could not have caught it. G also owns the standing **reply-shape** grade from `~\u002F.claude\u002Fanalytics\u002Freply-shape.jsonl`, scoring VOLUME and FOLLOWABILITY as separate numbers against the 2026-08-09 baseline (median 2,270 chars; 26.4% of final turns with ≥3 headers versus 3.8% posing ≥3 questions — turns end multi-topic with no question). → a dated report **plus one appended row** under `analytics\u002Fharness-adoption\u002F`, with every recommendation carrying a **tier** (mechanism > mechanism-carrying-prose > subtraction > prose) and a falsifiable metric. **A defect that already has a prose rule may not receive another prose rule** — the answer is a tier change or an instrument, never a third wording.\n- **Workflow E — context & compaction economics (every run)** ([WORKFLOW-E.md](WORKFLOW-E.md)). The other lanes ask \"is the harness *correct*?\"; E asks **\"what does it *cost*, and is that improving?\"** Measures context per turn, the fixed preamble floor, payload composition, compaction peak-before-reset, subagent peaks and model mix — then audits the compaction knobs, composing the effective threshold from ALL of them together and reconciling it against measured behavior. → a dated report **plus one appended row in the persistent trend ledger** under the harness repo's `analytics\u002Fcontext-economy\u002F`. **The trend is the product, not the snapshot:** each run grades the last one, and a change whose target metric didn't move gets named a **failed intervention** instead of being quietly re-tuned.\n\nAll run read-only. **Completion criterion:** every launched Workflow has returned its structured plan; nothing in the harness has been mutated yet.\n\n### 2. Reconcile into one sequenced program\n\nMerge the plans into a single ordered program: **prune → vendor → upgrade → doc-edits → guardrails+hooks → context-economy ledger → memory**. (Workflow E's and G's recommendations route by their own `surface` field; both reports + trend rows always land, even when no knob and no surface changes. **G's tier ordering survives the merge** — when G and another lane propose competing fixes for one defect, the higher-tier fix wins, and a prose item aimed at a defect that already has a prose rule is dropped here rather than carried into step 3.) (When D ran, weave its prioritized robustness program in as the **guardrails** step — CI gates, standing invariants, cross-session tooling, doc-rules — each routed to its surface; drop any guardrail D's adversarial verifier rated `insufficient` unless its refinement is applied.) **Every recurring-friction lesson from Workflow A's friction lane gets a routing decision here: a `settings.json` hook (mechanical block — highest leverage), a standing `CLAUDE.md`\u002F`AGENTS.md` rule (prose guard), or both.** Prefer a hook whenever the wrong move is mechanically detectable at a tool boundary (e.g. a `PreToolUse` guard on `gh pr merge` that refuses while review threads are unresolved) — a rule the model \"should remember\" is weaker than a hook the harness enforces. Reconcile overlaps — the model audit is authoritative over the audit's coarse \"re-point everything\" (bump only genuinely-stale IDs); a delete-target needs no model bump. Adopt the recommended defaults for any low-stakes open question; surface only genuine risk-class forks (e.g. a MAJOR plugin bump). **Completion criterion:** the program is **written to the harness repo** at `analytics\u002Fharness-improvement\u002F\u003CYYYY-MM-DD>-program.md` — every item carrying a target surface, a risk rating, and its verifying probe — with three standing sections that the NEXT run reads before it dispatches anything: `SKIP_OR_WATCH` (refuted, already-adopted and app-runtime-class items, one line each with the reason), `DID_NOT_SURVIVE` (killed items with the probe that killed them), and `OPEN` (items deferred, blocked, or applied-but-unbaked, each with the command that re-derives its status now). **and the program has passed `tooling\u002Fworkflow\u002Flane_coverage_check.py` against the run's\n`journal.jsonl`** (it fails naming any dispatched lane the program does not cite, or any lane\nthat died — see WORKFLOW.md). A plan that lives only in the conversation is not an artifact — it is gone at the next compaction, and the next run pays to rediscover it. Measured 2026-08-02: a run re-mined a window a run three days earlier had already delta-scoped, 11 agents and ~1.22M tokens, and separately found a settings pin from an earlier run's plan that was never applied and that nothing was tracking.\n\n### 3. Grill the plan\n\nFire **Workflow F — plan falsifier** ([WORKFLOW-F.md](WORKFLOW-F.md)) on the consolidated plan **before mutating anything**, one lane per plan item, and run `\u002Fgrill-with-docs` on whatever survives if the plan contains a genuine design fork. A self-narrated inline paraphrase — *\"grilling it against your own rules surfaced...\"* — is not this step; grade it by artifact the same way a dispatched lane is graded. Measured across 13 runs: this step has been narrated and skipped at least eight times, and the 2026-07-06 plan that self-certified shipped a hook that blocked autonomous work for eight hours. **Completion criterion:** a Workflow F run id for this run, and every killed item recorded with its probe.\n\n### 4. Execute, in order\n\nEach phase has traps — read [GOTCHAS.md](GOTCHAS.md) before running it.\n\n- **a. Back up** the harness (lean tar of touched dirs + `~\u002F.agents` + the skill-lock; `~\u002F.claude` is itself a git repo). Verify the backup contains the files you're about to delete.\n- **b. Prune** dead config — **verify every delete target exists first**, then remove and confirm no dangling references remain.\n- **c. Vendor** — fork or sync the skills repo, promote\u002Fadapt skills, then **cut the global install over** to the fork (`npx skills add \u003Cfork> -g -y -s \u003Cname>` per skill). Confirm every lock row points at the fork and **no symlink dangles**.\n- **d. Upgrade** — `claude plugin marketplace update` then `claude plugin update` per plugin; CLIs; bump only **genuinely-stale** model pins; prune dangling marketplaces. Plugin updates need a **restart** to apply; flag MAJOR bumps for a **bake** you can't do mid-session.\n- **e. Doc-edits + hooks** — apply the rule changes to the product repo's `AGENTS.md` (for the PR) and the global `CLAUDE.md` (harness repo); apply approved **hooks** to `~\u002F.claude\u002Fsettings.json` (+ a script under `~\u002F.claude\u002Fhooks\u002F` if non-trivial) — harness repo. Instructions-file edits follow [docs\u002Finstructions-files.md](..\u002F..\u002F..\u002Fdocs\u002Finstructions-files.md): additions come from the lesson↔rule correlation, prunes\u002Fdemotions from the instructions audit, and the `AGENTS.md`↔`CLAUDE.md` pair stays one-canonical-plus-pointer; note instructions files load at **session start** (running sessions keep the old contract until restart), unlike skills, which load at invocation. A hook can *block* a tool call, so treat it like a guardrail: **replay it against the ACTUAL transcripts that motivated it** — it must fire at the real friction point, stay silent on a healthy control session and on the current session, and emit a bounded number of times over a long incident. A dry-run against fixtures you wrote yourself proves only that the hook matches your model of the bug (observed: a guard that passed 9\u002F9 invented cases was a false negative on 3 of 3 real incidents and blocked live work). Derive the trigger from measuring a candidate signal across the incidents, not from the lesson's prose. Confirm the event's output contract against the installed binary, and never weaken `~\u002F.claude`'s `.gitignore` to land a hook script (see [GOTCHAS.md](GOTCHAS.md)).\n- **e2. Analytics ledgers (E and G)** — commit both dated reports + both appended `TRENDS.md` rows to the **harness repo**, under `analytics\u002Fcontext-economy\u002F` and `analytics\u002Fharness-adoption\u002F` (they are the run's baseline; without the commit the next run has nothing to diff against). A run where nothing changed still writes its rows — an unchanged number is the evidence that grades the last run's intervention. Apply G's recommendations by tier, adopting the instrument before the behavior change wherever G marked one owed. Apply E's ranked recommendations to their named surfaces — settings knobs, instructions-file rules, a hook, or a plugin\u002FMCP roster prune. **Change ONE compaction knob at a time and record the expected effect in the ledger row**, so the next run can grade it; two knobs moved together are unattributable, and a knob that multiplies with another can undo the intent silently.\n- **f. Memory + skill-learning promotion** — run the memory-consolidation pass first (keep the index lean), then write the new lesson files. Then **promote skill learnings by scope** (see [`docs\u002Fskill-memory.md`](..\u002F..\u002F..\u002Fdocs\u002Fskill-memory.md)): a learning that recurs ≥3× in a skill's private overlay (`~\u002F.claude\u002Fskills-overlay\u002F\u003Cskill>\u002FLEARNINGS.md`) or across project memories gets **de-identified** and promoted into that skill's public **seed** `LEARNINGS.md` via the skills-repo PR — promotion is the ONLY way the seed grows. Keep secrets \u002F customer \u002F project specifics OUT of the seed (they stay in the overlay or project memory).\n\n**Completion criterion:** every planned item is applied and locally verified; the only outstanding work is the human-gated restart + bake.\n\n### 5. Merge everything, verify clean\n\nLand the work across all your harness surfaces: the product-repo `AGENTS.md` **PR** (if merge-to-main is a prod deploy in your project, do not merge without an explicit go-ahead), the **skills repo** push, and the **harness repo** commit + push. Then verify each repo is clean and local == remote — **and that every new artifact actually PROPAGATED to the runtime**, which a clean merge does NOT prove. Skills self-wire via the repo's wiring tool on the `post-merge` hook; a new asset kind (agents, commands) may have no such path and land as a silent no-op that reads as success — resolve each new artifact's symlink into the canonical clone, sweep for dangling links, and confirm the count matches the source (see [GOTCHAS.md](GOTCHAS.md)). Extend the wiring tool rather than hand-linking; a hand-link fixes one machine once and is forgotten by the next run. **Completion criterion:** all surfaces clean, every new artifact verified reachable from its runtime root, the version matrix reflecting the new canonical state, this run's program written to `analytics\u002Fharness-improvement\u002F\u003CYYYY-MM-DD>-program.md`, and — for any run that reached step 4 — an overlay entry dated today, confirmed by `grep -q \"^## $(date +%Y-%m-%d)\" ~\u002F.claude\u002Fskills-overlay\u002Fimprove-harness\u002FLEARNINGS.md`. A run that mutates the harness and writes zero bytes about itself is incomplete, the same tier as an unmerged surface: six or seven of about eleven runs through 2026-08-02 left no trace at all, which is why the same defects kept being rediscovered from scratch. The only remaining items are the restart and the bake handed to the human.\n","# Improve Harness\n\nA periodic ritual that turns the last stretch of work into a **better agent harness**. It mines recent sessions for lessons, surveys every harness surface, researches what's gone stale, **consolidates** one sequenced plan, grills it, and converges the harness to a new **canonical** state — then merges that state across all your harness surfaces.\n\nRun it like `\u002Fimprove-codebase-architecture`: every week or two, or after a burst of heavy work has accumulated lessons and version drift. It is **user-invoked** — it only fires when you type it, because it mutates your live global harness.\n\n## The harness surfaces it touches\n\nEvery change lands in exactly one of these — name the target before editing:\n\n- **product repo** — the repo you ship from. `AGENTS.md`\u002F`CLAUDE.md` rule edits land here. Ships as a **PR**; if merging is a prod-deploy-class gate in your project, it needs explicit go-ahead.\n- **skills repo** — the repo holding your vendored skills (cloned locally, e.g. `~\u002Fcode\u002F\u003Cyour-skills-repo>`); commit + push, installed via `npx skills update -g`. **Not just skills** — any standalone asset belongs here once it is genuinely reusable across projects and machines, e.g. a `tooling\u002F` script consumed by symlink into `~\u002F.claude\u002Fscripts\u002F`. The test is reusability, not where you happened to author it and not whether that repo currently references it: \"the skills repo has no copy to sync\" answers *is it out of sync*, never *should it live there*. Measured 2026-08-02: that exact conflation filed a cross-project capability in the private harness repo, reachable from no other project, and took three human corrections to relocate.\n- **harness repo** — your `~\u002F.claude` (itself a git repo, optionally backed by a private remote): agents, commands, hooks, global `CLAUDE.md`, settings, memory. Commit + push; **never weaken its `.gitignore`**.\n\n## Reversibility first\n\nThis ritual mutates your live global harness. **Back up before any mutation** — that is step 4(a), nothing destructive runs before it, and it runs before **every** mutation round, not once per session. Measured 2026-07-20: one session mutated the harness in three separate rounds and backed up before only the first; the second round shipped a compaction threshold four times tighter than the text it committed alongside it, live about two and a half hours, caught by an unrelated follow-up rather than by any gate. Every step is individually reversible (git revert, lock restore, plugin re-pin).\n\n## Process\n\n**Command-args may narrow the ask** — one surface, one defect, one operation instead of the periodic sweep. A narrowed ask is a real branch of this ritual, not an exit from it.\n\n- Say in the first reply that this is a **scoped run**, and name which of the five steps you are skipping and why. Silence here is how the whole ritual gets dropped: on 2026-07-15 a scoped run merged 41 files, reversed a three-day-old dated vendoring policy, and wrote nothing about itself, because the scoping decision quietly took steps 1, 3, 4b, 4d and 4f with it.\n- **Three things hold regardless of scope**: step 4a (back up before *every* mutation round), step 5's merge gate, and step 4f (the run writes its own lessons down).\n- A scoped run that would **reverse a previously-recorded dated decision** — a vendoring entry, a standing rule, a prior conclusion — routes that reversal through step 3 even when everything else is skipped. A policy pivot decided inside one clarifying answer is precisely the contradiction step 3 exists to catch.\n- **A scoped run still names the target surface before editing.** On 2026-08-02 a scoped run landed genuinely cross-project tooling in one surface only, declared \"Done\", and took three human corrections to relocate it.\n\n### 1. Launch the investigation — parallel dynamic Workflows\n\nFan the read-only investigation out into **parallel background Workflows** so they run while you do nothing. Run **A, B, E and G every time**; add **C on a deeper\u002F~quarterly pass** (the agent-stack landscape moves slowly), and **D whenever the period included a regression cluster, a prod incident, or an unstable-prod stretch** (the production-stability pass).\n\n**Read the previous run's `analytics\u002Fharness-improvement\u002F\u003Cdate>-program.md` first and pass its `SKIP_OR_WATCH`, `DID_NOT_SURVIVE` and `OPEN` sections into every lane's prompt** — B and C must not re-research a recorded negative, A must not re-mine a window a prior run already delta-scoped, and every `OPEN` item is re-derived by its own recorded command before this run decides anything. A run that starts from zero is a run that pays twice. Author the lanes from the templates — [WORKFLOW.md](WORKFLOW.md) is the index and the shared contract; each lane is its own file, so load only the ones you are firing:\n\n- **Workflow A — mine + consolidate** ([WORKFLOW-A.md](WORKFLOW-A.md)). Session miners over the past week of BOTH runtimes — `~\u002F.claude\u002Fprojects\u002F*\u002F*.jsonl` and `~\u002F.codex\u002Fsessions\u002F**\u002Frollout-*.jsonl` + `history.jsonl` — so friction lessons correlate across the whole harness, not just Claude. Seven survey lanes: GitHub merges, GitHub merge\u002FCI *friction*, the issue tracker, worktrees + memory, a harness deep-audit, an instructions-file audit (per [docs\u002Finstructions-files.md](..\u002F..\u002F..\u002Fdocs\u002Finstructions-files.md)), and a self-audit of the previous run. A falsifier wave runs before consolidation. → one consolidated, sequenced plan with ranked new lessons and a concrete prune list.\n  - **A recurring friction loop is the highest-signal lesson there is** — the same operation retried ≥3× to no effect. It is the canonical case for a **hook** (a `settings.json` `PreToolUse`\u002F`Stop` guard that mechanically blocks the wrong move), not a doc edit. The motivating case: stuck on `gh pr merge` four times before learning \"resolve all PR review comments before merging\" — that friction should have surfaced itself as a hook proposal, never waited on the human to notice it.\n  - **Lesson↔rule correlation feeds the doc edits.** A mined lesson an existing rule *should have prevented* strengthens that rule or promotes it to a hook; a lesson with no rule home proposes the addition at the right layer; a rule whose subject no longer exists gets pruned.\n- **Workflow B — vendor delta: news, changelogs, docs + models** ([WORKFLOW-B.md](WORKFLOW-B.md)). What the vendors actually **shipped** since the last run — CLI release deltas, agent\u002Fskill spec changes, model lineups + deprecations, published agent-design guidance, the second runtime's CLI, adjacent agent platforms — each mapped to a concrete harness edit. Every claim carries a dated primary source; config keys, env vars and flags are corroborated against the **installed binary**. Includes the pin-vs-enforcement check. → a version matrix, an upgrade plan, and a `skip_or_watch` list.\n- **Workflow C — agent-stack landscape (periodic)** ([WORKFLOW-C.md](WORKFLOW-C.md)). Live-verify the best\u002Fnewest GitHub agent stacks and gap-analyze our owned agents against them. → stay\u002Fcherry-pick\u002Fadopt. The standing answer is **own + cherry-pick specific roles, never adopt a stack wholesale** — a competing framework violates one-architecture (see [GOTCHAS.md](GOTCHAS.md)).\n- **Workflow D — production-stability \u002F regression RCA (conditional)** ([WORKFLOW-D.md](WORKFLOW-D.md)). One agent RCAs each incident grounded in its diff and deploy-timestamp-vs-onset; findings are liveness-checked at HEAD; classes get a guardrail each; a separate skeptic adversarially REFUTES every guardrail (3 of 5 ship as false-security otherwise). → a prioritized program spanning documentation, CI gates, harness rules, cross-session coordination and standing invariants. It operationalizes the load-bearing finding that **local green is structurally blind** to whole defect classes, so the lever is a cheap standing invariant at the un-mockable layer — never \"understand the feature better\".\n- **Workflow G — vendor-surface adoption + interaction quality (every run)** ([WORKFLOW-G.md](WORKFLOW-G.md)). B asks what the vendor **shipped**; G asks what the vendor **already offers that we never adopted**, and whether the surfaces we did adopt are working. Measured 2026-08-09: the operator's loudest standing complaint — replies too long and hard to follow up — had a vendor surface sitting entirely unused (`~\u002F.claude\u002Foutput-styles\u002F` absent, `outputStyle` zero hits in settings) while the same rule had been written into `CLAUDE.md` twice and reversed once. Nothing had *shipped*, so B could not have caught it. G also owns the standing **reply-shape** grade from `~\u002F.claude\u002Fanalytics\u002Freply-shape.jsonl`, scoring VOLUME and FOLLOWABILITY as separate numbers against the 2026-08-09 baseline (median 2,270 chars; 26.4% of final turns with ≥3 headers versus 3.8% posing ≥3 questions — turns end multi-topic with no question). → a dated report **plus one appended row** under `analytics\u002Fharness-adoption\u002F`, with every recommendation carrying a **tier** (mechanism > mechanism-carrying-prose > subtraction > prose) and a falsifiable metric. **A defect that already has a prose rule may not receive another prose rule** — the answer is a tier change or an instrument, never a third wording.\n- **Workflow E — context & compaction economics (every run)** ([WORKFLOW-E.md](WORKFLOW-E.md)). The other lanes ask \"is the harness *correct*?\"; E asks **\"what does it *cost*, and is that improving?\"** Measures context per turn, the fixed preamble floor, payload composition, compaction peak-before-reset, subagent peaks and model mix — then audits the compaction knobs, composing the effective threshold from ALL of them together and reconciling it against measured behavior. → a dated report **plus one appended row in the persistent trend ledger** under the harness repo's `analytics\u002Fcontext-economy\u002F`. **The trend is the product, not the snapshot:** each run grades the last one, and a change whose target metric didn't move gets named a **failed intervention** instead of being quietly re-tuned.\n\nAll run read-only. **Completion criterion:** every launched Workflow has returned its structured plan; nothing in the harness has been mutated yet.\n\n### 2. Reconcile into one sequenced program\n\nMerge the plans into a single ordered program: **prune → vendor → upgrade → doc-edits → guardrails+hooks → context-economy ledger → memory**. (Workflow E's and G's recommendations route by their own `surface` field; both reports + trend rows always land, even when no knob and no surface changes. **G's tier ordering survives the merge** — when G and another lane propose competing fixes for one defect, the higher-tier fix wins, and a prose item aimed at a defect that already has a prose rule is dropped here rather than carried into step 3.) (When D ran, weave its prioritized robustness program in as the **guardrails** step — CI gates, standing invariants, cross-session tooling, doc-rules — each routed to its surface; drop any guardrail D's adversarial verifier rated `insufficient` unless its refinement is applied.) **Every recurring-friction lesson from Workflow A's friction lane gets a routing decision here: a `settings.json` hook (mechanical block — highest leverage), a standing `CLAUDE.md`\u002F`AGENTS.md` rule (prose guard), or both.** Prefer a hook whenever the wrong move is mechanically detectable at a tool boundary (e.g. a `PreToolUse` guard on `gh pr merge` that refuses while review threads are unresolved) — a rule the model \"should remember\" is weaker than a hook the harness enforces. Reconcile overlaps — the model audit is authoritative over the audit's coarse \"re-point everything\" (bump only genuinely-stale IDs); a delete-target needs no model bump. Adopt the recommended defaults for any low-stakes open question; surface only genuine risk-class forks (e.g. a MAJOR plugin bump). **Completion criterion:** the program is **written to the harness repo** at `analytics\u002Fharness-improvement\u002F\u003CYYYY-MM-DD>-program.md` — every item carrying a target surface, a risk rating, and its verifying probe — with three standing sections that the NEXT run reads before it dispatches anything: `SKIP_OR_WATCH` (refuted, already-adopted and app-runtime-class items, one line each with the reason), `DID_NOT_SURVIVE` (killed items with the probe that killed them), and `OPEN` (items deferred, blocked, or applied-but-unbaked, each with the command that re-derives its status now). **and the program has passed `tooling\u002Fworkflow\u002Flane_coverage_check.py` against the run's\n`journal.jsonl`** (it fails naming any dispatched lane the program does not cite, or any lane\nthat died — see WORKFLOW.md). A plan that lives only in the conversation is not an artifact — it is gone at the next compaction, and the next run pays to rediscover it. Measured 2026-08-02: a run re-mined a window a run three days earlier had already delta-scoped, 11 agents and ~1.22M tokens, and separately found a settings pin from an earlier run's plan that was never applied and that nothing was tracking.\n\n### 3. Grill the plan\n\nFire **Workflow F — plan falsifier** ([WORKFLOW-F.md](WORKFLOW-F.md)) on the consolidated plan **before mutating anything**, one lane per plan item, and run `\u002Fgrill-with-docs` on whatever survives if the plan contains a genuine design fork. A self-narrated inline paraphrase — *\"grilling it against your own rules surfaced...\"* — is not this step; grade it by artifact the same way a dispatched lane is graded. Measured across 13 runs: this step has been narrated and skipped at least eight times, and the 2026-07-06 plan that self-certified shipped a hook that blocked autonomous work for eight hours. **Completion criterion:** a Workflow F run id for this run, and every killed item recorded with its probe.\n\n### 4. Execute, in order\n\nEach phase has traps — read [GOTCHAS.md](GOTCHAS.md) before running it.\n\n- **a. Back up** the harness (lean tar of touched dirs + `~\u002F.agents` + the skill-lock; `~\u002F.claude` is itself a git repo). Verify the backup contains the files you're about to delete.\n- **b. Prune** dead config — **verify every delete target exists first**, then remove and confirm no dangling references remain.\n- **c. Vendor** — fork or sync the skills repo, promote\u002Fadapt skills, then **cut the global install over** to the fork (`npx skills add \u003Cfork> -g -y -s \u003Cname>` per skill). Confirm every lock row points at the fork and **no symlink dangles**.\n- **d. Upgrade** — `claude plugin marketplace update` then `claude plugin update` per plugin; CLIs; bump only **genuinely-stale** model pins; prune dangling marketplaces. Plugin updates need a **restart** to apply; flag MAJOR bumps for a **bake** you can't do mid-session.\n- **e. Doc-edits + hooks** — apply the rule changes to the product repo's `AGENTS.md` (for the PR) and the global `CLAUDE.md` (harness repo); apply approved **hooks** to `~\u002F.claude\u002Fsettings.json` (+ a script under `~\u002F.claude\u002Fhooks\u002F` if non-trivial) — harness repo. Instructions-file edits follow [docs\u002Finstructions-files.md](..\u002F..\u002F..\u002Fdocs\u002Finstructions-files.md): additions come from the lesson↔rule correlation, prunes\u002Fdemotions from the instructions audit, and the `AGENTS.md`↔`CLAUDE.md` pair stays one-canonical-plus-pointer; note instructions files load at **session start** (running sessions keep the old contract until restart), unlike skills, which load at invocation. A hook can *block* a tool call, so treat it like a guardrail: **replay it against the ACTUAL transcripts that motivated it** — it must fire at the real friction point, stay silent on a healthy control session and on the current session, and emit a bounded number of times over a long incident. A dry-run against fixtures you wrote yourself proves only that the hook matches your model of the bug (observed: a guard that passed 9\u002F9 invented cases was a false negative on 3 of 3 real incidents and blocked live work). Derive the trigger from measuring a candidate signal across the incidents, not from the lesson's prose. Confirm the event's output contract against the installed binary, and never weaken `~\u002F.claude`'s `.gitignore` to land a hook script (see [GOTCHAS.md](GOTCHAS.md)).\n- **e2. Analytics ledgers (E and G)** — commit both dated reports + both appended `TRENDS.md` rows to the **harness repo**, under `analytics\u002Fcontext-economy\u002F` and `analytics\u002Fharness-adoption\u002F` (they are the run's baseline; without the commit the next run has nothing to diff against). A run where nothing changed still writes its rows — an unchanged number is the evidence that grades the last run's intervention. Apply G's recommendations by tier, adopting the instrument before the behavior change wherever G marked one owed. Apply E's ranked recommendations to their named surfaces — settings knobs, instructions-file rules, a hook, or a plugin\u002FMCP roster prune. **Change ONE compaction knob at a time and record the expected effect in the ledger row**, so the next run can grade it; two knobs moved together are unattributable, and a knob that multiplies with another can undo the intent silently.\n- **f. Memory + skill-learning promotion** — run the memory-consolidation pass first (keep the index lean), then write the new lesson files. Then **promote skill learnings by scope** (see [`docs\u002Fskill-memory.md`](..\u002F..\u002F..\u002Fdocs\u002Fskill-memory.md)): a learning that recurs ≥3× in a skill's private overlay (`~\u002F.claude\u002Fskills-overlay\u002F\u003Cskill>\u002FLEARNINGS.md`) or across project memories gets **de-identified** and promoted into that skill's public **seed** `LEARNINGS.md` via the skills-repo PR — promotion is the ONLY way the seed grows. Keep secrets \u002F customer \u002F project specifics OUT of the seed (they stay in the overlay or project memory).\n\n**Completion criterion:** every planned item is applied and locally verified; the only outstanding work is the human-gated restart + bake.\n\n### 5. Merge everything, verify clean\n\nLand the work across all your harness surfaces: the product-repo `AGENTS.md` **PR** (if merge-to-main is a prod deploy in your project, do not merge without an explicit go-ahead), the **skills repo** push, and the **harness repo** commit + push. Then verify each repo is clean and local == remote — **and that every new artifact actually PROPAGATED to the runtime**, which a clean merge does NOT prove. Skills self-wire via the repo's wiring tool on the `post-merge` hook; a new asset kind (agents, commands) may have no such path and land as a silent no-op that reads as success — resolve each new artifact's symlink into the canonical clone, sweep for dangling links, and confirm the count matches the source (see [GOTCHAS.md](GOTCHAS.md)). Extend the wiring tool rather than hand-linking; a hand-link fixes one machine once and is forgotten by the next run. **Completion criterion:** all surfaces clean, every new artifact verified reachable from its runtime root, the version matrix reflecting the new canonical state, this run's program written to `analytics\u002Fharness-improvement\u002F\u003CYYYY-MM-DD>-program.md`, and — for any run that reached step 4 — an overlay entry dated today, confirmed by `grep -q \"^## $(date +%Y-%m-%d)\" ~\u002F.claude\u002Fskills-overlay\u002Fimprove-harness\u002FLEARNINGS.md`. A run that mutates the harness and writes zero bytes about itself is incomplete, the same tier as an unmerged surface: six or seven of about eleven runs through 2026-08-02 left no trace at all, which is why the same defects kept being rediscovered from scratch. The only remaining items are the restart and the bake handed to the human.\n",{"name":5,"license":15,"description":7,"disable-model-invocation":24},true,"master","45893bf9b7c9a6a59fc8fb0be2dee4a6fec11811",".claude\u002Fskills\u002Fimprove-harness",0,"https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel","https:\u002F\u002Fgithub.com\u002FRoeelfs","2026-11-13 18:38:08",{"source":8,"skillName":5,"commands":33,"prompt":43,"zipAvailable":24},[34,37,40],{"tool":35,"command":36},"npx","npx skills add Roeelfs\u002Fkeel --skill improve-harness",{"tool":38,"command":39},"bunx","bunx skills add Roeelfs\u002Fkeel --skill improve-harness",{"tool":41,"command":42},"pnpm","pnpm dlx skills add Roeelfs\u002Fkeel --skill improve-harness","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002FSKILL.md",[45,51,57,61,65,69,73,77,81,85,89,93,97,101,105,109],{"path":46,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":49,"sourceHtmlUrl":50},"GOTCHAS.md","REFERENCE","参考文档",18766,"https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002FGOTCHAS.md",{"path":52,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":55,"sourceHtmlUrl":56},"scripts\u002Fcodex_completion_audit.py","SCRIPT","脚本",13327,"https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002Fscripts\u002Fcodex_completion_audit.py",{"path":58,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":59,"sourceHtmlUrl":60},"scripts\u002Fdigest.py",8113,"https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002Fscripts\u002Fdigest.py",{"path":62,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":63,"sourceHtmlUrl":64},"scripts\u002Fsubagent_prompt_size.py",3143,"https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002Fscripts\u002Fsubagent_prompt_size.py",{"path":66,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":67,"sourceHtmlUrl":68},"scripts\u002Ftest_codex_completion_audit.py",11569,"https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002Fscripts\u002Ftest_codex_completion_audit.py",{"path":70,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":71,"sourceHtmlUrl":72},"scripts\u002Ftest_digest.py",6338,"https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002Fscripts\u002Ftest_digest.py",{"path":74,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":75,"sourceHtmlUrl":76},"scripts\u002Fvalidate-production-stability-record.mjs",1937,"https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002Fscripts\u002Fvalidate-production-stability-record.mjs",{"path":78,"resourceType":53,"resourceTypeDesc":54,"sizeBytes":79,"sourceHtmlUrl":80},"scripts\u002Fvalidate-production-stability-record.test.mjs",1762,"https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002Fscripts\u002Fvalidate-production-stability-record.test.mjs",{"path":82,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":83,"sourceHtmlUrl":84},"WORKFLOW-A.md",20460,"https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002FWORKFLOW-A.md",{"path":86,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":87,"sourceHtmlUrl":88},"WORKFLOW-B.md",13250,"https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002FWORKFLOW-B.md",{"path":90,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":91,"sourceHtmlUrl":92},"WORKFLOW-C.md",4942,"https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002FWORKFLOW-C.md",{"path":94,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":95,"sourceHtmlUrl":96},"WORKFLOW-D.md",16943,"https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002FWORKFLOW-D.md",{"path":98,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":99,"sourceHtmlUrl":100},"WORKFLOW-E.md",11666,"https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002FWORKFLOW-E.md",{"path":102,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":103,"sourceHtmlUrl":104},"WORKFLOW-F.md",6910,"https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002FWORKFLOW-F.md",{"path":106,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":107,"sourceHtmlUrl":108},"WORKFLOW-G.md",15493,"https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002FWORKFLOW-G.md",{"path":110,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":111,"sourceHtmlUrl":112},"WORKFLOW.md",8970,"https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fimprove-harness\u002FWORKFLOW.md",[114,121,128,135,142,149],{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":120,"publishedAt":19},"01M77M4PVP0XRR0QG4WVY67MXM","writing-for-agents","Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.","https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fwriting-for-agents\u002FSKILL.md",[],[],{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":127,"publishedAt":19},"01M77M4K4HQTVPC61S4KQY7K71","work-report","Use when generating development reports, calculating billable hours, reviewing work done in a period, or when the user asks for a project status summary. Triggers on keywords like report, billable, hours, invoice, timesheet, work summary.","https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fwork-report\u002FSKILL.md",[],[],{"skillNo":129,"name":130,"nameZh":6,"description":131,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":134,"publishedAt":19},"01M77M4G8XZ87W5KE13E43GS54","wizard","Generate an interactive bash wizard that walks a human through steps only they can perform. Use when provisioning infrastructure, setting up credentials or CI secrets, walking an unfamiliar third-party dashboard, or running a one-off migration or cutover. Don't invoke this for steps the agent can perform itself.","https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fwizard\u002FSKILL.md",[],[],{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":19},"01M77M4CSCMXVBGN4DYK8PZXW2","wayfinder","Plan a huge chunk of work (more than one agent session can hold) as a shared map of decision tickets on your issue tracker, and resolve them one at a time until the way to the destination is clear.","https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fwayfinder\u002FSKILL.md",[],[],{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":148,"publishedAt":19},"01M77M4A82NCN0FP3W1SKBFZAD","triage","Move issues and external PRs through a state machine of triage roles, categorise, verify, grill if needed, and write agent-ready briefs.","https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftriage\u002FSKILL.md",[],[],{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":155,"publishedAt":19},"01M77M469D7FDFHFHA2H65R1N7","to-tickets","Break a plan, spec, or the current conversation into a set of tracer-bullet tickets, each declaring its blocking edges, published to the configured tracker (edges as text in one file per ticket locally, or native blocking links on a real tracker).","https:\u002F\u002Fgithub.com\u002FRoeelfs\u002Fkeel\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fto-tickets\u002FSKILL.md",[],[]]