# Document Handoff

> Create a comprehensive project archive and handoff package — curated workfolder copy, evidence and state, agent context, and dark-mode HTML memo — from Claude Code or Codex projects. Use for milestone archives, cold-start continuation packages, or comprehensive handoffs; use a lightweight session-handoff skill for a short continuation note.

- Skill: `dachent/document-handoff` (Agent Skill, multi-file: 43 files)
- Install (CLI): `npx skillmds@latest add dachent/document-handoff`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dachent/document-handoff/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: dachent (https://skillmd.com/u/dachent)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/dachent/document-handoff

---


# document-handoff

Produce a self-contained handoff package: a curated workfolder copy of project files plus a dark-mode HTML memo covering 16 structured sections. Enables any agent to cold-start on the project without re-reading sessions.

**Announce at start:** "I'm using the document-handoff skill to create a project handoff package."

---

## Prerequisites

Resolve the CLI path once at session start:

```powershell
$cli = (Get-ChildItem "$env:USERPROFILE\.claude\plugins\cache" -Recurse -Filter "cli.mjs" -ErrorAction SilentlyContinue |
  Where-Object { $_.FullName -match [regex]::Escape("document-handoff\scripts") } |
  Select-Object -First 1).FullName

if (-not $cli) {
  $cli = (Get-ChildItem "$env:USERPROFILE\.claude\skills" -Recurse -Filter "cli.mjs" -ErrorAction SilentlyContinue |
    Where-Object { $_.FullName -match [regex]::Escape("document-handoff\scripts") } |
    Select-Object -First 1).FullName
}
if (-not $cli) {
  # Codex skill install: respects CODEX_HOME env var
  $codexHome = if ($env:CODEX_HOME) { $env:CODEX_HOME } else { "$env:USERPROFILE\.codex" }
  $cli = (Get-ChildItem "$codexHome\skills" -Recurse -Filter "cli.mjs" -ErrorAction SilentlyContinue |
    Where-Object { $_.FullName -match [regex]::Escape("document-handoff\scripts") } |
    Select-Object -First 1).FullName
}
if (-not $cli) {
  # Legacy: Codex plugin cache
  $cli = (Get-ChildItem "$env:USERPROFILE\.codex\plugins" -Recurse -Filter "cli.mjs" -ErrorAction SilentlyContinue |
    Where-Object { $_.FullName -match [regex]::Escape("document-handoff\scripts") } |
    Select-Object -First 1).FullName
}
if (-not $cli) { Write-Error "document-handoff cli.mjs not found. Install via: claude skills install / codex skills install"; return }
```

---

## Collect Inputs

Ask the user (or infer from context):

1. **Project slug** — short name used in output file names (e.g. `my-project`)
2. **Source root** — absolute path to the project directory to archive
3. **Output directory** — where to write the workfolder and memo. Honor the active harness/session output policy when one exists; otherwise default to `<source_root>\.handoff-output`.
4. **Fresh or resume?** — `--fresh` overwrites existing state; `--resume` continues from last completed phase

**Provider detection note:** The default session adapters discover Claude Code and Codex. A session-capture JSON file can also enable Kimi Code, Hermes SQLite, or declared JSONL/supporting sources from another harness. See [references/session-capture.md](references/session-capture.md).

```powershell
$slug = "<project-slug>"
$sourceRoot = "<absolute-path-to-project>"
$outputDir = "$sourceRoot\.handoff-output"
$statePath = "$outputDir\.handoff\state.json"
```

---

## Phase 0 — Initialize

```powershell
node --no-warnings $cli init --project $slug --source-root $sourceRoot --output-dir $outputDir --fresh
```

For multi-harness or explicit-source capture, add `--session-config <absolute-path-to-config.json>`.

---

## Phase 1 — Discover

```powershell
node --no-warnings $cli discover --state $statePath
```

**GATE:** Review `$outputDir\.handoff\catalog.html` in a browser. For each high-risk file listed as excluded:
- If you need it: open `$outputDir\.handoff\catalog.json`, set `"action": "copy"` on that entry, save.
- If excluded files are correct: proceed.

Type **PROCEED** to continue.

---

## Phase 2 — Populate

```powershell
node --no-warnings $cli populate --state $statePath
```

---

## Phase 3 — Extract Sessions

```powershell
node --no-warnings $cli extract-sessions --state $statePath
```

Unless `capture_raw:false` is configured, this phase also creates content-addressed raw evidence under `.handoff/session-evidence/`. Active JSONL logs are captured as verified complete-record prefixes; Hermes sessions are exported from a read transaction. This phase does not add an ACL or privacy-classification gate.

**GATE:** Review the sessions listed above. Confirm these are the right sessions for this project.

If sessions are missing: they may not have a matching `cwd` in their metadata. You can manually add session entries to `$statePath` under `sessions_found`.

Type **PROCEED** and set `sessions_validated: true` in state, or edit state manually.

---

## Phase 4 — Synthesize

```powershell
node --no-warnings $cli synthesize --state $statePath
```

---

## Phase 5 — Sections (GATE — no script)

Review `$outputDir\.handoff\synthesis.md`. The skill will write these 16 sections:

bootstrap, executive-summary, deliverables, current-state, technical-decisions, challenges-blockers, next-steps, context-sources, open-questions, dependencies, environment, testing, architecture, data-flow, changelog

Plus `privacy-security` if any risk-flagged files were found.

**GATE:** Confirm the section list or remove any sections you don't need.

Type **PROCEED** to render.

---

## Phase 6 — Render Memo

```powershell
node --no-warnings $cli render-memo --state $statePath
```

Open `$outputDir\$slug-memo.html` in a browser to preview.

---

## Phase 7 — Verify

```powershell
node --no-warnings $cli verify --state $statePath
```

Review `$outputDir\.handoff\verification.json`. If `overall: false`, fix the reported issues and re-run this phase.

---

## Outputs

| File | Description |
|---|---|
| `$outputDir\$slug-memo.html` | Dark-mode HTML handoff memo (16 sections) |
| `$outputDir\$slug-agent-context.json` | Agent cold-start context with citation index |
| `$outputDir\.handoff\catalog.json` | Full file inventory with risk flags |
| `$outputDir\.handoff\catalog.html` | Visual catalog browser |
| `$outputDir\.handoff\digests.json` | Session digests |
| `$outputDir\.handoff\session-evidence\manifest.json` | Multi-harness raw-evidence manifest |
| `$outputDir\.handoff\session-evidence\checksums.sha256` | Content-addressed evidence checksums |
| `$outputDir\.handoff\synthesis.md` | Synthesis narrative |
| `$outputDir\.handoff\verification.json` | Verification results |
| `$outputDir\.handoff\{slug}-citation-index.json` | Citation graph |
| `$outputDir\plans\`, `code\`, `artifacts\`, `inputs\` | Curated workfolder |

