Maintaining the Skill Library
This library grows by accretion (new skills after each learning) and decays by drift
(names, routes, bundles, and indexes silently diverging). This skill is the counter-force
to drift. Run it whenever the library changes shape.
Single Source of Truth Map(唯一事實來源地圖)
Every fact has exactly one owning location. Everything else is derived and must be
regenerated or cross-checked — never hand-edited into agreement.
| Fact |
Owner (source of truth) |
Derived copies (must match) |
| Skill identifier |
SKILL.md frontmatter name |
folder name, global-rules.md routes, bundles/*.yaml, SKILL_INDEX.md, cross-references in other skills |
| Skill purpose & triggers |
frontmatter description |
SKILL_INDEX.md, readme commentary |
| Bundle composition |
bundles/*.yaml |
profiles, compiled adapters |
| Governance rules |
policies/base.yaml + global-rules.md |
— |
| Complete skill list |
filesystem (skills/**/SKILL.md) |
SKILL_INDEX.md (generated), readme inventory |
Invariant: name == folder name == routing token. One identifier, everywhere.
The Validation Workflow(每次變更的必經之路)
python tools/validate_skills.py # exit 0 = clean; non-zero lists violations
python tools/generate_skill_index.py # regenerate SKILL_INDEX.md after any change
Run before starting (to confirm a clean baseline) and after finishing (to prove
the change introduced no drift). If the validator itself lacks a check that would have
caught your bug, add the check — the validator is the library's immune system and must
evolve with the defect classes actually observed.
Definition of Done — adding or modifying a skill
A skill change is complete only when ALL of these hold:
Evolution Log Convention(經驗傳承的載體)
Every skill ends with an ## Evolution Log section. Each entry records why a rule
exists — this is the knowledge that survives model changes and personnel changes:
## Evolution Log
- YYYY-MM-DD vX.Y.Z — <what changed> — 觸發事件: <the incident/lesson that motivated it>
Rules:
- Bump
version in frontmatter with each substantive change (semver: guardrail additions
are minor, rewrites are major, typo/link fixes are patch).
- The 觸發事件 field is mandatory for guardrail additions. A guardrail without its origin
story becomes cargo cult within a year and gets deleted by someone who doesn't know
why it was there.
- Postmortem write-backs (
conducting-postmortem, conducting-investment-postmortem)
MUST land as Evolution Log entries, not just inline edits.
Renaming or Moving a Skill(高風險操作)
Identifiers are load-bearing. Renames must update every derived copy in one commit:
grep -rn "<old-name>" across the entire repo — enumerate all references first.
git mv the folder; update frontmatter name.
- Update:
global-rules.md routes, bundles/*.yaml, cross-references in other skills,
and any adapter yaml under an agents directory inside the skill.
- Run the validator; regenerate the index.
- Note the rename in the skill's Evolution Log (old name included, for archaeology).
Periodic Drift Audit(每季或每 10 個新 skill 執行一次)
Use researching-deeply methodology against the library itself:
- Consistency sweep: run the validator; also manually diff
global-rules.md §1
against bundle contents — a MANDATORY route pointing at a skill missing from the
bundle is a governance contradiction.
- Negative-space sweep: count skills vs
SKILL_AUDIT.md files; list skills whose
referenced resources are placeholders still marked TODO.
- Staleness sweep: skills referencing versioned externals (models, APIs, tool
versions) — verify identifiers are still current (e.g., default model ids inside
using-* tool-wrapper skills).
- Bundle-fit review: re-run the
FINANCE_BUNDLE_AUDIT.md-style review for any bundle
whose composition changed since its last audit; date the audit header.
- Write findings to a dated audit file in
audits/ (format:
audits/YYYY-MM-DD-<topic>-audit.md, see the 2026-07-04 baseline there); convert each
accepted finding into either a fix commit or an Evolution Log entry explaining why it
was declined. Carry forward the previous audit's 未償債務 checklist.
External Toolchain Registry(不在本 repo 的依賴)
The readme references tooling that lives outside this repo. Keep this table honest —
a future maintainer must be able to rebuild the whole system from this section:
| Tool |
Role |
Location |
Status |
skill_scheduler.py |
Scans project + global skill layers, dedupes by name |
consuming projects (not versioned here) |
⚠️ TODO: vendor a reference copy into tools/ or document its canonical repo |
agent-bootstrap |
Compiles bundles/policies/profiles into per-agent adapters |
external |
⚠️ TODO: same |
Until vendored, treat policies/base.yaml keys as specification (what the scheduler
should enforce), not as active enforcement.
Anti-patterns(紅線)
- ❌ Hand-editing
SKILL_INDEX.md — it is generated; edit the source frontmatter instead.
- ❌ Adding a routing rule in
global-rules.md for a skill not present in any bundle.
- ❌ Fixing a name mismatch by editing only one of its N copies.
- ❌ Deleting a guardrail without reading its Evolution Log entry first.
- ❌ Letting a new skill skip
reviewing-agent-skills because "it's small".
Evolution Log
- 2026-07-05 v1.0.2 — Retired
using-minimax(使用者停用 Minimax): skill deleted, removed
from all bundles, global-rules §0 Model Routing removed — 觸發事件: 示範「退役 skill」
的完整流程——活文件全清、歷史稽核與 Evolution Log 保留原文並加註增補,而非竄改。
- 2026-07-04 v1.0.1 — Fixed audit-file location to
audits/YYYY-MM-DD-<topic>-audit.md —
觸發事件: 使用者追問「內容都有落檔嗎?」時發現當日稽核報告只存在對話與 commit message,
違反本 skill 自己的稽核流程;同時補齊兩個新 skill 欠缺的 SKILL_AUDIT.md。教訓:交付前
對自己執行 negative-space check(researching-deeply 原則 5/6)。
- 2026-07-04 v1.0.0 — Initial version — 觸發事件: full-library audit (Claude Fable 5 final
session) found 7 drift defects accumulated between skill count 24→49 with no detection
mechanism: routing name mismatch (
storytelling-financial-analysis-vincent vs
translating-financial-analysis-vincent-style), MANDATORY-routed skills absent from
finance.yaml, stale readme links to gemini-skill-* folders, missing tone-example/
corpora, MiniMax-Text-01 leftovers, folder≠name in 7 skills, 2/49 audit coverage.
This skill + tools/validate_skills.py exist so that entire defect class cannot recur silently.
1---2name: maintaining-skill-library3description: Governance loop for this skill library. Defines the single-source-of-truth map, the validation workflow, the definition of done for adding or changing skills, the evolution-log convention, and the periodic drift audit. Use when adding, renaming, moving, or retiring a skill, when updating bundles or routing, or when the user asks 維護, 盤點, 一致性檢查, or library health.4---56# Maintaining the Skill Library78This library grows by accretion (new skills after each learning) and decays by drift9(names, routes, bundles, and indexes silently diverging). This skill is the counter-force10to drift. **Run it whenever the library changes shape.**1112## Single Source of Truth Map(唯一事實來源地圖)1314Every fact has exactly one owning location. Everything else is derived and must be15regenerated or cross-checked — never hand-edited into agreement.1617| Fact | Owner (source of truth) | Derived copies (must match) |18|---|---|---|19| Skill identifier | `SKILL.md` frontmatter `name` | folder name, `global-rules.md` routes, `bundles/*.yaml`, `SKILL_INDEX.md`, cross-references in other skills |20| Skill purpose & triggers | frontmatter `description` | `SKILL_INDEX.md`, readme commentary |21| Bundle composition | `bundles/*.yaml` | profiles, compiled adapters |22| Governance rules | `policies/base.yaml` + `global-rules.md` | — |23| Complete skill list | filesystem (`skills/**/SKILL.md`) | `SKILL_INDEX.md` (generated), readme inventory |2425**Invariant: `name` == folder name == routing token.** One identifier, everywhere.2627## The Validation Workflow(每次變更的必經之路)2829```bash30python tools/validate_skills.py # exit 0 = clean; non-zero lists violations31python tools/generate_skill_index.py # regenerate SKILL_INDEX.md after any change32```3334Run **before** starting (to confirm a clean baseline) and **after** finishing (to prove35the change introduced no drift). If the validator itself lacks a check that would have36caught your bug, add the check — the validator is the library's immune system and must37evolve with the defect classes actually observed.3839## Definition of Done — adding or modifying a skill4041A skill change is complete only when ALL of these hold:4243- [ ] `SKILL.md` (uppercase) with valid frontmatter; `name` is gerund-form, matches folder name.44- [ ] Every file path referenced inside the skill exists in the repo (or is marked `TODO` with a placeholder README explaining what belongs there).45- [ ] Added to the appropriate `bundles/*.yaml` (or explicitly decided against — note why).46- [ ] Routing entry added to `global-rules.md` §1 if the skill should be directly triggerable.47- [ ] Reviewed via `reviewing-agent-skills`; `SKILL_AUDIT.md` written for new skills.48- [ ] Evolution Log entry appended (see convention below).49- [ ] `tools/validate_skills.py` passes; `SKILL_INDEX.md` regenerated.5051## Evolution Log Convention(經驗傳承的載體)5253Every skill ends with an `## Evolution Log` section. Each entry records **why** a rule54exists — this is the knowledge that survives model changes and personnel changes:5556```markdown57## Evolution Log5859- YYYY-MM-DD vX.Y.Z — <what changed> — 觸發事件: <the incident/lesson that motivated it>60```6162Rules:63- Bump `version` in frontmatter with each substantive change (semver: guardrail additions64 are minor, rewrites are major, typo/link fixes are patch).65- The 觸發事件 field is mandatory for guardrail additions. A guardrail without its origin66 story becomes cargo cult within a year and gets deleted by someone who doesn't know67 why it was there.68- Postmortem write-backs (`conducting-postmortem`, `conducting-investment-postmortem`)69 MUST land as Evolution Log entries, not just inline edits.7071## Renaming or Moving a Skill(高風險操作)7273Identifiers are load-bearing. Renames must update every derived copy in one commit:74751. `grep -rn "<old-name>"` across the entire repo — enumerate all references first.762. `git mv` the folder; update frontmatter `name`.773. Update: `global-rules.md` routes, `bundles/*.yaml`, cross-references in other skills,78 and any adapter yaml under an `agents` directory inside the skill.794. Run the validator; regenerate the index.805. Note the rename in the skill's Evolution Log (old name included, for archaeology).8182## Periodic Drift Audit(每季或每 10 個新 skill 執行一次)8384Use `researching-deeply` methodology against the library itself:85861. **Consistency sweep**: run the validator; also manually diff `global-rules.md` §187 against bundle contents — a MANDATORY route pointing at a skill missing from the88 bundle is a governance contradiction.892. **Negative-space sweep**: count skills vs `SKILL_AUDIT.md` files; list skills whose90 referenced resources are placeholders still marked `TODO`.913. **Staleness sweep**: skills referencing versioned externals (models, APIs, tool92 versions) — verify identifiers are still current (e.g., default model ids inside93 `using-*` tool-wrapper skills).944. **Bundle-fit review**: re-run the `FINANCE_BUNDLE_AUDIT.md`-style review for any bundle95 whose composition changed since its last audit; date the audit header.965. Write findings to a dated audit file in `audits/` (format:97 `audits/YYYY-MM-DD-<topic>-audit.md`, see the 2026-07-04 baseline there); convert each98 accepted finding into either a fix commit or an Evolution Log entry explaining why it99 was declined. Carry forward the previous audit's 未償債務 checklist.100101## External Toolchain Registry(不在本 repo 的依賴)102103The readme references tooling that lives outside this repo. Keep this table honest —104a future maintainer must be able to rebuild the whole system from this section:105106| Tool | Role | Location | Status |107|---|---|---|---|108| `skill_scheduler.py` | Scans project + global skill layers, dedupes by name | consuming projects (not versioned here) | ⚠️ TODO: vendor a reference copy into `tools/` or document its canonical repo |109| `agent-bootstrap` | Compiles bundles/policies/profiles into per-agent adapters | external | ⚠️ TODO: same |110111Until vendored, treat `policies/base.yaml` keys as *specification* (what the scheduler112should enforce), not as active enforcement.113114## Anti-patterns(紅線)115116- ❌ Hand-editing `SKILL_INDEX.md` — it is generated; edit the source frontmatter instead.117- ❌ Adding a routing rule in `global-rules.md` for a skill not present in any bundle.118- ❌ Fixing a name mismatch by editing only one of its N copies.119- ❌ Deleting a guardrail without reading its Evolution Log entry first.120- ❌ Letting a new skill skip `reviewing-agent-skills` because "it's small".121122## Evolution Log123124- 2026-07-05 v1.0.2 — Retired `using-minimax`(使用者停用 Minimax): skill deleted, removed125 from all bundles, global-rules §0 Model Routing removed — 觸發事件: 示範「退役 skill」126 的完整流程——活文件全清、歷史稽核與 Evolution Log 保留原文並加註增補,而非竄改。127- 2026-07-04 v1.0.1 — Fixed audit-file location to `audits/YYYY-MM-DD-<topic>-audit.md` —128 觸發事件: 使用者追問「內容都有落檔嗎?」時發現當日稽核報告只存在對話與 commit message,129 違反本 skill 自己的稽核流程;同時補齊兩個新 skill 欠缺的 SKILL_AUDIT.md。教訓:交付前130 對自己執行 negative-space check(researching-deeply 原則 5/6)。131- 2026-07-04 v1.0.0 — Initial version — 觸發事件: full-library audit (Claude Fable 5 final132 session) found 7 drift defects accumulated between skill count 24→49 with no detection133 mechanism: routing name mismatch (`storytelling-financial-analysis-vincent` vs134 `translating-financial-analysis-vincent-style`), MANDATORY-routed skills absent from135 `finance.yaml`, stale readme links to `gemini-skill-*` folders, missing `tone-example/`136 corpora, `MiniMax-Text-01` leftovers, folder≠name in 7 skills, 2/49 audit coverage.137 This skill + `tools/validate_skills.py` exist so that entire defect class cannot recur silently.