Session continuity with sepia
sepia owns session lifecycle; myco owns work memory. The boundary is two verbs — no sepia code lives in this repo, and no myco code in sepia. Each side just calls the other's CLI.
The pattern
Session end (sepia hook) — leave a resumable note on the item you were working, tagged with the sepia session id:
myco handoff T-012 \
--actor devin \
--session <sepia-session-id> \
--note "Done: store layer landed. Next: wire verbs. Open: archive semantics for ADRs."--note - reads stdin, so a hook can pipe a generated summary. --session accepts any id string — a sepia session id, a cli:<pid>:<ts> fallback, whatever wrote the entry. It's provenance only; myco records it and never interprets it.
Session start — pull the minimal restart context into the prompt:
myco resume T-012 --jsonresume returns the item (status, priority, owner, labels), the titles of its blocks: dependencies, the latest handoff entries, and the unchecked - [ ] checklist items for file-backed items — the single-item counterpart of myco status --prompt. Human output is a compact prompt-ready block; --last N caps the entries shown (default 10).
Where handoffs live
handoffs/<ID>.md — one append-only file per item, uniform across every kind:
+++
item = "T-012"
+++
# Handoffs — T-012
## 2026-10-29 · devin · session:cli:abc123
Done: store layer landed. Next: wire verbs. Open: archive semantics for ADRs.Entries are never rewritten — each myco handoff is one appended ## <date> · <actor> · session:<id> heading and one atomic commit (chore: handoff T-012) on the project branch, so the branch history is the audit trail.
When an item is removed — done tasks leave TODO.md — its handoff file becomes orphaned. myco check reports it and myco check --fix moves it to handoffs/archive/: the live dir stays clean, the knowledge survives, and myco resume on an archived item still finds it.