[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71RRHH8XT5AS3HPXZ0KEK26":3,"skill-same:01M71RRHH8XT5AS3HPXZ0KEK26":102},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":14,"categories":15,"keywords":16,"publishedAt":17,"linkOnly":18,"markdownContent":19,"markdownBody":20,"frontMatter":21,"refName":22,"commitSha":23,"skillDirectory":24,"forksCount":25,"repositoryHtmlUrl":26,"repositoryHomepageUrl":27,"ownerHtmlUrl":28,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":29,"install":30,"resources":43},"01M71RRHH8XT5AS3HPXZ0KEK26","garrison",null,"gongiskhan\u002Fagent-garrison","gongiskhan","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1997392?v=4","01M71RKMFR53TKXE308C22QTNZ","01M71RKMJA57KZHNDCBNKTWZRR",1,"MIT","https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fgarrison-skills\u002F.apm\u002Fskills\u002Fgarrison\u002FSKILL.md",[],[5],"2026-11-10 13:02:02",false,"---\nname: garrison\ndescription: The thin doorway into the Garrison Orchestrator (GARRISON-UNIFY-V1 D13): it registers a run as a card on the Kanban board and drives it through the run engine's gated phase pipeline to implement a significant piece of software work end-to-end with self-verified evidence. The orchestration doctrine itself lives in the merged Orchestrator prompt and the compiled policy, not here. Run ONLY when the user explicitly asks to build\u002Fimplement\u002Fship something as a Garrison run (e.g. \u002Fgarrison or 'run this as a garrison build'); the Garrison Orchestrator then drives the phase skills. Do NOT auto-invoke garrison from task inference.\n---\n\n# garrison — the thin doorway\n\ngarrison is a DOORWAY, not a brain. The orchestration doctrine (the phase\npipeline, the retry ceilings, fix-forward, the honesty rules, the\ndurable-markers contract, coordination duties) lives in the merged\nOrchestrator prompt; every routing knob (task\ntypes, models, efforts, runtimes, phase plans, flows, phase-skill\nbindings) lives in the compiled Orchestrator policy. This skill only performs\nthe mechanical entry steps below, then drives the run through the run-engine\nlibrary so the Kanban board shows it live — identical in shape whether the run\nstarted from chat, the board, or this skill.\n\n## Step 1 — read the compiled policy (hard requirement, D5)\n\nRead `~\u002F.garrison\u002Forchestrator\u002Fpolicy.json` (or `$GARRISON_POLICY_PATH`). If\nthe file is missing or unreadable, STOP IMMEDIATELY and print exactly:\n\n> Garrison Orchestrator policy not found at ~\u002F.garrison\u002Forchestrator\u002Fpolicy.json. Start Garrison; garrison does not run standalone.\n\nNo env-var override, no embedded default, no fallback model choice. The policy\nis the single authority for every phase's skill, model, effort, and runtime.\n\n## Step 2 — register the run as a card in Plan\n\nParse the invocation: the brief (everything that is not a flag), an optional\n`--kind \u003Cflow>` (else the policy's `defaultFlow`), and per-phase\ntoggles (`--no-\u003Cphase>` for any phase in the policy's `phases` list, e.g.\n`--no-walkthrough` → `phases: {\"walkthrough\": false}`). Then register via the\nboard API (discover it from `~\u002F.garrison\u002Fui-fittings\u002Fkanban-loop.json`; never\nhardcode a port):\n\n1. `POST \u003Cboard>\u002Fcards` with `{description: \u003Cbrief>, goalMode: true,\n   flow, phases, tier, origin: \"garrison-doorway\",\n   origin_id: \"skill:\u003C$CLAUDE_CODE_SESSION_ID>\", project: \u003Ccwd repo>}`. Stamp\n   `origin_id` as `skill:\u003Cyour session id>` (use `$CLAUDE_CODE_SESSION_ID`, the\n   stable id this session already uses for its sentinel; mint one only if it is\n   unset) - that origin_id is what makes this run's lifecycle + duty-summary\n   events pollable.\n2. `PATCH \u003Cboard>\u002Fcards\u002F\u003Cid>` with `{list: \"plan\", rev}` and the\n   `x-garrison-engine: garrison-doorway` header.\n3. Tell the user the card URL (`\u003Cboard>\u002F#\u002Fcards\u002F\u003Cid>`). The board is now the\n   window on this run.\n\nIf the board is unreachable, that is a blocker with a named cause — do NOT\nfall back to a boardless run (the board is the run's window; a run without a\ncard is invisible).\n\nBecause a skill session has no push surface (unlike a web thread), pull the\nrun's lifecycle updates via the `poll_origin_events` MCP tool (garrison-control):\n`poll_origin_events {origin_id: \"skill:\u003Cyour session id>\", since?}` returns the\nsame created | needs-input | blocked | failed | finished | duty-summary events a\nweb thread receives - poll again with the returned `next_since` for only new\nevents. This is the skill\u002Fterminal parity path (S3e).\n\n## Step 3 — drive the run in THIS session through the run engine\n\nThe run engine is a library (`fittings\u002Fseed\u002Fkanban-loop\u002Flib\u002Fengine.mjs`,\ninstalled under the composition's `apm_modules\u002F_local\u002Fkanban-loop\u002F`). For each\nphase of the card's rail, in order:\n\n1. Arm the per-phase goal loop: write the per-session sentinel\n   (`~\u002F.garrison\u002Fsentinels\u002F$CLAUDE_CODE_SESSION_ID.json`) with the condition\n   \"loop until this phase's `GATE \u003Cphase>:` line prints\" — the Stop hook\n   (`hooks\u002Fgarrison-goal-stop.sh`, wired by `hooks\u002Finstall.sh`) keeps the\n   session taking turns until the phase's gate line prints. The hook owns\n   liveness WITHIN a phase; the board owns progression BETWEEN phases.\n2. Execute the phase through its policy-bound skill (the card's rail names\n   it; the skill reads the policy for its own model\u002Feffort per the bindable\n   phase-skill contract). The skill writes the phase's gate-status entry\n   under the card's runDir and prints its `GATE \u003Cphase>: \u003Cverdict>` line.\n3. Advance the card in-process: call the engine's `advanceCardPhase({root,\n   board, card, verdict})` — it enforces the same contract as the dispatched\n   path (valid verdict + the phase's durable gate evidence + the rail's\n   on\u002Foff fast-forward) and moves the card. A refusal (missing gate evidence)\n   means the phase is NOT done — loop back into the phase, never bypass.\n4. Update the sentinel for the next phase and continue until the card reaches\n   `done` (or parks in `needs-attention` with an honest reason).\n\nThe run survives session death: the card + its runDir are the durable state;\nany resumable card re-dispatches from the board (`--resume` = find the card,\ncontinue at its current list).\n\n## Hooks (mechanical)\n\n`hooks\u002Finstall.sh` (idempotent) wires `hooks\u002Fgarrison-goal-stop.sh` (Stop) +\n`hooks\u002Fgarrison-goal-sessionstart.sh` (SessionStart) into\n`~\u002F.claude\u002Fsettings.json`; `hooks\u002Fprobe.sh` is the liveness probe. Run the\ninstaller once at entry; if it reports `installed\u002Frepaired`, this session needs\na one-time `\u002Fgoal` (a fresh hook activates next session).\n\nThe goal hooks are transition-safe across the autothing→garrison rename: new\nruns arm sentinels under `~\u002F.garrison\u002Fsentinels\u002F`, but the hooks honor BOTH\n`~\u002F.garrison\u002Fsentinels\u002F` and the legacy `~\u002F.autothing\u002Fsentinels\u002F` (and both\nverdict grammars) so an in-flight legacy run keeps looping until it finishes.\nThe installer is additive and never removes a legacy autothing hook entry.\n\n**`hooks\u002Fprune-legacy.sh` is the other half of that transition** — the step that\nretires the legacy hooks once no legacy run can still be looping. It is gated,\nnot unconditional: it REFUSES (exit 3) while any sentinel remains under\n`~\u002F.autothing\u002Fsentinels\u002F`, and when the gate is clear it removes exactly the\nlegacy autothing Stop + SessionStart entries from `~\u002F.claude\u002Fsettings.json`\n(backing the file up first), leaves the garrison entries untouched, and is\nidempotent. `--check` reports without writing; `--remove-skill-dir` also deletes\nthe retired `~\u002F.claude\u002Fskills\u002Fautothing\u002F` doorway. Run it after the last legacy\nrun ends — that is the only moment the gate opens.\n","# garrison — the thin doorway\n\ngarrison is a DOORWAY, not a brain. The orchestration doctrine (the phase\npipeline, the retry ceilings, fix-forward, the honesty rules, the\ndurable-markers contract, coordination duties) lives in the merged\nOrchestrator prompt; every routing knob (task\ntypes, models, efforts, runtimes, phase plans, flows, phase-skill\nbindings) lives in the compiled Orchestrator policy. This skill only performs\nthe mechanical entry steps below, then drives the run through the run-engine\nlibrary so the Kanban board shows it live — identical in shape whether the run\nstarted from chat, the board, or this skill.\n\n## Step 1 — read the compiled policy (hard requirement, D5)\n\nRead `~\u002F.garrison\u002Forchestrator\u002Fpolicy.json` (or `$GARRISON_POLICY_PATH`). If\nthe file is missing or unreadable, STOP IMMEDIATELY and print exactly:\n\n> Garrison Orchestrator policy not found at ~\u002F.garrison\u002Forchestrator\u002Fpolicy.json. Start Garrison; garrison does not run standalone.\n\nNo env-var override, no embedded default, no fallback model choice. The policy\nis the single authority for every phase's skill, model, effort, and runtime.\n\n## Step 2 — register the run as a card in Plan\n\nParse the invocation: the brief (everything that is not a flag), an optional\n`--kind \u003Cflow>` (else the policy's `defaultFlow`), and per-phase\ntoggles (`--no-\u003Cphase>` for any phase in the policy's `phases` list, e.g.\n`--no-walkthrough` → `phases: {\"walkthrough\": false}`). Then register via the\nboard API (discover it from `~\u002F.garrison\u002Fui-fittings\u002Fkanban-loop.json`; never\nhardcode a port):\n\n1. `POST \u003Cboard>\u002Fcards` with `{description: \u003Cbrief>, goalMode: true,\n   flow, phases, tier, origin: \"garrison-doorway\",\n   origin_id: \"skill:\u003C$CLAUDE_CODE_SESSION_ID>\", project: \u003Ccwd repo>}`. Stamp\n   `origin_id` as `skill:\u003Cyour session id>` (use `$CLAUDE_CODE_SESSION_ID`, the\n   stable id this session already uses for its sentinel; mint one only if it is\n   unset) - that origin_id is what makes this run's lifecycle + duty-summary\n   events pollable.\n2. `PATCH \u003Cboard>\u002Fcards\u002F\u003Cid>` with `{list: \"plan\", rev}` and the\n   `x-garrison-engine: garrison-doorway` header.\n3. Tell the user the card URL (`\u003Cboard>\u002F#\u002Fcards\u002F\u003Cid>`). The board is now the\n   window on this run.\n\nIf the board is unreachable, that is a blocker with a named cause — do NOT\nfall back to a boardless run (the board is the run's window; a run without a\ncard is invisible).\n\nBecause a skill session has no push surface (unlike a web thread), pull the\nrun's lifecycle updates via the `poll_origin_events` MCP tool (garrison-control):\n`poll_origin_events {origin_id: \"skill:\u003Cyour session id>\", since?}` returns the\nsame created | needs-input | blocked | failed | finished | duty-summary events a\nweb thread receives - poll again with the returned `next_since` for only new\nevents. This is the skill\u002Fterminal parity path (S3e).\n\n## Step 3 — drive the run in THIS session through the run engine\n\nThe run engine is a library (`fittings\u002Fseed\u002Fkanban-loop\u002Flib\u002Fengine.mjs`,\ninstalled under the composition's `apm_modules\u002F_local\u002Fkanban-loop\u002F`). For each\nphase of the card's rail, in order:\n\n1. Arm the per-phase goal loop: write the per-session sentinel\n   (`~\u002F.garrison\u002Fsentinels\u002F$CLAUDE_CODE_SESSION_ID.json`) with the condition\n   \"loop until this phase's `GATE \u003Cphase>:` line prints\" — the Stop hook\n   (`hooks\u002Fgarrison-goal-stop.sh`, wired by `hooks\u002Finstall.sh`) keeps the\n   session taking turns until the phase's gate line prints. The hook owns\n   liveness WITHIN a phase; the board owns progression BETWEEN phases.\n2. Execute the phase through its policy-bound skill (the card's rail names\n   it; the skill reads the policy for its own model\u002Feffort per the bindable\n   phase-skill contract). The skill writes the phase's gate-status entry\n   under the card's runDir and prints its `GATE \u003Cphase>: \u003Cverdict>` line.\n3. Advance the card in-process: call the engine's `advanceCardPhase({root,\n   board, card, verdict})` — it enforces the same contract as the dispatched\n   path (valid verdict + the phase's durable gate evidence + the rail's\n   on\u002Foff fast-forward) and moves the card. A refusal (missing gate evidence)\n   means the phase is NOT done — loop back into the phase, never bypass.\n4. Update the sentinel for the next phase and continue until the card reaches\n   `done` (or parks in `needs-attention` with an honest reason).\n\nThe run survives session death: the card + its runDir are the durable state;\nany resumable card re-dispatches from the board (`--resume` = find the card,\ncontinue at its current list).\n\n## Hooks (mechanical)\n\n`hooks\u002Finstall.sh` (idempotent) wires `hooks\u002Fgarrison-goal-stop.sh` (Stop) +\n`hooks\u002Fgarrison-goal-sessionstart.sh` (SessionStart) into\n`~\u002F.claude\u002Fsettings.json`; `hooks\u002Fprobe.sh` is the liveness probe. Run the\ninstaller once at entry; if it reports `installed\u002Frepaired`, this session needs\na one-time `\u002Fgoal` (a fresh hook activates next session).\n\nThe goal hooks are transition-safe across the autothing→garrison rename: new\nruns arm sentinels under `~\u002F.garrison\u002Fsentinels\u002F`, but the hooks honor BOTH\n`~\u002F.garrison\u002Fsentinels\u002F` and the legacy `~\u002F.autothing\u002Fsentinels\u002F` (and both\nverdict grammars) so an in-flight legacy run keeps looping until it finishes.\nThe installer is additive and never removes a legacy autothing hook entry.\n\n**`hooks\u002Fprune-legacy.sh` is the other half of that transition** — the step that\nretires the legacy hooks once no legacy run can still be looping. It is gated,\nnot unconditional: it REFUSES (exit 3) while any sentinel remains under\n`~\u002F.autothing\u002Fsentinels\u002F`, and when the gate is clear it removes exactly the\nlegacy autothing Stop + SessionStart entries from `~\u002F.claude\u002Fsettings.json`\n(backing the file up first), leaves the garrison entries untouched, and is\nidempotent. `--check` reports without writing; `--remove-skill-dir` also deletes\nthe retired `~\u002F.claude\u002Fskills\u002Fautothing\u002F` doorway. Run it after the last legacy\nrun ends — that is the only moment the gate opens.\n",{},"main","31458d7e0e08a7b3494c27bf2b912ed41c87a138","fittings\u002Fseed\u002Fgarrison-skills\u002F.apm\u002Fskills\u002Fgarrison",0,"https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison","https:\u002F\u002Fgongiskhan.github.io\u002Fagent-garrison\u002F","https:\u002F\u002Fgithub.com\u002Fgongiskhan","2026-11-07 05:27:23",{"source":7,"skillName":5,"commands":31,"prompt":41,"zipAvailable":42},[32,35,38],{"tool":33,"command":34},"npx","npx skills add gongiskhan\u002Fagent-garrison --skill garrison",{"tool":36,"command":37},"bunx","bunx skills add gongiskhan\u002Fagent-garrison --skill garrison",{"tool":39,"command":40},"pnpm","pnpm dlx skills add gongiskhan\u002Fagent-garrison --skill garrison","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fgarrison-skills\u002F.apm\u002Fskills\u002Fgarrison\u002FSKILL.md",true,[44,50,54,58,62,66,72,76,80,84,88,94,98],{"path":45,"resourceType":46,"resourceTypeDesc":47,"sizeBytes":48,"sourceHtmlUrl":49},"assets\u002Fcodex-pwtest.schema.json","ASSET","资产文件",1287,"https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fgarrison-skills\u002F.apm\u002Fskills\u002Fgarrison\u002Fassets\u002Fcodex-pwtest.schema.json",{"path":51,"resourceType":46,"resourceTypeDesc":47,"sizeBytes":52,"sourceHtmlUrl":53},"assets\u002Fcodex-review.schema.json",1419,"https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fgarrison-skills\u002F.apm\u002Fskills\u002Fgarrison\u002Fassets\u002Fcodex-review.schema.json",{"path":55,"resourceType":46,"resourceTypeDesc":47,"sizeBytes":56,"sourceHtmlUrl":57},"assets\u002Fdocs\u002FFLOW_PLAN.md",1889,"https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fgarrison-skills\u002F.apm\u002Fskills\u002Fgarrison\u002Fassets\u002Fdocs\u002FFLOW_PLAN.md",{"path":59,"resourceType":46,"resourceTypeDesc":47,"sizeBytes":60,"sourceHtmlUrl":61},"assets\u002Fevidence-index.example.json",11991,"https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fgarrison-skills\u002F.apm\u002Fskills\u002Fgarrison\u002Fassets\u002Fevidence-index.example.json",{"path":63,"resourceType":46,"resourceTypeDesc":47,"sizeBytes":64,"sourceHtmlUrl":65},"assets\u002Fgate-status.example.json",11268,"https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fgarrison-skills\u002F.apm\u002Fskills\u002Fgarrison\u002Fassets\u002Fgate-status.example.json",{"path":67,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":70,"sourceHtmlUrl":71},"hooks\u002Fgarrison-goal-sessionstart.sh","SCRIPT","脚本",1109,"https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fgarrison-skills\u002F.apm\u002Fskills\u002Fgarrison\u002Fhooks\u002Fgarrison-goal-sessionstart.sh",{"path":73,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":74,"sourceHtmlUrl":75},"hooks\u002Fgarrison-goal-stop.sh",5990,"https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fgarrison-skills\u002F.apm\u002Fskills\u002Fgarrison\u002Fhooks\u002Fgarrison-goal-stop.sh",{"path":77,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":78,"sourceHtmlUrl":79},"hooks\u002Finstall.sh",6756,"https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fgarrison-skills\u002F.apm\u002Fskills\u002Fgarrison\u002Fhooks\u002Finstall.sh",{"path":81,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":82,"sourceHtmlUrl":83},"hooks\u002Fprobe.sh",4178,"https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fgarrison-skills\u002F.apm\u002Fskills\u002Fgarrison\u002Fhooks\u002Fprobe.sh",{"path":85,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":86,"sourceHtmlUrl":87},"hooks\u002Fprune-legacy.sh",5316,"https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fgarrison-skills\u002F.apm\u002Fskills\u002Fgarrison\u002Fhooks\u002Fprune-legacy.sh",{"path":89,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":92,"sourceHtmlUrl":93},"references\u002Fbuild-loop.md","REFERENCE","参考文档",927,"https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fgarrison-skills\u002F.apm\u002Fskills\u002Fgarrison\u002Freferences\u002Fbuild-loop.md",{"path":95,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":96,"sourceHtmlUrl":97},"references\u002Fcodex-verification.md",350,"https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fgarrison-skills\u002F.apm\u002Fskills\u002Fgarrison\u002Freferences\u002Fcodex-verification.md",{"path":99,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":100,"sourceHtmlUrl":101},"references\u002Fdecisions.md",29286,"https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fgarrison-skills\u002F.apm\u002Fskills\u002Fgarrison\u002Freferences\u002Fdecisions.md",[103,115,125,136,147,178],{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":17},"01M71RTFA0HD83YBE1TE7DCE6B","pinned-helper","An owned skill the human has pinned so the Improver must not touch it.","https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fimprover\u002Fskills\u002Fpinned-helper\u002FSKILL.md",[],[110,111,112,113,114],"pinned helper","helper","human","touch","it",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":17},"01M71RTDKBG0WQHPHKFZKFWDHF","legacy-helper","A rarely used helper kept around from an earlier workflow.","https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fimprover\u002Fskills\u002Flegacy-helper\u002FSKILL.md",[],[122,111,123,124],"Legacy","legacy helper","workflow",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":17},"01M71RTCC6ZVVJ9MHHESXPHWA6","human-notes","A human-authored skill not deployed by APM (loose, not in the lock).","https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fimprover\u002Fskills\u002Fhuman-notes\u002FSKILL.md",[],[132,112,133,134,135],"notes","human notes","lock","apm",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":142,"publishedAt":17},"01M71RTB83ZP6VK6XH19Z93FAC","garrison-helper","Helps compose and station Garrison Fittings into Faculty role slots.","https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fimprover\u002Fskills\u002Fgarrison-helper\u002FSKILL.md",[],[111,5,143,144,145,146],"garrison helper","slots","role","compose",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":158,"publishedAt":17},"01M71RT6MBGJC4QQZBGHF4H1M8","walkthrough","Record a short, narrated, captioned video walkthrough that proves a finished coding task and shows how it behaves, then self-verify the video via vision on extracted frames and publish it as one scrubbable Tailscale link. Use after completing a change\u002Ffix\u002Ffeature on a web project (Next.js\u002FReact etc.) when the user wants visual proof of work, a demo of a user flow, or to avoid manually retesting and watching a long raw screen recording. Triggers on requests like \"record a walkthrough\", \"show me it working\", \"make a demo video of this\", \"prove the feature\", or finishing a UI\u002Froute\u002Fform\u002FAPI change worth demonstrating. Not for walking through a full from-scratch project build.","https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Fwalkthrough\u002F.apm\u002Fskills\u002Fwalkthrough\u002FSKILL.md",[153],{"categoryNo":154,"categoryName":155,"taxonomyType":156,"taxonomyTypeDesc":157},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[149,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177],"when","project","project build","api","react","change","demo video","publish","recording","Video","show me","work","short","fix","show","route","me","next","self",{"skillNo":179,"name":180,"nameZh":6,"description":181,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":6,"repositoryNo":11,"starsCount":12,"licenseSpdxId":13,"licenseFileUrl":6,"sourceHtmlUrl":182,"categories":183,"keywords":184,"publishedAt":17},"01M71RT54T0SQS42XEP5FVQ28K","Trello","Manage tasks via Trello REST API.","https:\u002F\u002Fgithub.com\u002Fgongiskhan\u002Fagent-garrison\u002Fblob\u002Fmain\u002Ffittings\u002Fseed\u002Ftrello\u002F.apm\u002Fskills\u002Ftrello\u002FSKILL.md",[],[185,186,187,162,188,189,190],"trello","tasks","REST","manage","rest api","via"]