seshport
Port your session between coding agents. Type /seshport inside Claude Code or Codex,
open the other agent, and resume the exact same conversation — full context included.
By Harshil-Jani · MIT
Demo
A Codex session's haiku, recited by Claude Code after the port. A Claude Code session's fizzbuzz, recalled by Codex. Real recording, synthetic sessions — nothing staged.
Install
One line — installs the binary and the /seshport slash command for both agents:
curl -fsSL https://raw.githubusercontent.com/Harshil-Jani/seshport/main/install.sh | sh
Or grab just the binary from wherever you live:
npm i -g seshport # Node
pip install seshport # Python
cargo install seshport # Rust
brew install harshil-jani/tap/seshport # Homebrew
Then copy commands/ into ~/.claude/commands/ and ~/.codex/prompts/
for the /seshport slash command. Prebuilt binaries for mac (arm/x64), linux (arm/x64),
and windows are on Releases.
The easy way: /seshport
Never leave your agent. Mid-conversation, just type:
/seshport
- Inside Claude Code → replies with
codex resume <id> - Inside Codex → replies with
cd <project> && claude --resume <id>
Open the other agent, paste, and continue the exact same conversation. Verified: a codeword
planted in a Claude Code session was recalled by Codex after a /seshport round-trip.
CLI usage
The source tool is always auto-detected; name the target (or omit it when only one target is possible).
seshport <session-id> <tool> # port any session to any tool (claude | codex | grok)
seshport <session-id> # auto: found in any tool, only one possible target
seshport <path.jsonl> <tool> # format detected from file content
seshport claude codex # newest Claude Code session -> Codex
seshport grok claude # newest Grok Build session -> Claude Code
Each run prints the output path and the exact resume command:
$ seshport codex
/Users/you/.claude/projects/-your-project/1b2c3d4e-....jsonl
resume with: cd /your/project && claude --resume 1b2c3d4e-...
Want to try without touching your real sessions? The demo transcripts from the GIF are in
demo/:
seshport demo/codex-session.jsonl claude # -> claude --resume <id>
seshport demo/claude-session.jsonl grok # -> grok --resume <id>
seshport demo/grok-session/chat_history.jsonl codex # -> codex resume <id>
Architecture
Every agent is one implementation of the Tool trait against a neutral Transcript — so N
tools cost 2·N converters instead of N². The diagram is editable: open
docs/architecture.excalidraw at excalidraw.com.
How it works
- User and assistant messages transfer as-is into a neutral
Transcript. - Tool calls/results are flattened to readable text (
[tool call: Bash] ...) — provider-specific API state (tool-call ids, encrypted reasoning) can't be replayed cross-provider, but the resumed agent gets the full story as context. - Thinking/reasoning blocks are dropped (provider-internal).
- Codex output borrows
base_instructionsfrom your newest real rollout — ChatGPT-auth Codex rejects sessions without the official instructions. - Every import starts with an attribution message noting the source session and this tool.
Add your editor — PRs welcome
Every integration is one Tool impl (five methods) plus a demo fixture — see
CONTRIBUTING.md for the step-by-step guide, and
PR #1 (Grok Build) for a worked example
you can copy.
License
MIT © Harshil Jani
Metadata
Release files for seshport 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| seshport-0.3.0-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| seshport-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| seshport-0.3.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details |
| seshport-0.3.0-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl | Python 3 | none | macOS 10.12+ x86-64, macOS 10.12+ universal2 (ARM64, x86-64), macOS 11.0+ ARM64 | Details |
Total release size: 1.4 MB
Release files / seshport-0.3.0-py3-none-win_amd64.whl
| Download URL | seshport-0.3.0-py3-none-win_amd64.whl |
|---|---|
| Size | 211.6 kB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a24d4a151055e72d0a49bc7b9218fc987d48149c01d64fb2cec01cc7a0d09da7
|
|
BLAKE2b-256 checksum How to use checksums |
dc9e3d1cac8dc5f239982e5c6c356a7bc728e5cc22928367f9802656c0ba8cdb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 18, 2026.
Transparency logRelease files / seshport-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | seshport-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 317.3 kB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
c6ea20b3b9777fb4b5b914e3ca1599c0f960ff21b7ec6741bcdec93763df980b
|
|
BLAKE2b-256 checksum How to use checksums |
aa50ceb816b6a1bf40e3b254daced60c69adf138d56cfd8d8190b5f9492e673e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 18, 2026.
Transparency logRelease files / seshport-0.3.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | seshport-0.3.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 301.9 kB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
2b6333eb3fe79e0678fbdc5d7d1ade20108baeff718edba2322486692fb35a6a
|
|
BLAKE2b-256 checksum How to use checksums |
1fda1fc8d5665b09d9952efbd3a37f7097306371df791cfb767aec06fe4644ac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 18, 2026.
Transparency logRelease files / seshport-0.3.0-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | seshport-0.3.0-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 573.5 kB |
| Tags | Python 3 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ff4a43fa2696c9ef41d9f2804727ad4b25d5339e50e9a9ebaec538248991153b
|
|
BLAKE2b-256 checksum How to use checksums |
23b5eb9bcfee37f7e1b32c7946266f5dbc6a13b75b329eff13c09b8ba1587286
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 18, 2026.
Transparency log