Skip to content

Commit 639837e

Browse files
committed
docs: surface dedicated /handoff /inbox /ack slash commands across user-facing docs
- README: handoff use case now uses /handoff (not session-absorb handoff), shows the /inbox + /ack flow as the receiving side, calls out that --done / --pending / --blocked notes lead the brief - README install description updated to list /handoff /inbox /ack alongside /absorb and /session-absorb - README Limits section: replaced "no formal test suite" with accurate "smoke-level (18 pytest cases)" line, and added an honest note about the macOS cwd casing quirk in inbox prefix matching with the workaround - docs/use-cases.md: scenarios 4 and 5 (end-of-day async handoff, cross-CLI with require-ack) rewritten to use /handoff /inbox /ack and now show the actual artifacts (brief markdown path, SQLite row, inbox table output) for tangible context - docs/reference.md: new "Dedicated slash commands (Claude Code)" section documenting /handoff /inbox /ack with their skill paths - CHANGELOG: Unreleased section adds the dedicated slash commands and documents the cwd-casing prefix-match limitation under Known issues
1 parent cc332ad commit 639837e

4 files changed

Lines changed: 46 additions & 9 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1414
- `ack` subcommand to mark a handoff as absorbed by the receiving session.
1515
- New `handoffs` SQLite table at `~/.local/share/session-absorb/sessions.db` for handoff state tracking.
1616
- Brief writer now prepends a `## Handoff Notes` section (What's done / What's pending / What's blocked) when handoff notes are supplied.
17+
- Dedicated top-level slash commands `/handoff`, `/inbox`, and `/ack` as thin alias skills - no need to remember `/absorb handoff ...` pass-through syntax.
18+
19+
### Known issues
20+
21+
- Inbox cwd matching is byte-exact prefix. On macOS where `$(pwd)` and `os.getcwd()` can return different casing for the same directory (case-preserving but case-insensitive filesystem), an inbox lookup may miss a handoff stored with the other casing. Workaround: pass `--cwd "$(python3 -c 'import os; print(os.getcwd())')"` explicitly to `/inbox`. Fix planned.
1722

1823
## [0.1.0] - 2026-05-08
1924

README.md

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,19 @@ New Terminal window, new Claude session, same context. The session you're in now
4343
**End of the day, hand off to tomorrow.** You shipped half a PR. You won't remember the state by morning. Write a handoff for the next session that opens in this directory.
4444

4545
```
46-
session-absorb handoff --no-launch --target-cwd "$(pwd)" \
46+
/handoff --no-launch --target-cwd "$(pwd)" \
4747
--done "API routes done" --pending "frontend wiring" --blocked "Stripe key"
4848
```
4949

50-
Tomorrow's session runs `/absorb inbox`, sees the pending handoff, reads the brief, picks up where you stopped.
50+
Tomorrow's session runs `/inbox`, sees the pending handoff, reads the brief at `.session-absorb/briefs/...md`, then runs `/ack <id>` so you know it landed. The brief is plain markdown - your `--done` / `--pending` / `--blocked` notes lead, the ranked transcript excerpts follow.
5151

5252
## Install
5353

5454
```bash
5555
curl -sSL https://raw.githubusercontent.com/ThatGuyAstro/context-absorb/v0.1.0/install.sh | bash
5656
```
5757

58-
That installs the `session-absorb` command, the `/absorb` and `/session-absorb` skills for both Claude Code and Codex, and a SessionStart hook that auto-tags new sessions with short alias codes (e.g. `TMS01`). Requires Python 3.10+. macOS-tested; Linux/Windows fallbacks landed but unverified.
58+
That installs the `session-absorb` command, the `/absorb`, `/session-absorb`, `/handoff`, `/inbox`, and `/ack` skills for Claude Code (plus `/session-absorb` for Codex), and a SessionStart hook that auto-tags new sessions with short alias codes (e.g. `TMS01`). Requires Python 3.10+. macOS-tested; Linux/Windows fallbacks landed but unverified.
5959

6060
## Demo
6161

@@ -110,7 +110,7 @@ The shared CLI exposes the subcommands you'll touch directly:
110110

111111
**Shortcuts:** `here [action]` for the cwd default, `last [action]` for anywhere, `fork-myself` for the current session.
112112

113-
**Handoff:** `handoff` (write a brief and log it for the next session), `inbox` (list pending handoffs aimed at you), `ack` (mark one absorbed).
113+
**Handoff:** `handoff` (write a brief with structured `--done` / `--pending` / `--blocked` notes and log it for the next session), `inbox` (list pending handoffs aimed at you), `ack` (mark one absorbed). All three are also dedicated slash commands: `/handoff`, `/inbox`, `/ack`.
114114

115115
**Plumbing:** `db` to inspect the SQLite catalog, `web` to serve a local live dashboard, `install` to (re)install the runtime and skills.
116116

@@ -125,7 +125,8 @@ Full flag-by-flag reference lives in [docs/reference.md](docs/reference.md). Arc
125125
- Live Claude questioning sometimes fails on resumed sessions with stale deferred-tool marker errors. The tool falls back to transcript extraction automatically.
126126
- Codex has no non-interactive fork, so cross-CLI handoff out of Codex always uses a brief.
127127
- Both CLIs need to be on the same machine. There is no remote session pulling.
128-
- No formal test suite. Validation is `python3 -m py_compile` plus real CLI smoke tests.
128+
- Inbox cwd matching is a byte-exact prefix check. On macOS where `$(pwd)` and `os.getcwd()` can return different casing for the same directory, you may need to pass `--cwd "$(python3 -c 'import os; print(os.getcwd())')"` explicitly to `/inbox`. Fix planned, see issues.
129+
- Tests are smoke-level (18 pytest cases). Full coverage is on the roadmap.
129130

130131
## License + contributing
131132

docs/reference.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,18 @@ Lives at `skills/claude/absorb/SKILL.md` (alias of `/session-absorb`). Routes by
433433
| `/absorb <subcommand> [args]` | C | Direct pass-through to `session-absorb`. |
434434
| `/absorb <free text>` | D | Haiku subagent resolves intent (session match + verb) and runs the command in one shot. |
435435

436+
## Dedicated slash commands (Claude Code)
437+
438+
Three thin alias skills for the most common handoff verbs. Same behavior as the `/absorb <subcommand>` pass-through, fewer keystrokes.
439+
440+
| Slash | Runs | Live at |
441+
|---|---|---|
442+
| `/handoff [args]` | `session-absorb handoff {{ARGUMENTS}}` | `skills/claude/handoff/SKILL.md` |
443+
| `/inbox [args]` | `session-absorb inbox {{ARGUMENTS}}` | `skills/claude/inbox/SKILL.md` |
444+
| `/ack <id> [--note]` | `session-absorb ack {{ARGUMENTS}}` | `skills/claude/ack/SKILL.md` |
445+
446+
Each is registered with a tightly scoped description (`Use when the user types /<name>`) so they don't auto-fire on unrelated mentions of "handoff" or "inbox" in conversation. To see all the flags they accept, see the corresponding `session-absorb` subcommand sections above.
447+
436448
### Path A action menu
437449

438450
Primary actions shown after a session is selected:

docs/use-cases.md

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,39 @@ Pick the Codex session (it's the green circle in the picker), choose `🤝 Hando
4141
End of the day, you've got one PR half-done. You won't remember the state by morning. You write a structured handoff to whichever Claude session opens in this cwd next.
4242

4343
```
44-
session-absorb handoff --no-launch --target-cwd "$(pwd)" --done "API routes wired" --pending "frontend integration" --blocked "waiting on Stripe API key"
44+
/handoff --no-launch --target-cwd "$(pwd)" \
45+
--done "API routes wired" \
46+
--pending "frontend integration" \
47+
--blocked "waiting on Stripe API key"
4548
```
4649

47-
Tomorrow you start a Claude session in the same directory and run `/absorb inbox`. The pending handoff shows up. You read the brief and pick up exactly where you stopped.
50+
Two artifacts get written:
51+
52+
- A markdown brief at `.session-absorb/briefs/<timestamp>-claude-<id>.md`. Your `## Handoff Notes` section (What's done / What's pending / What's blocked) leads, then session metadata, dominant tools, recent turns, and ranked transcript excerpts.
53+
- A row in `~/.local/share/session-absorb/sessions.db` `handoffs` table marking it pending and tying it to your cwd.
54+
55+
Tomorrow you start a Claude session in the same directory and run `/inbox`. The pending handoff shows up:
56+
57+
```
58+
# Inbox: 1 pending handoff(s)
59+
ID AGE FROM BRIEF REQ_ACK STATUS
60+
-- -------- -------------------------------- -------------------------- ------- -------
61+
3 16h ago claude:f7f36dcf (~/proj/api) .session-absorb/briefs/... no pending
62+
```
63+
64+
You read the brief, pick up where you stopped, and run `/ack 3` so the row flips to `acked` with your session id and timestamp recorded.
4865

4966
**5. Cross-CLI handoff with explicit ack**
5067

5168
You ran a heavy refactor in Codex. You want Claude to take over. You also want to know whether Claude actually started.
5269

5370
```
54-
session-absorb handoff --target-cli claude --require-ack --done "refactor complete, all tests passing" --pending "performance benchmarks"
71+
/handoff --target-cli claude --require-ack \
72+
--done "refactor complete, all tests passing" \
73+
--pending "performance benchmarks"
5574
```
5675

57-
Claude session opens. After it absorbs the brief, it runs `session-absorb ack <id>`. Your Codex session can check `session-absorb inbox --show-all` to confirm the handoff was acknowledged.
76+
Because `--target-cli` differs from the source CLI, `--launch` defaults true: a new Claude Terminal opens immediately, primed to read the brief before doing anything. After Claude absorbs, it runs `/ack <id> --note "got it"`. Back in Codex, you check `session-absorb inbox --show-all` and see the row flipped to `acked` with the receiver's session id and your note attached.
5877

5978
**6. One question, not a whole digest**
6079

0 commit comments

Comments
 (0)