基于 SOC 职业分类
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/meridian-online/orbit --skill distill命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
Audit AC-to-test traceability — find untested ACs, orphaned test prefixes, and coverage gaps
Write a feature card — capture who needs what, why, and expected behaviours as scenarios
Explore a vague idea through Q&A — capture what good looks like as an interview record for /orb:spec
| name | distill |
| description | Extract capability cards from source material — files, directories, or a whole project |
| argument-hint | [file_or_dir] |
| allowed-tools | Bash Read Edit Write AskUserQuestion Glob Grep |
Extract structured feature cards from source material. Takes a memo, a document, a directory, or a whole project and identifies the capabilities it describes, presenting them as a batch for review before anything is written to disk.
/orb:distill <scope>
Where <scope> is one of:
.orbit/memos/2026-04-07-progress.md or .orbit/specs/topic/interview.mddocs/ or . (the whole project)"the readme, docs, git history and specs"Ideas arrive as freeform text. Turning them into actionable cards currently requires a full /orb:card interview per feature. Distill bridges the gap — it reads what you've already written and extracts cards from it, so existing work product becomes actionable without re-interviewing.
Interpret the author's $ARGUMENTS to determine what to read:
When scope spans multiple artifacts, build a working set of all the material before extracting. The extraction step operates on the aggregate, not file-by-file.
Distill works in three phases: Draft → Review → Write. State this upfront when presenting results so the author knows the process:
"I've drafted N cards. Nothing is written to disk until you approve the final set. Let's review them together first."
Nothing touches disk until the author explicitly approves the final set. This is the core contract. Cards exist only in the conversation until the write phase.
Before drafting, run orbit overview to see the project's existing shape (cards-by-maturity, most-connected card, orphans) and orbit card tree <id> on any card the source material seems adjacent to — this surfaces capabilities the new draft might overlap with, before the draft is written. The substrate is the canonical inventory; distilling against it avoids duplicates.
Analyse the source material and identify distinct features. A "feature" is a capability the product provides — something a user can do or observe.
The first-principles lens:
Always ask "what does this product do?" — not "what's planned next?" You are describing capabilities, not mining for TODOs. Even when the source material contains roadmap items, TODO comments, or planned enhancements, distill through the lens of what the user gets, not what the developer has left to build.
For example:
Per-candidate classification — capability or choice?
For each candidate distillation, ask: is this a new capability the product provides, or a choice about how an existing capability is implemented? If the latter (e.g. "should X live in bash or rust", "schema choice for Y", "review pattern Z", library or implementation-surface decisions), it belongs as a MADR choice file at .orbit/choices/NNNN-<slug>.yaml, not a card. The capability is unchanged; only the implementation surface is being decided. Worked example: a memo arguing for orbit spec promote to live in rust is choice-shape, not card-shape.
Surface choice-shape distillations in the Review phase the same way as cards, but flag them as choice (not card) in the numbered list so the author can confirm routing before the Write phase. See .orbit/choices/0001-progressive-spec-review.yaml for choice file shape.
Rules:
Check for overlap with existing cards: Before drafting, run a keyword scan (see /orb:keyword-scan) against .orbit/cards/ using terms from the source material. If existing cards already describe a capability you're about to draft, note the overlap — it may mean updating an existing card rather than creating a new one. Surface overlaps during the Review phase.
Draft ALL cards before presenting any of them. Each card uses the standard YAML format:
feature: "<short feature name>"
as_a: "<role>"
i_want: "<desired outcome>"
so_that: "<reason/benefit>"
scenarios:
- name: "<scenario name>"
given: "<precondition>"
when: "<action or event>"
then: "<observable outcome>"
source_lines: "<quoted passage from source>"
goal: "<current measurable target>" # optional — what success looks like right now
maturity: "planned" # planned | emerging | established
specs: [] # specs that have addressed this capability
references:
- "<source artifact path(s)>"
Critical rules for card content:
source_lines field quotes the originating passage. If you can't point to a passage that supports a scenario, don't include that scenario.source_lines is mandatory on every scenario. It must quote text that exists verbatim (or near-verbatim) in a source artifact. When scope spans multiple files, prefix with the file path: "README.md: Detects 120+ semantic types". This is the mechanically verifiable link between the card and its source.references always includes the source artifacts. Every card produced by distill includes the input scope in its references list. For single-file scope, this is the file path. For broader scope, list the key artifacts the card was extracted from./orb:card — what the user observes, not how it's built.Present all drafted cards as a numbered batch. The author sees the complete taxonomy before committing to anything.
Presentation format:
Drafted N card(s) from <scope description>. Nothing is written to disk yet.
1. <feature name> — <one-line summary>
2. <feature name> — <one-line summary>
...
Then show the full YAML for each card, numbered to match.
After presenting the batch, surface observations:
Use AskUserQuestion to invite feedback:
"Review the set above. You can ask me to merge, split, drop, rename, or edit any cards. When the set looks right, say 'write' and I'll save them all."
The author's feedback applies to the batch as a whole. Common operations:
After applying changes, re-present the updated set with the same numbered format. Continue until the author says "write" or equivalent.
Edits and source_lines: If the author requests adding a new scenario that has no corresponding passage in the source material, set source_lines to "author-directed during review". The extract-not-invent rule applies to the initial extraction — author-directed edits are explicitly authored, not LLM-invented.
When the author approves the final set:
.orbit/cards/ directory to determine the next available NNNN number. If .orbit/cards/ does not exist, create it and start at 0001..orbit/cards/NNNN-<slug>.yamlDistill complete:
Scope: <scope description>
Written: N card(s)
- .orbit/cards/NNNN-<slug>.yaml
- .orbit/cards/NNNN-<slug>.yaml
...
Dropped: M card(s) during review
.orbit/memos/, delete each consumed memo:
git rm .orbit/memos/<memo-file>
Only delete memos that produced at least one card in the approved set. The cards' references field preserves provenance; git history preserves the original content.Card numbering is determined at write time. This is a single-user workflow — concurrent numbering is a known limitation, not a bug to solve.
.orbit/topology/ exists and is populated (the canonical predicate per choice 0025 — substrate-folder shape), ask: did any of the newly-written cards correspond to a subsystem-level capability (a multi-file area with its own data shape, wiring, and operational surface) — rather than a prose, UX, or single-file change? If yes, invoke /orb:topology write-mode against the relevant subsystem name so the topology substrate accretes alongside the new card. This is quality-gated — only fire when the distillation genuinely describes a subsystem, not on every distill.If any cards were written, suggest next step: /orb:tabletop to refine a card into a spec.
/orb:card — distill produces the same YAML format, so distilled cards are interchangeable with interview-created cards.orbit/memos/ — the primary input source; consumed memos are deleted after card extraction (§5 step 4). Git history preserves the original content/orb:tabletop — the natural next step after distilling a card/orb:discovery — interview.md files from discovery sessions are valid distill inputsNext step: Run /orb:tabletop on an approved card to work out the technical approach.