unharness

star 612

Remove Citadel from a project. Exports valuable state (campaigns, postmortems, research, backlog, discoveries) to docs/citadel/ as human-readable markdown, then removes all harness files and hooks. The archive is detected by /do setup on re-install and offered for restore.

SethGammon By SethGammon schedule Updated 6/11/2026

name: unharness license: MIT description: >- Remove Citadel from a project. Exports valuable state (campaigns, postmortems, research, backlog, discoveries) to docs/citadel/ as human-readable markdown, then removes all harness files and hooks. The archive is detected by /do setup on re-install and offered for restore. user-invocable: true auto-trigger: false trigger_keywords: - unharness - remove citadel - uninstall citadel - clean up citadel - remove harness - uninstall harness last-updated: 2026-04-30

/unharness — Remove Citadel from a Project

Orientation

Use when: removing Citadel from a project entirely -- exports state and cleans up hooks before uninstall. Don't use when: pausing campaign work (just stop or use /session-handoff); removing a single skill (delete its directory manually).

Invocation Forms

/unharness               # Export archive, then remove harness
/unharness --export-only # Export to docs/citadel/ without removing anything

Protocol

Step 1: FIND CITADEL ROOT

Read .citadel/plugin-root.txt to locate the Citadel install. If missing, use the directory containing this SKILL.md as the fallback.

cat .citadel/plugin-root.txt 2>/dev/null || echo "fallback"

Store as {citadelRoot}.


Step 2: RUN UNHARNESS SCRIPT

node {citadelRoot}/scripts/unharness.js

For --export-only:

node {citadelRoot}/scripts/unharness.js --export-only

The script:

  1. Scans .planning/ for valuable content (campaigns, postmortems, research, backlog, discoveries)
  2. Reads .citadel/project.md and .claude/harness.json for project metadata
  3. Writes docs/citadel/{category}.md files with citadel-archive: true frontmatter
  4. Removes .planning/, .citadel/, .claude/agent-context/
  5. Strips Citadel hook entries from .claude/settings.json (preserves user hooks)
  6. Prints a summary of what was exported and removed

Print the script output verbatim.


Step 3: CLOSING MESSAGE

After the script completes, print:

If archive was written:

Archive is at docs/citadel/ — commit it, delete it, or leave it.
Run /do setup again anytime to reinstall Citadel.
If you run setup in this project, it will find the archive and offer to restore your history.

If nothing was exported (empty project):

Citadel removed. No history to archive.
Run /do setup again anytime to reinstall.

If --export-only:

Archive written to docs/citadel/. Harness files left in place.
Run /unharness without --export-only to complete the removal.

Fringe Cases

Script not found: Report the error and explain the user can run the hook installer manually: node /path/to/Citadel/scripts/unharness.js

No .planning/ directory (harness was installed but never used): The script handles this gracefully — it skips the export and proceeds to cleanup. Nothing special needed.

docs/citadel/ already exists from a previous unharness: The script overwrites with the current timestamp. Prior archives are replaced. If the user wants to keep prior archives, they should commit docs/citadel/ to git first.

User runs unharness on a project that was never set up: The script exits cleanly with "Nothing to export." and nothing is deleted that shouldn't be.


Contextual Gates

Disclosure: "Removing Citadel from [project]. Exporting state to [path] before deletion. This is irreversible without reinstalling." Reversibility: red — removes hooks, clears .claude/settings.json entries, deletes .planning/. State export is made first, but reinstalling requires /setup. Trust gates:

  • Trusted (20+ sessions): irreversible unless reinstalled; exports state first.

Quality Gates

  • Never prompt the user before running — the export is the safety net, not a confirmation dialog
  • Always print the script output so the user can see exactly what happened
  • If the script errors, surface the error directly — don't swallow it

Exit Protocol

After the closing message in Step 3, output nothing further. Unharness is a terminal action — no HANDOFF block, no next-step suggestions. The session is now running without hooks.

Install via CLI
npx skills add https://github.com/SethGammon/Citadel --skill unharness
Repository Details
star Stars 612
call_split Forks 55
navigation Branch main
article Path SKILL.md
More from Creator