Skip to main content

learn

Knowledge compiler. Extracts patterns, decisions, and anti-patterns from completed campaigns and evolve cycles, then compiles them into structured wiki pages that integrate with existing knowledge rather than appending isolated files. Implements flush→compile→lint pipeline. Auto-triggered by /postmortem and /evolve Phase 6.

Quellinformationen

Repository
SethGammon/Citadel
Letzte Quellaktivität
22. September 2026 um 18:38
Erkannte Sprache von SKILL.md
Englisch
Sterne
922
Forks
82

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
3 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
learn
license
MIT
description
Knowledge compiler. Extracts patterns, decisions, and anti-patterns from completed campaigns and evolve cycles, then compiles them into structured wiki pages that integrate with existing knowledge rather than appending isolated files. Implements flush→compile→lint pipeline. Auto-triggered by /postmortem and /evolve Phase 6.
user-invocable
true
auto-trigger
false
trigger_keywords
["learn","extract patterns","learn from that","save what worked","patterns from campaign"]
last-updated
2026-05-07T00:00:00.000Z
# /learn — Knowledge Compiler ## Orientation **Use when:** You have a completed campaign or evolve cycle and want to compile its findings into the project's growing knowledge wiki — so future sessions start smarter, not from scratch. **Don't use when:** You want a structured incident analysis first (use `/postmortem` — run it before `/learn`); you haven't finished any campaigns (nothing to compile); you want a context transfer only (use `/session-handoff`). **Key difference from appending:** `/learn` doesn't create isolated per-campaign files. It integrates new findings into existing wiki pages — updating evidence lists, raising confidence where a pattern is confirmed again, and flagging contradictions. A wiki is a compiler; a log is an interpreter. ## Invocation Forms ``` /learn — most recently completed campaign /learn {slug} — specific campaign by slug /learn {file-path} — specific campaign file path /learn --from-evolve {target} — compile from /evolve pattern library /learn --from-evolve {target} --cycle {n} — specific evolve cycle only /learn --lint — lint-only pass (no new extraction) /learn --compile — re-compile staging area into wiki (no new extraction) /learn --memory — compile semantic memory blocks from planning artifacts /learn --doc-sync — process doc-sync queue into .planning/doc-sync/latest.md ``` ## Inputs 1. A campaign slug, file path, evolve target, or "most recent" resolution 2. Corresponding postmortem in `.planning/postmortems/` (optional) 3. `.planning/telemetry/audit.jsonl` filtered to this campaign (optional) 4. For `--from-evolve`: `.planning/evolve/{target}/pattern-library.md` ## Protocol ### Step 1: RESOLVE TARGET **If `/learn` (no argument):** - Glob `.planning/campaigns/completed/*.md` or `.planning/campaigns/*.md` where `Status: completed` - Sort by modification time descending, take most recent - If none found: "No completed campaigns found. Run /learn after a campaign completes." Stop. **If `/learn {slug}`:** - Search `.planning/campaigns/` for a file whose name contains `{slug}` - Check `.planning/campaigns/completed/` if not found in active - If still not found: "No campaign found matching '{slug}'." **If `/learn --from-evolve {target}`:** - Read `.planning/evolve/{target}/pattern-library.md` — this is the source - If `--cycle {n}`: filter to sections beginning with `## Cycle {n}` only - If file not found: "No evolve pattern library for '{target}'." Stop. **If `/learn --doc-sync`:** Run: ``` node hooks_src/doc-sync.js ``` Then review `.planning/doc-sync/latest.md`. Stop after reporting the queue count, files surfaced, skipped deleted files, and report path. Do not run campaign extraction unless the user separately asks for it. **If `/learn --lint`, `/learn --compile`, or `/learn --memory`:** Skip to Step 4, 5, or 5.5 respectively. ### Step 2: GATHER SOURCES For campaign-based runs only (skip for `--from-evolve`): **Campaign file (required):** - Full content — direction, phases, Decision Log, circuit breaker activations **Postmortem (optional):** - Search `.planning/postmortems/` for files matching `*{slug}*` - If not found: note "Postmortem not found — proceeding without it" and continue **Audit telemetry (optional):** - Read last 200 lines of `.planning/telemetry/audit.jsonl` - Filter entries that match the campaign slug or its active period - If none: note "No audit telemetry found for this campaign" ### Step 3: FLUSH Extract raw findings and write to staging. **For campaign sources:** Extract four categories: **A. Successful Patterns** — approaches that demonstrably worked (phases completed without rework, postmortem positives, no reverts). Per pattern: `name`, `mechanism` (what caused success), `evidence` (phase/commit/entry), `topic` (infer from subject matter), `applicability`. **B. Anti-patterns** — what was tried and failed (rework phases, circuit breaker trips, quality gate blocks, reverts). Per pattern: `name`, `what-was-tried`, `failure-mode`, `evidence`, `topic`, `avoidance`. **C. Key Decisions** — from Decision Log or inferred from phase descriptions. Per decision: `what`, `rationale`, `outcome` (completed or rework). **D. Quality Rule Candidates** — only generate if: specific regex, applies to a specific file pattern, occurred more than once or was severe. Per candidate: regex, file pattern, trigger message, confidence (`high`/`medium`/`low` — skip `low`). **For evolve sources:** Parse the pattern library's sections. For each pattern record: - `name`: section heading - `mechanism`: "**Mechanism:**" field - `delta`: "**Delta:**" field - `topic`: infer from "**Axis class:**" (e.g., `orientation_precision` → `skill-orientation`) - `applies-to`: "**Applies to:**" field - `confidence`: "**Confidence:**" field - `evidence`: source file + cycle number **Staging write:** Create `.planning/wiki/_staging/` if it does not exist. Write staged findings to `.planning/wiki/_staging/{source-slug}-{timestamp}.jsonl` — one JSON record per finding (newline-delimited). If zero findings are extractable: write staging file with a single `{"type":"empty","source":"{slug}"}` record and note "Campaign may have been too brief." ### Step 4: COMPILE Integrate staged findings into wiki pages. Create `.planning/wiki/` if it does not exist. For each staged finding: 1. Determine the wiki page: `.planning/wiki/{topic}.md` where `topic` is the finding's `topic` field (normalized to kebab-case). 2. Read the wiki page if it exists. 3. **If the page exists and contains a section for this pattern** (match on `## {name}`): - Append the new source to the `**Evidence:**` list - Update `**Last confirmed:**` to today - If new confidence >= existing confidence: raise it - If new evidence contradicts the existing mechanism: add a `**Conflict:**` field — do not silently overwrite 4. **If the page exists but has no section for this pattern:** - Append a new section with the full finding 5. **If the page does not exist:** - Create it with the frontmatter template (see below) and the finding as the first section **Wiki page format:** ```markdown --- topic: {slug} last-compiled: {ISO date} sources: {N} --- # {Topic Title} ## {Pattern Name} **Mechanism:** {what causes success/failure} **Evidence:** {source-1 (date)}, {source-2 (date)}, ... **Confidence:** high/medium/low **Last confirmed:** {ISO date} **Applies to:** {scope} ``` After compiling all findings: update `.planning/wiki/index.md` — one line per wiki page: `- [{topic}]({topic}.md) — {one-line description}`. Create `index.md` if it does not exist. ### Step 5: LINT Scan all `.planning/wiki/*.md` pages (skip `index.md`). **Contradiction check:** For each page, if two sections contain opposing directives ("always X" vs "never X", "prefer X" vs "avoid X"), flag as: `CONFLICT: [{page}] {section-A} contradicts {section-B} — requires human resolution` **Staleness check:** Sections with `**Last confirmed:**` older than 60 days are flagged as: `STALE: [{page}] {section} — last confirmed {date}, consider re-testing` **Coverage check:** Warn if a wiki page has fewer than 2 sections — single-entry pages are fragile. Lint results are reported in the summary. Lint does not modify wiki pages. ### Step 5.5: COMPILE SEMANTIC MEMORY BLOCKS Run a safe deterministic memory compile pass: ``` node scripts/memory-compile.js compile ``` This writes compact semantic blocks to `.planning/memory/blocks/` and updates `.planning/memory/index.json`. Blocks must include `id`, `type`, `scope`, `owner`, `confidence`, `last_verified`, `sources`, and `body`. For lint-only memory checks, run: ``` node scripts/memory-compile.js lint ``` For agent context loading, use scoped listing instead of rereading full histories: ``` node scripts/memory-compile.js list --scope verification node scripts/memory-compile.js list --query "Fleet readiness" ``` Memory block lint must pass before calling the compile successful. Missing source paths, stale blocks, missing required block types, and contradictions are reported as actionable failures. ### Step 6: APPEND QUALITY RULES `.claude/harness.json` is Citadel's shared configuration path for every runtime, including Codex. Create that path when it is missing; do not substitute a runtime-specific config file. For each high/medium-confidence rule candidate in the staged findings: 1. Read `.claude/harness.json` (create with `{}` if missing) 2. Initialize `qualityRules.custom` to `[]` if absent 3. Skip if a rule with the same `pattern` already exists 4. Append: `{ "name": "auto-{slug}-{N}", "pattern": "{regex}", "filePattern": "{glob}", "message": "Learned from {slug}: {message}" }` 5. Write updated harness.json Skip low-confidence rules. ### Step 7: OUTPUT SUMMARY For the optional promotion in the summary, Codex uses `AGENTS.md`. Claude Code uses `CLAUDE.md` when the project has one; where its `AGENTS.md` capability is available, the default uses `AGENTS.md` if no project `CLAUDE.md` exists. The operator can configure Claude Code to load both under **Project instructions**. Check the active setting or startup notice before choosing a file, and do not duplicate a rule into an instruction file the runtime is not loading. Preserve user-authored guidance. ``` === /learn: {Source} === Mode: {campaign | evolve-{target} | lint-only | compile-only} Sources: {campaign path | evolve path} | postmortem {path or "not found"} | {N} audit entries Staged: {N} findings → .planning/wiki/_staging/{file} Compiled: {N} patterns integrated | {M} new wiki sections | {K} existing sections updated Wiki pages: .planning/wiki/{topic-1}.md, ... Lint: {conflicts found | clean} | {stale entries} | {coverage warnings} Memory blocks: {N} compiled | lint {PASS|FAIL} | .planning/memory/index.json Rules added to harness.json: {M} ({K} skipped — already exist) Next: review .planning/wiki/index.md — promote stable patterns to the project's active instruction file(s). ``` ## Fringe Cases **No completed campaigns:** Output message and stop. **`.planning/` does not exist:** Output "Run /do setup first to initialize the harness state directory." Stop. **No Decision Log:** Extract decisions from phase descriptions; note "inferred from phase descriptions." **harness.json missing:** Create with only the qualityRules section; do not invent other fields. **Duplicate quality rule:** Skip silently; count in "skipped — already exist." **Postmortem missing:** Proceed without it; note in summary. **Large telemetry file:** Read last 200 lines only. **Zero extractable findings:** Write staging file noting source was empty. Do not skip wiki/index update. **Wiki page conflict detected at compile time:** Add a `**Conflict:**` field to the section. Never silently overwrite the existing mechanism. **Memory compile has missing sources:** Report the missing source paths and keep the existing memory blocks untouched until the source issue is resolved. **Doc-sync queue empty:** Output "No doc-sync work is queued." Stop. **Doc-sync queue has only surfaced entries:** Output "All doc-sync items are already surfaced." Stop. **evolve pattern-library.md missing:** "No evolve pattern library for '{target}'. Run /evolve {target} first to generate patterns." Stop. ## Contextual Gates **Disclosure:** "Compiling findings into .planning/wiki/. Modifies wiki pages in-place; creates staging files." **Reversibility:** green — all writes are to `.planning/wiki/` and `.planning/wiki/_staging/`; `git restore .planning/wiki/` or delete the directory to undo. Quality rule additions to harness.json can be manually removed. **Trust gates:** - Any: run on any completed campaign or evolve target ## Quality Gates - Never invent patterns not supported by evidence in the source files - Never write a quality rule with confidence < medium - Never duplicate an existing quality rule (check before appending) - Wiki index must be updated on every compile run - Lint must run after every compile (not skipped) - Memory block lint must pass after `--memory` or the Step 5.5 compile pass - `/learn --doc-sync` must leave no `pending` or `needs-review` entries for processed queue items unless run with `--dry-run` - Conflicts must be flagged, never silently resolved - Summary output must include counts for all phases ## Exit Protocol /learn does not produce a full HANDOFF block (it is a utility, not a campaign). It outputs the summary block in Step 7 and waits for the next command.
Auf GitHub ansehen