Get started

Cases and handoffs

Start real work, assign responsibility, preserve outcomes, review, and resume.


Start and inspect a case

epismo case start --version-id <version-id> --case-input '{"customer":"Acme"}'
epismo case start --title "Review contract exception"
epismo case get <case-id>
epismo case list --status open
epismo case list --assigned-to <user-id>
epismo case popular

Use a version-backed case when the guidance matters for reproducibility; use an ad hoc case when the matter is useful to share but no playbook exists. Neither form creates tasks automatically.

For work collaborators, case get returns the case, current tasks, the latest five records from that case (newest first), direct handoffs, and the readable source playbook and pinned version. Public-only readers receive the current title, input, the latest five records from that case, and readable handoffs, without tasks, assignment, or collaborator identities. Making a case public exposes this live content immediately, including later records. Continue older records with case record list --cursor <records_next_cursor> and the returned records_scope (self). CLI output uses snake_case; API/MCP return recordsNextCursor and recordsScope.

Public case reads cost 0 credits without login on Web, CLI, API, and MCP. Work-detail reads on API / CLI / MCP bundle supporting reads into one 1-credit case get; ordinary Web reads remain free.

Assign and coordinate

epismo case acl <case-id> --acl <principal-ids> --lock-version <n>
epismo case assign <case-id> --assigned-to <user-id> --lock-version <n>
epismo case task create <case-id> --kind work --title "Verify totals" \
  --instructions "Use the latest invoice" --assigned-to <user-id>
epismo case task create <case-id> --kind approval --title "Approve recommendation" \
  --subject-record-id <record-id> --assigned-to <user-id>
epismo task list --status open

Add a user to the case ACL before assignment. Assign the case for whole-matter responsibility and a task for one explicit piece of work or approval. An approval task should identify its exact subject record. Top-level task list defaults to tasks assigned to the current user; pass --assigned-to only for another assignee.

Connect case handoffs

epismo case handoff create <from-case-id> --to-case-id <to-case-id>
epismo case handoff create <to-case-id> --from-case-id <from-case-id>
epismo case handoff remove <case-id> <handoff-id>
epismo case handoff graph get <case-id> --scope connected
epismo case handoff candidates list <case-id> --direction outgoing

Connect sequential or dependent cases using directed handoffs (fromCaseId -> toCaseId). Creating or removing a handoff requires read access on its source and work access on its destination, so a public case can be continued into a case you can edit, but a reader cannot attach work into a public case. Loops and cycles are strictly rejected. Inspect the DAG around any case using epismo case handoff graph get.

Append, update, and read records

epismo case record append <case-id> --kind output --origin agent --content "..."
epismo case record append <case-id> --kind review --origin agent --data '{"verdict":"pass"}' --content "..."
epismo case record append <case-id> --task-id <task-id> --input @evidence.json
epismo case record update <record-id> --content "..."
epismo case record delete <record-id>
epismo case record list <case-id> --scope ancestors --order asc

Every participant covered by an open case's ACL may append records, update tasks, and retitle, assign, close, reopen, or request an Epismo AI review. Access changes and archiving stay with the current assignee. Clients write record kind note, output, or review (data.verdict must be pass, changes_requested, or insufficient); activity is server-only. Only the creator may update or redact a non-system record they authored. Pass --scope (self, ancestors, descendants, neighbors, connected) to expand the timeline across connected handoffs. Filters narrow that timeline, and the returned cursor continues stable pagination.

Update and close

epismo task update <task-id> --title "Verify totals and tax" \
  --instructions "Use the signed invoice" --assigned-to <user-id> --lock-version <n>
epismo task set status <task-id> --status closed --outcome approved --lock-version <n>
epismo task set status <task-id> --status open --lock-version <n>
epismo case update <case-id> --title "Updated title" --lock-version <n>
epismo case update <case-id> --auto-review --lock-version <n>
epismo case review <case-id>
epismo case review <case-id> --prompt "Flag missing citations as blockers."
epismo case overview <case-id>
epismo case close <case-id> --outcome completed --lock-version <n>
epismo case reopen <case-id> --lock-version <n>

You may append final records atomically while closing a task or case by providing the records array through --input or the relevant flag. Completion requires all tasks closed. Cancellation and abandonment close remaining tasks; reopening the case leaves them closed. Any case editor can use case review to queue an Epismo AI review of the open case's shared evidence; it returns immediately and is distinct from an approval task. Optional --prompt adds caller guidance after the fixed review rules. List those records with --kinds review --origins system. Replay the same idempotency key after it finishes to receive the REVIEW record. Any case editor can also use case overview for a one-shot situational brief; it runs synchronously and returns the text in the response. Replay the same idempotency key to receive the prior brief without regenerating. Auto reviews (--auto-review), case review, and case overview charge the case billing account captured at start, according to the tokens used by the AI model.