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.

Use with Cline

A first-class adapter for Cline, the autonomous coding agent for VS Code. Cline reads a directory of rule files (.clinerules/), so the adapter installs a dedicated, idempotent rule file that never touches your other rules:

from agent_handover.adapters.cline import install_clinerules, build_cline_handover_engine

install_clinerules(".clinerules")         # writes .clinerules/00-agent-handover.md

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

See examples/cline/ for a runnable end-of-session script and the .clinerules/ rule file.

Use with OpenCode

A first-class adapter for OpenCode. OpenCode reads AGENTS.md as its rules file (the same mechanism as Codex), so this adapter shares its block and installer with the Codex adapter — only the example path and engine tag differ:

from agent_handover.adapters.opencode import install_agents_md, build_opencode_handover_engine

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

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

See examples/opencode/ 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)
  • adapter: Cline (.clinerules/ rule file + end-of-session handover)
  • adapter: OpenCode (AGENTS.md bootstrap + end-of-session handover)
  • handover quality scoring (was the note actually useful next session?)
  • adapters: 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.4.0.tar.gz (18.0 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.4.0-py3-none-any.whl (18.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: agent_handover-0.4.0.tar.gz
  • Upload date:
  • Size: 18.0 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.4.0.tar.gz
Algorithm Hash digest
SHA256 2bd5c7e3a7e29accdda0c557e0f530330a3a3e6662ad0aba3e345410d1304923
MD5 3c5f2bb21059f7b758e813251d40fea9
BLAKE2b-256 ea78e5cd50150105b3908b7eb5e5bf843b8b31d930ff2cd73bcc43b7f00b03f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_handover-0.4.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.4.0-py3-none-any.whl.

File metadata

  • Download URL: agent_handover-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 18.0 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.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 72bb19ec6fb98a4059a6d2d5e49b15f0e58c379d9a68e65893de7d1f97da99ae
MD5 7bc976f7e219ad7deedde1a8ca639cf6
BLAKE2b-256 55360ef45e2a1b4fc51a5eb0918d99fc0d9f0bf1131dcf27c9b75943d2893faf

See more details on using hashes here.

Provenance

The following attestation bundles were made for agent_handover-0.4.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