MCP Server Builder
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
Unified router that auto-routes user intent to the right direct action, skill, orchestrator, or explicit Operation Control plan.
$ npx skills add SethGammon/Citadel --skill do -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install SethGammon/Citadel do --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/do .claude/skills/do && 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 "do" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/do into .claude/skills/do/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "do", 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/doType 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 do -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install SethGammon/Citadel do --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/do .agents/skills/do && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "do" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/do into .agents/skills/do/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "do", 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 do -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install SethGammon/Citadel do --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/do .cursor/skills/do && 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 "do" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/do into .cursor/skills/do/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "do", 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/do--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 do -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install SethGammon/Citadel do --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/do .gemini/skills/do && 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 "do" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/do into .gemini/skills/do/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "do", 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 doInstalls 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 do -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/do .github/skills/do && 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 "do" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/do into .github/skills/do/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "do", 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 do -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 do --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/do .opencode/skills/do && 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 "do" agent skill from https://github.com/SethGammon/Citadel/tree/main/skills/do into .opencode/skills/do/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "do", 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.
doUnified router that auto-routes user intent to the right direct action, skill, orchestrator, or explicit Operation Control plan.
Do is an agent skill from SethGammon/Citadel. Unified router that auto-routes user intent to the right direct action, skill, orchestrator, or explicit Operation Control plan. Classifies input by scope, complexity, persistence needs, and parallelism, then dispatches to the cheapest path that can handle it: direct command, skill, marshal, archon, or fleet. Single entry point for all work.
Its SKILL.md is about 5.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files (for example `__benchmarks__/no-planning-dir.md`, `__benchmarks__/route-status.md` and `__benchmarks__/status-command.md`).
It sits in Agent Workflows. 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.
3 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:
nodenpmcodexFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm, 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.
Do loads about 5.9k tokens when it runs. Until then it costs about 87 tokens; SKILL.md has 2,769 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,769 words, ~5,859 tokens.
.claude/skills/do/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Use /do when the user wants something done but doesn't know (or care) which tool handles it.
Don't use when: you know the destination — invoke /marshal, /archon, /fleet, or any skill directly.
| Command | Behavior |
|---|---|
/do [anything] | Classify intent, route to cheapest capable path |
/do status | Show full harness dashboard (/dashboard) |
/do next | Run the decision-first operator console for the next useful harness action |
/do operator | Show the operator console without executing repairs |
/do preview <request> | Show exact resolution or generated candidates and their boundary without executing |
/do --route /skill -- <request> | Use an explicit validated route without bypassing activation or safety boundaries |
/do continue | Resolve and run the deterministic continuation action |
/do --list | Show all skills grouped by category with trigger keywords |
/do setup | First-run experience — configure the harness for this project |
Classification runs top-to-bottom. Exact commands resolve first. Natural-language requests use keyword matches only as candidate evidence for semantic classification.
Compare installed skill directories with core/skills/routing-table.json. If they
match, continue without reading skill bodies. For each unknown skill, read only
its frontmatter and use name, description, and trigger_keywords as session-local Tier 2 match targets, then report:
"Discovered {N} new skill(s): {names}. Run /do setup to regenerate routing."
Do not write registration fields into harness.json; schema-v2 config is exact and generated routing is a projection, not config authority.
Normalize case, apostrophes, and whitespace, then compare the entire input. Never match a Tier 0 command because its word appears inside a larger request.
<!-- BEGIN GENERATED: exact-command-table -->
| Exact normalized input | Action |
|---|---|
| "status", "dashboard", "what's happening", "what's going on", "show activity" | node scripts/dashboard.js |
| "next", "what should i do next", "fix harness state", "repair harness" | node scripts/operator-console.js --run |
| "operator", "operator console", "approval capsule", "what's up", "what should happen next" | node scripts/operator-console.js |
| "continue", "keep going" | node scripts/continue-action.js --run |
| "setup", "first run", "configure harness" | /do setup |
| "setup --express" | /do setup --express |
| "--list", "list", "list skills" | /do --list |
| "test", "tests", "run test", "run tests" | npm run test only when package.json#scripts.test exists; otherwise non-final |
| "build", "run build" | npm run build only when package.json#scripts.build exists; otherwise non-final |
| "typecheck", "type check", "run typecheck", "run type check" | npm run typecheck only when package.json#scripts.typecheck exists; otherwise non-final |
<!-- END GENERATED: exact-command-table -->
/do preview <request> strips the preview wrapper and reuses the shared exact command and built-in candidate preflight. It does not inspect Tier 1 active state,
discover project-local custom skills, or run the Tier 3 LLM classifier. Therefore every natural-language preview is non-final, has no command, and stops at
semantic-classification-required. /do --route /skill -- <request> passes the requested route through scripts/route-preview.js --route; an unknown route is rejected,
and a valid override still goes through activation, worktree, and approval boundaries.
If the whole input matches an exact command, execute it and stop. The test, build, and typecheck commands are final only when the target project's
package.json declares the corresponding non-empty script. Otherwise they remain non-executable. Do not execute a command merely because its word appears inside a larger request; continue to active-state and semantic routing.
Check for active campaigns or fleet sessions that match the input scope:
continue, first run:node scripts/continue-action.js --runnode scripts/package-delivery.js <slug>, report the output and stop./archon continue, invoke /archon continue./fleet continue, invoke /fleet continue..planning/campaigns/ for files with Status: active or status: active in frontmatter.planning/fleet/ for session files with status: active or needs-continueneeds-review-package
or its review-package Exit Evidence row is pending while prior phases are
complete, route to node scripts/package-delivery.js <slug> before Archon.type: improve in
frontmatter, route to /improve {target} --continue where {target} is the campaign's
target field. Do NOT route improve campaigns to archon -- improve is its own orchestrator./archon continue/fleet continue.planning/daemon.json exists with status: "running": the daemon spawned
this session but there's no work to do. Update daemon.json:
status: "stopped", stopReason: "no-active-work",
stoppedAt: "{ISO timestamp}". Delete both triggers if IDs are present.
Output: "[daemon] Stopped -- no active campaign found. The work is done."If matched → resume the active work. Done.
Match input against installed skill keywords from Citadel's built-in skills
and any project-level custom skills in .claude/skills/. These matches are
candidate evidence, never the final routing decision by themselves.
Built-in skill triggers (generated from each skill's trigger_keywords frontmatter; edit the frontmatter, then run node scripts/generate-routing.js to refresh this table):
<!-- BEGIN GENERATED: routing-table -->
| Input Contains | Route To | Product Bundle |
|---|---|---|
| "architect", "architecture", "design the system", "file structure", "plan the build" | /architect | core |
| "campaign", "multi-session", "phases" | /archon | operations |
| "ascii diagram", "ascii art", "box diagram", "architecture diagram", "flow diagram", "sequence diagram", "draw a diagram", "text diagram" | /ascii-diagram | core |
| "intake", "process pending", "pipeline" | /autopilot | operations |
| "cost", "costs", "cost breakdown", "campaign cost", "token usage", "burn rate", "model breakdown" | /cost | persistence |
| "create app", "build app", "build me", "make an app", "new app", "generate app", "add auth", "add payments", "integrate" | /create-app | core |
| "create skill", "new skill", "make a skill", "teach the harness", "custom skill", "my own skill", "skill for", "automate this pattern", "repeated pattern" | /create-skill | core |
| "daemon", "continuous", "run overnight", "keep running", "24/7", "unattended", "run autonomously", "daemon start", "daemon stop", "daemon status" | /daemon | operations |
| "dashboard", "what's happening", "what's going on", "show activity", "harness state", "show me status" | /dashboard | persistence |
| "decision map", "plan this out", "figure this out", "investigation plan", "planning map" | /decision-map | persistence |
| "deploy steward", "deploy queue", "merge steward", "mainline steward", "land prs", "land PRs", "deploy prs", "deploy PRs", "merge queue", "release train" | /deploy-steward | delivery |
| "design", "style guide", "design manifest", "visual consistency" | /design | core |
| "document", "docs", "docstring", "jsdoc", "readme", "api docs" | /doc-gen | core |
| "evolve", "sustained improve", "improvement director", "research-driven improve", "multi-cycle improve", "run until done", "improve until ceiling", "keep improving", "hypothesis", "belief model", "scout agents" | /evolve | operations |
| "experiment", "optimize", "try", "A/B", "measure" | /experiment | operations |
| "parallel", "simultaneous", "multiple agents", "at the same time" | /fleet --quick | parallel |
| "grill me", "grill", "stress-test the plan", "sharpen the plan", "pressure-test", "interview me" | /grill | core |
| "houseclean", "house clean", "disk space", "free space", "c drive full", "drive full", "running out of space", "clean up disk", "orphaned worktrees", "clean worktrees", "disk audit", "storage audit", "move to another drive", "free up space" | /houseclean | core |
| "improve", "improvement loop", "quality loop", "rubric", "score against", "run improvement", "improve citadel" | /improve | operations |
| "infra", "infrastructure", "what databases", "what systems", "docker-compose", "infra audit", "map infrastructure", "what does this connect to" | /infra-audit | core |
| "learn", "extract patterns", "learn from that", "save what worked", "patterns from campaign" | /learn | persistence |
| "preview", "screenshot", "visual check", "does it render" | /live-preview | core |
| "loop", "repeat until", "until tests pass", "until lint passes", "max attempts", "retry until" | /loop | operations |
| "map", "index codebase", "codebase map", "structural index", "scan codebase", "map stats", "map query" | /map | core |
| "orchestrate", "chain skills", "multi-step" | /marshal | operations |
| "merge review", "check merges", "any conflicts", "fleet conflicts", "pending branches", "safe to merge" | /merge-review | parallel |
| "organize", "directory structure", "folder structure", "project structure", "file organization", "organize directories", "organize files", "cleanup directories", "directory convention", "where should this go", "messy project" | /organize | core |
| "postmortem", "retro", "what broke", "what happened", "debrief" | /postmortem | persistence |
| "watch pr", "watch ci", "monitor pr", "fix ci", "ci failing", "pr failing", "auto-fix", "auto fix pr", "pr is red", "checks failing" | /pr-watch | delivery |
| "prd", "requirements", "spec", "plan an app", "design an app" | /prd | core |
| "qa", "test the app", "click through", "does it work", "browser test" | /qa | core |
| "refactor", "rename", "extract", "inline", "move file", "split file", "merge files" | /refactor | core |
| "research", "investigate", "look into", "find out", "research fleet", "parallel research", "multi-angle research", "compare options" | /research | core |
| "/review", "code review", "review this", "review PR", "review" | /review | core |
| "scaffold", "generate component", "generate module", "generate service", "new component", "new module", "new route", "new service", "create component", "stub out", "bootstrap" | /scaffold | core |
| "schedule", "recurring", "every N minutes", "cron", "set a reminder", "run periodically" | /schedule | operations |
| "handoff", "session summary" | /session-handoff | persistence |
| "setup", "first run", "configure harness", "install citadel", "getting started" | /setup | core |
| "debug", "root cause", "diagnose", "why is", "investigate bug" | /systematic-debugging | core |
| "telemetry", "what did this cost", "session cost", "how much did that cost", "how much have I spent", "what hooks fired", "trust level", "show me telemetry", "spending", "session stats", "what telemetry", "verify audit", "audit integrity", "check audit", "tampered records" | /telemetry | persistence |
| "/test-gen", "generate tests", "write tests", "add tests", "test" | /test-gen | core |
| "triage", "open issues", "unlabeled issues", "review pr", "review prs", "investigate issue" | /triage | delivery |
| "unharness", "remove citadel", "uninstall citadel", "clean up citadel", "remove harness", "uninstall harness" | /unharness | core |
| "verify", "verify hooks", "hook health", "self-test", "check hooks", "harness health" | /verify | core |
| "watch", "watch files", "watch changes", "file sentinel", "monitor files", "watch start", "watch stop", "watch scan", "marker comments", "@citadel" | /watch | operations |
| "wiki", "knowledge base", "llm wiki", "project wiki", "build a wiki", "maintain knowledge", "knowledge management", "llm-wiki", "karpathy wiki" | /wiki | persistence |
| "workspace", "multi-repo", "cross-repo", "across repos", "multiple repos", "coordinate repos", "add redis and snowflake", "split into repos" | /workspace | parallel |
<!-- END GENERATED: routing-table -->
Script routes (hand-maintained; these dispatch to local scripts, not skills):
| Input Contains | Route To |
|---|---|
| "deliver", "deliver intake", "intake to pr", "intake to PR" | node scripts/deliver.js --next when no file is named, or node scripts/deliver.js --intake <file> when a file is named, then /do continue |
| "package delivery", "review package", "local handoff" | node scripts/package-delivery.js <campaign-slug> after build and verification, or include --pr <url> when a PR exists |
| "pr ready", "ready for review", "finalize pr", "approval ready" | node scripts/pr-ready.js --pr <pull-request-url> --run-verification after the branch is pushed |
| "next", "what should I do next", "repair harness", "fix harness state" | node scripts/operator-console.js --run; auto-runs deterministic local repairs and stops at skill/human routes with a console report |
| "operator", "operator console", "what's up", "what should happen next", "approval capsule" | node scripts/operator-console.js; inspect-only decision cockpit |
| "preview route", "route preview", "dry run route", "what would /do do" | node scripts/route-preview.js -- "<request>"; route preflight without execution |
Carry every matching route and the exact matched phrases to Tier 3. A single candidate narrows the semantic decision but does not turn substring evidence into execution authority. Multiple candidates are disambiguated semantically, not by generated-table order.
For every non-exact request, classify intent across 6 dimensions. Use Tier 2 candidates as evidence when present; when none match, classify from the request:
SCOPE: single-file | single-domain | cross-domain | platform-wide
COMPLEXITY: 1 (trivial) | 2 (simple) | 3 (moderate) | 4 (complex) | 5 (campaign)
INTENT: fix | build | create | add | audit | redesign | research | improve | wire | prune
REQUIRES_PERSISTENCE: true | false (multi-session?)
REQUIRES_PARALLEL: true | false (independent sub-tasks?)
REQUIRES_TASTE: true | false (quality judgment beyond tests?)Routing rules (first match wins):
| Condition | Route |
|---|---|
| INTENT is "create", Complexity >= 3 | /create-app |
| INTENT is "create", Complexity <= 2 | /scaffold |
| INTENT is "add", existing source files present | /create-app (Tier 5 — feature mode) |
| INTENT is "add", no existing source files | /scaffold |
| Complexity 1, single skill match | Skill directly |
| Complexity 1, no skill match | Do it yourself (direct edit) |
| Complexity 2, single domain | /marshal |
| Complexity 2-3, known skill domain | Skill, with marshal fallback |
| Complexity 3, cross-domain | /marshal |
| Complexity 3-4, requires persistence | /archon |
| Complexity 4, requires taste/judgment | /archon |
| Complexity 4-5, requires parallel | /fleet |
| Complexity 5, platform-wide | /fleet |
| Confidence < 0.7 | /marshal (safe default) |
Ambiguity gate: When multiple Tier 2 candidates survive or classifier confidence is below 0.7, and the AskUserQuestion tool is available: present the top 2-3 candidate routes as options, each with a label and a one-line tradeoff, and route to the user's pick. When unavailable, apply the rules above unchanged (tie-break, then /marshal default).
Important: A repeated pattern complaint ("I keep doing X manually", "the agent always makes this mistake") should route to /create-skill. A repeated pattern
is a skill waiting to be extracted.
After classification and before execution, verify the response is proportional to the input:
Downgrade triggers (apply in order):
| Condition | Action |
|---|---|
| Input < 20 words AND routed to Archon or Fleet | Downgrade to Marshal. Log: "Input too brief for campaign-level orchestration." |
| Input mentions a single file AND routed to Fleet | Downgrade to Marshal or skill. Log: "Single-file scope doesn't warrant parallel agents." |
| Estimated sessions > 5 AND user is Novice trust level | Cap at 3 sessions. Log: "Capping sessions for novice user. Run more to unlock higher budgets." |
| Routed to Daemon AND user is Novice trust level | Block. Output: "Daemon mode requires familiarity with the harness. Complete a few sessions first." |
| Estimated cost > $50 AND no explicit budget flag | Confirm with user regardless of trust level. |
Upgrade triggers:
| Condition | Action |
|---|---|
| Input complexity >= 4 AND routed to a bare skill | Suggest Marshal. "This looks complex enough for orchestration. Route to /marshal instead?" |
| Input mentions "overnight" or "continuous" AND routed to Archon | Suggest daemon. "This sounds like continuous work. Want to run it as a daemon?" (skip if Novice) |
| Input contains 2+ clearly independent tasks AND complexity >= 3 | Run Fleet auto-decomposition (see below). |
Fleet auto-decomposition — 1/2/3 confirmation prompt:
When 2+ independent tasks detected (non-overlapping scopes, complexity >= 3, not already routed to full Fleet), read consent.fleetSpawn from harness.json:
auto-allow → route directly to /fleet --quickalways-ask or null → show prompt: "These look independent — run in parallel? [1=yes 2=always 3=no]"--quick, preference unchanged--quick, write writeConsent('fleetSpawn', 'auto-allow')always-askreadConsent/writeConsent are in hooks_src/harness-health-util.js.
Trust level: Read from harness.json trust object. Levels: novice (0-4 sessions), familiar (5-19), trusted (20+ with 2+ campaigns). trust.override takes precedence.
Enforce product activation before invocation. Run:
node {citadelRoot}/scripts/citadel-config.js check route {bare-skill-name} --runtime {claude-code|codex|opencode} --json.
enabled and explicitly named degraded routes may continue. For
disabled, unavailable, or blocked, show the returned reason and
activation plan; do not invoke the target. Enabling a bundle is a separate
plan-first config mutation and never happens silently.
An explicit --route override changes only route selection. It never skips
this activation preflight or any worktree, approval, or verification boundary.
Log routing decision (fire-and-forget):
node .citadel/scripts/telemetry-log.cjs --event agent-complete --agent do-router --session routing --status success --meta '{"tier":N,"target":"[skill]","input_chars":M}'
Use .citadel/scripts/telemetry-log.cjs (the project-local copy). If it doesn't exist, skip logging silently — never block routing on telemetry failure.
Announce the routing decision: "Routing to [target] because [one-sentence reason]"
Invoke the target skill or orchestrator
If the target fails or the user says "wrong tool", try the next tier up. If the target is already Tier 3 (marshal fails or user explicitly escalates from a failed marshal attempt): re-route to /archon with the original input as context, then repeat activation preflight for that route.
Output a grouped skill list drawn from the system reminder's available skills. Group by category (Orchestration, App Creation, Code Quality, Research & Debugging, GitHub & CI, Infrastructure, Monitoring, Utilities, Observability). For each skill, show /name — one-line description plus its product bundle. Include a footer: "Direct invocation bypasses routing, but not product-bundle activation or safety gates."
.planning/ does not exist: The router works without .planning/. Tiers 0, 2, and 3 are fully independent of it. Tier 1 (active-state short-circuit) reads .planning/campaigns/ and .planning/fleet/ — if those directories are absent, skip Tier 1 gracefully and fall through to Tier 2. Never crash on a missing .planning/ directory.harness.json missing: Use the bootstrap Standard + Core + Persistence
activation preview. Core/Persistence routes may proceed; other bundles return
an explicit activation plan. Do not write config during routing.--list output and a prompt to provide a direction.Disclosure: "Routing to [skill]. See that skill's contextual gates for reversibility." Reversibility: depends on routed skill — check the routed skill's reversibility Trust gates:
After routing and execution complete:
© 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 4 other files in skills/do of SethGammon/Citadel.
Open the folder on GitHubat commit e41ff1d
Do 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 |
|---|---|---|---|---|---|---|
| Do this skillSethGammon/Citadel | 922 | — | ~5.9k | Automated safety check: Pass | MIT | |
| MCP Server Builderanthropics/skills | 180k | 64 repos | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| Hook Development for Claude Code Pluginsanthropics/claude-plugins-official | 38k | 11 repos | ~4.1k | Automated safety check: Notes | Apache-2.0 | |
| Using Superpowersfarm-fe/farm | 5.6k | 35 repos | ~1.4k | Automated safety check: Pass | MIT | |
| Executing Plans Inlineobra/superpowers | 296k | 2 repos | ~5.1k | Automated safety check: Pass | MIT | |
| Claude Code Agent Developmentanthropics/claude-plugins-official | 38k | 8 repos | ~2.8k | Automated safety check: Pass | Apache-2.0 |
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
anthropics/claude-plugins-official
Explains how to write Claude Code plugin hooks, both prompt-based checks and bash commands, for events such as PreToolUse, Stop and SessionStart.
farm-fe/farm
A skill your agent uses when starting any conversation - establishes how to find and use skills, requiring Skill tool invocation before ANY response including clarifying questions
obra/superpowers
Has the agent carry out an implementation plan itself, task by task in the current session, keeping a ledger, proving each step with a test and ending with one whole-branch review.
anthropics/claude-plugins-official
Explains how to write agents for Claude Code plugins: the markdown file with YAML frontmatter, trigger descriptions, model and color settings, and system prompt design.
Azure/azqr
Create new skills, modify and improve existing skills, and measure skill performance.
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
Unified router that auto-routes user intent to the right direct action, skill, orchestrator, or explicit Operation Control plan. Do is an agent skill from SethGammon/Citadel. Unified router that auto-routes user intent to the right direct action, skill, orchestrator, or explicit Operation Control plan.
Do fits situations like: agent Workflows work in your project.
Run `npx skills add SethGammon/Citadel --skill do -a claude-code`. Or copy the skill folder (skills/do in SethGammon/Citadel) into .claude/skills/do in your project. Claude Code loads it when a task matches its description.
Run `npx skills add SethGammon/Citadel --skill do -a codex`. Or copy the skill folder (skills/do in SethGammon/Citadel) into .agents/skills/do 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 do -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/do, .gemini/skills/do, .github/skills/do and .opencode/skills/do in your project.
Going by SKILL.md and its folder, Do needs the command-line tools its instructions call (node, npm and codex). Our summary lists: Docker.
SKILL.md contains no URLs. Its commands use npm, 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.
Do 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.9k tokens (SKILL.md is roughly 23k 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 Do: MCP Server Builder (anthropics/skills, 180k stars), Hook Development for Claude Code Plugins (anthropics/claude-plugins-official, 38k stars), Using Superpowers (farm-fe/farm, 5.6k stars) and Executing Plans Inline (obra/superpowers, 296k 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.