Skip to content

Phase 2: Session persistence for Claude Code agents in ADF #639

@AlexMikhalev

Description

@AlexMikhalev

Parent Epic

#637

Summary

Store Claude Code session_id from run results and use --resume on Safety agent restarts to avoid cold-starting.

Changes Required

terraphim_spawner

  • Extract session_id from Claude stream JSON init and result events (already parsed in Phase 1)
  • Expose session_id via AgentHandle or CostEvent

terraphim_orchestrator

  • Add session_state.json file: {agent_name: {session_id, last_run_at, total_tokens}}
  • On Safety agent restart, if session_id exists, add --resume <session_id> to CLI args
  • Add --resume arg injection to spawn_agent() when session state available
  • Clear session state on max-restart-exceeded or critical drift (fresh start)

terraphim_spawner/config.rs

  • Add with_resume(session_id: &str) method to AgentConfig
  • For claude CLI: --resume <session_id> before task prompt

Spike Required

  • Verify claude -p --resume <session_id> works in non-interactive mode
  • Verify session survives process exit and can be resumed

Reference

  • Paperclip session state: packages/db/src/schema/agent_runtime_state.ts
  • Claude CLI: --resume flag (verified in 2.1.70+)

Acceptance Criteria

  • Session ID captured from Claude Code output and persisted to session_state.json
  • Safety agent restarts use --resume when session exists
  • Session cleared on critical drift or max restarts
  • Codex agents unaffected (no session support)
  • Atomic file writes (write to .tmp then rename)

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions