{"id":"c177bc4c-91b9-447c-b4e0-549af93d507e","slug":"conclude-it","kind":"skill","name":"conclude-it","summary":"One door for every Claude Code session close — ship pipeline (test gate → deploy → prod gate) + close core (debrief, ledger, sweep, honest verdict). The conclude stage of the *-it lifecycle.","owner":"DevOtts","repoUrl":"https://github.com/DevOtts/conclude-it","license":"MIT","licenseTier":"permissive","trust":"community","stars":0,"match":null,"fewStars":true,"format":"skill","createdAt":"2026-08-26T14:43:29.000Z","addedAt":"2026-10-21T12:58:06.058Z","logoUrl":"https://avatars.githubusercontent.com/u/851664?u=119bf0c4723e739bf49c5f72896b54b3aed38e78&v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["developer-tools","data-analytics"],"tags":["claude","claude-code","openclaw-skill","session-management"],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-22T18:11:12.379Z","sample":false,"url":"https://conduits.dev/tools/conclude-it","language":"JavaScript","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"<div align=\"center\">\n\n<h1>/conclude-it</h1>\n\n<h3>\n  <strong>\"Done\" is a claim. Concluded is proven.</strong>\n</h3>\n\n<p>\n  Your agent says the feature is done. Is it live? Verified in prod? Documented?<br>\n  Is anything still running? Did it clean up after itself?<br>\n  <strong>Stop closing sessions on hope — one command proves it, files it, cleans it, and tells you honestly if it's safe to walk away.</strong>\n</p>\n\n<a href=\"#how-it-works\">\n  <img src=\"assets/conclude-it-hero.svg\" alt=\"conclude-it flow — triage, ship pipeline, close core, honest verdict\" width=\"100%\">\n</a>\n\n<p>\n  <a href=\"#installation\"><img src=\"https://img.shields.io/badge/Quick%20Start-Install-blue?style=for-the-badge\" alt=\"Quick Start\"></a>\n  <a href=\"https://opensource.org/licenses/MIT\"><img src=\"https://img.shields.io/badge/License-MIT-yellow.svg?style=for-the-badge\" alt=\"License: MIT\"></a>\n  <a href=\"https://claude.ai/code\"><img src=\"https://img.shields.io/badge/Works%20with-Claude%20Code-orange?style=for-the-badge&logo=anthropic\" alt=\"Works with Claude Code\"></a>\n  <a href=\"#platform-compatibility\"><img src=\"https://img.shields.io/badge/Portable-70%2B%20agents-2ea44f?style=for-the-badge\" alt=\"Portable: 70+ agents\"></a>\n  <a href=\"https://github.com/DevOtts\"><img src=\"https://img.shields.io/badge/author-DevOtts-181717?style=for-the-badge&logo=github\" alt=\"Author: DevOtts\"></a>\n</p>\n\n<p>\n  <a href=\"#installation\">Install</a>\n  &nbsp;·&nbsp;\n  <a href=\"#why-a-close-ritual\">Why a close ritual</a>\n  &nbsp;·&nbsp;\n  <a href=\"#how-it-works\">How it works</a>\n  &nbsp;·&nbsp;\n  <a href=\"#the-report\">The report</a>\n  &nbsp;·&nbsp;\n  <a href=\"#whats-bundled\">What's bundled</a>\n  &nbsp;·&nbsp;\n  <a href=\"#platform-compatibility\">Platform compatibility</a>\n  &nbsp;·&nbsp;\n  <a href=\"CHANGELOG.md\">Changelog</a>\n</p>\n\n> [!NOTE]\n> **The lifecycle family** — plan-it plans it, build-it builds it, review-it reviews it, **conclude-it concludes it**: [`plan-it`](https://github.com/DevOtts/plan-it) plans → [`build-it`](https://github.com/DevOtts/build-it) builds → [`review-it`](https://github.com/DevOtts/review-it) verifies → **conclude-it** concludes. This is the last stage: the work is built and reviewed; conclude-it ships it, proves it in prod, files the knowledge, cleans the debris, and closes the session. ([`prompt-it`](https://github.com/DevOtts/prompt-it) compiles the prompts that start it all.)\n\n<br>\n</div>\n\nEvery long agent session ends the same way: you type the quit and hope. Hope the\nknowledge that existed only in the conversation got written down somewhere. Hope\nthe feature you merged actually works in prod. Hope no background job is still\nrunning, no worktree is left dangling, no credential got echoed into a file on a\nremote host at 2am.\n\nconclude-it replaces the hope with a ritual. **One command, every close.** A\nmechanical triage looks at what the session actually did — deploys run, feature\nwork at the merge boundary, a Definition of Done met without prod verification —\nand picks the leg for you:\n\n- **Ship-shaped session** → the **ship pipeline** first: local test gate →\n  merge + deploy → prod gate → archive the plan docs → capture the backlog →\n  update the board. Fail-closed: a red gate never proceeds, and a skipped gate\n  *is* a failed gate.\n- **Plain session** (research, planning, Q&A — the common case) → straight to\n  the **close core**.\n\nThen every session, both legs, gets the same close core: debrief the knowledge\ninto durable docs, write the session-history ledger card, verify nothing is\nmid-flight, reap idle subagents, sweep the session's own footprint (secrets at\nrest first), and end with a verdict you can trust.\n\n## Why a close ritual\n\nBecause the failure modes of *ending* a session are quieter than the failure\nmodes of running one — and they compound:\n\n| Without a ritual | With conclude-it |\n|---|---|\n| \"Done\" means \"the code is written\" | Done means **green in prod**, or it's loudly labeled \"deployed-but-unverified\" |\n| Session knowledge dies with the transcript | Debrief promotes it into durable docs — and a **supersession sweep** retires the docs the change replaced, so you never keep two \"current\" pages describing two versions of one feature |\n| \"Which session did X?\" means re-reading transcripts | A ≤40-line ledger card per session answers it for ~150 tokens |\n| Zombie subagents hold RAM; orphaned processes linger | Finished agents reaped; headless processes killed **by exact recorded PID only** |\n| Worktrees, scratch files, and the occasional credential accumulate | The footprint sweep removes what the session can *prove* it created — secrets first, verified absent — and reports what it deliberately left |\n| The summary shows the green half | The verdict and the HTML report show **every** state — RED and UNVERIFIED get their own badges |\n\nThe honest claim: conclude-it doesn't make your tests pass or your deploy work.\nIt makes it impossible to *close* a session on top of a failure without seeing\nit named.\n\n## Installation\n\nconclude-it ships as both a **Claude Code plugin** and a standard repo-root\n**`SKILL.md`**, so it installs across the whole agent ecosystem. Pick your tool\nbelow.\n\n> [!TIP]\n> **Two universal installers** understand the `SKILL.md` standard and drop conclude-it into the right directory for 70+ tools — use these if your agent isn't listed:\n> ```sh\n> npx skills add DevOtts/conclude-it -a <agent>   # e.g. -a codex, -a cursor, -a github-copilot ; add -g for global\n> gh skill install DevOtts/conclude-it            # GitHub CLI (project or user scope)\n> ```\n> Peek first with `npx skills add DevOtts/conclude-it --list`.\n\n### Claude Code  ·  *native, full experience*\n\n```sh\n# 1. Register the marketplace\n/plugin marketplace add DevOtts/conclude-it\n\n# 2. Install the plugin (plugin-name@marketplace-name)\n/plugin install conclude-it@conclude-it\n```\n\nThe marketplace name `devotts` comes from the `name` field in\n[marketplace.json](.claude-plugin/marketplace.json). This is the **only** target\nthat gets the full bundle — the conductor with its progressive-disclosure ship\npipeline, the deterministic `build-report.py` + HTML template machinery, *and*\nthe bundled generic `session-debrief`, with slash-command invocation and\nauto-activation. (Skills-CLI alternative: `npx skills add DevOtts/conclude-it -a claude-code`.)\n\n### Codex  ·  *OpenAI Codex CLI*\n\n```sh\nnpx skills add DevOtts/conclude-it -a codex\n# or:  gh skill install DevOtts/conclude-it\n```\n\nInstalls to the shared `.agents/skills/conclude-it/` that Codex reads. Codex\ndoesn't carry the bundled machinery, so conclude-it runs the debrief **inline**\nand writes the closeout report as markdown (graceful degradation) — you still\nget the triage, the fail-closed gates, the ledger card, the sweeps, and the\nhonest verdict.\n\n### OpenClaw\n\n```sh\nnpx skills add DevOtts/conclude-it -a openclaw\n```\n\nLands in `.openclaw/skills/conclude-it/SKILL.md`.\n\n### Cursor\n\n```sh\nnpx skills add DevOtts/conclude-it -a cursor      # add -g for a global install\n```\n\nInstalls into Cursor's `.agents/skills/` and is auto-discovered.\n\n### VS Code + GitHub Copilot\n\n```sh\nnpx skills add DevOtts/conclude-it -a github-copilot\n# or:  gh skill install DevOtts/conclude-it\n```\n\nCopilot auto-discovers skills under `.agents/skills/`.\n\n### Copilot CLI\n\n```sh\ngh skill install DevOtts/conclude-it\n# or:  npx skills add DevOtts/conclude-it -a github-copilot\n```\n\n### Kiro CLI / IDE\n\n```sh\ngh skill install DevOtts/conclude-it\n```\n\nIf your Kiro build doesn't yet read the shared skills path, drop the skill in manually:\n\n```sh\ngit clone https://github.com/DevOtts/conclude-it /tmp/conclude-it\nmkdir -p \"<kiro-skills-dir>/conclude-it\" && cp /tmp/conclude-it/SKILL.md \"<kiro-skills-dir>/conclude-it/\"\n```\n\n### Others  ·  *OpenCode · Cline · Windsurf · Zed · Gemini CLI · Antigravity · Amp · Warp …*\n\n```sh\nnpx skills add DevOtts/conclude-it -a <agent>\n```\n\nRun `npx skills add DevOtts/conclude-it --list`, then target your agent — the\nCLI knows the correct path for each. **Manual fallback for any tool:** clone the\nrepo and copy the root [`SKILL.md`](SKILL.md) into your agent's\nskills/instructions directory.\n\n> [!NOTE]\n> On every target **except Claude Code**, conclude-it installs as a single self-contained skill (the root `SKILL.md` — it carries the full flow, ship pipeline included). The HTML report machinery, the bundled `session-debrief`, and delegated helpers like `/iterate` and `/full-qa` are Claude Code plugin pieces; elsewhere conclude-it runs those phases inline, writes the closeout report as markdown, and **names the absence in its verdict** instead of pretending. The thing that ports everywhere is the **ritual** — the gates, the sweeps, and the honesty.\n\n### Use\n\n```\n/conclude-it        # at the end of any session — the triage picks the leg\n```\n\nAlso answers to plain language: *\"close this session\"*, *\"wrap up and exit\"*,\n*\"ship it and close\"*, *\"I'm done for now\"*, *\"is it safe to exit?\"*.\n\n## First run — conclude-it interviews your repo (once)\n\nThe first time you close a session in a repo, conclude-it runs a **five-question\nsetup interview** — and it detects before it asks, so most questions arrive\npre-answered for you to confirm:\n\n1. **Where is your documentation folder?**\n2. **Do you keep a second brain** (Obsidian or similar)? Path?\n3. **Is it global or per-project?** Explain the layout — or just say the word\n   and it inspects the vault and *proposes* where session knowledge should be\n   filed (a guess is always labeled as a guess, never silently trusted).\n4. **Deploy** — it recommends you create (or point it to) a `<project>-deploy`\n   skill with this repo's exact deploy instructions, and offers to scaffold it\n   from what it already knows. Until then, deploys run inline via your\n   documented path.\n5. **Debrief** — same shape: a `<project>-debrief` skill describing how your\n   docs structure works; otherwise the bundled generic `session-debrief`.\n\nThe answers are saved as a small block **inside the repo** (`CLAUDE.md` /\n`AGENTS.md` / `.conclude-it/config.md`) — per-repo memory, committable,\nreviewable. Open a different repo and it asks again *there*; it never writes\nyour answers globally unless you explicitly say \"save this globally\". Every\nlater close reads the block silently and gets straight to work.\n\n## How it works\n\n```\n                         ┌──────────────────────┐\n        /conclude-it ──▶ │  STEP 0 · TRIAGE      │  mechanical signals, not vibes:\n                         │  ship-shaped?         │  deploys run? merges pending? DoD\n                         └──────┬───────┬────────┘  met without prod verification?\n                          yes   │       │   no\n              ┌─────────────────▼─┐     │\n              │  SHIP PIPELINE    │     │\n              │  S1 local gate 🔴🟢│     │   fail-closed: red never advances;\n              │  S2 merge+deploy  │     │   fix loops until green;\n              │  S3 prod gate 🔴🟢 │     │   no prod target → \"deployed-but-\n              │  S4 archive docs  │     │   unverified\", said loudly\n              │  S5 backlog       │     │\n              │  S6 PM board      │     │\n              └─────────────────┬─┘     │\n                                ▼       ▼\n              ┌──────────────────────────────────┐\n              │  CLOSE CORE (every session)      │\n              │  1  debrief + supersession sweep │\n              │  2  session-history ledger card  │\n              │  3  mid-flight verification      │\n              │  4  reap subagents + processes   │\n              │  5  footprint sweep (secrets 1st)│\n              │  6  CONCLUDE_REPORT.html (ship)  │\n              └────────────────┬─────────────────┘\n                               ▼\n               ✅ safe to exit  /  ⚠️ not yet — here's the blocker\n```\n\nThree details that took real sessions to learn, baked in:\n\n- **The debrief guard is durable, not memory.** In long, compacted sessions,\n  \"did the debrief already run?\" is answered by checking artifacts on disk —\n  never by trusting the model's recall.\n- **Orchestrators close their orchestra.** A session that dispatched other\n  sessions (peers, headless spawns, cloud runs) verifies each one reached a\n  terminal state before it may close itself. No worker left running unowned.\n- **Ownership is proven, never globbed.** The sweep deletes by exact name after\n  checking dates and attribution. `rm /tmp/q*.js` once nearly took out another\n  session's six-week-old file; listing first is the rule.\n\n## The report\n\nShip-shaped closes end with `CONCLUDE_REPORT.html` — a **local** HTML report\n(never a hosted page) rendered deterministically by the bundled\n`build-report.py` from a small JSON manifest. Light/dark toggle, a gates\nscoreboard, one badge card per item (`ok` / `hold` / `open` / `act`), the\nreferenced markdown reports embedded as collapsed toggles — and on every card a\n**\"How to test\"** block: real steps *you* can perform to verify the claim, not a\nrestatement of what the agent ran. RED and UNVERIFIED items get their own badges\nwith the blocker named. A report that only shows the green half is a fake.\n\n(Outside Claude Code, where the machinery isn't installed, the same report is\nwritten as markdown with the same honest structure.)\n\n## What's bundled\n\n| Piece | What it is |\n|---|---|\n| `skills/conclude-it/SKILL.md` | The close core + Step-0 triage (always loaded) |\n| `skills/conclude-it/references/ship-pipeline.md` | The ship leg S0–S7 (loaded only when triage says ship-shaped — plain closes never pay for it) |\n| `skills/conclude-it/build-report.py` + `report-template.html` | Deterministic report machinery — agents author a JSON manifest, never hand-written HTML |\n| `skills/session-debrief/SKILL.md` | Generic end-of-session knowledge capture with the anti-rot promotion rule and the supersession sweep — used when the project has no debrief skill of its own |\n\nconclude-it conducts, it doesn't reimplement: if your project has its own deploy\nskill, test scripts, debrief, or PM board, those are what run. Pairs naturally\nwith [`build-it`](https://github.com/DevOtts/build-it)'s `/iterate` and\n`/full-qa` for the red-gate fix loops, but degrades gracefully without them.\n\n## Security considerations\n\n- **Secrets-at-rest sweep** — credentials the session wrote (local, remote host,\n  or inside a pod) are hunted first, removed, and **verified absent**.\n- **Exact-PID kills** — never pattern-matched; a grep-kill can take out another\n  session's process.\n- **Proven ownership** — only artifacts the session can show it created are\n  deleted; everything else is reported, never touched.\n- **Scoped deploy authorization** — the ship path authorizes the deploy\n  sequence; irreversible destructive actions always require an explicit yes.\n- **Local-only reporting** — the closeout report is a file on disk; nothing is\n  published to hosted surfaces uninvited.\n\n## Platform compatibility\n\nconclude-it is a `SKILL.md` at its core, so it runs anywhere the open\n[Agent Skills](https://github.com/vercel-labs/skills) standard does. **Claude\nCode** gets the full plugin (conductor + report machinery + bundled\n`session-debrief`); every other tool gets the portable **ritual** — triage,\nfail-closed gates, ledger card, sweeps, and the honest verdict — with the\ndelegated pieces running inline.\n\nEvery `skills add -a <agent>` row below is shorthand for\n`npx skills add DevOtts/conclude-it -a <agent>` (append `-g` for a global\ninstall). Don't see your tool? Run `npx skills add DevOtts/conclude-it --list` —\nthe CLI supports 70+ agents.\n\n| Platform | Status | Install Method |\n|----------|--------|----------------|\n| Claude Code | ✅ Native | Plugin marketplace |\n| Cursor | ✅ Supported | Auto-discovery |\n| VS Code + GitHub Copilot | ✅ Supported | Auto-discovery |\n| Copilot CLI | ✅ Supported | `gh skill install` |\n| Codex | ✅ Supported | `skills add -a codex` |\n| OpenCode | ✅ Supported | `skills add -a opencode` |\n| OpenClaw | ✅ Supported | `skills add -a openclaw` |\n| Antigravity | ✅ Supported | `skills add -a antigravity` |\n| Gemini CLI | ✅ Supported | `skills add -a gemini-cli` |\n| Pi Agent | ✅ Supported | `skills add -a pi` |\n| Vibe CLI | ✅ Supported | `skills add -a mistral-vibe` |\n| Hermes | ✅ Supported | `skills add -a hermes-agent` |\n| Cline | ✅ Supported | `skills add -a cline` |\n| KIMI CLI | ✅ Supported | `skills add -a kimi-code-cli` |\n| Trae | ✅ Supported | `skills add -a trae` |\n| Nanobot | ✅ Supported | Manual — copy `SKILL.md` |\n| Kiro CLI / IDE | ✅ Supported | `skills add -a kiro-cli` |\n| Windsurf · Zed · Amp · Warp · Roo · Goose · Junie · Qwen · …50+ more | ✅ Supported | `npx skills add DevOtts/conclude-it --list` |\n\n**Legend** — **✅ Native:** the complete plugin (conductor + progressive-disclosure ship pipeline + HTML report machinery + bundled `session-debrief`, slash-command + auto-activation). **✅ Supported:** the self-contained root `SKILL.md` installs and runs the full ritual; Claude-specific pieces (HTML machinery, bundled debrief, delegated `/iterate`//`/full-qa`) execute inline, and the verdict names what ran inline.\n\n## License\n\nMIT — see [LICENSE](LICENSE) and [plugin.json](plugins/conclude-it/.claude-plugin/plugin.json). Use it, fork it, close with it.\n\n---\n<div align=\"center\">\n<em>Authored by <a href=\"https://github.com/DevOtts\">DevOtts</a> · part of the <strong>*-it</strong> lifecycle family:\n<a href=\"https://github.com/DevOtts/prompt-it\">prompt-it</a> ·\n<a href=\"https://github.com/DevOtts/plan-it\">plan-it</a> ·\n<a href=\"https://github.com/DevOtts/build-it\">build-it</a> ·\n<a href=\"https://github.com/DevOtts/review-it\">review-it</a> ·\n<strong>conclude-it</strong></em>\n</div>\n"}