[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DAAT5682E6F8DTCM84FATH":3,"skill-same:01M6DAAT5682E6F8DTCM84FATH":57},{"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":30,"linkOnly":31,"markdownContent":32,"markdownBody":33,"frontMatter":34,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":38,"repositoryHtmlUrl":39,"repositoryHomepageUrl":6,"ownerHtmlUrl":40,"ownerBlogUrl":41,"ownerDescription":6,"updatedAt":42,"install":43,"resources":56},"01M6DAAT5682E6F8DTCM84FATH","afk-implement",null,"Run an unattended implementation session with small PRs and a review wave that ends in convergence, never merging","dayvidpham\u002Fpasture","dayvidpham","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F22456875?v=4","01M6CHR0F6J2M4QEHFR85XRNSR","David Huu Pham","01M6DA7X1WB0MK7TTV46SRZK75",1,"MIT","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture\u002Fblob\u002Fmain\u002F.opencode\u002Fskill\u002Fafk-implement\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29],"afk implement","implement","never","session","clean","review","run","implementation","with","prs","unattended","2026-11-10 10:12:30",false,"---\nname: afk-implement\ndescription: Run an unattended implementation session with small PRs and a review wave that ends in convergence, never merging\n---\n\n# AFK Implement\n\n\u003C!-- BEGIN GENERATED FROM pasture schema -->\n\u003C!-- GENERATED FROM pasture v0.0.33 artifact v1 -->\n**Command:** `pasture:afk-implement` — Run an unattended implementation session with small PRs and a review wave that ends in convergence, never merging\n\n**-> [Full workflow in PROCESS.md](..\u002Fprotocol\u002FPROCESS.md#phase-8-implementation-plan)** \u003C- Phases 8-10\n\n**[B-afk-no-merge]**\n- Given: an unattended session with green CI and a review wave with no open blocker\n- When: a pull request is ready\n- Then: leave it open, record the merge order and evidence, and stop\n- Should not: merge, self-approve on the human's behalf, or push to the default branch\n\n**[B-afk-smallest-iteration]**\n- Given: an approved direction\n- When: scoping work\n- Then: ship the smallest independently reviewable and revertable change per iteration\n- Should not: batch unrelated changes, add speculative abstraction, or refactor adjacent code\n\n**[B-afk-decide-dont-ask]**\n- Given: a reversible design choice\n- When: the human is away\n- Then: decide from repository conventions, record the rationale and reversal path, and continue\n- Should not: block or idle waiting for approval\n\n**[B-afk-wave-gate]**\n- Given: a completed iteration\n- When: running the review wave\n- Then: require three independent ACCEPT votes with zero open blockers; IMPORTANT and MINOR findings stay open to convergence\n- Should not: substitute self-review, ignore findings, fabricate consensus, or require a zeroed round at the wave gate\n\n**[B-afk-stop-at-convergence]**\n- Given: every scoped iteration has an open PR and the final cross-stack convergence has no open finding\n- When: the run is complete\n- Then: stop and write the morning handoff\n- Should not: start new scope or continue looking for work\n\n**[B-afk-evidence]**\n- Given: a claimed quality gate\n- When: reporting the result\n- Then: name the exact command, the commit it ran against, and the outcome\n- Should not: claim a gate that did not run or report green for a job that never executed\n\n## Task Recovery\n\nThe tracker backend is recorded once in .agents.local\u002Fpasture\u002FEPOCH.md; read that file instead of re-probing. If EPOCH.md is absent, stop and ask the orchestrator to run detection.\n\nRecover from live tracker state at session start and after compaction; never trust cached task rows. Read the `rec:` path from the header and use it as the one entry point: `\"${EPOCH_REC}\" \u003Cop>`. The operation set is closed: create, label, block, note, show, query, ready, status, close, whoami, signal.\n\nStore selection: the adapter reads PASTURE_DB_PATH when set, otherwise the header's `db:`; the probe wrote that value from the same precedence (XDG_DATA_HOME\u002Fpasture\u002Fpasture.db, HOME\u002F.local\u002Fshare\u002Fpasture\u002Fpasture.db, then .pasture\u002Fpasture.db). Use the same selected store for every command. If a recovery query fails, report its actual store path, failed operation, impact, and permission\u002Fschema\u002Fconfiguration repair; failure is not an empty work queue.\n\nThe adapter passes `--namespace` only when EPOCH.md records `namespace:`. That pin wins on both backends. Otherwise it omits the flag. Pasture then derives the namespace itself: PASTURE_NAMESPACE, else the git remote, then file:\u002F\u002F of the working directory. The ledger calls derive_namespace for the header and for every write that has no pin. That function is the one list of remote forms; do not restate it. With no origin, both backends use file:\u002F\u002F of the working directory, so invocations from different subdirectories use different namespaces. Queries without a pin follow that backend's derivation; pass `--all-namespaces` to opt out. When neither a pin nor PASTURE_NAMESPACE is set, pasture reads are unscoped and creation falls back to the git remote, then file:\u002F\u002F of the working directory. Inspect the returned full URI before choosing repository work. Separate reads are not an atomic snapshot.\n\nRun `\"${EPOCH_REC}\" ready`, `\"${EPOCH_REC}\" query --blocked`, and `\"${EPOCH_REC}\" query --status in_progress`. For each referenced active task, run `\"${EPOCH_REC}\" show \"$TASK_URI\"`, `\"${EPOCH_REC}\" show \"$TASK_URI\" --notes`, and `\"${EPOCH_REC}\" show \"$TASK_URI\" --history`. All *_URI variables in examples are inputs bound to full task URIs from an assignment, a verified tracker read, or the URI create printed; never use legacy short IDs. Resolve each variable before execution and quote it as one operand.\n\nCreate prints the new task URI directly. Persist it before any label or note: create-plus-label is non-atomic, so on failure retain the URI and retry only the failed label\u002Fnote operation, never create again. Only open, in_progress, and closed are statuses; blockage is represented by live dependencies and notes, not a blocked status.\n\nAn owner is recorded with `\"${EPOCH_REC}\" label \"$TASK_URI\" owner:\u003Crole>`. That is a claim, not an allocation: an unassigned task stays unassigned until the supervisor allocates it, and repeating an identical claim is not allocation. Never invent an owner.\n\nParent stays open and is blocked by child: `\"${EPOCH_REC}\" block \"$PARENT_URI\" --by \"$CHILD_URI\"`. Reference documents belong in description frontmatter under references:, never fabricated blockers. Workers report evidence and handoffs without closing their slices or leaves; the supervisor closes only after independent review and satisfied gates. Use git agent-commit for local commits. Never install, enable, or modify Git hooks, Git hook path configuration, or pre-commit integration without explicit user approval. Tracker writes are durable; Git history lands separately.\n\nIf the header records `backend: error`, stop before the first mutation: the store exists but cannot be used, and falling back could lose earlier epochs. A mid-epoch write failure retries 3 times. After the third failure, write the attempted record to .agents.local\u002Fpasture\u002Fpending\u002F\u003Ctimestamp>-\u003Cop>.md, keep the recorded backend, and surface the pending record to the user at the next gate. Never switch backends and never drop the record.\n\n## Task Attribution\n\nSelect the current registered author with \"${EPOCH_REC}\" whoami. It prints the author recorded in the header or PASTURE_AUTHOR, and on the pasture backend it confirms that actor with agents show. It does not list agents and it does not invent one. If neither source names an author, it stops: set author: in EPOCH.md or export PASTURE_AUTHOR. Never auto-register or guess an identity during recovery. Every note supplies --author explicitly; machine examples use the pre-registered pasture-system\u002F00000000-0000-0000-0000-000000000000 actor. If it is absent, stop and request registration from the operator rather than claiming registration is fixed. Preserve human intent verbatim and quote historical attribution as evidence, not as a forged new author.\n\n## When to Use\n\nUse this skill when the human hands over a scoped direction and expects to review later: they say they are going AFK or to bed, ask for overnight or unattended implementation, say \"don't block on me\", ask for progressive adoption, or ask for open pull requests that must not be merged. It also fits an in-flight branch that needs its gates run, a PR opened, and a review wave driven to convergence.\n\nDo not use it for an attended session where the human expects the normal live URE\u002FUAT gates, and do not use it to authorize a release, deploy, or merge.\n\n## Invocation Contract\n\nTranslate the human's words into explicit defaults, and state the mapping in the handoff.\n\n| The human says | Default |\n|---|---|\n| Act as the supervisor | Own the implementation and review loop; spawn workers and reviewers instead of serializing every part. |\n| Use a named model for all subagents | Resolve the exact provider\u002Fmodel ID with the harness before spawning, pass it on every subagent call, and record any substitution. |\n| Scope smaller; minimal code; YAGNI | One smallest end-to-end change per iteration; no speculative flags, config, abstraction, or drive-by edits. |\n| Progressive adoption | Each iteration is independently reviewable and revertable; prefer several small PRs to one large one. |\n| Stack changes when needed | Base an iteration on its predecessor only when it depends on it; otherwise branch from the default branch. |\n| Open PRs, do not merge | Push feature branches and open ready PRs; never merge or push to the default branch. |\n| Stop at convergence | Use the exit criteria below; do not keep burning the backlog after convergence. |\n| Handle design questions sensibly | Decide reversible questions from the repository, record the rationale, and continue. |\n| Review in the morning | Write a five-minute handoff with merge order, decisions, risks, and first checks. |\n\n## Operating Rules\n\nThese are not negotiable, including when CI is green and every reviewer accepts:\n\n- Never merge. The human merges after review.\n- Never push to the default or protected branch; feature branches only.\n- Rewrite only your own feature branches, with force-with-lease, and only to rebase a stack.\n- No destructive commands, no shared-history rewrites, no branch or data deletion, and no Git hook installation or hook-path changes.\n- Preserve the primary checkout, including uncommitted work. Do all implementation in a worktree.\n- Reviewers must be independent subagents. Never write their findings or votes yourself.\n- Never claim a gate passed unless it ran on the commit you report.\n\n## Iteration Loop\n\nWork one iteration at a time, and open its PR before starting the next.\n\n1. Recover. Read live tracker state, Git status, branches ahead of the base, worktrees, and open PRs. If the human said to work on something specific, inventory the existing work instead of restarting it.\n2. Choose the next iteration. Follow the named scope first. Otherwise prefer a failing test or reproduction, a correctness bug, the smallest missing piece of the approved feature, then cleanup that unblocks it. Do not invent product scope.\n3. Plan in one paragraph: change, files, test, acceptance case, risk, base branch. If it does not fit, split it.\n4. Create or reuse a worktree using the repository naming convention (repository, issue number, commit type, short description); branch and directory share the name.\n5. Reproduce or write the failing test first where practical, then make the smallest production change that satisfies it.\n6. Run the repository gates for the touched surface, then the full gate when cheap. Record the exact commands and outcomes.\n7. Commit atomically with the repository's agent-commit path. Stage only files this iteration owns.\n8. Push the branch and open the PR. Then run the review wave, fix findings, re-review, and only then start the next iteration.\n\n## Pull Request Contract\n\nOpen a ready PR so CI runs, not a draft, unless the iteration is hard-stopped.\n\nThe body carries, in order:\n\n1. What and why, in one paragraph.\n2. Scope boundary: what this PR deliberately does not do.\n3. Acceptance: the Given\u002FWhen\u002FThen case, or the observed before and after.\n4. Verification: exact commands, results, and CI status.\n5. Stack: position, base branch, and merge order, or standalone.\n6. Decisions: choice, rationale, alternatives, and how to reverse it.\n7. Known gaps: residual findings, flaky tests, unverified paths.\n\nA hard-stopped iteration is a draft PR whose body names the exact blocker and next action. Never present a broken PR as ready, and never merge or close it.\n\n## Stacking\n\nStack only when the change genuinely depends on its predecessor. Name the base branch in the PR body and the handoff, and order the merge bottom-up. When a base moves, rebase only your own branches and push with force-with-lease, then re-run the gates.\n\nPrefer not stacking. Two iterations that touch the same files are usually one iteration.\n\n## Review Wave\n\nSpawn three independent reviewers in parallel with the model named in the invocation. Give each the same inputs and a distinct axis.\n\n### Axes\n\n| Axis | Ask |\n|---|---|\n| Correctness | Does the diff do what the PR claims without breaking existing behavior? Check edge cases, error paths, data loss, and concurrency. |\n| Tests | Do tests exercise the production path rather than a test-only export? Do they cover failure cases and the acceptance case? Would they catch a regression? Are they flaky? |\n| Elegance and YAGNI | Is complexity proportional? Any speculative abstraction, unused flag, duplicated logic, or scope creep? Is there a materially smaller change? |\n\nRequire findings as severity (blocker, important, minor), file and line, problem, and a concrete fix. Require a binary vote: ACCEPT or REVISE. Load the impl-review skill for the full severity-group and dual-parent procedure when the run uses tracker severity tasks.\n\n### Wave Gate and Convergence\n\nA wave advances on three ACCEPT votes with zero open blockers. Fix blockers in the same branch, commit atomically, push, and re-run the wave. IMPORTANT and MINOR findings stay open past the wave gate; fix a minor if trivial, otherwise record it for convergence. A finding closes only per `C-finding-lifecycle`. Cap the loop at the gate declaration's `maxRounds` rounds per PR.\n\nIf a blocker survives `maxRounds` rounds, mark the PR draft, write the exact blocker and attempted fixes, and move to independent work. Do not merge and do not report the work as done.\n\nAfter the final iteration, run one cross-stack convergence over all open PRs or the cumulative diff: conflicting assumptions, duplicated helpers, and merge-order breakage. That convergence must find no open finding before stopping.\n\n## Autonomous Decisions\n\nUse this precedence, highest first:\n\n1. The human's explicit request and the repository's documented invariants.\n2. Existing repository conventions: naming, error style, test patterns, and gates.\n3. The smallest, most reversible option.\n4. A prototype behind no public API.\n\nRecord every non-obvious decision in the PR body: decision, why, alternatives, and reversal. If two options are plausible and reversible, pick the smaller one and keep moving.\n\nReasonable autonomy includes naming, file placement, test shape, helper extraction, error wording, choosing between equivalent libraries already present, and splitting or merging iterations.\n\n### Hard Stops\n\nStop the current line of work, leave a clear note, and continue only with independent iterations when one of these is true:\n\n- Credentials, permissions, a paid resource, or a secret is required.\n- The action is irreversible or destructive: rewriting shared history, deleting data or branches, installing or altering Git hooks, or force-pushing a shared branch.\n- It reaches production: deploy, release, publish, tag, or migrate live data.\n- Product intent is genuinely ambiguous and both options change user-facing behavior irreversibly.\n- The change is security-sensitive and there is no safe default.\n\nNot hard stops: failing tests, flaky tests, CI infrastructure outages, merge conflicts inside your own stack, missing documentation, an unavailable model (fall back and record it), or an unpleasant design tradeoff.\n\n## Verification and Evidence\n\nDiscover the gates from the repository's agent instructions, Makefile, and CI. Run the narrow gate while iterating and the full gate before calling a PR ready. Docs-only changes still run docs, link, and frontmatter checks.\n\nIf CI cannot run, say so explicitly and report local results instead. Keep the tree quiescent while verifying, and record the commit SHA the results apply to.\n\n## Tracking\n\nCreate one tracker task per iteration and link it to the parent scope. Add labels and comments; never delete audit history. Comment the branch, commit SHA, PR URL, gate results, and each review round with its votes.\n\nWorkers report evidence and never close their own tasks. Close only after convergence finds no open finding, and only for work you supervised and verified. If the tracker is unavailable, report the store path, the failed operation, and the repair needed, then continue with Git and PR evidence. A failed query is not proof of no work.\n\n## Morning Handoff\n\nWrite the handoff to the repository's untracked agent-handoff directory, for example `.agents.local\u002Fafk-\u003CYYYY-MM-DD>.md`, and repeat the essentials in the final message:\n\n1. State: why the run stopped, what is ready, and what is not.\n2. PR table: link, one-line summary, base, stack position, CI, review result, and recommended merge order.\n3. Decisions: choice and rationale for each non-obvious call.\n4. Risks: residual findings, unverified paths, and flaky or skipped gates.\n5. Scope boundary: what you deliberately did not do.\n6. First three checks: the fastest way for the human to validate the work.\n\nNever describe unmerged work as done or shipped. Say open, convergence complete, awaiting merge.\n\n## Exit Criteria\n\nStop the session when all of these are true:\n\n- Every scoped iteration has an open PR, or is a draft with a hard-stop reason.\n- The final cross-stack convergence has no open finding: three ACCEPT and no open blocker, or the `maxRounds` budget is exhausted and residual findings are recorded.\n- The morning handoff is written and names the merge order.\n- No merge occurred, the default branch is untouched, and no unrelated work was modified.\n\nThen stop and report. Do not start new scope, do not make one more small fix, and do not wait or poll for the human.\n\n## Anti-Patterns\n\n- Merging because CI is green or the human seemed to want speed.\n- One giant PR that cannot be adopted progressively.\n- Silencing, skipping, or deleting a failing test to reach green.\n- Refactoring adjacent code because it was already open.\n- Asking a question mid-run and idling, or blocking forever on approval.\n- Claiming convergence without independent reviewers or without reading their findings.\n- Expanding the backlog instead of stopping at the approved scope.\n- Describing a red or draft PR as ready in the handoff.\n\u003C!-- END GENERATED FROM pasture schema -->\n","# AFK Implement\n\n\u003C!-- BEGIN GENERATED FROM pasture schema -->\n\u003C!-- GENERATED FROM pasture v0.0.33 artifact v1 -->\n**Command:** `pasture:afk-implement` — Run an unattended implementation session with small PRs and a review wave that ends in convergence, never merging\n\n**-> [Full workflow in PROCESS.md](..\u002Fprotocol\u002FPROCESS.md#phase-8-implementation-plan)** \u003C- Phases 8-10\n\n**[B-afk-no-merge]**\n- Given: an unattended session with green CI and a review wave with no open blocker\n- When: a pull request is ready\n- Then: leave it open, record the merge order and evidence, and stop\n- Should not: merge, self-approve on the human's behalf, or push to the default branch\n\n**[B-afk-smallest-iteration]**\n- Given: an approved direction\n- When: scoping work\n- Then: ship the smallest independently reviewable and revertable change per iteration\n- Should not: batch unrelated changes, add speculative abstraction, or refactor adjacent code\n\n**[B-afk-decide-dont-ask]**\n- Given: a reversible design choice\n- When: the human is away\n- Then: decide from repository conventions, record the rationale and reversal path, and continue\n- Should not: block or idle waiting for approval\n\n**[B-afk-wave-gate]**\n- Given: a completed iteration\n- When: running the review wave\n- Then: require three independent ACCEPT votes with zero open blockers; IMPORTANT and MINOR findings stay open to convergence\n- Should not: substitute self-review, ignore findings, fabricate consensus, or require a zeroed round at the wave gate\n\n**[B-afk-stop-at-convergence]**\n- Given: every scoped iteration has an open PR and the final cross-stack convergence has no open finding\n- When: the run is complete\n- Then: stop and write the morning handoff\n- Should not: start new scope or continue looking for work\n\n**[B-afk-evidence]**\n- Given: a claimed quality gate\n- When: reporting the result\n- Then: name the exact command, the commit it ran against, and the outcome\n- Should not: claim a gate that did not run or report green for a job that never executed\n\n## Task Recovery\n\nThe tracker backend is recorded once in .agents.local\u002Fpasture\u002FEPOCH.md; read that file instead of re-probing. If EPOCH.md is absent, stop and ask the orchestrator to run detection.\n\nRecover from live tracker state at session start and after compaction; never trust cached task rows. Read the `rec:` path from the header and use it as the one entry point: `\"${EPOCH_REC}\" \u003Cop>`. The operation set is closed: create, label, block, note, show, query, ready, status, close, whoami, signal.\n\nStore selection: the adapter reads PASTURE_DB_PATH when set, otherwise the header's `db:`; the probe wrote that value from the same precedence (XDG_DATA_HOME\u002Fpasture\u002Fpasture.db, HOME\u002F.local\u002Fshare\u002Fpasture\u002Fpasture.db, then .pasture\u002Fpasture.db). Use the same selected store for every command. If a recovery query fails, report its actual store path, failed operation, impact, and permission\u002Fschema\u002Fconfiguration repair; failure is not an empty work queue.\n\nThe adapter passes `--namespace` only when EPOCH.md records `namespace:`. That pin wins on both backends. Otherwise it omits the flag. Pasture then derives the namespace itself: PASTURE_NAMESPACE, else the git remote, then file:\u002F\u002F of the working directory. The ledger calls derive_namespace for the header and for every write that has no pin. That function is the one list of remote forms; do not restate it. With no origin, both backends use file:\u002F\u002F of the working directory, so invocations from different subdirectories use different namespaces. Queries without a pin follow that backend's derivation; pass `--all-namespaces` to opt out. When neither a pin nor PASTURE_NAMESPACE is set, pasture reads are unscoped and creation falls back to the git remote, then file:\u002F\u002F of the working directory. Inspect the returned full URI before choosing repository work. Separate reads are not an atomic snapshot.\n\nRun `\"${EPOCH_REC}\" ready`, `\"${EPOCH_REC}\" query --blocked`, and `\"${EPOCH_REC}\" query --status in_progress`. For each referenced active task, run `\"${EPOCH_REC}\" show \"$TASK_URI\"`, `\"${EPOCH_REC}\" show \"$TASK_URI\" --notes`, and `\"${EPOCH_REC}\" show \"$TASK_URI\" --history`. All *_URI variables in examples are inputs bound to full task URIs from an assignment, a verified tracker read, or the URI create printed; never use legacy short IDs. Resolve each variable before execution and quote it as one operand.\n\nCreate prints the new task URI directly. Persist it before any label or note: create-plus-label is non-atomic, so on failure retain the URI and retry only the failed label\u002Fnote operation, never create again. Only open, in_progress, and closed are statuses; blockage is represented by live dependencies and notes, not a blocked status.\n\nAn owner is recorded with `\"${EPOCH_REC}\" label \"$TASK_URI\" owner:\u003Crole>`. That is a claim, not an allocation: an unassigned task stays unassigned until the supervisor allocates it, and repeating an identical claim is not allocation. Never invent an owner.\n\nParent stays open and is blocked by child: `\"${EPOCH_REC}\" block \"$PARENT_URI\" --by \"$CHILD_URI\"`. Reference documents belong in description frontmatter under references:, never fabricated blockers. Workers report evidence and handoffs without closing their slices or leaves; the supervisor closes only after independent review and satisfied gates. Use git agent-commit for local commits. Never install, enable, or modify Git hooks, Git hook path configuration, or pre-commit integration without explicit user approval. Tracker writes are durable; Git history lands separately.\n\nIf the header records `backend: error`, stop before the first mutation: the store exists but cannot be used, and falling back could lose earlier epochs. A mid-epoch write failure retries 3 times. After the third failure, write the attempted record to .agents.local\u002Fpasture\u002Fpending\u002F\u003Ctimestamp>-\u003Cop>.md, keep the recorded backend, and surface the pending record to the user at the next gate. Never switch backends and never drop the record.\n\n## Task Attribution\n\nSelect the current registered author with \"${EPOCH_REC}\" whoami. It prints the author recorded in the header or PASTURE_AUTHOR, and on the pasture backend it confirms that actor with agents show. It does not list agents and it does not invent one. If neither source names an author, it stops: set author: in EPOCH.md or export PASTURE_AUTHOR. Never auto-register or guess an identity during recovery. Every note supplies --author explicitly; machine examples use the pre-registered pasture-system\u002F00000000-0000-0000-0000-000000000000 actor. If it is absent, stop and request registration from the operator rather than claiming registration is fixed. Preserve human intent verbatim and quote historical attribution as evidence, not as a forged new author.\n\n## When to Use\n\nUse this skill when the human hands over a scoped direction and expects to review later: they say they are going AFK or to bed, ask for overnight or unattended implementation, say \"don't block on me\", ask for progressive adoption, or ask for open pull requests that must not be merged. It also fits an in-flight branch that needs its gates run, a PR opened, and a review wave driven to convergence.\n\nDo not use it for an attended session where the human expects the normal live URE\u002FUAT gates, and do not use it to authorize a release, deploy, or merge.\n\n## Invocation Contract\n\nTranslate the human's words into explicit defaults, and state the mapping in the handoff.\n\n| The human says | Default |\n|---|---|\n| Act as the supervisor | Own the implementation and review loop; spawn workers and reviewers instead of serializing every part. |\n| Use a named model for all subagents | Resolve the exact provider\u002Fmodel ID with the harness before spawning, pass it on every subagent call, and record any substitution. |\n| Scope smaller; minimal code; YAGNI | One smallest end-to-end change per iteration; no speculative flags, config, abstraction, or drive-by edits. |\n| Progressive adoption | Each iteration is independently reviewable and revertable; prefer several small PRs to one large one. |\n| Stack changes when needed | Base an iteration on its predecessor only when it depends on it; otherwise branch from the default branch. |\n| Open PRs, do not merge | Push feature branches and open ready PRs; never merge or push to the default branch. |\n| Stop at convergence | Use the exit criteria below; do not keep burning the backlog after convergence. |\n| Handle design questions sensibly | Decide reversible questions from the repository, record the rationale, and continue. |\n| Review in the morning | Write a five-minute handoff with merge order, decisions, risks, and first checks. |\n\n## Operating Rules\n\nThese are not negotiable, including when CI is green and every reviewer accepts:\n\n- Never merge. The human merges after review.\n- Never push to the default or protected branch; feature branches only.\n- Rewrite only your own feature branches, with force-with-lease, and only to rebase a stack.\n- No destructive commands, no shared-history rewrites, no branch or data deletion, and no Git hook installation or hook-path changes.\n- Preserve the primary checkout, including uncommitted work. Do all implementation in a worktree.\n- Reviewers must be independent subagents. Never write their findings or votes yourself.\n- Never claim a gate passed unless it ran on the commit you report.\n\n## Iteration Loop\n\nWork one iteration at a time, and open its PR before starting the next.\n\n1. Recover. Read live tracker state, Git status, branches ahead of the base, worktrees, and open PRs. If the human said to work on something specific, inventory the existing work instead of restarting it.\n2. Choose the next iteration. Follow the named scope first. Otherwise prefer a failing test or reproduction, a correctness bug, the smallest missing piece of the approved feature, then cleanup that unblocks it. Do not invent product scope.\n3. Plan in one paragraph: change, files, test, acceptance case, risk, base branch. If it does not fit, split it.\n4. Create or reuse a worktree using the repository naming convention (repository, issue number, commit type, short description); branch and directory share the name.\n5. Reproduce or write the failing test first where practical, then make the smallest production change that satisfies it.\n6. Run the repository gates for the touched surface, then the full gate when cheap. Record the exact commands and outcomes.\n7. Commit atomically with the repository's agent-commit path. Stage only files this iteration owns.\n8. Push the branch and open the PR. Then run the review wave, fix findings, re-review, and only then start the next iteration.\n\n## Pull Request Contract\n\nOpen a ready PR so CI runs, not a draft, unless the iteration is hard-stopped.\n\nThe body carries, in order:\n\n1. What and why, in one paragraph.\n2. Scope boundary: what this PR deliberately does not do.\n3. Acceptance: the Given\u002FWhen\u002FThen case, or the observed before and after.\n4. Verification: exact commands, results, and CI status.\n5. Stack: position, base branch, and merge order, or standalone.\n6. Decisions: choice, rationale, alternatives, and how to reverse it.\n7. Known gaps: residual findings, flaky tests, unverified paths.\n\nA hard-stopped iteration is a draft PR whose body names the exact blocker and next action. Never present a broken PR as ready, and never merge or close it.\n\n## Stacking\n\nStack only when the change genuinely depends on its predecessor. Name the base branch in the PR body and the handoff, and order the merge bottom-up. When a base moves, rebase only your own branches and push with force-with-lease, then re-run the gates.\n\nPrefer not stacking. Two iterations that touch the same files are usually one iteration.\n\n## Review Wave\n\nSpawn three independent reviewers in parallel with the model named in the invocation. Give each the same inputs and a distinct axis.\n\n### Axes\n\n| Axis | Ask |\n|---|---|\n| Correctness | Does the diff do what the PR claims without breaking existing behavior? Check edge cases, error paths, data loss, and concurrency. |\n| Tests | Do tests exercise the production path rather than a test-only export? Do they cover failure cases and the acceptance case? Would they catch a regression? Are they flaky? |\n| Elegance and YAGNI | Is complexity proportional? Any speculative abstraction, unused flag, duplicated logic, or scope creep? Is there a materially smaller change? |\n\nRequire findings as severity (blocker, important, minor), file and line, problem, and a concrete fix. Require a binary vote: ACCEPT or REVISE. Load the impl-review skill for the full severity-group and dual-parent procedure when the run uses tracker severity tasks.\n\n### Wave Gate and Convergence\n\nA wave advances on three ACCEPT votes with zero open blockers. Fix blockers in the same branch, commit atomically, push, and re-run the wave. IMPORTANT and MINOR findings stay open past the wave gate; fix a minor if trivial, otherwise record it for convergence. A finding closes only per `C-finding-lifecycle`. Cap the loop at the gate declaration's `maxRounds` rounds per PR.\n\nIf a blocker survives `maxRounds` rounds, mark the PR draft, write the exact blocker and attempted fixes, and move to independent work. Do not merge and do not report the work as done.\n\nAfter the final iteration, run one cross-stack convergence over all open PRs or the cumulative diff: conflicting assumptions, duplicated helpers, and merge-order breakage. That convergence must find no open finding before stopping.\n\n## Autonomous Decisions\n\nUse this precedence, highest first:\n\n1. The human's explicit request and the repository's documented invariants.\n2. Existing repository conventions: naming, error style, test patterns, and gates.\n3. The smallest, most reversible option.\n4. A prototype behind no public API.\n\nRecord every non-obvious decision in the PR body: decision, why, alternatives, and reversal. If two options are plausible and reversible, pick the smaller one and keep moving.\n\nReasonable autonomy includes naming, file placement, test shape, helper extraction, error wording, choosing between equivalent libraries already present, and splitting or merging iterations.\n\n### Hard Stops\n\nStop the current line of work, leave a clear note, and continue only with independent iterations when one of these is true:\n\n- Credentials, permissions, a paid resource, or a secret is required.\n- The action is irreversible or destructive: rewriting shared history, deleting data or branches, installing or altering Git hooks, or force-pushing a shared branch.\n- It reaches production: deploy, release, publish, tag, or migrate live data.\n- Product intent is genuinely ambiguous and both options change user-facing behavior irreversibly.\n- The change is security-sensitive and there is no safe default.\n\nNot hard stops: failing tests, flaky tests, CI infrastructure outages, merge conflicts inside your own stack, missing documentation, an unavailable model (fall back and record it), or an unpleasant design tradeoff.\n\n## Verification and Evidence\n\nDiscover the gates from the repository's agent instructions, Makefile, and CI. Run the narrow gate while iterating and the full gate before calling a PR ready. Docs-only changes still run docs, link, and frontmatter checks.\n\nIf CI cannot run, say so explicitly and report local results instead. Keep the tree quiescent while verifying, and record the commit SHA the results apply to.\n\n## Tracking\n\nCreate one tracker task per iteration and link it to the parent scope. Add labels and comments; never delete audit history. Comment the branch, commit SHA, PR URL, gate results, and each review round with its votes.\n\nWorkers report evidence and never close their own tasks. Close only after convergence finds no open finding, and only for work you supervised and verified. If the tracker is unavailable, report the store path, the failed operation, and the repair needed, then continue with Git and PR evidence. A failed query is not proof of no work.\n\n## Morning Handoff\n\nWrite the handoff to the repository's untracked agent-handoff directory, for example `.agents.local\u002Fafk-\u003CYYYY-MM-DD>.md`, and repeat the essentials in the final message:\n\n1. State: why the run stopped, what is ready, and what is not.\n2. PR table: link, one-line summary, base, stack position, CI, review result, and recommended merge order.\n3. Decisions: choice and rationale for each non-obvious call.\n4. Risks: residual findings, unverified paths, and flaky or skipped gates.\n5. Scope boundary: what you deliberately did not do.\n6. First three checks: the fastest way for the human to validate the work.\n\nNever describe unmerged work as done or shipped. Say open, convergence complete, awaiting merge.\n\n## Exit Criteria\n\nStop the session when all of these are true:\n\n- Every scoped iteration has an open PR, or is a draft with a hard-stop reason.\n- The final cross-stack convergence has no open finding: three ACCEPT and no open blocker, or the `maxRounds` budget is exhausted and residual findings are recorded.\n- The morning handoff is written and names the merge order.\n- No merge occurred, the default branch is untouched, and no unrelated work was modified.\n\nThen stop and report. Do not start new scope, do not make one more small fix, and do not wait or poll for the human.\n\n## Anti-Patterns\n\n- Merging because CI is green or the human seemed to want speed.\n- One giant PR that cannot be adopted progressively.\n- Silencing, skipping, or deleting a failing test to reach green.\n- Refactoring adjacent code because it was already open.\n- Asking a question mid-run and idling, or blocking forever on approval.\n- Claiming convergence without independent reviewers or without reading their findings.\n- Expanding the backlog instead of stopping at the approved scope.\n- Describing a red or draft PR as ready in the handoff.\n\u003C!-- END GENERATED FROM pasture schema -->\n",{"name":5,"description":7},"main","5813de22110ddc609b465a982b4811646ff72d18",".opencode\u002Fskill\u002Fafk-implement",0,"https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture","https:\u002F\u002Fgithub.com\u002Fdayvidpham","dhpham.com","2026-11-11 16:48:48",{"source":8,"skillName":5,"commands":44,"prompt":54,"zipAvailable":55},[45,48,51],{"tool":46,"command":47},"npx","npx skills add dayvidpham\u002Fpasture --skill afk-implement",{"tool":49,"command":50},"bunx","bunx skills add dayvidpham\u002Fpasture --skill afk-implement",{"tool":52,"command":53},"pnpm","pnpm dlx skills add dayvidpham\u002Fpasture --skill afk-implement","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture\u002Fblob\u002Fmain\u002F.opencode\u002Fskill\u002Fafk-implement\u002FSKILL.md",true,[],[58,66,81,91,103,114],{"skillNo":59,"name":60,"nameZh":6,"description":61,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":64,"publishedAt":30},"01M6DAP7307B3JVZX5DSNAE08Y","fixture","Isolated fixture skill","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture\u002Fblob\u002Fmain\u002Ftestdata\u002Finstall\u002Fglobal\u002Fclaude-code\u002Fnative-marketplace\u002Ffixture-plugin\u002Fskills\u002Ffixture\u002FSKILL.md",[],[60,65],"fixture skill",{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":72,"publishedAt":30},"01M6DAP48A4K365N83NBG0GFVC","worker","Vertical slice implementer (full production code path)","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture\u002Fblob\u002Fmain\u002Fskills\u002Fworker\u002FSKILL.md",[],[68,73,74,20,75,76,77,78,79,80],"implementer","code","Production","full","complete","vertical slice","slice","path",{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":30},"01M6DAP18QJM7P7N31TYGNJBCP","worker-implement","Implement assigned vertical slice following TDD layers","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture\u002Fblob\u002Fmain\u002Fskills\u002Fworker-implement\u002FSKILL.md",[],[88,68,20,78,89,79,90],"worker implement","layers","tdd",{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":97,"publishedAt":30},"01M6DANYHC7P63RFEN26F70MC2","worker-complete","Signal slice completion after quality gates pass","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture\u002Fblob\u002Fmain\u002Fskills\u002Fworker-complete\u002FSKILL.md",[],[68,98,77,99,79,100,101,102],"worker complete","signal","gates","quality","quality gates",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":30},"01M6DANWZ31TRP4NN4T1BFYKSR","worker-blocked","Report a blocker to supervisor via Pasture","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture\u002Fblob\u002Fmain\u002Fskills\u002Fworker-blocked\u002FSKILL.md",[],[110,68,111,112,113],"worker blocked","via","report","supervisor",{"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":125,"publishedAt":30},"01M6DANSVDBXBFH93B6EX3H2QK","user-uat","User Acceptance Testing with demonstrative examples","https:\u002F\u002Fgithub.com\u002Fdayvidpham\u002Fpasture\u002Fblob\u002Fmain\u002Fskills\u002Fuser-uat\u002FSKILL.md",[120],{"categoryNo":121,"categoryName":122,"taxonomyType":123,"taxonomyTypeDesc":124},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[126,127,128,129,27,130,131,132,133],"uat","user uat","user","acceptance testing","user acceptance testing","examples","acceptance","testing"]