[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HQWXXMS00PR16REPEMVX42":3,"skill-same:01M6HQWXXMS00PR16REPEMVX42":91},{"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":45,"linkOnly":46,"markdownContent":47,"markdownBody":48,"frontMatter":49,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":55,"ownerHtmlUrl":56,"ownerBlogUrl":57,"ownerDescription":6,"updatedAt":58,"install":59,"resources":72},"01M6HQWXXMS00PR16REPEMVX42","reverse-spec-from-code",null,"Reverse-generate OpenSpec capability specs (openspec\u002Fspecs\u002F\u003Ccap>\u002Fspec.md) from code that lacks them, or reconcile an existing stale spec with `--refresh`, using parallel subagents. Fans out one blind generator per capability, audits each spec against the code for hallucinations, and promotes only on user confirm. Use on \"generate specs from code\", \"backfill openspec specs\", \"refresh a stale spec\".","BlackBeltTechnology\u002Fpi-agent-dashboard","BlackBeltTechnology","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F8101592?v=4","01M6HQDX7QAJA0QP4NYRYBMJ8A","BlackBelt Technology","01M6HQDXCC7719N9YDMQVH9JS6",348,"MIT","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fopenspec-workflow\u002F.pi\u002Fskills\u002Freverse-spec-from-code\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"code","reverse spec from code","reverse","spec","stale","capability","backfill","Existing","for","generator","with","openspec","cap","only","reconcile","use","subagents","user","refresh","parallel","generate","2026-11-10 10:12:30",false,"---\nname: reverse-spec-from-code\ndescription: 'Reverse-generate OpenSpec capability specs (openspec\u002Fspecs\u002F\u003Ccap>\u002Fspec.md) from code that lacks them, or reconcile an existing stale spec with `--refresh`, using parallel subagents. Fans out one blind generator per capability, audits each spec against the code for hallucinations, and promotes only on user confirm. Use on \"generate specs from code\", \"backfill openspec specs\", \"refresh a stale spec\".'\n---\n\n# reverse-spec-from-code\n\nTurn spec-less code into OpenSpec capability specs so `kb_search` has high-signal,\nconsistently-formatted behavioral documents to index. Tuned via a blind\ngenerate→judge loop against 6 real specs: requirement coverage 97%, scenario\ncoverage 91% (see `docs\u002Fresearch\u002Freverse-spec-from-code.md` for the tuning record\n+ a model-loss test across opus \u002F deepseek-flash \u002F haiku).\n\n> Scratch MUST live OUTSIDE `openspec\u002F` (kb indexes `openspec\u002F`). Use the\n> gitignored repo-root dir `.reverse-spec-scratch\u002F` — otherwise every draft\n> pollutes `kb_search` with duplicate spec chunks. Promotion MOVES the file\n> into `openspec\u002Fspecs\u002F` (the only kb-indexed copy).\n\n## When to use\n\n- A package\u002Fdirectory under `packages\u002F` has behavior but no `openspec\u002Fspecs\u002F\u003Ccap>\u002Fspec.md`.\n- You want to enrich `kb_search` (it indexes `openspec\u002F` markdown) with behavioral specs.\n- An existing spec is stale and you want a code-current reconciliation (`--refresh`).\n\nSkip for a single trivial file, or when the capability already has an accurate spec.\n\n## Core principle (the lever that matters)\n\n**A capability's contract is not confined to one file.** The single biggest\nquality driver is making each generator FOLLOW the behavioral contract across\nfile boundaries: every emitted message\u002Fevent, registry write, spawned\u002Fkilled\nprocess, config read, or DOM attribute is a contract with another component and\nmust be spec'd too. In tuning this moved requirement coverage from 40% to 95% on\nthe cross-cutting capability. The generator prompt (`prompts\u002Fgenerator.md`)\nenforces this in STEP 1 — do not weaken it.\n\n## Fitness, honestly\n\n\"Match an existing spec\" is a PROXY, not the goal. Real specs drift from code.\nThe goal is a spec that accurately describes **current** code and is searchable.\nTarget: high requirement coverage + **zero code-ungrounded hallucination**.\nCode-current divergence from a stale spec is a win, not a miss.\n\n## Procedure\n\n1. **Resolve target + scope.** User names a directory\u002Fpackage (e.g. `packages\u002Fserver`)\n   and optionally a single capability. Confirm the target path exists.\n\n2. **Discover capability boundaries.** Spawn ONE discovery subagent\n   (`prompts\u002Fdiscovery.md`, model `@compact` is fine) that clusters the target's\n   files into capabilities using the directory `AGENTS.md` tree (`kb agents \u003Cdir>`,\n   `kb_search --doc-type agents`) + grep. It returns a manifest:\n   `[{ capability, purpose_hint, files[] }]`. For a single-capability target you\n   may skip this and build the manifest by hand.\n\n3. **Skip already-specced capabilities.** For each manifest entry, if\n   `openspec\u002Fspecs\u002F\u003Ccapability>\u002Fspec.md` exists and `--refresh` was NOT requested,\n   drop it (report as skipped). With `--refresh`, keep it and reconcile.\n\n4. **Generate in parallel (blind).** Fan out ONE generator subagent per remaining\n   capability IN A SINGLE MESSAGE (`prompts\u002Fgenerator.md`). Each reads code only\n   — never an existing spec — and writes `.reverse-spec-scratch\u002F\u003Ccapability>\u002Fspec.md`.\n   Pass capability, purpose_hint, start files, and the output path. Model: a\n   fast\u002Fcheap model (`@fast`\u002F`@compact`) is viable AS LONG AS the format gate\n   (step 6.5) and the `@research` auditor run — see \"Model choice\" below.\n\n5. **Audit in parallel (code-grounding).** Fan out ONE auditor subagent per\n   generated spec IN A SINGLE MESSAGE (`prompts\u002Fauditor.md`, model `@research`).\n   Each verifies the generated spec against the ACTUAL code and returns strict\n   JSON: `hallucinated_requirements[]` (in spec, not in code),\n   `missing_behaviors[]` (in code, not in spec), `format_ok`, `verdict`\n   (pass|revise). No real spec is needed — the code is the oracle.\n\n6. **Revise if needed.** For any spec with `verdict: revise`, re-spawn its\n   generator with the auditor's findings appended (remove the listed\n   hallucinations, add the listed missing behaviors). One revise pass is usually\n   enough; re-audit only if the first audit was severe.\n\n6.5. **Format gate (`openspec validate`) — HARD, deterministic.** `openspec\n   validate` only reads specs under `openspec\u002Fspecs\u002F`, so validate each scratch\n   spec via a throwaway id, then delete it:\n   ```bash\n   for c in \u003Ccap1> \u003Ccap2> ...; do\n     d=\"openspec\u002Fspecs\u002F_rsfc-val-$c\"; mkdir -p \"$d\"\n     cp \".reverse-spec-scratch\u002F$c\u002Fspec.md\" \"$d\u002Fspec.md\"\n     openspec validate \"_rsfc-val-$c\" --type spec 2>&1 | grep -qi \"is valid\" \\\n       && echo \"$c: VALID\" || echo \"$c: INVALID\"\n     rm -rf \"$d\"\n   done\n   ```\n   Any spec that is INVALID is treated exactly like `verdict: revise` with reason\n   \"format: openspec validate failed\" — re-spawn its generator emphasizing the\n   FORMAT rule (no tables, no bold `**Scenario:**`, no numbered requirements),\n   then re-run this gate. A spec that fails validate is NEVER promoted. Cheap\n   generator models fail here most often — this gate is what makes them safe.\n\n7. **Present + promote on confirm.** Show the user: per-capability spec path,\n   requirement count, and audit + validate summary (skipped \u002F passed \u002F revised \u002F\n   valid). Only specs that BOTH audit-pass AND validate-pass are promotable. Use\n   `ask_user` (confirm or multiselect) to choose which to promote. On confirm,\n   MOVE `.reverse-spec-scratch\u002F\u003Ccap>\u002Fspec.md` → `openspec\u002Fspecs\u002F\u003Ccap>\u002Fspec.md`\n   (create the dir; move, don't copy, so no duplicate stays under an indexed\n   root). NEVER write `openspec\u002Fspecs\u002F` without explicit confirm.\n\n8. **Verify KB indexing.** After promotion, run `kb_search \"\u003Ca phrase from a new\n   spec>\"` to confirm the spec is discoverable. Report the result.\n\n## Subagent routing\n\n| Role       | Prompt                | Model            | Access      | Parallel |\n|------------|-----------------------|------------------|-------------|----------|\n| discovery  | prompts\u002Fdiscovery.md  | `@compact`       | read-only   | 1 pass   |\n| generator  | prompts\u002Fgenerator.md  | `@research` (max quality) or `@fast`\u002F`@compact` (cheap; needs gate) | read+write (scratch) | N in one message |\n| auditor    | prompts\u002Fauditor.md    | `@research` (keep strong — the safety net) | read-only   | N in one message |\n\nFan out generators (then auditors) as multiple `Agent` calls in a SINGLE message\nso they run concurrently. One capability per subagent — isolated context.\n\n### Model choice (from the model-loss test in docs\u002Fresearch\u002Freverse-spec-from-code.md)\n\nJudge\u002Fgenerator swap on the 6 ground-truth specs (judge held `@research`):\n\n| generator | req cov | scen cov | `openspec validate` |\n|---|---|---|---|\n| opus (`@research`) | 97% | 91% | 6\u002F6 |\n| deepseek-flash (`@fast`) + format directive | 96% | 90% | 6\u002F6 |\n| haiku (`@compact`), no directive | 88% | 81% | 3\u002F6 |\n\n- \"fast\" ≠ \"weak\": `@fast` (deepseek-flash) nearly matched opus on coverage.\n- Cheap models lose most on FORMAT and on the HARDEST cross-file capabilities —\n  the format gate (6.5) fixes the former; extra revise cycles fix the latter.\n- Recommended cost config: `@fast` generator + format gate + `@research` auditor\n  + revise loop ≈ opus quality at a fraction of the cost. Keep the auditor strong;\n  it is the hallucination safety net regardless of generator model.\n\n## Output format (what generators produce)\n\nFull-form OpenSpec spec (post-archive shape, NOT the `## ADDED Requirements` delta):\n\n```\n# \u003Ccapability> Specification\n\n## Purpose\n\u003C1-3 sentences>\n\n## Requirements\n### Requirement: \u003Cshort imperative name>\nThe \u003Csubject> SHALL \u003Cbehavioral obligation>.\n\n#### Scenario: \u003Cname>\n- **WHEN** \u003Ctrigger>\n- **THEN** \u003Cobservable outcome>\n- **AND** \u003Coptional>\n```\n\n## Pitfalls\n\n- **Under-scoped input** — feeding one file to a cross-cutting capability caps\n  coverage low no matter how good the prompt. Discovery must gather ALL files;\n  the generator must follow references. This is the #1 failure mode.\n- **Over-splitting** — without a grouping rule the generator emits many tiny\n  requirements. Prompt targets 3-8 grouped requirements with rich scenarios.\n- **Visual\u002Fdetail invention** — UI capabilities tempt the model to describe\n  pixels\u002Fcolors it did not confirm. The prompt forbids unconfirmed detail; the\n  auditor catches the rest.\n- **Clobbering real specs \u002F kb pollution** — scratch-first in the gitignored\n  repo-root `.reverse-spec-scratch\u002F` (NEVER under `openspec\u002F`, which kb indexes),\n  promote (move) only on confirm.\n- **Chasing 100% match to an existing spec** — the spec may be stale. The code\n  is the oracle; the auditor checks the code, not the old spec.\n- **Cheap-model format breaks** — smaller\u002Ffaster generators (`@fast`\u002F`@compact`)\n  tend to emit markdown tables, bold `**Scenario:**`, or numbered requirements\n  that FAIL `openspec validate`. The format directive in `prompts\u002Fgenerator.md`\n  plus the step-6.5 validate gate catch this; never promote a cheap-model spec\n  without running the gate.\n\n## Verification\n\n- Format gate (step 6.5) returned VALID for every promoted spec\n  (`openspec validate \u003Ccapability> --type spec` → \"is valid\"). This is a HARD\n  gate, not an advisory check — an invalid spec is never promoted.\n- Auditor returned `verdict: pass` (or `revise` was resolved) for every promoted spec.\n- `kb_search \"\u003Cphrase from a new spec>\"` returns the new spec.\n- No file under `openspec\u002Fspecs\u002F` was written without user confirm.\n","# reverse-spec-from-code\n\nTurn spec-less code into OpenSpec capability specs so `kb_search` has high-signal,\nconsistently-formatted behavioral documents to index. Tuned via a blind\ngenerate→judge loop against 6 real specs: requirement coverage 97%, scenario\ncoverage 91% (see `docs\u002Fresearch\u002Freverse-spec-from-code.md` for the tuning record\n+ a model-loss test across opus \u002F deepseek-flash \u002F haiku).\n\n> Scratch MUST live OUTSIDE `openspec\u002F` (kb indexes `openspec\u002F`). Use the\n> gitignored repo-root dir `.reverse-spec-scratch\u002F` — otherwise every draft\n> pollutes `kb_search` with duplicate spec chunks. Promotion MOVES the file\n> into `openspec\u002Fspecs\u002F` (the only kb-indexed copy).\n\n## When to use\n\n- A package\u002Fdirectory under `packages\u002F` has behavior but no `openspec\u002Fspecs\u002F\u003Ccap>\u002Fspec.md`.\n- You want to enrich `kb_search` (it indexes `openspec\u002F` markdown) with behavioral specs.\n- An existing spec is stale and you want a code-current reconciliation (`--refresh`).\n\nSkip for a single trivial file, or when the capability already has an accurate spec.\n\n## Core principle (the lever that matters)\n\n**A capability's contract is not confined to one file.** The single biggest\nquality driver is making each generator FOLLOW the behavioral contract across\nfile boundaries: every emitted message\u002Fevent, registry write, spawned\u002Fkilled\nprocess, config read, or DOM attribute is a contract with another component and\nmust be spec'd too. In tuning this moved requirement coverage from 40% to 95% on\nthe cross-cutting capability. The generator prompt (`prompts\u002Fgenerator.md`)\nenforces this in STEP 1 — do not weaken it.\n\n## Fitness, honestly\n\n\"Match an existing spec\" is a PROXY, not the goal. Real specs drift from code.\nThe goal is a spec that accurately describes **current** code and is searchable.\nTarget: high requirement coverage + **zero code-ungrounded hallucination**.\nCode-current divergence from a stale spec is a win, not a miss.\n\n## Procedure\n\n1. **Resolve target + scope.** User names a directory\u002Fpackage (e.g. `packages\u002Fserver`)\n   and optionally a single capability. Confirm the target path exists.\n\n2. **Discover capability boundaries.** Spawn ONE discovery subagent\n   (`prompts\u002Fdiscovery.md`, model `@compact` is fine) that clusters the target's\n   files into capabilities using the directory `AGENTS.md` tree (`kb agents \u003Cdir>`,\n   `kb_search --doc-type agents`) + grep. It returns a manifest:\n   `[{ capability, purpose_hint, files[] }]`. For a single-capability target you\n   may skip this and build the manifest by hand.\n\n3. **Skip already-specced capabilities.** For each manifest entry, if\n   `openspec\u002Fspecs\u002F\u003Ccapability>\u002Fspec.md` exists and `--refresh` was NOT requested,\n   drop it (report as skipped). With `--refresh`, keep it and reconcile.\n\n4. **Generate in parallel (blind).** Fan out ONE generator subagent per remaining\n   capability IN A SINGLE MESSAGE (`prompts\u002Fgenerator.md`). Each reads code only\n   — never an existing spec — and writes `.reverse-spec-scratch\u002F\u003Ccapability>\u002Fspec.md`.\n   Pass capability, purpose_hint, start files, and the output path. Model: a\n   fast\u002Fcheap model (`@fast`\u002F`@compact`) is viable AS LONG AS the format gate\n   (step 6.5) and the `@research` auditor run — see \"Model choice\" below.\n\n5. **Audit in parallel (code-grounding).** Fan out ONE auditor subagent per\n   generated spec IN A SINGLE MESSAGE (`prompts\u002Fauditor.md`, model `@research`).\n   Each verifies the generated spec against the ACTUAL code and returns strict\n   JSON: `hallucinated_requirements[]` (in spec, not in code),\n   `missing_behaviors[]` (in code, not in spec), `format_ok`, `verdict`\n   (pass|revise). No real spec is needed — the code is the oracle.\n\n6. **Revise if needed.** For any spec with `verdict: revise`, re-spawn its\n   generator with the auditor's findings appended (remove the listed\n   hallucinations, add the listed missing behaviors). One revise pass is usually\n   enough; re-audit only if the first audit was severe.\n\n6.5. **Format gate (`openspec validate`) — HARD, deterministic.** `openspec\n   validate` only reads specs under `openspec\u002Fspecs\u002F`, so validate each scratch\n   spec via a throwaway id, then delete it:\n   ```bash\n   for c in \u003Ccap1> \u003Ccap2> ...; do\n     d=\"openspec\u002Fspecs\u002F_rsfc-val-$c\"; mkdir -p \"$d\"\n     cp \".reverse-spec-scratch\u002F$c\u002Fspec.md\" \"$d\u002Fspec.md\"\n     openspec validate \"_rsfc-val-$c\" --type spec 2>&1 | grep -qi \"is valid\" \\\n       && echo \"$c: VALID\" || echo \"$c: INVALID\"\n     rm -rf \"$d\"\n   done\n   ```\n   Any spec that is INVALID is treated exactly like `verdict: revise` with reason\n   \"format: openspec validate failed\" — re-spawn its generator emphasizing the\n   FORMAT rule (no tables, no bold `**Scenario:**`, no numbered requirements),\n   then re-run this gate. A spec that fails validate is NEVER promoted. Cheap\n   generator models fail here most often — this gate is what makes them safe.\n\n7. **Present + promote on confirm.** Show the user: per-capability spec path,\n   requirement count, and audit + validate summary (skipped \u002F passed \u002F revised \u002F\n   valid). Only specs that BOTH audit-pass AND validate-pass are promotable. Use\n   `ask_user` (confirm or multiselect) to choose which to promote. On confirm,\n   MOVE `.reverse-spec-scratch\u002F\u003Ccap>\u002Fspec.md` → `openspec\u002Fspecs\u002F\u003Ccap>\u002Fspec.md`\n   (create the dir; move, don't copy, so no duplicate stays under an indexed\n   root). NEVER write `openspec\u002Fspecs\u002F` without explicit confirm.\n\n8. **Verify KB indexing.** After promotion, run `kb_search \"\u003Ca phrase from a new\n   spec>\"` to confirm the spec is discoverable. Report the result.\n\n## Subagent routing\n\n| Role       | Prompt                | Model            | Access      | Parallel |\n|------------|-----------------------|------------------|-------------|----------|\n| discovery  | prompts\u002Fdiscovery.md  | `@compact`       | read-only   | 1 pass   |\n| generator  | prompts\u002Fgenerator.md  | `@research` (max quality) or `@fast`\u002F`@compact` (cheap; needs gate) | read+write (scratch) | N in one message |\n| auditor    | prompts\u002Fauditor.md    | `@research` (keep strong — the safety net) | read-only   | N in one message |\n\nFan out generators (then auditors) as multiple `Agent` calls in a SINGLE message\nso they run concurrently. One capability per subagent — isolated context.\n\n### Model choice (from the model-loss test in docs\u002Fresearch\u002Freverse-spec-from-code.md)\n\nJudge\u002Fgenerator swap on the 6 ground-truth specs (judge held `@research`):\n\n| generator | req cov | scen cov | `openspec validate` |\n|---|---|---|---|\n| opus (`@research`) | 97% | 91% | 6\u002F6 |\n| deepseek-flash (`@fast`) + format directive | 96% | 90% | 6\u002F6 |\n| haiku (`@compact`), no directive | 88% | 81% | 3\u002F6 |\n\n- \"fast\" ≠ \"weak\": `@fast` (deepseek-flash) nearly matched opus on coverage.\n- Cheap models lose most on FORMAT and on the HARDEST cross-file capabilities —\n  the format gate (6.5) fixes the former; extra revise cycles fix the latter.\n- Recommended cost config: `@fast` generator + format gate + `@research` auditor\n  + revise loop ≈ opus quality at a fraction of the cost. Keep the auditor strong;\n  it is the hallucination safety net regardless of generator model.\n\n## Output format (what generators produce)\n\nFull-form OpenSpec spec (post-archive shape, NOT the `## ADDED Requirements` delta):\n\n```\n# \u003Ccapability> Specification\n\n## Purpose\n\u003C1-3 sentences>\n\n## Requirements\n### Requirement: \u003Cshort imperative name>\nThe \u003Csubject> SHALL \u003Cbehavioral obligation>.\n\n#### Scenario: \u003Cname>\n- **WHEN** \u003Ctrigger>\n- **THEN** \u003Cobservable outcome>\n- **AND** \u003Coptional>\n```\n\n## Pitfalls\n\n- **Under-scoped input** — feeding one file to a cross-cutting capability caps\n  coverage low no matter how good the prompt. Discovery must gather ALL files;\n  the generator must follow references. This is the #1 failure mode.\n- **Over-splitting** — without a grouping rule the generator emits many tiny\n  requirements. Prompt targets 3-8 grouped requirements with rich scenarios.\n- **Visual\u002Fdetail invention** — UI capabilities tempt the model to describe\n  pixels\u002Fcolors it did not confirm. The prompt forbids unconfirmed detail; the\n  auditor catches the rest.\n- **Clobbering real specs \u002F kb pollution** — scratch-first in the gitignored\n  repo-root `.reverse-spec-scratch\u002F` (NEVER under `openspec\u002F`, which kb indexes),\n  promote (move) only on confirm.\n- **Chasing 100% match to an existing spec** — the spec may be stale. The code\n  is the oracle; the auditor checks the code, not the old spec.\n- **Cheap-model format breaks** — smaller\u002Ffaster generators (`@fast`\u002F`@compact`)\n  tend to emit markdown tables, bold `**Scenario:**`, or numbered requirements\n  that FAIL `openspec validate`. The format directive in `prompts\u002Fgenerator.md`\n  plus the step-6.5 validate gate catch this; never promote a cheap-model spec\n  without running the gate.\n\n## Verification\n\n- Format gate (step 6.5) returned VALID for every promoted spec\n  (`openspec validate \u003Ccapability> --type spec` → \"is valid\"). This is a HARD\n  gate, not an advisory check — an invalid spec is never promoted.\n- Auditor returned `verdict: pass` (or `revise` was resolved) for every promoted spec.\n- `kb_search \"\u003Cphrase from a new spec>\"` returns the new spec.\n- No file under `openspec\u002Fspecs\u002F` was written without user confirm.\n",{"name":5,"description":7},"develop","fb9a5af356f540de4839ef851ebbe14bcce64c0f","packages\u002Fopenspec-workflow\u002F.pi\u002Fskills\u002Freverse-spec-from-code",56,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard","https:\u002F\u002Fpi-dashboard.dev\u002F","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology","https:\u002F\u002Fwww.blackbelt.hu","2026-11-12 23:37:37",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add BlackBeltTechnology\u002Fpi-agent-dashboard --skill reverse-spec-from-code",{"tool":65,"command":66},"bunx","bunx skills add BlackBeltTechnology\u002Fpi-agent-dashboard --skill reverse-spec-from-code",{"tool":68,"command":69},"pnpm","pnpm dlx skills add BlackBeltTechnology\u002Fpi-agent-dashboard --skill reverse-spec-from-code","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fopenspec-workflow\u002F.pi\u002Fskills\u002Freverse-spec-from-code\u002FSKILL.md",true,[73,79,83,87],{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"prompts\u002Fauditor.md","REFERENCE","参考文档",1336,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fopenspec-workflow\u002F.pi\u002Fskills\u002Freverse-spec-from-code\u002Fprompts\u002Fauditor.md",{"path":80,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":81,"sourceHtmlUrl":82},"prompts\u002Fdiscovery.md",1752,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fopenspec-workflow\u002F.pi\u002Fskills\u002Freverse-spec-from-code\u002Fprompts\u002Fdiscovery.md",{"path":84,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":85,"sourceHtmlUrl":86},"prompts\u002Fgenerator.md",3467,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fopenspec-workflow\u002F.pi\u002Fskills\u002Freverse-spec-from-code\u002Fprompts\u002Fgenerator.md",{"path":88,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":89,"sourceHtmlUrl":90},"prompts\u002Fjudge.md",1395,"https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fopenspec-workflow\u002F.pi\u002Fskills\u002Freverse-spec-from-code\u002Fprompts\u002Fjudge.md",[92,123,153,175,199,221],{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":103,"publishedAt":45},"01M6HQYQ5B82AM5T9Y299S9CFY","youtube-srt","Download YouTube subtitles (SRT + timestamped TXT) for a channel, playlist or video via yt-dlp, no media download; optionally mine them into a categorized catalog (e.g. AI models by function, open weights, local runnability, hardware tier). Use on \"download the srt of this video\", \"transcripts of channel X for the last N months\", \"catalog the models AI Search talked about\", \"update docs\u002Fmodels\".","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-transcription\u002F.pi\u002Fskills\u002Fyoutube-srt\u002FSKILL.md",[98],{"categoryNo":99,"categoryName":100,"taxonomyType":101,"taxonomyTypeDesc":102},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[104,105,106,107,108,109,110,111,112,113,114,39,115,116,117,118,119,120,121,32,122],"youtube","srt","youtube srt","update","search","subtitles","dlp","Video","Media","open","catalog","update docs","yt-dlp","local","mine","via","ai models","last","media download",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":133,"publishedAt":45},"01M6HQYJBKSXR55T5RSYNJQG4D","video-transcription","Transcribe video and audio files to SRT subtitles with speaker diarization using the Soniox (default) or AssemblyAI API. Use when the user wants to transcribe meetings, videos, or audio files. Supports MKV, MP4, MOV, M4A, MP3. Triggers on \"\u002Ftranscribe\", \"transcribe my meetings\", \"transcribe videos in ~\u002FMovies\", or any request to convert audio\u002Fvideo to text.","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-transcription\u002F.pi\u002Fskills\u002Fvideo-transcription\u002FSKILL.md",[129,132],{"categoryNo":130,"categoryName":131,"taxonomyType":101,"taxonomyTypeDesc":102},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":99,"categoryName":100,"taxonomyType":101,"taxonomyTypeDesc":102},[111,134,135,136,109,137,138,139,140,141,142,39,143,144,145,146,34,147,148,105,149,150,151,152],"transcription","video transcription","transcribe","api","Audio","convert","mp4","text","meetings","files","default","mp3","triggers","videos","assemblyai","my","srt subtitles","request","when",{"skillNo":154,"name":155,"nameZh":6,"description":156,"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":159,"publishedAt":45},"01M6HQYECMVDC5TDHHW22VC5RX","speaker-id","Name anonymous diarized SRT speakers from a persistent local voiceprint library and repair speaker drift; local, CPU-only, no API key. Triggers \"who is speaker 2\", \"put names on the transcript\", \"label the meeting SRT\", \"the diarization split one person into three\", \"enroll my voice\". Backed by the pi-voiceid CLI.","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-transcription\u002F.pi\u002Fskills\u002Fspeaker-id\u002FSKILL.md",[],[160,161,162,163,137,164,165,37,166,167,168,117,146,169,170,171,172,105,173,174],"id","speaker id","cli","transcript","voice","pi","three","drift","repair","name","CPU","meeting","anonymous","split","person",{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":184,"publishedAt":45},"01M6HQYAZWDXE9QJEG592E5PXK","veo-showreel-production-kit","Turn a video timeline + voiceover into a reproducible, sliceable Veo 3.1 prompt package with a consistency anchor and AI storyboard sketches.","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-production\u002F.pi\u002Fskills\u002Fveo-showreel-production-kit\u002FSKILL.md",[181],{"categoryNo":182,"categoryName":183,"taxonomyType":101,"taxonomyTypeDesc":102},"01JBSEEDCAT000000000000023","Skill与智能体开发",[185,186,187,188,189,190,191,111,192,193,194,195,34,196,197,198],"Production","veo","kit","veo showreel production kit","package","Reproducible","timeline","prompt","voiceover","storyboard","anchor","consistency","veo 3","2026",{"skillNo":200,"name":201,"nameZh":6,"description":202,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":203,"categories":204,"keywords":207,"publishedAt":45},"01M6HQY6TJ0X1ADDKYPMVJY6NV","veo-generator","Render a scripted video project into mp4 clips with the Google Veo 3.1 API. Reads a project's shot package (shots\u002F*.md), one clip per camera cut, reusing each shot's prompt and sketch — world anchor only with `--with-reference`, seed unless `--no-seed`. Use on \"render the Veo video for \u003Cproject>\", \"generate the videos from the shot scripts\", \"make the clips with Veo\".","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-production\u002F.pi\u002Fskills\u002Fveo-generator\u002FSKILL.md",[205,206],{"categoryNo":99,"categoryName":100,"taxonomyType":101,"taxonomyTypeDesc":102},{"categoryNo":182,"categoryName":183,"taxonomyType":101,"taxonomyTypeDesc":102},[186,33,208,209,44,189,137,111,140,192,39,210,37,211,212,213,214,215,195,216,217,218,219,34,220,32,197],"veo generator","google","clip","sketch","camera","world","seed","project","cut","scripts","make","render","google veo",{"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":227,"publishedAt":45},"01M6HQY1K2NZJ3B2YHSJJPPVAF","hyperframes-showreel","Turn real screen and site footage into a rhythmic showreel rendered with HyperFrames: sampling, edit script, redacted clips, a generated composition, Veo only as additive FX, music edit + camera punches, delivery render and export QA. Use on \"make a showreel from these recordings\", \"build the HyperFrames video\", \"assemble the footage edit\", \"render and QA the showreel\".","https:\u002F\u002Fgithub.com\u002FBlackBeltTechnology\u002Fpi-agent-dashboard\u002Fblob\u002Fdevelop\u002Fpackages\u002Fvideo-production\u002F.pi\u002Fskills\u002Fhyperframes-showreel\u002FSKILL.md",[],[228,229,230,111,231,232,233,39,234,235,236,37,237,238,239,240,241,219,34,242],"hyperframes","hyperframes showreel","qa","Composition","edit","generated","assemble","export","sampling","build","delivery","as","fx","screen","script"]