Imported from WoJiSama/skill-based-architecture (
SKILL.md). Install upstream withnpx skills add WoJiSama/skill-based-architecture. Copyright stays with the author.
Skill-Based Architecture
Restructure oversized single-file Skills or scattered project rules into a well-organized Skill directory. Builds on the official minimal Agent Skill contract (name + description) and kicks in when a single small SKILL.md is no longer enough.
When to Use
- A single SKILL.md exceeds ~150 lines, mixing rules, workflows, and background material
- Project rules are scattered across
AGENTS.md,CLAUDE.md,CODEX.md,.cursor/rules/,.claude/, etc. - User explicitly requests Skill-based architecture or rule consolidation
When NOT to Use
- Temporary repos with no durable instruction or task-routing need
- Teams with a working documentation system that do not want to migrate
- Do not force structured folders onto a small project; an explicit SBA request
may still materialize a complete direct
SKILL.mdcarrier
Progressive Rigor
Grow only under pressure. The materializer derives Single-file,
Folder-light, or Full/broad internally from target evidence; users do
not select a tier, profile, capability pack, or install mode. routing.yaml,
Task Execution, Task Closure, maintenance checks, and each harness surface need
their own routing/loading/ownership pressure. Split by abstraction (骨架/肉)
when content tangles invariant design theory with current-code facts: abstract
theory → architecture/, code maps → references/, house style →
conventions/, per-module landmines → gotchas/ (methodology stays in
rules/). Downgrade when content shrinks. Details:
references/progressive-rigor.md.
Evidence-Selected Structure
# direct
skills/<name>/SKILL.md
# folder-light or broad: only admitted owners/directories
skills/<name>/{SKILL.md,rules/,workflows/,references/,scripts/}
# routing.yaml appears only when route data has an independent owner
# root/tool entry and registration surfaces appear only for proven readers
Existing root entries are preserved. Emitted routed entries use a generated
routing.yaml bootstrap; direct entries point to the sole SKILL.md procedure.
Cursor registration exists only when Cursor is detected, declared, currently
used, or explicitly requested. See REFERENCE.md for sources.
Core Principles
- Single concise entry —
SKILL.mdkeeps a dual budget: description ≤ 25 lines (trigger phrases + activation) + body ≤ 90 lines (navigation). It navigates, not exhausts. ✓ Check: smoke-test reports both separately; over either → split intent clusters / move detail to sub-files. - One skill folder when a folder is admitted — folder-light and broad results keep formal docs under
skills/<name>/; a direct result may remain a complete singleSKILL.mdcarrier. ✓ Check: no emitted root entry becomes a second rule/workflow owner. - Rules ≠ Flows —
rules/for constraints,workflows/for procedures. ✓ Check: any numbered steps inrules/? Any "always/never" inworkflows/? Either = mixing. - Routing.yaml as source when admitted — a direct carrier owns its sole
route in
SKILL.md; multiple/shared routes live only inrouting.yaml, with routed shells generated from it. ✓ Check: is there an independent selector or consumer that justifies the manifest, and does its fitted sync check pass? - Harness surfaces follow readers — create/merge only entries and registrations supported by existing files/config, the current harness, repository/team declaration, or an explicit request. ✓ Check: can every emitted surface name its reader, and was every existing entry preserved?
- Progressive Rigor — three carriers (Single-file / Folder-light / Full) grow only under pressure and are not user package choices. ✓ Check: can you name the independent responsibility that forced every generated file?
- Description = coarse activation — domain boundary + real user trigger phrases; never enumerate workflow keywords nor summarize a workflow's steps — a step-summary becomes a shortcut the agent runs instead of reading the body (ref). ✓ Check: (a) can
routing.yamltask routes change without rewriting the description? (b) does the description or any route label carry HOW an agent could act on without opening the body/workflow? "no" to (a) or "yes" to (b) → fix. - Gotchas are highest-value — maintain costly pitfalls actively; keep them discoverable. ✓ Check: is each high-cost gotcha activated by the admitted route owner (
SKILL.mdorrouting.yaml), not only buried inreferences/? - Progressive disclosure — every loaded file needs an independent task-time reason; conditional content leaves the startup read set, and files every real caller co-loads should merge unless ownership/generation requires separate storage. ✓ Check: for each route read, can you name a request that needs it now and a next action it changes? No → conditionally route, merge, or remove it.
- Task Execution + Closure — after route selection, only one clear read-only or fixed-contract maintenance action/check with no new desired behavior executes directly. Any request that adds or changes user-visible behavior, a business flow/state, or an external contract follows
requirement-ready -> Task Anchor -> implementation-ready -> Native Plan -> mutation: an incomplete Requirement returns understanding, real risk/conflict, and the minimum normative question; a clear one needs no ceremonial confirmation; code owner and Current -> Target are proven before implementation steps. The Requirement is the target, the Anchor is its Goal/Done When/Boundaries projection, and the Plan is only its revisable implementation means. Present alignment proportionally, do not repeat visible native steps, and run a compact Anchor Checkpoint before every main step. Enter the applicable completion owner: a simple workflow may inline fitted verification/AAR/completion, while an independent Task Closure owner is materialized only when its own lifecycle pressure is admitted (ref). Workflow remains the domain procedure; Native Plan is only this Session's runtime step owner, with no planning-file persistence. ✓ Check: immediately before mutation, can you name the governing Requirement, Task Anchor projection, proven Current -> Target binding, active Plan step, and applicable completion proof without letting the Plan redefine its target? - Durable-record rule — generic records generalize across projects; business global models stay project-specific but must survive implementation replacement (ref). ✓ Check: use the destination's test—cross-project pattern or cross-implementation business truth—without mixing code details into either.
- Self-maintenance — line counts signal evaluation, not automatic action. Split only for independently selected tasks; merge files universally co-loaded/co-changed unless ownership or generation explains the boundary. ✓ Check: can the before/after load matrix prove less irrelevant reading without losing definitions, conditions, boundaries, or reasons?
- Activation over storage — content in
references/alone is not "captured"; it must be on the task path and change what the agent does when read. Reached-but-inert (correct, on-route, yet the agent would have proceeded identically without it) is a distinct failure from absent or unreachable — and no structural gate (orphan / route-reachability / smoke-test) can see it, only judgment can. ✓ Check: (a) trace the normal route — Agent hits the entry without hunting? (b) does hitting it change the next action — a file it now reads, a check it now runs, a step it now skips? "no" to either → stored, not activated. - Token efficiency — Always Read defaults to empty; every addition needs proof that all real tasks require it before workflow selection. Domain and lifecycle knowledge loads only when evidence or a phase boundary can change the next action. ✓ Check: can any startup read be delayed without changing the first workflow decision? If yes, move it to that workflow checkpoint.
- Rationalizations Table — captures verbatim excuses from real pressure-test failures, organic or proven by a baseline run before shipping (ref, Phase 9). ✓ Check: every row traces to a real failure — no failure observed and unwilling to baseline it → imagined-pain, drop it.
- Response discipline — output short, precise, direct answers; avoid process narration, self-congratulation, gratuitous confirmations, and requirement restatement. Correct objective errors neutrally; do not infer user stance. ✓ Check: does each sentence serve the explicit request? No → delete it.
- Proof claims stay separated — fitted structural checks, source-disposition migration evidence, and live Agent behavior prove different things. Green structure cannot be promoted into semantic or behavioral correctness. ✓ Check: does the final claim name the exact layer actually run, and report unavailable live evidence as no verdict?
Common Pitfalls
- Missing admitted harness surface — A project proves a Cursor/Claude/etc. reader but its fitted registration/entry is absent → that harness never discovers the formal owner. The opposite error is emitting every harness without evidence and imposing permanent maintenance cost.
- Wrong routing carrier — A routed shell says only "go read SKILL.md"
without the generated
routing.yamlbootstrap, or a direct project gains an empty manifest merely for uniformity → either recovery breaks or false machinery appears. - Vague / wrong-scope description — Description is passive, wrong-language, too narrow ("fix bug" only), or bloated with every workflow keyword → skill misses natural requests or over-fires; keep description domain-level and route tasks in SKILL.md
- Stored but not activated — or activated but inert — Costly pitfall recorded in
references/but not surfaced in an owning workflow checkpoint or canonical route when task selection changes → future agents still miss it. Subtler form: it is on the route and gets read, but it's "correct but inert" — written as a background fact, not as a next action — so the agent reads it and proceeds unchanged. Reachable ≠ useful; the entry must change what the agent does, not merely be present and correct - Completion responsibility lost during materialization — Agent considers
itself "done" after main work even though the admitted workflow/Closure owner
requires fitted verification or AAR. A simple workflow may own that behavior
inline; an independent
task-closure.mdis not required merely for form. Pure Q&A/read-only tasks remain exempt. - Project-specific records — Lessons written as project narratives ("in our product module, we found…") instead of reusable knowledge → useless outside current context; apply generalization rule before recording
- No SessionStart hook on long sessions —
/clearor/compactsilently drops SKILL.md from context; agent loses all routing and protocol awareness without the user noticing → install SessionStart hook if your harness supports it (see references/thin-shells.md § SessionStart Hook) - Route skipping in multi-task sessions — Agent reads SKILL.md for the first task, then skips re-reading for subsequent tasks in the same session ("I already know the rules"). New tasks may match different routes; context may have been compressed. Result: agent works from partial/stale memory, misses critical rules, debugs in wrong direction for hours → SKILL.md template ships a tiered Session Discipline (re-match the route every task; re-read files only on route-change or compaction — cheap re-match catches different routes without re-reading everything); all shells carry the trigger
- Missing or performative Task Anchor / long-task drift — Agent starts a non-Simple task without a stable Goal/Done When, invents them only at the end, or dumps a fixed labeled block that duplicates the native Plan → use
templates/skill/workflows/task-execution.md; keep the Anchor as runtime state, present only useful alignment, and runreboot-check.mdbefore final validation/commit if the original constraints are no longer fresh - Imagined-pain engineering — Agent 提议加任何机制(规则/脚本/文件结构/模板章节)前没反问"这解决的是真痛点还是脑补":为未发生的失败加保险、为想象用户预建脚手架、为不存在的协议加 marker / 监控、给假设的"agent 偏差"立规矩。✓ Check:能给一个具体场景(file+line / commit / session)证明这事真发生过吗?给不出 → 不上。Historic: 5 ghost scripts (砍 2026-05-19), dossier schema (砍 2026-05-19), reflection-first mode shift (弃 2026-05-20), observations 日志 (拒上 2026-05-20)
Content Classification
| Content type — tier by abstraction: 骨架 (architecture/workflows/rules = invariant theory) vs 肉 (conventions/gotchas/references = current-code facts) · split playbook | Target | Kind |
|---|---|---|
| Abstract design theory — layering/contract/orchestration/transaction principles, the "why" (NOT the module map) | architecture/ |
骨架 |
| Code maps + background — module tree, dir layout, source index, build/env notes | references/ |
肉 |
| House style — naming, paths, commands, formats, must/never conventions | conventions/ |
肉 |
| Code-coupled landmines (symptom → cause → fix), split only by independently routed module | gotchas/ (selecting gotchas/index.md only after multi-file pressure) |
肉 |
| Step-by-step task procedures (process theory) | workflows/ |
骨架 |
| Prompts/reports/docs · editor config (thin shells) | docs/ · .cursor/ .claude/ |
— |
Multi-Skill & Composition
Multi-skill repos — see references/multi-skill-routing.md (operating + fission + coexistence). For invoking other skills from your workflows (embedded / serial / subagent delegation), see references/skill-composition.md + starter templates/skill/workflows/invoke-skill.md.example.
Resources
- WORKFLOW.md — Migration procedure (Quick Start + 9 phases + Downstream Upgrade)
- REFERENCE.md + references/ — Templates, decision guides, anti-patterns, troubleshooting, self-hosting routing source
- TEMPLATES-GUIDE.md — Starter templates + meta-workflow templates
- EXAMPLES.md + examples/ — behavior failures + before/after scenarios