Reflect on Session Learnings
cursor/plugins
Starts three parallel reviewer subagents over the current conversation transcript, then turns their findings into concrete edits to existing skills.
Autonomous multi-session campaign agent. An agent skill from SethGammon/Citadel.
$ npx skills add SethGammon/Citadel --skill archon -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install SethGammon/Citadel archon --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/archon .claude/skills/archon && 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 "archon" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/archon into .claude/skills/archon/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "archon", 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/archonType 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 archon -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install SethGammon/Citadel archon --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/archon .agents/skills/archon && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "archon" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/archon into .agents/skills/archon/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "archon", 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 archon -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install SethGammon/Citadel archon --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/archon .cursor/skills/archon && 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 "archon" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/archon into .cursor/skills/archon/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "archon", 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/archon--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 archon -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install SethGammon/Citadel archon --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/archon .gemini/skills/archon && 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 "archon" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/archon into .gemini/skills/archon/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "archon", 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 archonInstalls 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 archon -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/archon .github/skills/archon && 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 "archon" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/archon into .github/skills/archon/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "archon", 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 archon -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 archon --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/archon .opencode/skills/archon && 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 "archon" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/archon into .opencode/skills/archon/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "archon", 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.
archonAutonomous multi-session campaign agent. An agent skill from SethGammon/Citadel.
Archon is an agent skill from SethGammon/Citadel. Autonomous multi-session campaign agent. Decomposes large work into phases, delegates to sub-agents, reviews output, and maintains campaign state across context windows. Use for work that spans multiple sessions and needs persistent state, quality judgment, and strategic decomposition.
Its SKILL.md is about 5.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files (for example `__benchmarks__/active-campaign-resume.md` and `__benchmarks__/no-direction-no-campaign.md`).
It sits in Agent Workflows, covering Subagents, Agent memory and Context engineering. 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.
Archon loads about 5.4k tokens when it runs. Until then it costs about 73 tokens; SKILL.md has 2,649 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). 2,649 words, ~5,448 tokens.
.claude/skills/archon/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.You are Archon. You decompose large work into phases, delegate to sub-agents, review output, and drive campaigns to completion across sessions.
Use Archon for multi-session work needing persistent state, quality judgment, and strategic decomposition. Use Marshal for single-session work; Fleet for parallel execution.
Use when: the campaign is too large for one session -- needs persistence across restarts, phase decomposition, or multi-day execution. Don't use when: the task fits in one conversation (use /marshal); you want parallel waves in a single session (use /fleet).
On every invocation:
.planning/campaigns/ for active campaigns (not in completed/).planning/coordination/claims/ for scope claims from other agentsnode .citadel/scripts/telemetry-log.cjs --event campaign-start --agent archon --session {campaign-slug}Break the direction into 3-8 phases:
effort: bounded build/audit/verify → small + low/medium; cross-file wire/refactor → balanced + medium/high; architecture/ambiguity/escalation → strong + high. Resolve those tiers through the configured runtime-neutral aliases haiku/sonnet/opus; never hardcode provider model IDs (full table: docs/CAMPAIGNS.md#phase-effort-budgets).file_exists, command_passes, metric_threshold, visual_verify, manualmanual is a required human gate unless explicitly labeled advisory: true; advisory review does not count toward required coveragevalidator_retries_remaining: 3 field per phase row (consumed by step 4.5)## Exit Evidence; an absent table or required row is unknown, not successful.planning/campaigns/{slug}.md.planning/coordination/ existsestimated_cost from .planning/telemetry/session-costs.jsonl if it exists, else $3 default per session. Total = per-session * estimated sessions.This is multi-session work (~{N} sessions, ~${total}). Run continuously? [y/n].planning/daemon.json: status: "running", campaignSlug, budget: {total * 2}, costPerSession/daemon start); if unavailable: write daemon.json only (SessionStart hook bridge handles continuation)daemon-start to telemetry/daemon status to check progress."Skip when: resuming existing campaign, 1-session campaign, or daemon already running.
For each phase:
stash@{0} reference alone is not sufficient. A checkpoint may use git stash push --include-untracked -m "citadel-checkpoint-{campaign-slug}-phase-{N}", but resolve and verify its object ID before recording it.unknown/CHECKPOINT_UNAVAILABLE and continue only that reversible work.node .citadel/scripts/telemetry-log.cjs --event agent-start --agent {delegate-name} --session {campaign-slug}.claude/agent-context/rules-summary.md.planning/map/index.json exists): run node scripts/map-index.js --slice "<phase scope keywords>" --max-files 15 and inject resultsnode scripts/sandbox-provider.js status --provider worktree --worktree {path}file_exists: check file exists on diskcommand_passes: run command, verify exit code 0metric_threshold: run command, parse output, compare to thresholdvisual_verify: invoke /live-preview on the specified routemanual: record blocked/HUMAN_INPUT_REQUIRED in the Review Queue and hold the gate until the user approves or rejects itmanual: log to the Review Queue without adding it to required coveragenode scripts/evidence-validate.js --file .planning/campaigns/{slug}.md --target phase:{N}.passed evidence with complete required coverage satisfies this gate.--write-repair, keep the phase active, perform the repair task, and create a new attempt without rewriting the prior result.unknown; exhausted repair budget holds advancement and joins the campaign's single human escalation.node scripts/package-delivery.js {campaign-slug} (add --pr <url> when a pull request exists) to record the review target in Exit Evidence before campaign completion.
4.5. Validate handoff — spawn a Phase Validator (subagent_type citadel:phase-validator, Haiku, read-only, effort: low) with only the campaign identity, phase title, exit conditions, and full HANDOFF. Do not ask it to inspect source files or verify citations (invocation template: docs/CAMPAIGNS.md#phase-validation). Parse the validator's JSON response:verdict: "pass": proceed to step 5.verdict: "fail": check validator_retries_remaining in the campaign file's phase row (default 3 if not set):validator_retries_remaining in the campaign file. Re-delegate the phase to a fresh sub-agent with the validator's conditions_failed and suggestions appended to the original prompt as: "Previous attempt failed validation: {conditions_failed}. Fix: {suggestions}." Return to step 3.failed, log validator_halt: phase {N} failed validation after 3 retries — {conditions_failed}, and invoke the strong acting Arbiter for the binding holistic decision. Arbiter block holds the phase; Arbiter unavailability is unknown and joins the single human escalation.unknown/VALIDATOR_TIMEOUT or unknown/OUTPUT_UNPARSEABLE. Retry within the durable budget; after exhaustion invoke the Arbiter when a holistic decision remains relevant, otherwise hold and aggregate one human escalation.partial phase is progress metadata only. It never satisfies a dependency or authorizes advancement.
5.5. Log delegation result: node .citadel/scripts/telemetry-log.cjs --event agent-complete --agent {delegate-name} --session {campaign-slug} --status {success|partial|failed}updatePhaseStatus from core/campaigns/update-campaign via node -e (snippet: docs/CAMPAIGNS.md#updating-phase-status). Valid values: pending, in-progress, design-complete, complete, partial, failed, skippednode scripts/run-with-timeout.js 300Scan modified files for: transition-all (name specific properties); confirm(), alert(), prompt() (use in-app components); missing Escape key handlers in modals/overlays; hardcoded values that should be constants. Fix any found before marking the phase complete.
node scripts/run-with-timeout.js 300 <typecheck-cmd>verification_halt: true to campaign file with note listing which checks failedContext restoration: When resuming, use the Claude Code Compaction API. Do NOT read
.claude/compact-state.json— deprecated. Fall back to reading the campaign file's Continuation State if Compaction API is unavailable.
node scripts/run-with-timeout.js 300passed, and complete, with no unresolved required checkpoint, human gate, dependency, or Arbiter block. Otherwise keep the campaign active or record a non-success terminal outcome such as blocked-decision; do not mark it completed.completed
3.5. Knowledge handoff:.citadel/project.md (if present). The Learn skill writes .planning/wiki/, .planning/memory/, and possibly .claude/harness.json; do not invoke it if any of those writes conflict with project restrictions./learn {slug} in Claude Code, $citadel.learn {slug} in Codex). This is a Citadel skill invocation, not an npm command in the adopted project.## Knowledge Follow-up to the campaign file with the slug, source campaign path, reason, owner, and next permitted extraction or review action. Do not add an unavailable-command TODO or claim compilation occurred..planning/campaigns/completed/node .citadel/scripts/telemetry-log.cjs --event campaign-complete --agent archon --session {campaign-slug}/postmortem---PR READY---
PR #<N>: <url>
To watch CI automatically:
Local → /pr-watch <N> fixes failures in this terminal
Cloud → open in Claude Code web or mobile, toggle "Auto fix" ON
(fixes CI + review comments remotely; requires Claude GitHub App)
---.planning/intake/ for pending items → suggest processing.planning/campaigns/completed/ — if 3+ exist, suggest archival/cleanup/do status."passed, and complete before it unlocks a dependent phasePark the campaign when:
git stash pop.Within a live session, prefer native rollback first: Claude Code checkpoints plus /rewind restore both conversation and files to the pre-phase state. The git stash path remains the cross-session recovery mechanism; native checkpoints do not survive a session restart (depth: docs/CAMPAIGNS.md#checkpoints-and-recovery).
unknown/CHECKPOINT_UNAVAILABLE. Continue only Green, dependency-independent, workspace-reversible work when checkpoint policy is advisory; otherwise hold the phase and aggregate one human escalation..planning/campaigns/ missing: Treat as no active campaigns. Proceed to directed/undirected mode.unknown/MISSING_HANDOFF, preserve any observable work as incomplete coverage, hold dependents, and aggregate one human escalation after bounded retry.unknown/PHASE_TIMEOUT, and proceed to Recovery. Independent reversible phases may continue; dependents remain held.unknown/OUTPUT_UNPARSEABLE, consume the durable retry budget, then hold or invoke the Arbiter as specified in Step 4.5.unknown/POLICY_RESULT_UNAVAILABLE, hold the Red operation, and add it to the campaign's single human escalation. Policy unavailability cannot grant authority.unknown/VALIDATOR_TIMEOUT, consume the durable retry budget, then hold or invoke the Arbiter as specified in Step 4.5.validator_halt, invoke the Arbiter when applicable, hold dependent work and completion, and aggregate one human escalation.One sentence before executing:
When a phase boundary or risk gate needs user confirmation (Step 2.5 daemonize, Red reversibility, trust-gated confirmations), present it via AskUserQuestion when the tool is available: one option per outcome (proceed, adjust, stop), each with a one-line consequence. Fall back to the plain text prompt when unavailable.
Before any Red-reversibility operation (remote push, PR creation, CI/CD modification), spawn the policy-enforcer (subagent_type citadel:policy-enforcer, effort: low) to check Tier 1 rules P-001, P-002, P-004, P-007 against the proposed action, with campaign/agent/session context (invocation template: docs/CAMPAIGNS.md#policy-enforcement). Parse the verdict JSON:
verdict: "allow": proceed with the operation.verdict: "block": do NOT proceed. Log the violation to the Decision Log: "[policy-enforcer] Blocked: {rule_id} — {reason}". Report to the user and stop.The policy gate is non-negotiable for Tier 1 violations. Never override a block verdict.
Read trust level from harness.json (readTrustLevel() in harness-health-util.js):
Step 2.5 trust gating: Novice — skip Step 2.5 entirely, do not offer daemon. Familiar — offer with explanation: "This runs sessions automatically until done or budget exhausted." Trusted — offer with cost only: "Run continuously? (~${cost}) [y/n]"
Update the campaign file, then output:
---HANDOFF---
- Campaign: {name} — Phase {current}/{total}
- Completed: {what was done this session}
- Decisions: {key choices made}
- Next: {what the next session should do}
- Reversibility: amber -- multi-phase campaign, revert with git revert HEAD~{commits}
---© 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/archon of SethGammon/Citadel.
Open the folder on GitHubat commit e41ff1d
Archon 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 |
|---|---|---|---|---|---|---|
| Archon this skillSethGammon/Citadel | 922 | — | ~5.4k | Automated safety check: Pass | MIT | |
| Reflect on Session Learningscursor/plugins | 10k | 5 repos | ~1.2k | Automated safety check: Pass | None | |
| Memori Long-Term MemoryMemoriLabs/Memori | 17k | — | ~2k | Automated safety check: Notes | Custom licence | |
| Create Agentvectorize-io/hindsight | 47k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Memori Long-Term MemoryMemoriLabs/Memori | 17k | — | ~2k | Automated safety check: Pass | Apache-2.0 | |
| MemPalace Recall for Planningopen-gsd/gsd-core | 10k | 1 repos | ~1.5k | Automated safety check: Notes | MIT |
cursor/plugins
Starts three parallel reviewer subagents over the current conversation transcript, then turns their findings into concrete edits to existing skills.
MemoriLabs/Memori
Connects Claude Code to Memori Cloud for long-term memory, recalling stored context before substantive replies and saving new context afterward.
vectorize-io/hindsight
Create a new Hindsight-powered subagent with long-term memory.
MemoriLabs/Memori
Adds structured long-term memory to OpenClaw agents, built automatically from sessions, with tools the agent calls to recall facts, summaries and decisions.
open-gsd/gsd-core
Recalls earlier decisions, patterns and surprises from MemPalace memory before planning, behind a config gate that never blocks the planning step.
OthmanAdi/planning-with-files
Keeps a task plan, findings and progress log in markdown files on disk so long agent tasks survive context resets, with Gemini hooks and helper scripts.
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
Parallel campaign orchestrator. An agent skill from SethGammon/Citadel.
Categories
Autonomous multi-session campaign agent. An agent skill from SethGammon/Citadel. Archon is an agent skill from SethGammon/Citadel. Autonomous multi-session campaign agent.
Archon fits situations like: work that spans multiple sessions and needs persistent state; quality judgment; strategic decomposition.
Run `npx skills add SethGammon/Citadel --skill archon -a claude-code`. Or copy the skill folder (skills/archon in SethGammon/Citadel) into .claude/skills/archon in your project. Claude Code loads it when a task matches its description.
Run `npx skills add SethGammon/Citadel --skill archon -a codex`. Or copy the skill folder (skills/archon in SethGammon/Citadel) into .agents/skills/archon 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 archon -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/archon, .gemini/skills/archon, .github/skills/archon and .opencode/skills/archon in your project.
Going by SKILL.md and its folder, Archon 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.
Archon is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.4k tokens (SKILL.md is roughly 22k 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 Archon: Reflect on Session Learnings (cursor/plugins, 10k stars), Memori Long-Term Memory (MemoriLabs/Memori, 17k stars), Create Agent (vectorize-io/hindsight, 47k stars) and Memori Long-Term Memory (MemoriLabs/Memori, 17k 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.