[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71RFBW33TPVNHWNB0H9GM98":3,"skill-same:01M71RFBW33TPVNHWNB0H9GM98":140},{"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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":6,"ownerHtmlUrl":49,"ownerBlogUrl":6,"ownerDescription":50,"updatedAt":51,"install":52,"resources":65},"01M71RFBW33TPVNHWNB0H9GM98","autospec-harmonize",null,"Use when the operator wants to harmonize a codebase's design tokens — discover palette\u002Ftype\u002Fspacing drift, generalize a baseline design, generate variants (minimal, high-contrast, dense, bold), preview them, and produce a dated migration spec. Triggers on \"harmonize design\", \"design tokens\", \"style drift\", \"palette inconsistency\", \"design migration spec\".","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-harmonize\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"autospec harmonize","autospec","generate","high","style","palette","high-contrast","type","drift","preview","when","use","produce","variants","design","minimal","triggers","tokens","discover","bold","2026-11-10 13:02:02",false,"---\nname: autospec-harmonize\ndescription: Use when the operator wants to harmonize a codebase's design tokens — discover palette\u002Ftype\u002Fspacing drift, generalize a baseline design, generate variants (minimal, high-contrast, dense, bold), preview them, and produce a dated migration spec. Triggers on \"harmonize design\", \"design tokens\", \"style drift\", \"palette inconsistency\", \"design migration spec\".\n---\n\n# autospec-harmonize workflow (harness-neutral)\n\nOrchestrate a 6-stage design-token harmonization pipeline for a target\ncodebase: discover → generalize → variants → preview → pick → gen-migration-spec.\nThe result is a dated design-migration spec ready for `\u002Fautospec-define`.\n\nGoal: a harness-neutral, autospec-family way to identify design-token drift in\na codebase, surface a shortlist of harmonized variants, let the operator pick\none, and emit a structured migration spec — all on small-context local models.\n\nManage your own context — never exceed 60%. Delegate per-stage work to\nsubagents whenever your harness supports it; do not carry raw stage transcripts\nin the orchestrator context.\n\n\u003C!-- autospec-block:startup-self-update SKILL_NAME=autospec-harmonize -->\n\n## Self-update mode\n\nIf the argument matches the regex `^\\s*update\\s*$` (case-insensitive,\nwhitespace-padded), this skill enters self-update mode and does not run the\nnormal pipeline. This section is pure prose: never interpolate or shell out the\noperator's argument text.\n\n1. **Detect harness** by checking which install path exists for this skill:\n   - Claude Code: `~\u002F.claude\u002Fskills\u002Fautospec-harmonize\u002FSKILL.md`\n   - OpenCode:    `~\u002F.config\u002Fopencode\u002Fagent\u002Fautospec-harmonize.md`\n   - Codex CLI:   `~\u002F.codex\u002Fprompts\u002Fautospec-harmonize.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 harmonize 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-harmonize found; run install.sh first.` and exit.\n\n## Model tier\n\nTier A\u002FB model resolution and the harness-detection protocol are inherited\nverbatim from `AGENTS.md` (`## Subagent model selection (two-tier, cost-aware)`\nand `## Subagent vs inline decision matrix`). Design-pick reasoning runs at\nTier A (spec work); per-stage pipeline work runs at Tier B (implementation\nwork), escalating to Tier A for the generalize and migration-spec stages.\n\n> **Model tier:** The pick gate and migration-spec generation dispatch at Tier A (spec work);\n> discovery, generalize, variants, and preview dispatch at TIER_B (implementation work),\n> resolved at startup per the harness detection below.\n\n### Required capabilities & harness adapter\n\nThis workflow assumes the following capabilities. Map each to your harness's\nactual tool; if a capability is missing, use the listed fallback.\n\n| Capability                  | Claude Code                             | OpenCode                              | Codex CLI                                | Fallback if missing                              |\n|-----------------------------|-----------------------------------------|---------------------------------------|------------------------------------------|--------------------------------------------------|\n| Per-stage worker            | `Agent` (subagent_type=general-purpose) | `task` agent, await output            | run the stage inline (no subagents)      | Run the stage in-thread (more context cost)      |\n| Ask the user a question     | `AskUserQuestion`                       | inline prompt                         | inline prompt                            | Ask in the response and wait for the next turn   |\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| Subagent dispatch policy    | per AGENTS.md decision matrix           | per AGENTS.md decision matrix         | per AGENTS.md decision matrix            | inline with main-session token cost              |\n\n**Persistent project notes**: write durable preferences to **`AGENTS.md`** in\nthe repo root — recognized by Claude Code, OpenCode, and Codex.\n\n## Harness detection (run once at skill start)\n\nDetect your harness by checking available tools before any dispatch:\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)\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\n3. **Codex CLI** — neither `Agent` nor a configurable `task` tool is available; stages run inline.\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\nthe same subagent dispatch with `TIER_A`. Preserve parent context on retry.\nNever ask the user.\n\nHold `TIER_A` and `TIER_B` for the entire skill run.\n\n## Pipeline overview\n\nThe harmonize pipeline sequences these 6 stages:\n\n1. **Discover** — extract design tokens from the target codebase (source CSS\u002FSCSS\n   or live URL runtime extraction). Writes `\u003Cout>\u002Fdiscovered-tokens.json` +\n   `\u003Cout>\u002Finventory.md`.\n2. **Generalize** — collapse the token profile into one `id:\"baseline\"` variant\n   conforming to the variant schema.\n3. **Variants** — expand the baseline into an array of design variants for the\n   requested axes (minimal, high-contrast, dense, bold, vendor-blend). The\n   baseline is always index 0; the result array has ≥3 elements including baseline.\n4. **Preview** — render a self-contained HTML gallery from the variants array.\n   Writes `\u003Cout>\u002Fpreview\u002Findex.html`. Uses Playwright screenshots when available;\n   falls back to color-swatch HTML when `AUTOSPEC_HARMONIZE_NO_PLAYWRIGHT=1` or\n   Playwright is absent.\n5. **Pick gate** — present the shortlisted variants to the operator via\n   `AskUserQuestion` and record their choice (see **Pick gate** section below).\n   `--no-live-preview` suppresses the live-preview offer. No winner → exits 0\n   without writing a migration spec.\n6. **Gen migration spec** — render a dated `docs\u002Fspecs\u002F\u003Cdate>-harmonize-\u003Cslug>-design.md`\n   from the chosen variant + inventory. Print the `\u002Fautospec-define \u003Cpath>`\n   handoff command so the operator can kick off implementation.\n\nThe orchestrator script (`harmonize.sh`) is **non-interactive**: the pick gate\nlives in this SKILL.md and is only active when running under a harness. When\n`harmonize.sh` is invoked directly (e.g. from a test), it uses the default pick\n(baseline or first non-baseline variant) for the migration spec without\nprompting.\n\n## Invocation\n\n```\n\u002Fautospec-harmonize [--root \u003Cdir>] [--url \u003Cu>] [--source-only]\n                    [--pages \u003Clist>] [--variants \u003Caxes>] [--num-variants \u003Cn>]\n                    [--no-live-preview] [--out \u003Cdir>]\n```\n\n- `--root \u003Cdir>` — the codebase root to analyze (defaults to current working directory).\n- `--url \u003Cu>` — extract tokens from a live URL via runtime extractor (falls back to source if unavailable).\n- `--source-only` — skip runtime extraction; always use source CSS\u002FSCSS.\n- `--pages \u003Clist>` — comma-separated list of URL paths to sample during runtime extraction.\n- `--variants \u003Caxes>` — comma-separated variant axes to generate beyond baseline (default: `minimal,high-contrast`).\n- `--num-variants \u003Cn>` — total number of variants to generate (including baseline; default: 3).\n- `--no-live-preview` — suppress the live-preview offer in the pick gate.\n- `--out \u003Cdir>` — output directory for all artifacts (default: `.autospec\u002Fharmonize\u002F\u003Cslug>`).\n\n## Stage scripts\n\nEach stage is a sibling script that the orchestrator shells out to. The\norchestrator resolves them from `${AUTOSPEC_SCRIPTS_DIR:-$HOME\u002F.autospec\u002Fscripts}`,\nfalling back to the script's own directory:\n\n| Stage | Script |\n|-------|--------|\n| Source extraction | `extract-source.mjs` |\n| Runtime extraction | `extract-runtime.mjs` |\n| Discover orchestration | `design-discover.sh` |\n| Generalize | `design-generalize.mjs` |\n| Variants | `design-variants.mjs` |\n| Preview | `design-preview.mjs` |\n| Migration spec | `gen-migration-spec.mjs` |\n\n## Pick gate\n\nAfter the preview stage, use `AskUserQuestion` to present the shortlist of\nvariants to the operator:\n\n1. Show each variant's `id`, `axis`, and a one-line `design_md` summary.\n2. Include the path to `\u003Cout>\u002Fpreview\u002Findex.html` so the operator can open it.\n3. If `--no-live-preview` is NOT set, offer to open the preview in a browser.\n4. Ask the operator to type the `id` of their preferred variant, or `none` to\n   exit without generating a migration spec.\n5. If the operator types `none` (or an empty response), print\n   `No variant selected — exiting without a migration spec.` and exit 0.\n6. Validate that the chosen `id` exists in the variants array. If invalid, ask\n   again (up to 3 attempts); on the third failure, exit 0 with an error message.\n7. Proceed to Stage 6 with the chosen variant `id`.\n\nWhen running `harmonize.sh` directly (non-interactive, no harness), skip this\ngate entirely and use the first non-baseline variant (or baseline if only one\nexists) as the default pick.\n\n## Stage failure handling\n\nEach stage failure emits its `code_health` line to stderr and continues where\npossible:\n\n- If **discovery** yields an empty token profile (no palette, type_scale, or\n  spacing entries), abort with exit code 1 and print\n  `code_health:harmonize_discover_empty — no design tokens found in \u003Croot>`.\n- If **generalize** fails, emit `code_health:harmonize_generalize_failed` and\n  abort.\n- If **variants** fails, emit `code_health:harmonize_variants_failed` and abort.\n- If **preview** fails (non-fatal), emit `code_health:harmonize_preview_failed`\n  and continue — the pick gate can still show the text summary.\n- If **gen-migration-spec** fails, emit `code_health:harmonize_spec_failed` and\n  report the error to the operator without aborting the skill run.\n\n## Output artifacts\n\nAll artifacts land under `--out \u003Cdir>`:\n\n| Path | Stage | Description |\n|------|-------|-------------|\n| `discovered-tokens.json` | Discover | Token profile (schema-validated) |\n| `inventory.md` | Discover | Human-readable inventory + inconsistency report |\n| `baseline.json` | Generalize | Baseline variant JSON |\n| `variants.json` | Variants | Full variants array JSON |\n| `preview\u002Findex.html` | Preview | Self-contained HTML gallery |\n| `docs\u002Fspecs\u002F\u003Cdate>-harmonize-\u003Cslug>-design.md` | Gen spec | Dated migration spec |\n","# autospec-harmonize workflow (harness-neutral)\n\nOrchestrate a 6-stage design-token harmonization pipeline for a target\ncodebase: discover → generalize → variants → preview → pick → gen-migration-spec.\nThe result is a dated design-migration spec ready for `\u002Fautospec-define`.\n\nGoal: a harness-neutral, autospec-family way to identify design-token drift in\na codebase, surface a shortlist of harmonized variants, let the operator pick\none, and emit a structured migration spec — all on small-context local models.\n\nManage your own context — never exceed 60%. Delegate per-stage work to\nsubagents whenever your harness supports it; do not carry raw stage transcripts\nin the orchestrator context.\n\n\u003C!-- autospec-block:startup-self-update SKILL_NAME=autospec-harmonize -->\n\n## Self-update mode\n\nIf the argument matches the regex `^\\s*update\\s*$` (case-insensitive,\nwhitespace-padded), this skill enters self-update mode and does not run the\nnormal pipeline. This section is pure prose: never interpolate or shell out the\noperator's argument text.\n\n1. **Detect harness** by checking which install path exists for this skill:\n   - Claude Code: `~\u002F.claude\u002Fskills\u002Fautospec-harmonize\u002FSKILL.md`\n   - OpenCode:    `~\u002F.config\u002Fopencode\u002Fagent\u002Fautospec-harmonize.md`\n   - Codex CLI:   `~\u002F.codex\u002Fprompts\u002Fautospec-harmonize.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 harmonize 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-harmonize found; run install.sh first.` and exit.\n\n## Model tier\n\nTier A\u002FB model resolution and the harness-detection protocol are inherited\nverbatim from `AGENTS.md` (`## Subagent model selection (two-tier, cost-aware)`\nand `## Subagent vs inline decision matrix`). Design-pick reasoning runs at\nTier A (spec work); per-stage pipeline work runs at Tier B (implementation\nwork), escalating to Tier A for the generalize and migration-spec stages.\n\n> **Model tier:** The pick gate and migration-spec generation dispatch at Tier A (spec work);\n> discovery, generalize, variants, and preview dispatch at TIER_B (implementation work),\n> resolved at startup per the harness detection below.\n\n### Required capabilities & harness adapter\n\nThis workflow assumes the following capabilities. Map each to your harness's\nactual tool; if a capability is missing, use the listed fallback.\n\n| Capability                  | Claude Code                             | OpenCode                              | Codex CLI                                | Fallback if missing                              |\n|-----------------------------|-----------------------------------------|---------------------------------------|------------------------------------------|--------------------------------------------------|\n| Per-stage worker            | `Agent` (subagent_type=general-purpose) | `task` agent, await output            | run the stage inline (no subagents)      | Run the stage in-thread (more context cost)      |\n| Ask the user a question     | `AskUserQuestion`                       | inline prompt                         | inline prompt                            | Ask in the response and wait for the next turn   |\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| Subagent dispatch policy    | per AGENTS.md decision matrix           | per AGENTS.md decision matrix         | per AGENTS.md decision matrix            | inline with main-session token cost              |\n\n**Persistent project notes**: write durable preferences to **`AGENTS.md`** in\nthe repo root — recognized by Claude Code, OpenCode, and Codex.\n\n## Harness detection (run once at skill start)\n\nDetect your harness by checking available tools before any dispatch:\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)\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\n3. **Codex CLI** — neither `Agent` nor a configurable `task` tool is available; stages run inline.\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\nthe same subagent dispatch with `TIER_A`. Preserve parent context on retry.\nNever ask the user.\n\nHold `TIER_A` and `TIER_B` for the entire skill run.\n\n## Pipeline overview\n\nThe harmonize pipeline sequences these 6 stages:\n\n1. **Discover** — extract design tokens from the target codebase (source CSS\u002FSCSS\n   or live URL runtime extraction). Writes `\u003Cout>\u002Fdiscovered-tokens.json` +\n   `\u003Cout>\u002Finventory.md`.\n2. **Generalize** — collapse the token profile into one `id:\"baseline\"` variant\n   conforming to the variant schema.\n3. **Variants** — expand the baseline into an array of design variants for the\n   requested axes (minimal, high-contrast, dense, bold, vendor-blend). The\n   baseline is always index 0; the result array has ≥3 elements including baseline.\n4. **Preview** — render a self-contained HTML gallery from the variants array.\n   Writes `\u003Cout>\u002Fpreview\u002Findex.html`. Uses Playwright screenshots when available;\n   falls back to color-swatch HTML when `AUTOSPEC_HARMONIZE_NO_PLAYWRIGHT=1` or\n   Playwright is absent.\n5. **Pick gate** — present the shortlisted variants to the operator via\n   `AskUserQuestion` and record their choice (see **Pick gate** section below).\n   `--no-live-preview` suppresses the live-preview offer. No winner → exits 0\n   without writing a migration spec.\n6. **Gen migration spec** — render a dated `docs\u002Fspecs\u002F\u003Cdate>-harmonize-\u003Cslug>-design.md`\n   from the chosen variant + inventory. Print the `\u002Fautospec-define \u003Cpath>`\n   handoff command so the operator can kick off implementation.\n\nThe orchestrator script (`harmonize.sh`) is **non-interactive**: the pick gate\nlives in this SKILL.md and is only active when running under a harness. When\n`harmonize.sh` is invoked directly (e.g. from a test), it uses the default pick\n(baseline or first non-baseline variant) for the migration spec without\nprompting.\n\n## Invocation\n\n```\n\u002Fautospec-harmonize [--root \u003Cdir>] [--url \u003Cu>] [--source-only]\n                    [--pages \u003Clist>] [--variants \u003Caxes>] [--num-variants \u003Cn>]\n                    [--no-live-preview] [--out \u003Cdir>]\n```\n\n- `--root \u003Cdir>` — the codebase root to analyze (defaults to current working directory).\n- `--url \u003Cu>` — extract tokens from a live URL via runtime extractor (falls back to source if unavailable).\n- `--source-only` — skip runtime extraction; always use source CSS\u002FSCSS.\n- `--pages \u003Clist>` — comma-separated list of URL paths to sample during runtime extraction.\n- `--variants \u003Caxes>` — comma-separated variant axes to generate beyond baseline (default: `minimal,high-contrast`).\n- `--num-variants \u003Cn>` — total number of variants to generate (including baseline; default: 3).\n- `--no-live-preview` — suppress the live-preview offer in the pick gate.\n- `--out \u003Cdir>` — output directory for all artifacts (default: `.autospec\u002Fharmonize\u002F\u003Cslug>`).\n\n## Stage scripts\n\nEach stage is a sibling script that the orchestrator shells out to. The\norchestrator resolves them from `${AUTOSPEC_SCRIPTS_DIR:-$HOME\u002F.autospec\u002Fscripts}`,\nfalling back to the script's own directory:\n\n| Stage | Script |\n|-------|--------|\n| Source extraction | `extract-source.mjs` |\n| Runtime extraction | `extract-runtime.mjs` |\n| Discover orchestration | `design-discover.sh` |\n| Generalize | `design-generalize.mjs` |\n| Variants | `design-variants.mjs` |\n| Preview | `design-preview.mjs` |\n| Migration spec | `gen-migration-spec.mjs` |\n\n## Pick gate\n\nAfter the preview stage, use `AskUserQuestion` to present the shortlist of\nvariants to the operator:\n\n1. Show each variant's `id`, `axis`, and a one-line `design_md` summary.\n2. Include the path to `\u003Cout>\u002Fpreview\u002Findex.html` so the operator can open it.\n3. If `--no-live-preview` is NOT set, offer to open the preview in a browser.\n4. Ask the operator to type the `id` of their preferred variant, or `none` to\n   exit without generating a migration spec.\n5. If the operator types `none` (or an empty response), print\n   `No variant selected — exiting without a migration spec.` and exit 0.\n6. Validate that the chosen `id` exists in the variants array. If invalid, ask\n   again (up to 3 attempts); on the third failure, exit 0 with an error message.\n7. Proceed to Stage 6 with the chosen variant `id`.\n\nWhen running `harmonize.sh` directly (non-interactive, no harness), skip this\ngate entirely and use the first non-baseline variant (or baseline if only one\nexists) as the default pick.\n\n## Stage failure handling\n\nEach stage failure emits its `code_health` line to stderr and continues where\npossible:\n\n- If **discovery** yields an empty token profile (no palette, type_scale, or\n  spacing entries), abort with exit code 1 and print\n  `code_health:harmonize_discover_empty — no design tokens found in \u003Croot>`.\n- If **generalize** fails, emit `code_health:harmonize_generalize_failed` and\n  abort.\n- If **variants** fails, emit `code_health:harmonize_variants_failed` and abort.\n- If **preview** fails (non-fatal), emit `code_health:harmonize_preview_failed`\n  and continue — the pick gate can still show the text summary.\n- If **gen-migration-spec** fails, emit `code_health:harmonize_spec_failed` and\n  report the error to the operator without aborting the skill run.\n\n## Output artifacts\n\nAll artifacts land under `--out \u003Cdir>`:\n\n| Path | Stage | Description |\n|------|-------|-------------|\n| `discovered-tokens.json` | Discover | Token profile (schema-validated) |\n| `inventory.md` | Discover | Human-readable inventory + inconsistency report |\n| `baseline.json` | Generalize | Baseline variant JSON |\n| `variants.json` | Variants | Full variants array JSON |\n| `preview\u002Findex.html` | Preview | Self-contained HTML gallery |\n| `docs\u002Fspecs\u002F\u003Cdate>-harmonize-\u003Cslug>-design.md` | Gen spec | Dated migration spec |\n",{"name":5,"description":7},"main","9e7f04357ff46ab731d4f56a4ac5ca5449c13bb0","skills\u002Fautospec-harmonize",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":53,"prompt":63,"zipAvailable":64},[54,57,60],{"tool":55,"command":56},"npx","npx skills add berlinguyinca\u002Fautospec --skill autospec-harmonize",{"tool":58,"command":59},"bunx","bunx skills add berlinguyinca\u002Fautospec --skill autospec-harmonize",{"tool":61,"command":62},"pnpm","pnpm dlx skills add berlinguyinca\u002Fautospec --skill autospec-harmonize","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002FSKILL.md",true,[66,72,78,82,86,90,94,98,102,106,110,114,118,122,126,130,136],{"path":67,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":70,"sourceHtmlUrl":71},"codex\u002Fprompt.md","REFERENCE","参考文档",11141,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002Fcodex\u002Fprompt.md",{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"install.sh","SCRIPT","脚本",11629,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002Finstall.sh",{"path":79,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":80,"sourceHtmlUrl":81},"opencode\u002Fagent.md",11536,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002Fopencode\u002Fagent.md",{"path":83,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":84,"sourceHtmlUrl":85},"README.md",4346,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002FREADME.md",{"path":87,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":88,"sourceHtmlUrl":89},"scripts\u002Fdesign-discover.sh",5820,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002Fscripts\u002Fdesign-discover.sh",{"path":91,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":92,"sourceHtmlUrl":93},"scripts\u002Fdesign-generalize.mjs",12705,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002Fscripts\u002Fdesign-generalize.mjs",{"path":95,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":96,"sourceHtmlUrl":97},"scripts\u002Fdesign-preview.mjs",8060,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002Fscripts\u002Fdesign-preview.mjs",{"path":99,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":100,"sourceHtmlUrl":101},"scripts\u002Fdesign-variants.mjs",12562,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002Fscripts\u002Fdesign-variants.mjs",{"path":103,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":104,"sourceHtmlUrl":105},"scripts\u002Fextract-runtime.mjs",8244,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002Fscripts\u002Fextract-runtime.mjs",{"path":107,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":108,"sourceHtmlUrl":109},"scripts\u002Fextract-source.mjs",7288,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002Fscripts\u002Fextract-source.mjs",{"path":111,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":112,"sourceHtmlUrl":113},"scripts\u002Ffetch-vendor.sh",1647,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002Fscripts\u002Ffetch-vendor.sh",{"path":115,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":116,"sourceHtmlUrl":117},"scripts\u002Fgen-migration-spec.mjs",8434,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002Fscripts\u002Fgen-migration-spec.mjs",{"path":119,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":120,"sourceHtmlUrl":121},"scripts\u002Fharmonize.sh",10015,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002Fscripts\u002Fharmonize.sh",{"path":123,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":124,"sourceHtmlUrl":125},"scripts\u002Flib\u002Fcolor.mjs",3536,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002Fscripts\u002Flib\u002Fcolor.mjs",{"path":127,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":128,"sourceHtmlUrl":129},"test-targets\u002Fmessy-app\u002Findex.html",797,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002Ftest-targets\u002Fmessy-app\u002Findex.html",{"path":131,"resourceType":132,"resourceTypeDesc":133,"sizeBytes":134,"sourceHtmlUrl":135},"test-targets\u002Fmessy-app\u002Fstyles.css","OTHER","其他",1253,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002Ftest-targets\u002Fmessy-app\u002Fstyles.css",{"path":137,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":138,"sourceHtmlUrl":139},"uninstall.sh",3927,"https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Fskills\u002Fautospec-harmonize\u002Funinstall.sh",[141,154,163,172,197,221],{"skillNo":142,"name":143,"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":144,"categories":145,"keywords":151,"publishedAt":39},"01M71RJHYMKPTC9AAPXWQ6F4RT","trio-pass-skill","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Flockstep-trio-pass\u002FSKILL.md",[146],{"categoryNo":147,"categoryName":148,"taxonomyType":149,"taxonomyTypeDesc":150},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[152,153],"trio","trio pass skill",{"skillNo":155,"name":156,"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":157,"categories":158,"keywords":160,"publishedAt":39},"01M71RJFBQ1KAF9XM3T3Y4VMSK","duo-pass-skill","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Flockstep-duo-pass\u002FSKILL.md",[159],{"categoryNo":147,"categoryName":148,"taxonomyType":149,"taxonomyTypeDesc":150},[161,162],"duo pass skill","duo",{"skillNo":164,"name":165,"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":166,"categories":167,"keywords":169,"publishedAt":39},"01M71RJDT1TB3P9TRWR6A534FB","duo-divergence-skill","https:\u002F\u002Fgithub.com\u002Fberlinguyinca\u002Fautospec\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Flockstep-duo-divergence\u002FSKILL.md",[168],{"categoryNo":147,"categoryName":148,"taxonomyType":149,"taxonomyTypeDesc":150},[170,162,171],"duo divergence skill","divergence",{"skillNo":173,"name":20,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":180,"publishedAt":39},"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",[177],{"categoryNo":178,"categoryName":179,"taxonomyType":149,"taxonomyTypeDesc":150},"01JBSEEDCAT000000000000015","视觉设计",[20,181,182,183,33,184,185,186,29,187,188,189,190,191,192,193,194,195,196,30],"ship a feature","end","issues","autonomous","auto","loop","across","design spec","merge","ship","implementation loop","github issues","feature","commits","repo","missing",{"skillNo":198,"name":199,"nameZh":6,"description":200,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":201,"categories":202,"keywords":203,"publishedAt":39},"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",[],[204,20,205,206,207,208,209,210,211,29,212,213,214,215,30,216,217,218,219,220],"autospec upgrade","upgrade","mutation","coverage","official","project","time","gating","angular","react","next","at","Next.js","one","with","behavior","latest",{"skillNo":222,"name":223,"nameZh":6,"description":224,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":225,"categories":226,"keywords":232,"publishedAt":39},"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",[227],{"categoryNo":228,"categoryName":229,"taxonomyType":230,"taxonomyTypeDesc":231},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[233,20,234,235,236,30,237,238,239,240,241,242,243,244,245,213,246,29,247],"ui audit","audit","autospec ui audit","ui","inventory","evidence","deterministic","route","ux","site","react router","navigation","application","needs","router"]