Agent skill

Learn

by SethGammon in SethGammon/Citadel

Knowledge compiler. An agent skill from SethGammon/Citadel.

MITAuto-check passedDevOps & Cloud

Install Learn

skills CLI
$ npx skills add SethGammon/Citadel --skill learn -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install SethGammon/Citadel learn --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/SethGammon/Citadel.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/learn .claude/skills/learn && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
learn
GitHub stars
922
Token cost
~3.3k tokens
SKILL.md length
1,405 words
Files
3
Skills in repo
48
Repo updated
First seen
Licence
MIT

At a glance

Knowledge compiler. An agent skill from SethGammon/Citadel.

  • Works in 8 steps: RESOLVE TARGET → GATHER SOURCES → FLUSH → …
  • Tasks that involve Runbooks and postmortems
  • SKILL.md covers Orientation, Invocation Forms, Inputs and Protocol, plus 4 more sections
  • Calls node and git

What it does

Learn is an agent skill from SethGammon/Citadel. 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.

Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files (for example `__benchmarks__/campaign-no-postmortem.md` and `__benchmarks__/no-completed-campaigns.md`).

It sits in DevOps & Cloud, covering Runbooks and postmortems and Linting and formatting. The repository describes itself as: The operating layer for Claude Code + OpenAI Codex: persistent project memory, intent routing, safety hooks, cost telemetry, and parallel agent fleets. The licence is MIT.

When your agent uses it

  • Tasks that involve Runbooks and postmortems
  • Tasks that involve Linting and formatting

Example prompts

  • “/learn”

Workflow steps

8 steps, taken from the step headings in SKILL.md.

  1. RESOLVE TARGET
  2. GATHER SOURCES
  3. FLUSH
  4. COMPILE
  5. LINT
  6. 5: COMPILE SEMANTIC MEMORY BLOCKS
  7. APPEND QUALITY RULES
  8. OUTPUT SUMMARY

What it can do on your machine

Read from SKILL.md and the folder at commit e41ff1d. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • node
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Learn loads about 3.3k tokens when it runs. Until then it costs about 83 tokens; SKILL.md has 1,405 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~83
When it runs · the whole SKILL.md, loaded when a task matches
~3.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from SethGammon/Citadel at commit e41ff1d, republished under its MIT licence (© SethGammon). 1,405 words, ~3,300 tokens.

Download SKILL.mdSave it as .claude/skills/learn/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
learn
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.
license
MIT
user-invocable
true
auto-trigger
false
trigger_keywords
learn, extract patterns, learn from that, save what worked, patterns from campaign
last-updated
2026-05-07

/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.

Show full SKILL.md (591 more words)Show less
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.

© SethGammon, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files in skills/learn of SethGammon/Citadel.

  • SKILL.md
  • __benchmarks__/campaign-no-postmortem.md
  • __benchmarks__/no-completed-campaigns.md

Open the folder on GitHubat commit e41ff1d

Compare with similar skills

Learn next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Learn compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Learn this skillSethGammon/Citadel922—~3.3kAutomated safety check: PassMIT
Okfserradura/okf175—~3.2kAutomated safety check: NotesApache-2.0
Night Market Operationsathola/claude-night-market342—~3.6kAutomated safety check: PassMIT
Trader Memory Coretradermonty/claude-trading-skills3k2 repos~4.3kAutomated safety check: PassMIT
Author Migrationnrwl/nx29k—~12kAutomated safety check: NotesMIT
Write Notes Like Deepseekczm15053/write-notes-like-deepseek477—~1.9kAutomated safety check: PassNone

