Skip to main content

sessionport

sessionport

Carry your AI agent sessions between CLIs.
Export any session to one portable, human-readable brief. Resume it in any other agent.

CI PyPI License

sessionport in action


Why

You work in Claude Code today and OpenCode tomorrow. Codex for the weekend, Cursor for the one-off fix. Every agent has its own session store, its own format, and zero memory of the others. Switch agents and your context dies: the decisions, the constraints, the files you already read, the next steps you agreed on.

sessionport is the missing layer. It reads any agent's local session store, distills the durable parts into one markdown brief, and hands that brief to any other agent as a resume prompt.

  • Offline by default. Export never calls the network. Your sessions stay on your machine.
  • Open format. A brief is markdown with plain frontmatter: read it, diff it, commit it.
  • One command. sessionport export out of one agent, sessionport import into the next.

Supported agents

Agent Store
Claude Code JSONL transcripts (~/.claude/projects)
Codex JSONL sessions (~/.codex/sessions)
OpenCode JSON session files
Gemini CLI Markdown transcripts
Hermes SQLite session databases
Cursor JSONL agent sessions (~/.cursor/agent)
Aider Markdown history (~/.aider.chat/history)
Windsurf JSONL sessions (~/.windsurf)
OpenClaw JSONL sessions (~/.openclaw)
Cline JSONL tasks (~/.config/cline/tasks)

Every store location can be overridden with a SESSIONPORT_* environment variable for CI and unusual setups (SESSIONPORT_CLAUDE_HOME, SESSIONPORT_CODEX_HOME, SESSIONPORT_GEMINI_HOME, SESSIONPORT_OPENCODE_HOME, SESSIONPORT_HERMES_DB, SESSIONPORT_CURSOR_HOME, SESSIONPORT_AIDER_HOME, SESSIONPORT_WINDSURF_HOME, SESSIONPORT_OPENCLAW_HOME, SESSIONPORT_CLINE_HOME).

Install

pip install sessionport
# MCP server support:
pip install 'sessionport[mcp]'
# or
uv tool install sessionport

Requires Python >= 3.11. macOS, Linux, and Windows.

Quickstart

# see every session, from every agent, in one place
sessionport list

# turn a session into a portable brief
sessionport export claude-code:9f9f9f9f

# export every session you have
sessionport export --all --out-dir briefs/

# hand the brief to another agent as a resume prompt
sessionport import brief-claude-code-9f9f9f9f.md --into codex --copy

# did the brief lose anything? (optional, needs an LLM key)
sessionport score brief-claude-code-9f9f9f9f.md --source claude-code:9f9f9f9f

# same loop over MCP for any agent client (needs sessionport[mcp])
sessionport mcp

That's the whole loop: export, carry, import, resume.

How it works

sessionport architecture

  1. Discover. sessionport list walks each agent's local session store.
  2. Extract. sessionport export reads the transcript and pulls out the durable parts: goal, decisions, files touched, URLs, code blocks, next actions, constraints, key facts. Deterministic heuristics, no LLM, no network.
  3. Carry. The result is one sessionport-brief/v1 markdown file.
  4. Resume. sessionport import wraps the brief in a resume prompt for any target agent. Paste it, or --copy it, and the new agent continues the work without re-litigating settled decisions.

The brief format

sessionport-brief/v1 is markdown with flat YAML-flavored frontmatter. Example:

---
format: sessionport-brief/v1
source-agent: claude-code
session: 9f9f9f9f-1111-2222-3333-444444444444
exported: 2026-08-06T00:41:29Z
messages: 4
estimated_tokens: 121
---

# Session brief (claude-code)

## Goal

Fix the auth bug in login.py: the session cookie is not being set on refresh

## Decisions

- Decision: switch to httpOnly secure cookies. We'll go with SameSite=Lax...

## State: files

- login.py
- tests/test_session.py

## Constraints

- Constraint: never store tokens in localStorage.

Human-readable, git-diffable, machine-parseable. The format is versioned in the frontmatter so future revisions migrate explicitly.

Fidelity scoring

A brief is only useful if it kept what mattered. sessionport score compares a brief against its source transcript with an LLM judge and reports:

  • fidelity: 0.0-1.0, how much of the session's durable knowledge survived
  • missed: the specific facts the brief lost
  • notes: one-sentence verdict

Opt-in and env-gated, against any OpenAI-compatible endpoint (Ollama works too: point SESSIONPORT_JUDGE_ENDPOINT at http://localhost:11434/v1):

export SESSIONPORT_JUDGE_API_KEY=sk-...
export SESSIONPORT_JUDGE_ENDPOINT=https://api.openai.com/v1/chat/completions  # default
export SESSIONPORT_JUDGE_MODEL=gpt-4o-mini                                     # default
sessionport score brief.md --source claude-code:9f9f9f9f

# or override per call:
sessionport score brief.md --source claude-code:9f9f9f9f --endpoint http://localhost:11434/v1 --model llama3

The judge never runs on the export path, and transcripts are truncated to 120k characters.

MCP server

sessionport mcp exposes the same loop over MCP stdio for any MCP client (Claude Desktop, Cursor, OpenCode, your own harness):

  • list_sessions(agent) — discover sessions
  • export_brief(session) — render a portable brief
  • import_prompt(brief_file, into) — build a resume prompt

Install with pip install 'sessionport[mcp]'.

CLI reference

sessionport list [--agent NAME] [--json]
sessionport export [SESSION] [--all] [--agent NAME] [--out FILE] [--out-dir DIR] [--json]
sessionport import FILE [--into AGENT] [--copy] [--out FILE]
sessionport score FILE --source AGENT:SESSION [--endpoint URL] [--model NAME] [--json]
sessionport mcp
sessionport version

SESSION is agent:id (e.g. claude-code:9f9f9f9f), or a bare id that is searched across all stores. --all exports every discovered session into --out-dir (default briefs/).

Development

uv sync --extra dev
make all          # lint + typecheck + test (the full gate)
make images       # regenerate docs/images

42 tests, zero-warning lint, strict mypy. See AGENTS.md for the operational reference and CONTRIBUTING.md for the contribution contract.

Roadmap

  • More adapters (Warp, Copilot CLI, Mistral Vibe) and a community adapter SDK
  • Local judge via Ollama one-liner (sessionport score --endpoint http://localhost:11434/v1)
  • Homebrew formula
  • Brief diff tool (sessionport diff old.md new.md)

License

MIT. See LICENSE. Third-party attributions in THIRD_PARTY_NOTICES.md.

Download files

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

Source Distribution

sessionport-0.2.0.tar.gz (27.4 kB view details)

Uploaded Source

Built Distribution

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

sessionport-0.2.0-py3-none-any.whl (22.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: sessionport-0.2.0.tar.gz
  • Upload date:
  • Size: 27.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for sessionport-0.2.0.tar.gz
Algorithm Hash digest
SHA256 3a0f43d903a97f5aa4e00327d86b8da8ff4dcc697e32df240cb491e502f2c07a
MD5 b6e31225cd749437b602b8324bce0d21
BLAKE2b-256 1c6af29bd46286be956727f2bd72bd3e393512db77b5b0e8002db421d52a11d5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: sessionport-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 22.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for sessionport-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f539b1931096fc6c0ac2b0c9ca3de06fecef4794328c66b0535c5b53dd83723e
MD5 9a74049d26181da947c7c39821bb1052
BLAKE2b-256 6e71c12aa0a405a6e7846c7c7d3d41313d9b08cee49e5d06e435a7782c2229bf

See more details on using hashes here.

Supported by

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