[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71RGFNQCC1RPRGEFH4BXN44":3,"skill-same:01M71RGFNQCC1RPRGEFH4BXN44":95},{"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":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":55,"updatedAt":56,"install":57,"resources":70},"01M71RGFNQCC1RPRGEFH4BXN44","autospec-refine",null,"Use when the user wants to refine a prompt or feature request over N rounds of repo-grounded lenses before handing off to \u002Fautospec for implementation. Supports --rounds, --lenses, --autonomous, --interactive, --dry-run, and --continue (continuous iteration mode).","berlinguyinca\u002Fautospec","berlinguyinca","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F16364?v=4","01M71R7C0SWBG05FNHQE4XQ7Y3","Gert Wohlgemuth","01M71R7C1VY5K3Q715RNDDBVGQ",3,"MIT","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-refine\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"autospec","autospec refine","refine","dry-run","implementation","interactive","prompt","use","continue","repo","for","feature","feature request","request","run","dry","when","autonomous","mode","iteration","2026-11-10 13:02:02",false,"---\nname: autospec-refine\ndescription: Use when the user wants to refine a prompt or feature request over N rounds of repo-grounded lenses before handing off to \u002Fautospec for implementation. Supports --rounds, --lenses, --autonomous, --interactive, --dry-run, and --continue (continuous iteration mode).\n---\n\n# autospec-refine workflow (harness-neutral)\n\nTake an operator-supplied prompt (or feature request) and iteratively refine it\nover N rounds, grounding each round in current repo knowledge (AGENTS.md,\nrecent specs, recent commits, tagged memory). After operator approval, hand off\nthe final refined prompt to `\u002Fautospec --autonomous` (default) or\n`\u002Fautospec` (interactive) for end-to-end implementation.\n\nGoal: better prompts → better code, fewer mid-implementation course\ncorrections, fewer rounds of operator feedback. This skill closes the gap\nbetween under-specified raw requests and hand-crafted long prompts by\nautomating the prompt-improvement loop operators currently run in their heads.\n\nManage your own context — never exceed 60%. Delegate to subagents whenever your\nharness supports it; do not investigate or write the refined prompt directly in\nthe main conversation when a subagent can do it.\n\n\u003C!-- autospec-block:startup-self-update SKILL_NAME=autospec-refine -->\n\n## Self-update mode\n\nIf the feature-request argument matches the regex `^\\s*update\\s*$` (case-insensitive, whitespace-padded), this skill enters self-update mode and does not run the normal pipeline:\n\n1. **Detect harness** by checking which install path exists for this skill:\n   - Claude Code: `~\u002F.claude\u002Fskills\u002Fautospec-refine\u002FSKILL.md`\n   - OpenCode:    `~\u002F.config\u002Fopencode\u002Fagent\u002Fautospec-refine.md`\n   - Codex CLI:   `~\u002F.codex\u002Fprompts\u002Fautospec-refine.md`\n2. **Re-install the full autospec suite from `main`** by piping the canonical installer:\n   ```bash\n   curl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fberlinguyinca\u002Fautospec\u002Fmain\u002Fbootstrap.sh | bash -s -- --skill all --harness all --update\n   ```\n   Run this one-liner once; it refreshes all autospec skills across all harnesses.\n3. **Show the diff** between the prior installed file(s) and the freshly fetched copy.\n4. **Stop.** Do not enter the refinement pipeline. Print the upgrade summary and return to the user.\n\nIf no install path is detected, print `Self-update: no installed copy of autospec-refine found; run install.sh first.` and exit.\n\n## Stop mode\n\nIf the feature-request argument matches the regex `^\\s*stop(\\s+--\\w+)*\\s*$` (case-insensitive), this skill enters stop mode and does not run the normal pipeline:\n\n1. Delegate to the shared stop helper:\n   ```bash\n   bash \"${AUTOSPEC_SCRIPTS_DIR:-$HOME\u002F.autospec\u002Fscripts}\u002Fautospec-stop.sh\" \"$@\"\n   ```\n2. Honor `--graceful` (write `~\u002F.autospec\u002Fstop.flag`; running iteration finishes) and `--immediate` (write `~\u002F.autospec\u002Frefine-loop-stop.flag` plus stop.flag; abort at next iteration boundary).\n3. Print the stop summary and exit. Do not enter the refinement pipeline.\n\n## Required capabilities & harness adapter\n\nThis workflow assumes five capabilities. Map each one to your harness's actual tool. If a capability is missing, use the listed fallback.\n\n| Capability                  | Claude Code                          | OpenCode                                 | Codex CLI                                | Fallback if missing                                |\n|-----------------------------|--------------------------------------|------------------------------------------|------------------------------------------|----------------------------------------------------|\n| Read-only codebase research | `Agent` (subagent_type=Explore)      | `task` agent in read-only mode           | `apply_patch` read-only \u002F shell `grep`   | Do the search in-thread with `rg`\u002F`grep`           |\n| Foreground delegation       | `Agent` (subagent_type=general-purpose) | nested `task` agent, await output     | spawn nested CLI session                 | Do the work in-thread (more context cost)          |\n| Background delegation       | `Agent` with `run_in_background: true` | detached `task` agent                  | nohup'd CLI session writing to a logfile | Run the monitor in a separate terminal\u002Ftmux pane   |\n| Ask the user a question     | `AskUserQuestion`                    | inline prompt                            | inline prompt                            | Ask in the response and wait for the next turn     |\n| Self-paced future wakeup    | `ScheduleWakeup` inside a `\u002Floop`    | a recurring `task` or local `cron`       | local `cron`\u002F`launchd` calling the CLI   | The user runs a status-update prompt manually      |\n| Subagent model tier         | Tier A: `opus` + `ultrathink`; Tier B: `sonnet` + medium thinking | Tier A: top `task` model + high reasoning; Tier B: smaller-tier `task` + medium reasoning | Tier A: top GPT + `reasoning_effort=high`; Tier B: current spark\u002Fcost-optimized Codex + `reasoning_effort=medium` | Honor the per-phase tier mapping in AGENTS.md; retry the same subagent UP on unavailability |\n\u003C!-- autospec-block:harness-adapter-core -->\n\n**Persistent project notes**: write durable preferences to **`AGENTS.md`** in the repo root — recognized by Claude Code, OpenCode, and Codex. Per AGENTS.md, subagent dispatches use the two-tier policy: Tier A for spec\u002Frefinement work (each lens applies fresh-eyes reasoning to the prompt), Tier B for implementation. This skill is refinement-only and dispatches at Tier A. Fall back UP the tier on quota\u002Fcapacity failure.\n\n## Harness detection (run once at skill start, before refinement begins)\n\nDetect your harness by checking available tools before any lens runs:\n\n1. **Claude Code** — the `Agent` tool with a `subagent_type` parameter is available.\n   - `TIER_A` = `opus` + `ultrathink`  (the alias, which resolves to the current Claude Opus generation)\n   - `TIER_B` = `sonnet`               (the alias, which resolves to the current Claude Sonnet generation)\n\n2. **OpenCode** — a `task` tool with model\u002Ftier configuration is available (no `subagent_type`).\n   - `TIER_A` = top-tier task model + high reasoning\n   - `TIER_B` = smaller-tier task model + medium reasoning\n\n3. **Codex CLI** — neither `Agent` nor a configurable `task` tool is available; `apply_patch` is the primary edit tool.\n   - `TIER_A` = current top GPT model + `reasoning_effort=high`\n   - `TIER_B` = the spark \u002F cost-optimized variant of the configured model when one exists, else the configured model + `reasoning_effort=medium`\n\n**Fallback rule:** If `TIER_B` is not available in your harness, silently retry the same subagent dispatch with `TIER_A`. Preserve parent context on retry. Never ask the user.\n\nHold `TIER_A` and `TIER_B` for the entire skill run. Every \"Tier A\" and \"Tier B\" reference below resolves to these harness-specific values.\n\n## Architecture\n\n`autospec-refine` is a new top-level skill that mirrors the existing\n`autospec-define` and `autospec-qa` skill-family shape:\n\n- `skills\u002Fautospec-refine\u002FSKILL.md` — Claude Code adapter (authoritative).\n- `skills\u002Fautospec-refine\u002Fcodex\u002Fprompt.md` — Codex CLI mirror (lockstep).\n- `skills\u002Fautospec-refine\u002Fopencode\u002Fagent.md` — OpenCode mirror (lockstep).\n- `skills\u002Fautospec-refine\u002Finstall.sh` — installer; mirrors existing skills.\n- `skills\u002Fautospec-refine\u002Funinstall.sh` — uninstaller; mirrors existing skills.\n- `skills\u002Fautospec-refine\u002FREADME.md` — usage doc.\n- `refine-prompt.sh` — orchestrator: parses args, dispatches lenses,\n  writes artifacts, performs handoff. **Stubbed by this scaffold; implemented\n  in the orchestrator child issue.**\n- `refine-render-overview.sh` — produces dual markdown + JSON artifact.\n  **Stubbed by this scaffold; implemented in the renderer child issue.**\n\nThis SKILL.md is the scaffold contract. Subsequent child issues fill in\n`refine-prompt.sh`, the lens helpers, the renderer, the handoff\nplumbing, and the continuous-iteration loop.\n\n## Invocation\n\n```\n\u002Fautospec-refine \"\u003Cinitial prompt>\" [--rounds N] [--from-file \u003Cpath>] \\\n                 [--interactive | --autonomous (default) | --dry-run] \\\n                 [--lenses \u003Ccomma-list>] [--output \u003Cpath>] \\\n                 [--continue [--max-iterations N]]\n```\n\n> **Model tier:** `TIER_A` (spec work) — each refinement round dispatches a fresh-eyes lens subagent at top model with extended thinking; resolved at startup.\n\n- `--rounds N` — number of refinement passes. Default `3`. Max `10`. Rounds\n  apply the named lenses in order; if `N` \u003C number of lenses, the trailing\n  lenses are skipped. If `N` > number of lenses, the adversarial lens repeats.\n- `--from-file \u003Cpath>` — read the initial prompt from a file instead of\n  inline string. Mutually exclusive with positional prompt.\n- `--autonomous` (default) — on operator approval, hand off to\n  `\u002Fautospec --autonomous \"\u003Crefined>\"` (no-confirmation autospec).\n- `--interactive` — hand off to plain `\u002Fautospec \"\u003Crefined>\"` (full Phase 2\n  brainstorm gate).\n- `--dry-run` — produce the artifact only, do not hand off.\n- `--lenses repo,clarity,sizing,adversarial` — override the default lens\n  order. Comma-separated, drawn from the registered lens names.\n- `--output \u003Cpath>` — write the final refined prompt to a file (in addition\n  to the `.autospec\u002Frefinements\u002F` artifact).\n- `--continue` — enter continuous-iteration mode: refine → handoff → execute\n  → harvest-report → re-refine. See **Continuous-iteration mode** below.\n\n## Refinement lenses\n\nFour lenses, applied in order one per round:\n\n1. **`repo-grounding`** — read `AGENTS.md`, recent `docs\u002Fspecs\u002F**` (last 30\n   days), `git log --since=7d`, and tag-matched\n   `~\u002F.autospec\u002Fprojects\u002F*\u002Fmemory\u002Ffeedback_*.md`. Replace generic verbs with\n   project-specific file paths, conventions, and constraints (lockstep, TDD,\n   no-mock, conventional commits, sizing caps).\n2. **`clarity-ac`** — extract implicit acceptance criteria and convert prose\n   into `- [ ]` checkbox list. Disambiguate hedging language (`should\n   probably`, `might`, `could try`). Name unambiguous test commands.\n3. **`sizing`** — enforce small-LLM execution caps from the autospec\n   decomposer rule (body ≤400 words, ≤3 files per child issue, ≤30 lines of\n   implementation outline). If the refined prompt would produce a child that\n   exceeds caps, split into a parent + child sequence and emit linked prompt\n   fragments.\n4. **`adversarial`** — critical-question pass. Apply the 20-question\n   checklist from `autospec-qa`. For each high-risk answer that's actionable\n   inside the scope, add a test requirement or scope clarification.\n\nOperators may override the default set with `--lenses`. Custom lens registry\nis out of scope for v1.\n\n## Convergence and degradation\n\n- **Convergence** — if round N's refined prompt is byte-identical to round\n  N-1's, exit early with status `converged` and final round = N-1.\n- **Degradation** — if round N's prompt is shorter than round N-1's by more\n  than 25% by word count, flag `degraded:\u003Clens>` and surface to operator.\n  This catches lens implementations that over-aggressively prune scope.\n- **Round cap** — hard limit `AUTOSPEC_REFINE_MAX_ROUNDS=10`. Beyond this,\n  exit with `round_cap_reached`.\n\n## Repo context scope\n\n| Source | Read pattern |\n|---|---|\n| `AGENTS.md` | Always read in full. Highest-signal source. |\n| `docs\u002Fspecs\u002F**\u002F*.md` | Last 30 days by file mtime + commit date. Cap at 5 specs to avoid prompt bloat. |\n| `git log --since=7d --oneline` + per-commit `git show --stat` | Last 7 days. Use to surface recently-changed files the prompt might intersect. |\n| `~\u002F.autospec\u002Fprojects\u002F*\u002Fmemory\u002Ffeedback_*.md` | Keyword match against the prompt. Cap at 5 most-relevant entries. |\n\nThe orchestrator MUST NOT read `.env`, `.git\u002F`, files under `node_modules\u002F`,\nor any path matching `*credential*`, `*secret*`, `*.pem`, `*.key`. Path\nallowlist is enforced in `refine-prompt.sh`.\n\n## Data model\n\n`.autospec\u002Frefinements\u002F\u003Cslug>-\u003CISO-timestamp>.json`:\n\n```json\n{\n  \"original_prompt\": \"...\",\n  \"rounds\": [\n    {\n      \"round_number\": 1,\n      \"lens\": \"repo-grounding\",\n      \"sources_used\": [\"AGENTS.md\", \"docs\u002Fspecs\u002F2026-05-28-foo.md\"],\n      \"refined_prompt\": \"...\",\n      \"diff_summary\": \"added paths\u002Fconventions\u002Flockstep refs\",\n      \"word_count_delta\": 87,\n      \"reasoning\": \"...\"\n    }\n  ],\n  \"final_prompt\": \"...\",\n  \"status\": \"approved|converged|degraded|round_cap_reached|aborted\",\n  \"metadata\": {\n    \"head_sha\": \"...\",\n    \"timestamp\": \"...\",\n    \"rounds_requested\": 3,\n    \"rounds_executed\": 3,\n    \"converged_early\": false,\n    \"degraded_rounds\": [],\n    \"handoff_target\": \"\u002Fautospec --autonomous\",\n    \"handoff_executed\": true\n  }\n}\n```\n\n`.autospec\u002Frefinements\u002F\u003Cslug>-\u003CISO-timestamp>.md` — human-readable: original\nprompt → per-round headings with diff blocks → final prompt → handoff record.\n\nA JSON schema lives at `schemas\u002Fautospec-refinement.schema.json` and is\nvalidated by `validate.sh`.\n\n## Error handling\n\n- Empty prompt → usage error, exit 2.\n- LLM call fails (rate limit, auth, network) → retry once with backoff, then\n  surface to operator and write partial artifact.\n- Repo context insufficient (no `AGENTS.md`, no specs) → log warning, use\n  generic refinements, mark `metadata.context_sparse: true`.\n- Forbidden path access attempt (the allowlist enforced) → fail loudly with\n  `code_health:refine_path_violation`; do not silently strip.\n- Handoff target unavailable (e.g. `\u002Fautospec --autonomous` missing) → write\n  artifact, print the refined prompt to stdout, exit with clear message.\n\n## Continuous-iteration mode (`--continue`)\n\n`\u002Fautospec-refine --continue \"\u003Cinitial prompt>\" [--max-iterations N]` runs the\nrefine → handoff → execute → harvest-report cycle in a loop. After each\n`\u002Fautospec` run completes, the orchestrator reads the run's final report\n(from `.autospec\u002Frun-summary.md` or the equivalent), extracts the \"next\nsteps\" \u002F \"blockers\" \u002F \"remaining work\" section, and uses THAT content as the\ninput prompt for the next refinement round.\n\n### Termination (any one)\n\n- **Convergence — no next-steps content.** The harvested report contains no\n  actionable \"next steps\" section, OR the section is empty \u002F says \"done\".\n- **Oscillation.** Iteration N+1's harvested prompt equals iteration N's\n  (hashed by content). Loop exits with `oscillation_detected`.\n- **Round cap.** `AUTOSPEC_REFINE_LOOP_MAX_ITERATIONS` (default 5).\n- **Budget cap.** Tokens > `AUTOSPEC_REFINE_LOOP_TOKEN_CAP` (default 2M) or\n  wall time > `AUTOSPEC_REFINE_LOOP_TIME_CAP` (default 6h).\n- **Evidence-based stop.** The harvested report contains an explicit\n  `STOP: \u003Creason>` marker.\n- **Operator escape.** `~\u002F.autospec\u002Fstop.flag` (graceful) or\n  `~\u002F.autospec\u002Frefine-loop-stop.flag` terminates at the next iteration\n  boundary.\n\n### Per-iteration record\n\nEach loop iteration appends to `.autospec\u002Frefinements\u002F\u003Cslug>-loop.json`:\n\n```json\n{\n  \"iteration\": 2,\n  \"harvested_from_report\": \".autospec\u002Fruns\u002F2026-05-28T14:00Z\u002Freport.md\",\n  \"harvested_prompt\": \"Implement a deterministic ChemOnt-aligned ontology classifier...\",\n  \"refinement_artifact\": \".autospec\u002Frefinements\u002F\u003Cslug>-iter2-\u003Cts>.json\",\n  \"handoff_pr_count\": 3,\n  \"handoff_pr_numbers\": [672, 673, 674],\n  \"stop_reason\": null\n}\n```\n\n### Report harvest contract\n\nThe orchestrator reads the LAST autospec run's report and looks for, in order:\n\n1. A section header matching `## Next steps`, `## What to do next`,\n   `## Remaining work`, or `## Open blockers` (case-insensitive).\n2. If absent, fenced code blocks tagged with ` ```autospec-next` or\n   ` ```next-prompt`.\n3. If absent, sentence-start continuation prefixes (tier 3.5, issue #707):\n   `Next best slice:`, `Next best step:`, `Next slice:`, `Next step:`,\n   `Next:`, `Continue with:`, `Proceed with:`, `Move on to:`, `Move to:`,\n   `Then:`, `Up next:`, `Up next is:`, `Suggested next:` (case-insensitive).\n   The matched line plus its following paragraph (up to next blank line or\n   `##` heading) becomes the harvested prompt. All matcher functions live\n   in the shared library `lib\u002Fextract-matchers.sh` so additions to\n   either harvest path land in one place.\n4. If absent, the report's `Out-of-sample`, `Stop condition`, or\n   `Evidence-backed stop` sections are inspected. If they say \"stop\", the\n   loop terminates with `evidence_based_stop`.\n5. If none of the above are present → convergence (loop exits cleanly).\n\n### Safety guardrails\n\n- The `--autonomous` mode safety guardrails (`autospec-autonomy-gate.sh`)\n  still apply on every loop iteration.\n- The continuous loop inherits the autospec autonomy scope rules; it does\n  NOT escalate privileges.\n- Every iteration's per-PR merge still goes through the rebase-and-retest\n  gate.\n\n## Testing\n\n- `tests\u002Frefine\u002Ftest_refine_orchestrator.bats`:\n  - happy path: 3-round refinement with all 4 lenses → artifact written, JSON\n    schema-valid, rounds populated.\n  - convergence: round 2 == round 1 → early exit, status `converged`.\n  - degradation: synthetic round that drops 30% of words → flag emitted.\n  - round cap: `--rounds 15` → capped at 10, status `round_cap_reached`.\n  - context sparse: no `AGENTS.md` + no specs → completes with warning.\n  - forbidden path: lens tries to read `.env` → exits with\n    `code_health:refine_path_violation`.\n- `tests\u002Frefine\u002Ftest_refine_lenses.bats`: per-lens isolation tests, one\n  fixture each (4 tests).\n- `tests\u002Frefine\u002Ftest_refine_overview.bats`: dual-artifact renderer produces\n  valid markdown + JSON.\n- `tests\u002Frefine\u002Ftest_refine_handoff.bats`: `--autonomous`, `--interactive`,\n  `--dry-run` each route correctly (mocked `gh` \u002F `claude` invocations).\n- `tests\u002Frefine\u002Ftest_refine_loop.bats`: continuous-iteration mode termination\n  paths.\n\n## Handoff\n\nAfter all rounds complete (or convergence\u002Fdegradation\u002Fcap exit), present the\nfinal refined prompt to the operator with the per-round diff summary. On\napproval, hand off according to the invocation flag:\n\n- `--autonomous` (default) → `\u002Fautospec --autonomous \"\u003Crefined>\"`.\n- `--interactive` → `\u002Fautospec \"\u003Crefined>\"`.\n- `--dry-run` → print artifact paths, stop.\n\nFor `--continue` mode, the handoff runs autonomously every iteration; the\nloop summary table is printed at loop end.\n\n## Harness-aware handoff\n\nLoop dispatch uses `lib\u002Fautospec-harness-detect.sh` (issue #723) to\nresolve the active AI harness and pick the canonical `\u002Fautospec --autonomous`\ninvocation form:\n\n- Claude Code → `claude \"\u002Fautospec\" \"--autonomous\" \"$PROMPT\"`.\n- Codex CLI → `codex exec --skip-git-repo-check \"\u002Fautospec --autonomous $PROMPT\" \u003C\u002Fdev\u002Fnull` (the \u003C\u002Fdev\u002Fnull closes stdin — without it codex exec hangs on an open stdin, issue #3380).\n- OpenCode → `opencode \"\u002Fautospec\" \"--autonomous\" \"$PROMPT\"` (best-effort).\n\nDetection order: `AUTOSPEC_HANDOFF_DISPATCHER_KIND` env override → skill-mount\nprobe (`~\u002F.claude\u002Fskills` \u002F `~\u002F.codex\u002Fprompts` \u002F `~\u002F.config\u002Fopencode\u002Fagent`) →\nPATH probe. Missing dispatcher exits 3 with\n`code_health:loop_handoff_no_dispatcher_for_harness`.\n","# autospec-refine workflow (harness-neutral)\n\nTake an operator-supplied prompt (or feature request) and iteratively refine it\nover N rounds, grounding each round in current repo knowledge (AGENTS.md,\nrecent specs, recent commits, tagged memory). After operator approval, hand off\nthe final refined prompt to `\u002Fautospec --autonomous` (default) or\n`\u002Fautospec` (interactive) for end-to-end implementation.\n\nGoal: better prompts → better code, fewer mid-implementation course\ncorrections, fewer rounds of operator feedback. This skill closes the gap\nbetween under-specified raw requests and hand-crafted long prompts by\nautomating the prompt-improvement loop operators currently run in their heads.\n\nManage your own context — never exceed 60%. Delegate to subagents whenever your\nharness supports it; do not investigate or write the refined prompt directly in\nthe main conversation when a subagent can do it.\n\n\u003C!-- autospec-block:startup-self-update SKILL_NAME=autospec-refine -->\n\n## Self-update mode\n\nIf the feature-request argument matches the regex `^\\s*update\\s*$` (case-insensitive, whitespace-padded), this skill enters self-update mode and does not run the normal pipeline:\n\n1. **Detect harness** by checking which install path exists for this skill:\n   - Claude Code: `~\u002F.claude\u002Fskills\u002Fautospec-refine\u002FSKILL.md`\n   - OpenCode:    `~\u002F.config\u002Fopencode\u002Fagent\u002Fautospec-refine.md`\n   - Codex CLI:   `~\u002F.codex\u002Fprompts\u002Fautospec-refine.md`\n2. **Re-install the full autospec suite from `main`** by piping the canonical installer:\n   ```bash\n   curl -fsSL https:\u002F\u002Fraw.githubusercontent.com\u002Fberlinguyinca\u002Fautospec\u002Fmain\u002Fbootstrap.sh | bash -s -- --skill all --harness all --update\n   ```\n   Run this one-liner once; it refreshes all autospec skills across all harnesses.\n3. **Show the diff** between the prior installed file(s) and the freshly fetched copy.\n4. **Stop.** Do not enter the refinement pipeline. Print the upgrade summary and return to the user.\n\nIf no install path is detected, print `Self-update: no installed copy of autospec-refine found; run install.sh first.` and exit.\n\n## Stop mode\n\nIf the feature-request argument matches the regex `^\\s*stop(\\s+--\\w+)*\\s*$` (case-insensitive), this skill enters stop mode and does not run the normal pipeline:\n\n1. Delegate to the shared stop helper:\n   ```bash\n   bash \"${AUTOSPEC_SCRIPTS_DIR:-$HOME\u002F.autospec\u002Fscripts}\u002Fautospec-stop.sh\" \"$@\"\n   ```\n2. Honor `--graceful` (write `~\u002F.autospec\u002Fstop.flag`; running iteration finishes) and `--immediate` (write `~\u002F.autospec\u002Frefine-loop-stop.flag` plus stop.flag; abort at next iteration boundary).\n3. Print the stop summary and exit. Do not enter the refinement pipeline.\n\n## Required capabilities & harness adapter\n\nThis workflow assumes five capabilities. Map each one to your harness's actual tool. If a capability is missing, use the listed fallback.\n\n| Capability                  | Claude Code                          | OpenCode                                 | Codex CLI                                | Fallback if missing                                |\n|-----------------------------|--------------------------------------|------------------------------------------|------------------------------------------|----------------------------------------------------|\n| Read-only codebase research | `Agent` (subagent_type=Explore)      | `task` agent in read-only mode           | `apply_patch` read-only \u002F shell `grep`   | Do the search in-thread with `rg`\u002F`grep`           |\n| Foreground delegation       | `Agent` (subagent_type=general-purpose) | nested `task` agent, await output     | spawn nested CLI session                 | Do the work in-thread (more context cost)          |\n| Background delegation       | `Agent` with `run_in_background: true` | detached `task` agent                  | nohup'd CLI session writing to a logfile | Run the monitor in a separate terminal\u002Ftmux pane   |\n| Ask the user a question     | `AskUserQuestion`                    | inline prompt                            | inline prompt                            | Ask in the response and wait for the next turn     |\n| Self-paced future wakeup    | `ScheduleWakeup` inside a `\u002Floop`    | a recurring `task` or local `cron`       | local `cron`\u002F`launchd` calling the CLI   | The user runs a status-update prompt manually      |\n| Subagent model tier         | Tier A: `opus` + `ultrathink`; Tier B: `sonnet` + medium thinking | Tier A: top `task` model + high reasoning; Tier B: smaller-tier `task` + medium reasoning | Tier A: top GPT + `reasoning_effort=high`; Tier B: current spark\u002Fcost-optimized Codex + `reasoning_effort=medium` | Honor the per-phase tier mapping in AGENTS.md; retry the same subagent UP on unavailability |\n\u003C!-- autospec-block:harness-adapter-core -->\n\n**Persistent project notes**: write durable preferences to **`AGENTS.md`** in the repo root — recognized by Claude Code, OpenCode, and Codex. Per AGENTS.md, subagent dispatches use the two-tier policy: Tier A for spec\u002Frefinement work (each lens applies fresh-eyes reasoning to the prompt), Tier B for implementation. This skill is refinement-only and dispatches at Tier A. Fall back UP the tier on quota\u002Fcapacity failure.\n\n## Harness detection (run once at skill start, before refinement begins)\n\nDetect your harness by checking available tools before any lens runs:\n\n1. **Claude Code** — the `Agent` tool with a `subagent_type` parameter is available.\n   - `TIER_A` = `opus` + `ultrathink`  (the alias, which resolves to the current Claude Opus generation)\n   - `TIER_B` = `sonnet`               (the alias, which resolves to the current Claude Sonnet generation)\n\n2. **OpenCode** — a `task` tool with model\u002Ftier configuration is available (no `subagent_type`).\n   - `TIER_A` = top-tier task model + high reasoning\n   - `TIER_B` = smaller-tier task model + medium reasoning\n\n3. **Codex CLI** — neither `Agent` nor a configurable `task` tool is available; `apply_patch` is the primary edit tool.\n   - `TIER_A` = current top GPT model + `reasoning_effort=high`\n   - `TIER_B` = the spark \u002F cost-optimized variant of the configured model when one exists, else the configured model + `reasoning_effort=medium`\n\n**Fallback rule:** If `TIER_B` is not available in your harness, silently retry the same subagent dispatch with `TIER_A`. Preserve parent context on retry. Never ask the user.\n\nHold `TIER_A` and `TIER_B` for the entire skill run. Every \"Tier A\" and \"Tier B\" reference below resolves to these harness-specific values.\n\n## Architecture\n\n`autospec-refine` is a new top-level skill that mirrors the existing\n`autospec-define` and `autospec-qa` skill-family shape:\n\n- `skills\u002Fautospec-refine\u002FSKILL.md` — Claude Code adapter (authoritative).\n- `skills\u002Fautospec-refine\u002Fcodex\u002Fprompt.md` — Codex CLI mirror (lockstep).\n- `skills\u002Fautospec-refine\u002Fopencode\u002Fagent.md` — OpenCode mirror (lockstep).\n- `skills\u002Fautospec-refine\u002Finstall.sh` — installer; mirrors existing skills.\n- `skills\u002Fautospec-refine\u002Funinstall.sh` — uninstaller; mirrors existing skills.\n- `skills\u002Fautospec-refine\u002FREADME.md` — usage doc.\n- `refine-prompt.sh` — orchestrator: parses args, dispatches lenses,\n  writes artifacts, performs handoff. **Stubbed by this scaffold; implemented\n  in the orchestrator child issue.**\n- `refine-render-overview.sh` — produces dual markdown + JSON artifact.\n  **Stubbed by this scaffold; implemented in the renderer child issue.**\n\nThis SKILL.md is the scaffold contract. Subsequent child issues fill in\n`refine-prompt.sh`, the lens helpers, the renderer, the handoff\nplumbing, and the continuous-iteration loop.\n\n## Invocation\n\n```\n\u002Fautospec-refine \"\u003Cinitial prompt>\" [--rounds N] [--from-file \u003Cpath>] \\\n                 [--interactive | --autonomous (default) | --dry-run] \\\n                 [--lenses \u003Ccomma-list>] [--output \u003Cpath>] \\\n                 [--continue [--max-iterations N]]\n```\n\n> **Model tier:** `TIER_A` (spec work) — each refinement round dispatches a fresh-eyes lens subagent at top model with extended thinking; resolved at startup.\n\n- `--rounds N` — number of refinement passes. Default `3`. Max `10`. Rounds\n  apply the named lenses in order; if `N` \u003C number of lenses, the trailing\n  lenses are skipped. If `N` > number of lenses, the adversarial lens repeats.\n- `--from-file \u003Cpath>` — read the initial prompt from a file instead of\n  inline string. Mutually exclusive with positional prompt.\n- `--autonomous` (default) — on operator approval, hand off to\n  `\u002Fautospec --autonomous \"\u003Crefined>\"` (no-confirmation autospec).\n- `--interactive` — hand off to plain `\u002Fautospec \"\u003Crefined>\"` (full Phase 2\n  brainstorm gate).\n- `--dry-run` — produce the artifact only, do not hand off.\n- `--lenses repo,clarity,sizing,adversarial` — override the default lens\n  order. Comma-separated, drawn from the registered lens names.\n- `--output \u003Cpath>` — write the final refined prompt to a file (in addition\n  to the `.autospec\u002Frefinements\u002F` artifact).\n- `--continue` — enter continuous-iteration mode: refine → handoff → execute\n  → harvest-report → re-refine. See **Continuous-iteration mode** below.\n\n## Refinement lenses\n\nFour lenses, applied in order one per round:\n\n1. **`repo-grounding`** — read `AGENTS.md`, recent `docs\u002Fspecs\u002F**` (last 30\n   days), `git log --since=7d`, and tag-matched\n   `~\u002F.autospec\u002Fprojects\u002F*\u002Fmemory\u002Ffeedback_*.md`. Replace generic verbs with\n   project-specific file paths, conventions, and constraints (lockstep, TDD,\n   no-mock, conventional commits, sizing caps).\n2. **`clarity-ac`** — extract implicit acceptance criteria and convert prose\n   into `- [ ]` checkbox list. Disambiguate hedging language (`should\n   probably`, `might`, `could try`). Name unambiguous test commands.\n3. **`sizing`** — enforce small-LLM execution caps from the autospec\n   decomposer rule (body ≤400 words, ≤3 files per child issue, ≤30 lines of\n   implementation outline). If the refined prompt would produce a child that\n   exceeds caps, split into a parent + child sequence and emit linked prompt\n   fragments.\n4. **`adversarial`** — critical-question pass. Apply the 20-question\n   checklist from `autospec-qa`. For each high-risk answer that's actionable\n   inside the scope, add a test requirement or scope clarification.\n\nOperators may override the default set with `--lenses`. Custom lens registry\nis out of scope for v1.\n\n## Convergence and degradation\n\n- **Convergence** — if round N's refined prompt is byte-identical to round\n  N-1's, exit early with status `converged` and final round = N-1.\n- **Degradation** — if round N's prompt is shorter than round N-1's by more\n  than 25% by word count, flag `degraded:\u003Clens>` and surface to operator.\n  This catches lens implementations that over-aggressively prune scope.\n- **Round cap** — hard limit `AUTOSPEC_REFINE_MAX_ROUNDS=10`. Beyond this,\n  exit with `round_cap_reached`.\n\n## Repo context scope\n\n| Source | Read pattern |\n|---|---|\n| `AGENTS.md` | Always read in full. Highest-signal source. |\n| `docs\u002Fspecs\u002F**\u002F*.md` | Last 30 days by file mtime + commit date. Cap at 5 specs to avoid prompt bloat. |\n| `git log --since=7d --oneline` + per-commit `git show --stat` | Last 7 days. Use to surface recently-changed files the prompt might intersect. |\n| `~\u002F.autospec\u002Fprojects\u002F*\u002Fmemory\u002Ffeedback_*.md` | Keyword match against the prompt. Cap at 5 most-relevant entries. |\n\nThe orchestrator MUST NOT read `.env`, `.git\u002F`, files under `node_modules\u002F`,\nor any path matching `*credential*`, `*secret*`, `*.pem`, `*.key`. Path\nallowlist is enforced in `refine-prompt.sh`.\n\n## Data model\n\n`.autospec\u002Frefinements\u002F\u003Cslug>-\u003CISO-timestamp>.json`:\n\n```json\n{\n  \"original_prompt\": \"...\",\n  \"rounds\": [\n    {\n      \"round_number\": 1,\n      \"lens\": \"repo-grounding\",\n      \"sources_used\": [\"AGENTS.md\", \"docs\u002Fspecs\u002F2026-05-28-foo.md\"],\n      \"refined_prompt\": \"...\",\n      \"diff_summary\": \"added paths\u002Fconventions\u002Flockstep refs\",\n      \"word_count_delta\": 87,\n      \"reasoning\": \"...\"\n    }\n  ],\n  \"final_prompt\": \"...\",\n  \"status\": \"approved|converged|degraded|round_cap_reached|aborted\",\n  \"metadata\": {\n    \"head_sha\": \"...\",\n    \"timestamp\": \"...\",\n    \"rounds_requested\": 3,\n    \"rounds_executed\": 3,\n    \"converged_early\": false,\n    \"degraded_rounds\": [],\n    \"handoff_target\": \"\u002Fautospec --autonomous\",\n    \"handoff_executed\": true\n  }\n}\n```\n\n`.autospec\u002Frefinements\u002F\u003Cslug>-\u003CISO-timestamp>.md` — human-readable: original\nprompt → per-round headings with diff blocks → final prompt → handoff record.\n\nA JSON schema lives at `schemas\u002Fautospec-refinement.schema.json` and is\nvalidated by `validate.sh`.\n\n## Error handling\n\n- Empty prompt → usage error, exit 2.\n- LLM call fails (rate limit, auth, network) → retry once with backoff, then\n  surface to operator and write partial artifact.\n- Repo context insufficient (no `AGENTS.md`, no specs) → log warning, use\n  generic refinements, mark `metadata.context_sparse: true`.\n- Forbidden path access attempt (the allowlist enforced) → fail loudly with\n  `code_health:refine_path_violation`; do not silently strip.\n- Handoff target unavailable (e.g. `\u002Fautospec --autonomous` missing) → write\n  artifact, print the refined prompt to stdout, exit with clear message.\n\n## Continuous-iteration mode (`--continue`)\n\n`\u002Fautospec-refine --continue \"\u003Cinitial prompt>\" [--max-iterations N]` runs the\nrefine → handoff → execute → harvest-report cycle in a loop. After each\n`\u002Fautospec` run completes, the orchestrator reads the run's final report\n(from `.autospec\u002Frun-summary.md` or the equivalent), extracts the \"next\nsteps\" \u002F \"blockers\" \u002F \"remaining work\" section, and uses THAT content as the\ninput prompt for the next refinement round.\n\n### Termination (any one)\n\n- **Convergence — no next-steps content.** The harvested report contains no\n  actionable \"next steps\" section, OR the section is empty \u002F says \"done\".\n- **Oscillation.** Iteration N+1's harvested prompt equals iteration N's\n  (hashed by content). Loop exits with `oscillation_detected`.\n- **Round cap.** `AUTOSPEC_REFINE_LOOP_MAX_ITERATIONS` (default 5).\n- **Budget cap.** Tokens > `AUTOSPEC_REFINE_LOOP_TOKEN_CAP` (default 2M) or\n  wall time > `AUTOSPEC_REFINE_LOOP_TIME_CAP` (default 6h).\n- **Evidence-based stop.** The harvested report contains an explicit\n  `STOP: \u003Creason>` marker.\n- **Operator escape.** `~\u002F.autospec\u002Fstop.flag` (graceful) or\n  `~\u002F.autospec\u002Frefine-loop-stop.flag` terminates at the next iteration\n  boundary.\n\n### Per-iteration record\n\nEach loop iteration appends to `.autospec\u002Frefinements\u002F\u003Cslug>-loop.json`:\n\n```json\n{\n  \"iteration\": 2,\n  \"harvested_from_report\": \".autospec\u002Fruns\u002F2026-05-28T14:00Z\u002Freport.md\",\n  \"harvested_prompt\": \"Implement a deterministic ChemOnt-aligned ontology classifier...\",\n  \"refinement_artifact\": \".autospec\u002Frefinements\u002F\u003Cslug>-iter2-\u003Cts>.json\",\n  \"handoff_pr_count\": 3,\n  \"handoff_pr_numbers\": [672, 673, 674],\n  \"stop_reason\": null\n}\n```\n\n### Report harvest contract\n\nThe orchestrator reads the LAST autospec run's report and looks for, in order:\n\n1. A section header matching `## Next steps`, `## What to do next`,\n   `## Remaining work`, or `## Open blockers` (case-insensitive).\n2. If absent, fenced code blocks tagged with ` ```autospec-next` or\n   ` ```next-prompt`.\n3. If absent, sentence-start continuation prefixes (tier 3.5, issue #707):\n   `Next best slice:`, `Next best step:`, `Next slice:`, `Next step:`,\n   `Next:`, `Continue with:`, `Proceed with:`, `Move on to:`, `Move to:`,\n   `Then:`, `Up next:`, `Up next is:`, `Suggested next:` (case-insensitive).\n   The matched line plus its following paragraph (up to next blank line or\n   `##` heading) becomes the harvested prompt. All matcher functions live\n   in the shared library `lib\u002Fextract-matchers.sh` so additions to\n   either harvest path land in one place.\n4. If absent, the report's `Out-of-sample`, `Stop condition`, or\n   `Evidence-backed stop` sections are inspected. If they say \"stop\", the\n   loop terminates with `evidence_based_stop`.\n5. If none of the above are present → convergence (loop exits cleanly).\n\n### Safety guardrails\n\n- The `--autonomous` mode safety guardrails (`autospec-autonomy-gate.sh`)\n  still apply on every loop iteration.\n- The continuous loop inherits the autospec autonomy scope rules; it does\n  NOT escalate privileges.\n- Every iteration's per-PR merge still goes through the rebase-and-retest\n  gate.\n\n## Testing\n\n- `tests\u002Frefine\u002Ftest_refine_orchestrator.bats`:\n  - happy path: 3-round refinement with all 4 lenses → artifact written, JSON\n    schema-valid, rounds populated.\n  - convergence: round 2 == round 1 → early exit, status `converged`.\n  - degradation: synthetic round that drops 30% of words → flag emitted.\n  - round cap: `--rounds 15` → capped at 10, status `round_cap_reached`.\n  - context sparse: no `AGENTS.md` + no specs → completes with warning.\n  - forbidden path: lens tries to read `.env` → exits with\n    `code_health:refine_path_violation`.\n- `tests\u002Frefine\u002Ftest_refine_lenses.bats`: per-lens isolation tests, one\n  fixture each (4 tests).\n- `tests\u002Frefine\u002Ftest_refine_overview.bats`: dual-artifact renderer produces\n  valid markdown + JSON.\n- `tests\u002Frefine\u002Ftest_refine_handoff.bats`: `--autonomous`, `--interactive`,\n  `--dry-run` each route correctly (mocked `gh` \u002F `claude` invocations).\n- `tests\u002Frefine\u002Ftest_refine_loop.bats`: continuous-iteration mode termination\n  paths.\n\n## Handoff\n\nAfter all rounds complete (or convergence\u002Fdegradation\u002Fcap exit), present the\nfinal refined prompt to the operator with the per-round diff summary. On\napproval, hand off according to the invocation flag:\n\n- `--autonomous` (default) → `\u002Fautospec --autonomous \"\u003Crefined>\"`.\n- `--interactive` → `\u002Fautospec \"\u003Crefined>\"`.\n- `--dry-run` → print artifact paths, stop.\n\nFor `--continue` mode, the handoff runs autonomously every iteration; the\nloop summary table is printed at loop end.\n\n## Harness-aware handoff\n\nLoop dispatch uses `lib\u002Fautospec-harness-detect.sh` (issue #723) to\nresolve the active AI harness and pick the canonical `\u002Fautospec --autonomous`\ninvocation form:\n\n- Claude Code → `claude \"\u002Fautospec\" \"--autonomous\" \"$PROMPT\"`.\n- Codex CLI → `codex exec --skip-git-repo-check \"\u002Fautospec --autonomous $PROMPT\" \u003C\u002Fdev\u002Fnull` (the \u003C\u002Fdev\u002Fnull closes stdin — without it codex exec hangs on an open stdin, issue #3380).\n- OpenCode → `opencode \"\u002Fautospec\" \"--autonomous\" \"$PROMPT\"` (best-effort).\n\nDetection order: `AUTOSPEC_HANDOFF_DISPATCHER_KIND` env override → skill-mount\nprobe (`~\u002F.claude\u002Fskills` \u002F `~\u002F.codex\u002Fprompts` \u002F `~\u002F.config\u002Fopencode\u002Fagent`) →\nPATH probe. Missing dispatcher exits 3 with\n`code_health:loop_handoff_no_dispatcher_for_harness`.\n",{"name":5,"description":7},"main","9e7f04357ff46ab731d4f56a4ac5ca5449c13bb0","skills\u002Fautospec-refine",1,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec","https:\u002F\u002Fgithub.com\u002Fberlinguyinca","Love to lead, code, cook and contribute to open source and believe that you can learn anything you set your mind too.\r\n","2026-11-11 07:09:35",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add berlinguyinca\u002Fautospec --skill autospec-refine",{"tool":63,"command":64},"bunx","bunx skills add berlinguyinca\u002Fautospec --skill autospec-refine",{"tool":66,"command":67},"pnpm","pnpm dlx skills add berlinguyinca\u002Fautospec --skill autospec-refine","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-refine\u002FSKILL.md",true,[71,77,83,87,91],{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"codex\u002Fprompt.md","REFERENCE","参考文档",18681,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-refine\u002Fcodex\u002Fprompt.md",{"path":78,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":81,"sourceHtmlUrl":82},"install.sh","SCRIPT","脚本",10801,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-refine\u002Finstall.sh",{"path":84,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":85,"sourceHtmlUrl":86},"opencode\u002Fagent.md",18981,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-refine\u002Fopencode\u002Fagent.md",{"path":88,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":89,"sourceHtmlUrl":90},"README.md",3928,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-refine\u002FREADME.md",{"path":92,"resourceType":79,"resourceTypeDesc":80,"sizeBytes":93,"sourceHtmlUrl":94},"uninstall.sh",3940,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-refine\u002Funinstall.sh",[96,105,114,123,146,170],{"skillNo":97,"name":98,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":102,"publishedAt":44},"01M71RJHYMKPTC9AAPXWQ6F4RT","trio-pass-skill","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Flockstep-trio-pass\u002FSKILL.md",[101],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[103,104],"trio","trio pass skill",{"skillNo":106,"name":107,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":111,"publishedAt":44},"01M71RJFBQ1KAF9XM3T3Y4VMSK","duo-pass-skill","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Flockstep-duo-pass\u002FSKILL.md",[110],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[112,113],"duo pass skill","duo",{"skillNo":115,"name":116,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":120,"publishedAt":44},"01M71RJDT1TB3P9TRWR6A534FB","duo-divergence-skill","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Flockstep-duo-divergence\u002FSKILL.md",[119],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[121,113,122],"duo divergence skill","divergence",{"skillNo":124,"name":24,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":131,"publishedAt":44},"01M71RJAC4NNEQSYBDSY3NZS73","Use when the user wants to ship a feature end-to-end across multiple commits — bootstraps repo if missing, brainstorms a design spec, decomposes into linked GitHub issues, or splits an existing spec into issues, then runs an autonomous implementation loop with auto-merge.","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec\u002FSKILL.md",[128],{"categoryNo":129,"categoryName":130,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",[24,132,133,134,135,41,136,137,40,138,139,140,141,142,143,35,144,33,145,31],"ship a feature","end","issues","design","auto","loop","across","design spec","merge","ship","implementation loop","github issues","commits","missing",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":152,"publishedAt":44},"01M71RJ4F9HT8PT26CKNM9XE1M","autospec-upgrade","Use when the user wants to upgrade an Angular, Next.js, or React project to the latest official versions safely — by locking observable behavior before touching versions, upgrading one major at a time with official codemods, and gating completion on mutation score rather than coverage theater.","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-upgrade\u002FSKILL.md",[],[153,24,154,155,156,157,158,159,160,40,161,162,163,164,31,165,166,167,168,169],"autospec upgrade","upgrade","mutation","coverage","official","project","time","gating","angular","react","next","at","Next.js","one","with","behavior","latest",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":181,"publishedAt":44},"01M71RJ28FJ4PM6DXHB7T5CF8H","autospec-ui-audit","Use when a React Router application needs a deterministic whole-site route inventory before UI, UX, navigation, or evidence auditing begins.","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-ui-audit\u002FSKILL.md",[176],{"categoryNo":177,"categoryName":178,"taxonomyType":179,"taxonomyTypeDesc":180},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[182,24,183,184,185,31,186,187,188,189,190,191,192,193,194,162,195,40,196],"ui audit","audit","autospec ui audit","ui","inventory","evidence","deterministic","route","ux","site","react router","navigation","application","needs","router"]