/coauthor-brief — Collaborator Handoff Brief
Produce a single Markdown brief a co-author (or your future self on another machine) can read in a few minutes to know what changed, where each artifact stands, what's blocked, and how to run the pipeline locally — including restricted-data access steps a new collaborator needs. meta-governance.md covers the memory side of cross-machine work (what syncs via git, what stays in gitignored native auto memory); this skill covers the human side: the per-person, per-session handoff.
Core principle: /checkpoint is for you resuming; /coauthor-brief is for someone else starting. The first answers "where am I?"; the second answers "what do I need to know to take over a piece of this?"
When to use
- Before sending a co-author the repo (or a PR / branch) and you want them oriented, not archaeologizing the git log.
- Onboarding a new RA / collaborator who needs the reproduce-locally and restricted-data steps in one place.
- Periodic sync on a long multi-author project — "here's the delta since the last brief."
- Cross-machine handoff — finishing on the office desktop, picking up on the laptop, or handing the analysis half to a co-author who runs Stata while you run R.
When NOT to use
- For your own resume-point — use
/checkpoint.
- For distilling a noisy session before auto-compact — use
/compress-session.
- For the commit message itself — that goes through
/commit.
Phases
Phase 0 — Determine the "since" point
Resolve the delta window, in this priority order:
--since <arg> if given — a git tag, an ISO date, or Ndays (e.g. --since v1.2, --since 2026-05-01, --since 14days).
- Else, the last brief —
ls -t quality_reports/handoffs/*.md | head -1; use the date in its filename as the floor.
- Else, fall back to 14 days and say so in the brief (an unbounded
git log is noise, not signal).
Echo the resolved window back before gathering ("Brief covers changes since <tag/date> …").
Phase 1 — Gather the delta + project state
Read-only collection. Skip any source that doesn't apply (R-only, Stata-only, no slides) rather than fabricating.
- Git delta —
git log --oneline --since=<point> (or <tag>..HEAD), git diff --stat <point>..HEAD, git branch --show-current, and git log --all --oneline -15 to see co-authors' parallel branches. Group commits by area (manuscript / analysis / slides / infra).
- Reproducibility status — if a passport exists at
quality_reports/passports/<slug>.yaml, read the PASS / FAIL / EXPLAINED / STALE / UNVERIFIED roll-up (audit-reproducibility, replication-protocol.md). Note whether the analysis is replication-ready or has open FAILs.
- Open plan items — most recent
quality_reports/plans/*.md (status + any "Open questions" / "Next" lines) and the latest quality_reports/session_logs/*.md blockers.
- Environment / lockfiles — locate the env capture a collaborator needs:
renv.lock (R), requirements.txt / environment.yml / uv.lock (Python), a Stata version line + .do ssc install list, or whatever /capture-environment wrote. Record the exact restore command.
- Restricted-data steps (skip if
--no-data-section) — if the repo touches confidential/restricted data, read confidential-data.md and summarize the access path a new collaborator needs (DUA / IRB approval, secure-enclave or openICPSR-restricted credentials, where the data lives, what is git-ignored vs committed). Never copy actual restricted values, paths to live extracts, or credentials into the brief — describe the process to obtain access, not the data.
Phase 2 — Write the brief
Use the template below. Keep it tight (~1–2 screens). Concrete path:line pointers beat prose.
Label every status statement measured or inferred. Measured means a command was run and what you are reporting is its output — name the command. Inferred means you believe it from reading the code, the diff, or a run from some earlier day. Both belong in a brief; mixing them silently does not, because the reader cannot tell which claims they can build on without re-checking. Write replication-ready (measured: Rscript scripts/R/00_run_all.R — 0 FAIL), not replication-ready.
Disposition delegated work item by item. Anything handed to a co-author, an RA, or an agent gets its own line and its own state — done (with the evidence) / in progress / blocked (on what) / not started. "Mostly done" is not a disposition: it hands the reader the job of finding the missing piece, which is precisely the job the brief exists to do.
---
date: YYYY-MM-DD
for: [collaborator name or "all coauthors"]
since: [tag | date | Ndays]
branch: [current branch]
---
# Co-Author Brief — [project / paper short name]
## What changed since [since-point]
[3–8 bullets, grouped by area. Each: what changed + why it matters to a reader, not raw commit subjects.]
- **Analysis:** re-ran the main specification on the de-duplicated sample (533 fanned-out rows dropped); headline estimate now −1.19 — see `scripts/R/03_analyze.R:147`.
- **Manuscript:** Table 2 + §4.2 rewritten to match; Figure 3 regenerated.
- **Slides:** untouched.
## Current state of each artifact
| Artifact | Path | State | Evidence (measured / inferred) |
|---|---|---|---|
| Manuscript | `manuscript.tex` | drafting §5 | inferred — §5 read, not compiled since the Table 2 rewrite |
| Analysis | `scripts/R/` | replication-ready | measured: `Rscript scripts/R/00_run_all.R`, passport 11 PASS / 1 EXPLAINED / 0 FAIL |
| Slides | `Slides/` | current | measured: `git log --since=<point> -- Slides/` returns nothing |
## Delegated work — one line per item
[Everything handed to a co-author, an RA, or an agent, dispositioned individually. No roll-ups.]
| Item | Owner | State | Evidence / blocker |
|---|---|---|---|
| Re-run Table 3 with the new sample filter | [name] | done | measured: output diff vs `_outputs/tab3_prev.csv`, 2 cells moved |
| Appendix B proof of Lemma 2 | [name] | blocked | waiting on the boundedness condition in Q1 below |
## Open questions / decisions needed
[Things the co-author should weigh in on. Mark Q1, Q2…; flag which block progress.]
## Reproduce locally
1. Clone + branch: `git checkout <branch>`
2. Restore environment: `Rscript -e 'renv::restore()'` (or `pip install -r requirements.txt` / Stata `do _setup.do`).
3. Run the pipeline: `Rscript scripts/R/00_run_all.R` (or `00_master.do` / `make all`).
4. Verify: `/audit-reproducibility manuscript.tex` should report 0 FAIL.
## Restricted-data access (if applicable)
[Process to obtain access — DUA/IRB/enclave/openICPSR-restricted steps. NO actual data, paths to live extracts, or credentials. See confidential-data.md.]
## Recommended git topology for this project
- One **feature branch per author** (`feat/<author>-<topic>`); rebase on `main`, open a PR, merge via `/commit`.
- `MEMORY.md` is **committed** — generic learnings sync to everyone.
- Native auto memory (`~/.claude/projects/<project>/memory/`) and `.claude/state/` stay **local** — never expect a co-author to have yours (see meta-governance.md).
- Pull before you brief; brief before you hand off.
Phase 3 — Save and summarize
- Write to
quality_reports/handoffs/YYYY-MM-DD_coauthor-brief.md (create quality_reports/handoffs/ if missing). If --for is set, suffix the slug (…_coauthor-brief_<name>.md).
- Print to chat: saved path, the resolved since-window, counts (commits summarized / open questions / artifacts), and whether the data section was included or skipped.
Output / report format
A single Markdown handoff doc at quality_reports/handoffs/YYYY-MM-DD_coauthor-brief.md matching the Phase 2 template, plus a one-line chat summary. No edits to any other file.
Exit behavior
- Brief written: exit 0 with the saved path and summary line.
- No "since" resolvable and no git history in window: still write the brief with an explicit "no changes in window" note rather than failing — a co-author starting fresh still needs the state + reproduce + data sections.
- Restricted-data repo detected but
confidential-data.md missing: write the brief, leave the data section with a TODO: complete per your DUA placeholder, and warn — do not guess the access process.
Flags
--since <tag|date|Ndays> — Baseline to diff against — a git tag, an ISO date, or Ndays (e.g. 14days). Default: the previous brief in quality_reports/handoffs/, else the last tag.
--for <name> — Tailor the brief to a specific collaborator (e.g. surface the restricted-data access steps they still need).
Cross-references
What this skill does NOT do
- Push, PR, or merge. It writes a doc. Branch/PR/merge is
/commit's job.
- Run the pipeline or audit numbers. It reports passport status if one exists; it does not re-run analysis or re-verify claims — that's
/audit-reproducibility.
- Capture the environment. It locates and links existing lockfiles; generating them is
/capture-environment.
- Expose restricted data. It describes the access process only — never copies confidential values, live data paths, or credentials into a brief that may be emailed or committed.
1---2name: coauthor-brief3description: Generate a co-author / collaborator handoff brief for a multi-author, multi-machine project — summarizing what changed since the last brief (git delta), the current state of each artifact (manuscript, analysis, slides), open questions, how to reproduce locally, and any restricted-data access steps. Use when user says "coauthor brief", "handoff brief", "bring my coauthor up to speed", "what changed since last week", "onboard a collaborator", "write a handoff for [name]", or before sending a co-author the repo. NOT a commit or a checkpoint — it is the cross-machine, cross-person summary `meta-governance.md` only partially covers.4---56# /coauthor-brief — Collaborator Handoff Brief78Produce a single Markdown brief a co-author (or your future self on another machine) can read in a few minutes to know **what changed, where each artifact stands, what's blocked, and how to run the pipeline locally** — including restricted-data access steps a new collaborator needs. [`meta-governance.md`](../../rules/meta-governance.md) covers the *memory* side of cross-machine work (what syncs via git, what stays in gitignored native auto memory); this skill covers the *human* side: the per-person, per-session handoff.910**Core principle:** `/checkpoint` is for *you* resuming; `/coauthor-brief` is for *someone else* starting. The first answers "where am I?"; the second answers "what do I need to know to take over a piece of this?"1112## When to use1314- **Before sending a co-author the repo** (or a PR / branch) and you want them oriented, not archaeologizing the git log.15- **Onboarding a new RA / collaborator** who needs the reproduce-locally and restricted-data steps in one place.16- **Periodic sync** on a long multi-author project — "here's the delta since the last brief."17- **Cross-machine handoff** — finishing on the office desktop, picking up on the laptop, or handing the analysis half to a co-author who runs Stata while you run R.1819## When NOT to use2021- For *your own* resume-point — use [`/checkpoint`](../checkpoint/SKILL.md).22- For distilling a noisy session before auto-compact — use [`/compress-session`](../compress-session/SKILL.md).23- For the commit message itself — that goes through [`/commit`](../commit/SKILL.md).2425## Phases2627### Phase 0 — Determine the "since" point2829Resolve the delta window, in this priority order:30311. `--since <arg>` if given — a git tag, an ISO date, or `Ndays` (e.g. `--since v1.2`, `--since 2026-05-01`, `--since 14days`).322. Else, the **last brief** — `ls -t quality_reports/handoffs/*.md | head -1`; use the date in its filename as the floor.333. Else, fall back to **14 days** and say so in the brief (an unbounded `git log` is noise, not signal).3435Echo the resolved window back before gathering ("Brief covers changes since `<tag/date>` …").3637### Phase 1 — Gather the delta + project state3839Read-only collection. Skip any source that doesn't apply (R-only, Stata-only, no slides) rather than fabricating.40411. **Git delta** — `git log --oneline --since=<point>` (or `<tag>..HEAD`), `git diff --stat <point>..HEAD`, `git branch --show-current`, and `git log --all --oneline -15` to see co-authors' parallel branches. Group commits by area (manuscript / analysis / slides / infra).422. **Reproducibility status** — if a passport exists at `quality_reports/passports/<slug>.yaml`, read the PASS / FAIL / EXPLAINED / STALE / UNVERIFIED roll-up ([`audit-reproducibility`](../audit-reproducibility/SKILL.md), [`replication-protocol.md`](../../rules/replication-protocol.md)). Note whether the analysis is replication-ready or has open FAILs.433. **Open plan items** — most recent `quality_reports/plans/*.md` (status + any "Open questions" / "Next" lines) and the latest `quality_reports/session_logs/*.md` blockers.444. **Environment / lockfiles** — locate the env capture a collaborator needs: `renv.lock` (R), `requirements.txt` / `environment.yml` / `uv.lock` (Python), a Stata `version` line + `.do` `ssc install` list, or whatever [`/capture-environment`](../capture-environment/SKILL.md) wrote. Record the exact restore command.455. **Restricted-data steps** *(skip if `--no-data-section`)* — if the repo touches confidential/restricted data, read [`confidential-data.md`](../../rules/confidential-data.md) and summarize the access path a new collaborator needs (DUA / IRB approval, secure-enclave or openICPSR-restricted credentials, where the data lives, what is git-ignored vs committed). **Never copy actual restricted values, paths to live extracts, or credentials into the brief** — describe the *process to obtain access*, not the data.4647### Phase 2 — Write the brief4849Use the template below. Keep it tight (~1–2 screens). Concrete `path:line` pointers beat prose.5051**Label every status statement `measured` or `inferred`.** *Measured* means a command was run and what you are reporting is its output — **name the command**. *Inferred* means you believe it from reading the code, the diff, or a run from some earlier day. Both belong in a brief; mixing them silently does not, because the reader cannot tell which claims they can build on without re-checking. Write `replication-ready (measured: Rscript scripts/R/00_run_all.R — 0 FAIL)`, not `replication-ready`.5253**Disposition delegated work item by item.** Anything handed to a co-author, an RA, or an agent gets its own line and its own state — done (with the evidence) / in progress / blocked (on what) / not started. *"Mostly done"* is not a disposition: it hands the reader the job of finding the missing piece, which is precisely the job the brief exists to do.5455```markdown56---57date: YYYY-MM-DD58for: [collaborator name or "all coauthors"]59since: [tag | date | Ndays]60branch: [current branch]61---6263# Co-Author Brief — [project / paper short name]6465## What changed since [since-point]66[3–8 bullets, grouped by area. Each: what changed + why it matters to a reader, not raw commit subjects.]67- **Analysis:** re-ran the main specification on the de-duplicated sample (533 fanned-out rows dropped); headline estimate now −1.19 — see `scripts/R/03_analyze.R:147`.68- **Manuscript:** Table 2 + §4.2 rewritten to match; Figure 3 regenerated.69- **Slides:** untouched.7071## Current state of each artifact72| Artifact | Path | State | Evidence (measured / inferred) |73|---|---|---|---|74| Manuscript | `manuscript.tex` | drafting §5 | inferred — §5 read, not compiled since the Table 2 rewrite |75| Analysis | `scripts/R/` | replication-ready | measured: `Rscript scripts/R/00_run_all.R`, passport 11 PASS / 1 EXPLAINED / 0 FAIL |76| Slides | `Slides/` | current | measured: `git log --since=<point> -- Slides/` returns nothing |7778## Delegated work — one line per item79[Everything handed to a co-author, an RA, or an agent, dispositioned individually. No roll-ups.]80| Item | Owner | State | Evidence / blocker |81|---|---|---|---|82| Re-run Table 3 with the new sample filter | [name] | done | measured: output diff vs `_outputs/tab3_prev.csv`, 2 cells moved |83| Appendix B proof of Lemma 2 | [name] | blocked | waiting on the boundedness condition in Q1 below |8485## Open questions / decisions needed86[Things the co-author should weigh in on. Mark Q1, Q2…; flag which block progress.]8788## Reproduce locally891. Clone + branch: `git checkout <branch>`902. Restore environment: `Rscript -e 'renv::restore()'` (or `pip install -r requirements.txt` / Stata `do _setup.do`).913. Run the pipeline: `Rscript scripts/R/00_run_all.R` (or `00_master.do` / `make all`).924. Verify: `/audit-reproducibility manuscript.tex` should report 0 FAIL.9394## Restricted-data access (if applicable)95[Process to obtain access — DUA/IRB/enclave/openICPSR-restricted steps. NO actual data, paths to live extracts, or credentials. See confidential-data.md.]9697## Recommended git topology for this project98- One **feature branch per author** (`feat/<author>-<topic>`); rebase on `main`, open a PR, merge via `/commit`.99- `MEMORY.md` is **committed** — generic learnings sync to everyone.100- Native auto memory (`~/.claude/projects/<project>/memory/`) and `.claude/state/` stay **local** — never expect a co-author to have yours (see meta-governance.md).101- Pull before you brief; brief before you hand off.102```103104### Phase 3 — Save and summarize1051061. Write to `quality_reports/handoffs/YYYY-MM-DD_coauthor-brief.md` (create `quality_reports/handoffs/` if missing). If `--for` is set, suffix the slug (`…_coauthor-brief_<name>.md`).1072. Print to chat: saved path, the resolved since-window, counts (commits summarized / open questions / artifacts), and whether the data section was included or skipped.108109## Output / report format110111A single Markdown handoff doc at `quality_reports/handoffs/YYYY-MM-DD_coauthor-brief.md` matching the Phase 2 template, plus a one-line chat summary. No edits to any other file.112113## Exit behavior114115- **Brief written:** exit 0 with the saved path and summary line.116- **No "since" resolvable and no git history in window:** still write the brief with an explicit "no changes in window" note rather than failing — a co-author starting fresh still needs the state + reproduce + data sections.117- **Restricted-data repo detected but `confidential-data.md` missing:** write the brief, leave the data section with a `TODO: complete per your DUA` placeholder, and warn — do **not** guess the access process.118119## Flags120121- `--since` `<tag|date|Ndays>` — Baseline to diff against — a git tag, an ISO date, or `Ndays` (e.g. `14days`). Default: the previous brief in `quality_reports/handoffs/`, else the last tag.122- `--for` `<name>` — Tailor the brief to a specific collaborator (e.g. surface the restricted-data access steps they still need).123124## Cross-references125126- [`.claude/rules/meta-governance.md`](../../rules/meta-governance.md) — the cross-machine memory model (what syncs, what stays local) this brief operationalizes for *people*.127- [`.claude/skills/capture-environment/SKILL.md`](../capture-environment/SKILL.md) — produces the lockfiles the "Reproduce locally" section points at.128- [`.claude/skills/checkpoint/SKILL.md`](../checkpoint/SKILL.md) — the *self*-resume companion (this skill is the *other-person* handoff).129- [`.claude/skills/compress-session/SKILL.md`](../compress-session/SKILL.md) — distil a noisy session before compaction (orthogonal; run before briefing if context is fat).130- [`.claude/rules/confidential-data.md`](../../rules/confidential-data.md) — restricted-data handling; the data section summarizes its access steps without exposing data.131132## What this skill does NOT do133134- **Push, PR, or merge.** It writes a doc. Branch/PR/merge is [`/commit`](../commit/SKILL.md)'s job.135- **Run the pipeline or audit numbers.** It *reports* passport status if one exists; it does not re-run analysis or re-verify claims — that's [`/audit-reproducibility`](../audit-reproducibility/SKILL.md).136- **Capture the environment.** It locates and links existing lockfiles; generating them is [`/capture-environment`](../capture-environment/SKILL.md).137- **Expose restricted data.** It describes the *access process* only — never copies confidential values, live data paths, or credentials into a brief that may be emailed or committed.