Skip to main content

agent-handover

Session handover engine for AI coding agents: checkpointed, resumable, backend-agnostic persistent memory.

AI coding agents (Claude Code, Codex, OpenCode, Cline, ...) are stateless between sessions. Every new session starts with re-explaining the project, the decisions already made, and what was left half-done. agent-handover is the small piece of infrastructure that fixes this: at the end of a session the agent writes a structured handover; at the start of the next one, it resumes from it — even if the previous handover crashed halfway.

Extracted from a personal "AI Team OS" that has run daily handovers across multiple machines and agents since 2025.

The problem

  • Context loss: the next session doesn't know what the last one decided.
  • Half-written state: a handover that dies mid-run silently corrupts memory. The next session boots from a state that is partly updated — worse than stale.
  • Remote memory is fragile: vector DBs and hosted notebooks go down. If your agent's memory has no local fallback, your agent has no memory.

Design

┌─ session ends ──────────────────────────────────────────────┐
│  HandoverEngine(steps, checkpoint, pause_file)              │
│    step 1: collect session facts          ── checkpointed   │
│    step 2: MemoryStore.write(layer=1...)  ── checkpointed   │
│    step 3: MemoryStore.write(layer=2...)  ── checkpointed   │
│    step 4: GitBackend.publish(...)        ── checkpointed   │
└──────────────────────────────────────────────────────────────┘
┌─ next session starts ───────────────────────────────────────┐
│  $ agent-handover check    # 0=clean  1=RESUME  2=completed │
│  read layer2/current-state.md  →  agent has context again   │
└──────────────────────────────────────────────────────────────┘

Three memory layers, all plain Markdown (git-friendly, diff-able, readable by humans and any agent that can read a file):

Layer File pattern Semantics
1 layer1/YYYY-MM/<tag>-<date>.md session notes (append, dated)
2 layer2/current-state.md "where are we now" (always overwritten)
3 layer3/YYYY-MM-<tag>-archive.md monthly compaction of old notes

Three rules learned in production:

  1. Every step is checkpointed. An interrupted handover is detected (agent-handover check → exit 1) and resumed without re-running done steps.
  2. A PAUSE file is an absolute kill-switch. Agents that write to your repos need a brake a human can pull with touch PAUSE.
  3. The filesystem is the source of truth. Remote layers (NotebookLM, vector stores) are optional accelerators; the local copy is always enough to boot.

Install

pip install agent-handover   # or: pip install -e . from a clone

Usage

from pathlib import Path
from agent_handover import Checkpoint, HandoverEngine, MemoryStore, Step, GitBackend

store = MemoryStore("memory/")
cp = Checkpoint(".agent-handover/checkpoint.json")
git = GitBackend(".", paths=["memory/"])

engine = HandoverEngine(
    steps=[
        Step("session_note", lambda: store.write(1, notes, tag="refactor")),
        Step("current_state", lambda: store.write(2, snapshot)),
        Step("publish", lambda: git.publish("handover: session sync")),
    ],
    checkpoint=cp,
    pause_file=Path.home() / ".agent_handover" / "PAUSE",
)
engine.run()  # resumes pending steps automatically after a crash

In your agent's bootstrap (CLAUDE.md / AGENTS.md):

agent-handover check   # exit 1 → finish the interrupted handover first

Use with Codex CLI

A first-class adapter for the OpenAI Codex CLI. Install the bootstrap block into your repo's AGENTS.md (idempotent, preserves your other rules) and write a handover at the end of each session:

from agent_handover.adapters.codex import install_agents_md, build_codex_handover_engine

install_agents_md("AGENTS.md")            # Codex runs `agent-handover check` on start

engine = build_codex_handover_engine(     # one call for the end-of-session hook
    session_note="reviewed PR #42; released v0.2.0",
    current_state="parser refactor merged; next: TOML step config",
)
engine.run()                              # writes memory/, publishes, checkpointed

See examples/codex-cli/ for a runnable end-of-session script and the AGENTS.md block.

Status & roadmap

  • checkpointed engine, 3-layer Markdown store, git backend, pause guardrail
  • adapter: Codex CLI (AGENTS.md bootstrap + end-of-session handover)
  • handover quality scoring (was the note actually useful next session?)
  • adapters: OpenCode, Cline, NotebookLM, sqlite-vec
  • agent-handover run with declarative step config (TOML)

Issues and PRs welcome — especially reports from other agent stacks (Codex CLI, Cline, OpenCode).

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

agent_handover-0.2.0.tar.gz (13.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agent_handover-0.2.0-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

Details for the file agent_handover-0.2.0.tar.gz.

File metadata

  • Download URL: agent_handover-0.2.0.tar.gz
  • Upload date:
  • Size: 13.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for agent_handover-0.2.0.tar.gz
Algorithm Hash digest
SHA256 f8e4b464daf96f184253d2503b6cc7e3d48abbe3b7c0af3620d22fac7be0a44d
MD5 ef3621ed4cac5b65eed27034638ff452
BLAKE2b-256 3567d699b71b1675427f2d91e77e38e12f49753fab6286fec1ba973542af168b

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_handover-0.2.0.tar.gz:

Publisher: publish.yml on hikari716/agent-handover

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file agent_handover-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: agent_handover-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 12.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for agent_handover-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fe30d51f9f976646aac9f7c1eb306b2d53c4f549c25c1decee705f52df8ce467
MD5 c366715873456c831263ba45324d0f15
BLAKE2b-256 22f0ccb4ae91b54306811a7f9e4e0af45eb99a2725b30a429ee07ee38901303d

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_handover-0.2.0-py3-none-any.whl:

Publisher: publish.yml on hikari716/agent-handover

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page