Skip to content
Back to skills

Unharness

ASecurity

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.

  • 924 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added June 12, 2026
ai-agentsrustgobashnodegit

Works with

  • terminal

Security analysis

A100/100

Scanned June 12, 2026

npx -y skills add SethGammon/Citadel --skill unharness --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Unharness?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Unharness
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/sethgammon-unharness/badge)](https://www.skillsdirectory.com/skills/sethgammon-unharness)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
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.

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

Store as `{citadelRoot}`.

---

### Step 2: RUN UNHARNESS SCRIPT

```bash
node {citadelRoot}/scripts/unharness.js
```

For `--export-only`:

```bash
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.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.