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.
Knowledge compiler. An agent skill from SethGammon/Citadel.
$ npx skills add SethGammon/Citadel --skill learn -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install SethGammon/Citadel learn --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "learn" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/learn into .claude/skills/learn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "learn", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/SethGammon/Citadel/tree/main/skills/learnType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add SethGammon/Citadel --skill learn -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install SethGammon/Citadel learn --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SethGammon/Citadel.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/learn .agents/skills/learn && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "learn" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/learn into .agents/skills/learn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "learn", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add SethGammon/Citadel --skill learn -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install SethGammon/Citadel learn --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SethGammon/Citadel.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/learn .cursor/skills/learn && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "learn" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/learn into .cursor/skills/learn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "learn", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/SethGammon/Citadel.git --path skills/learn--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add SethGammon/Citadel --skill learn -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install SethGammon/Citadel learn --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SethGammon/Citadel.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/learn .gemini/skills/learn && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "learn" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/learn into .gemini/skills/learn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "learn", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install SethGammon/Citadel learnInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add SethGammon/Citadel --skill learn -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/SethGammon/Citadel.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/learn .github/skills/learn && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "learn" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/learn into .github/skills/learn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "learn", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add SethGammon/Citadel --skill learn -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install SethGammon/Citadel learn --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SethGammon/Citadel.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/learn .opencode/skills/learn && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "learn" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/learn into .opencode/skills/learn/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "learn", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
learnKnowledge compiler. An agent skill from SethGammon/Citadel.
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.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit e41ff1d. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
nodegitFrom the folder's file list and the shell code blocks in SKILL.md.
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.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
The full file from SethGammon/Citadel at commit e41ff1d, republished under its MIT licence (© SethGammon). 1,405 words, ~3,300 tokens.
.claude/skills/learn/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.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.
/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.planning/postmortems/ (optional).planning/telemetry/audit.jsonl filtered to this campaign (optional)--from-evolve: .planning/evolve/{target}/pattern-library.mdIf /learn (no argument):
.planning/campaigns/completed/*.md or .planning/campaigns/*.md
where Status: completedIf /learn {slug}:
.planning/campaigns/ for a file whose name contains {slug}.planning/campaigns/completed/ if not found in activeIf /learn --from-evolve {target}:
.planning/evolve/{target}/pattern-library.md — this is the source--cycle {n}: filter to sections beginning with ## Cycle {n} onlyIf /learn --doc-sync: Run:
node hooks_src/doc-sync.jsThen 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.
For campaign-based runs only (skip for --from-evolve):
Campaign file (required):
Postmortem (optional):
.planning/postmortems/ for files matching *{slug}*Audit telemetry (optional):
.planning/telemetry/audit.jsonlExtract 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 headingmechanism: "Mechanism:" fielddelta: "Delta:" fieldtopic: infer from "Axis class:" (e.g., orientation_precision → skill-orientation)applies-to: "Applies to:" fieldconfidence: "Confidence:" fieldevidence: source file + cycle numberStaging 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."
Integrate staged findings into wiki pages.
Create .planning/wiki/ if it does not exist.
For each staged finding:
.planning/wiki/{topic}.md where topic is the finding's topic field (normalized to kebab-case).## {name}):**Evidence:** list**Last confirmed:** to today**Conflict:** field — do not silently overwriteWiki page format:
---
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.
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.
Run a safe deterministic memory compile pass:
node scripts/memory-compile.js compileThis 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 lintFor 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.
.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:
.claude/harness.json (create with {} if missing)qualityRules.custom to [] if absentpattern already exists{ "name": "auto-{slug}-{N}", "pattern": "{regex}", "filePattern": "{glob}", "message": "Learned from {slug}: {message}" }Skip low-confidence rules.
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).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.
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:
--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/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
SKILL.md and 2 other files in skills/learn of SethGammon/Citadel.
Open the folder on GitHubat commit e41ff1d
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Learn this skillSethGammon/Citadel | 922 | — | ~3.3k | Automated safety check: Pass | MIT | |
| Okfserradura/okf | 175 | — | ~3.2k | Automated safety check: Notes | Apache-2.0 | |
| Night Market Operationsathola/claude-night-market | 342 | — | ~3.6k | Automated safety check: Pass | MIT | |
| Trader Memory Coretradermonty/claude-trading-skills | 3k | 2 repos | ~4.3k | Automated safety check: Pass | MIT | |
| Author Migrationnrwl/nx | 29k | — | ~12k | Automated safety check: Notes | MIT | |
| Write Notes Like Deepseekczm15053/write-notes-like-deepseek | 477 | — | ~1.9k | Automated safety check: Pass | None |
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.
athola/claude-night-market
Run and ship this repo: make targets, artifacts, release runbook.
tradermonty/claude-trading-skills
Track investment theses across their lifecycle — from screening idea to closed position with postmortem.
nrwl/nx
Author or scope a first-party Nx migration. An agent skill from nrwl/nx.
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…
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.
SethGammon/Citadel
Creates new skills from the user's repeating patterns. An agent skill from SethGammon/Citadel.
SethGammon/Citadel
Cross-drive storage audit and cleanup. An agent skill from SethGammon/Citadel.
SethGammon/Citadel
Bounded foreground repetition for the current session. An agent skill from SethGammon/Citadel.
SethGammon/Citadel
GitHub issue and PR investigator. An agent skill from SethGammon/Citadel.
SethGammon/Citadel
File sentinel that monitors the working directory for changes and marker comments, then auto-triggers appropriate skills.
SethGammon/Citadel
Autonomous multi-session campaign agent. An agent skill from SethGammon/Citadel.
Categories
Knowledge compiler. An agent skill from SethGammon/Citadel. Learn is an agent skill from SethGammon/Citadel. Knowledge compiler.
Learn fits situations like: tasks that involve Runbooks and postmortems; tasks that involve Linting and formatting.
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.
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.
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.
Going by SKILL.md and its folder, Learn needs the command-line tools its instructions call (node and git).
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.
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.
Learn is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
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.
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.
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.