Similar skills

  • Okf

    serradura/okf

    Be the expert on Open Knowledge Format (OKF) — portable project knowledge as a directory of markdown files with YAML frontmatter that humans and agents read from one source.

    175 GitHub stars~3.2k tokensUpdated 1 mo ago
    DevOps & CloudAuto-check: notes
  • Night Market Operations

    athola/claude-night-market

    Run and ship this repo: make targets, artifacts, release runbook.

    342 GitHub stars~3.6k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Trader Memory Core

    tradermonty/claude-trading-skills

    Track investment theses across their lifecycle — from screening idea to closed position with postmortem.

    3k GitHub starsUsed in 2 repos~4.3k tokens
    DevOps & CloudAuto-check passed
  • Author or scope a first-party Nx migration. An agent skill from nrwl/nx.

    29k GitHub stars~12k tokensUpdated today
    DevOps & CloudAuto-check: notes
  • Write Notes Like Deepseek

    czm15053/write-notes-like-deepseek

    A skill your agent uses when a change is non-trivial by DSH standards (behavior, architecture, cross-file contracts, process/tooling, testing strategy, or on-disk/wire/config formats), when choosing…

    477 GitHub stars~1.9k tokensUpdated 15 days ago
    DevOps & CloudAuto-check passed
  • OpenRig Upgrade Procedure

    mvschwarz/openrig

    Walks an agent through upgrading the OpenRig CLI and daemon one observed step at a time, keeping live seats alive and reconciling managed plugin files.

    5.5k GitHub stars~2.9k tokensUpdated today
    DevOps & CloudAuto-check passed

More from SethGammon/Citadel

All 48 skills in this repo
  • Create Skill

    SethGammon/Citadel

    Creates new skills from the user's repeating patterns. An agent skill from SethGammon/Citadel.

    922 GitHub stars~1.9k tokensUpdated 6 days ago
    Auto-check passed
  • Houseclean

    SethGammon/Citadel

    Cross-drive storage audit and cleanup. An agent skill from SethGammon/Citadel.

    922 GitHub stars~2.2k tokensUpdated 6 days ago
    Auto-check passed
  • Loop

    SethGammon/Citadel

    Bounded foreground repetition for the current session. An agent skill from SethGammon/Citadel.

    922 GitHub stars~1.4k tokensUpdated 6 days ago
    Auto-check passed
  • Triage

    SethGammon/Citadel

    GitHub issue and PR investigator. An agent skill from SethGammon/Citadel.

    922 GitHub stars~2.7k tokensUpdated 6 days ago
    Auto-check passed
  • Watch

    SethGammon/Citadel

    File sentinel that monitors the working directory for changes and marker comments, then auto-triggers appropriate skills.

    922 GitHub stars~2.9k tokensUpdated 6 days ago
    Auto-check passed
  • Archon

    SethGammon/Citadel

    Autonomous multi-session campaign agent. An agent skill from SethGammon/Citadel.

    922 GitHub stars~5.4k tokensUpdated 6 days ago
    Auto-check passed

Categories

Questions about Learn

What does Learn do?

Knowledge compiler. An agent skill from SethGammon/Citadel. Learn is an agent skill from SethGammon/Citadel. Knowledge compiler.

When should I use Learn?

Learn fits situations like: tasks that involve Runbooks and postmortems; tasks that involve Linting and formatting.

How do I install Learn in Claude Code?

Run `npx skills add SethGammon/Citadel --skill learn -a claude-code`. Or copy the skill folder (skills/learn in SethGammon/Citadel) into .claude/skills/learn in your project. Claude Code loads it when a task matches its description.

How do I install Learn in Codex?

Run `npx skills add SethGammon/Citadel --skill learn -a codex`. Or copy the skill folder (skills/learn in SethGammon/Citadel) into .agents/skills/learn in your project. Codex loads it when a task matches its description.

Can I use Learn in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add SethGammon/Citadel --skill learn -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/learn, .gemini/skills/learn, .github/skills/learn and .opencode/skills/learn in your project.

What does Learn need to run?

Going by SKILL.md and its folder, Learn needs the command-line tools its instructions call (node and git).

Does Learn access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Learn safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Learn use?

Learn is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Learn use?

About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Learn?

Skills that share tags, products or a category with Learn: Okf (serradura/okf, 175 stars), Night Market Operations (athola/claude-night-market, 342 stars), Trader Memory Core (tradermonty/claude-trading-skills, 3k stars) and Author Migration (nrwl/nx, 29k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Learn?

SethGammon (a GitHub user) maintains it in SethGammon/Citadel, which has 922 GitHub stars. The repository holds 48 skills in this directory. The repository was last updated on October 1, 2026.

Source: SethGammon/Citadel on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.