Supported coding agents

Saidran reads local recordings from four coding agents. It never runs the agents or sends their transcripts over the network.

Agent Recorded version Default log root Override Session reference
Claude Code 2.1.293 ~/.claude/projects CLAUDE_CONFIG_DIR (parent of projects) claude:<id>
Codex 0.163.0 ~/.codex/sessions CODEX_HOME (parent of sessions) codex:<id>
OpenCode 1.1.4 ~/.local/share/opencode/storage XDG_DATA_HOME (parent of opencode) opencode:<id>
Pi 0.85.1 (journal version 3) ~/.pi/agent/sessions PI_CODING_AGENT_DIR (parent of sessions) pi:<id>

Run saidran sessions inside a Git repository to see its recordings, and saidran doctor to see all four roots, counts and format diagnostics. A recording belongs to the repository when its recorded working directory is the repository root or a directory inside it. Symlinked log roots work too.

saidran sessions
saidran --session opencode:ses_example
saidran --session pi:01a15b72

You can use a full ID or a unique prefix. Add the agent name when different agents share the same ID; claude-code:<id> also works. Automatic selection uses the most recent session with commands or edits that ended within seven days. When two different agents finish less than ten minutes apart, interactive use asks which to select; noninteractive use picks the newest and explains the choice. Explicit transcripts bypass the seven-day limit.

For OpenCode, keep the complete storage layout:

storage/
  session/<project-id>/<session-id>.json
  message/<session-id>/*.json
  part/<message-id>/*.json

Pass the session JSON, rather than a message, part or exported stream:

saidran --transcript /path/to/storage/session/project/session.json
saidran --transcript /path/to/pi-session.jsonl

Saidran detects the agent from the file's content. OpenCode's session file gives the working directory and version. Tool parts contain command times and output, with exit codes in state.metadata.exit. Pending tools and results without an exit remain unknown. OpenCode child sessions are not merged.

Pi calls and results are paired by tool-call ID. A completed built-in bash result with isError: false supplies exit 0, even without details. On an error, only an appended Command exited with code N trailer supplies a nonzero exit. Successful output containing that text is ordinary output. Aborted, timed-out and missing results remain unknown. Pi's details describes output truncation, not exit status. Its journal records the format version, rather than the Pi CLI version, so doctor reports the CLI version as not recorded.

Older Codex logs without completed-item events and unsupported OpenCode or Pi formats produce an error, with instructions to record a supported session. They cannot supply Verified evidence. Unknown entries and incomplete recordings are reported through completeness notes. The same redaction and verdict rules apply to all four agents.

Claude Stop and Codex notify integrations select the payload's exact transcript or full thread ID. See hooks for installation and final-message overrides. OpenCode and Pi use manual reports or the self-check snippet.