Port your session between coding agents — Claude Code, Codex, Grok Build — and just resume where you left off.
Project description
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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file seshport-0.3.0-py3-none-win_amd64.whl.
File metadata
- Download URL: seshport-0.3.0-py3-none-win_amd64.whl
- Upload date:
- Size: 211.6 kB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a24d4a151055e72d0a49bc7b9218fc987d48149c01d64fb2cec01cc7a0d09da7
|
|
| MD5 |
e0789d512f2f44818f58f2e7f45d7406
|
|
| BLAKE2b-256 |
dc9e3d1cac8dc5f239982e5c6c356a7bc728e5cc22928367f9802656c0ba8cdb
|
Provenance
The following attestation bundles were made for seshport-0.3.0-py3-none-win_amd64.whl:
Publisher:
release.yml on Harshil-Jani/seshport
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
seshport-0.3.0-py3-none-win_amd64.whl -
Subject digest:
a24d4a151055e72d0a49bc7b9218fc987d48149c01d64fb2cec01cc7a0d09da7 - Sigstore transparency entry: 2194103013
- Sigstore integration time:
-
Permalink:
Harshil-Jani/seshport@4465baebf41ef76ce0b6465a8c320e8ed4196112 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Harshil-Jani
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4465baebf41ef76ce0b6465a8c320e8ed4196112 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file seshport-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: seshport-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 317.3 kB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c6ea20b3b9777fb4b5b914e3ca1599c0f960ff21b7ec6741bcdec93763df980b
|
|
| MD5 |
ed9151e634f9f9e9ee6dd53f7a14e98d
|
|
| BLAKE2b-256 |
aa50ceb816b6a1bf40e3b254daced60c69adf138d56cfd8d8190b5f9492e673e
|
Provenance
The following attestation bundles were made for seshport-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:
Publisher:
release.yml on Harshil-Jani/seshport
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
seshport-0.3.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl -
Subject digest:
c6ea20b3b9777fb4b5b914e3ca1599c0f960ff21b7ec6741bcdec93763df980b - Sigstore transparency entry: 2194103032
- Sigstore integration time:
-
Permalink:
Harshil-Jani/seshport@4465baebf41ef76ce0b6465a8c320e8ed4196112 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Harshil-Jani
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4465baebf41ef76ce0b6465a8c320e8ed4196112 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file seshport-0.3.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: seshport-0.3.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 301.9 kB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b6333eb3fe79e0678fbdc5d7d1ade20108baeff718edba2322486692fb35a6a
|
|
| MD5 |
d99091b1b062d36b0ea535bb4b255d56
|
|
| BLAKE2b-256 |
1fda1fc8d5665b09d9952efbd3a37f7097306371df791cfb767aec06fe4644ac
|
Provenance
The following attestation bundles were made for seshport-0.3.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yml on Harshil-Jani/seshport
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
seshport-0.3.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
2b6333eb3fe79e0678fbdc5d7d1ade20108baeff718edba2322486692fb35a6a - Sigstore transparency entry: 2194103052
- Sigstore integration time:
-
Permalink:
Harshil-Jani/seshport@4465baebf41ef76ce0b6465a8c320e8ed4196112 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Harshil-Jani
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4465baebf41ef76ce0b6465a8c320e8ed4196112 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file seshport-0.3.0-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.
File metadata
- Download URL: seshport-0.3.0-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 573.5 kB
- Tags: Python 3, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ff4a43fa2696c9ef41d9f2804727ad4b25d5339e50e9a9ebaec538248991153b
|
|
| MD5 |
f809108eefbc8bcf1ad96bafefdfa02e
|
|
| BLAKE2b-256 |
23b5eb9bcfee37f7e1b32c7946266f5dbc6a13b75b329eff13c09b8ba1587286
|
Provenance
The following attestation bundles were made for seshport-0.3.0-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:
Publisher:
release.yml on Harshil-Jani/seshport
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
seshport-0.3.0-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl -
Subject digest:
ff4a43fa2696c9ef41d9f2804727ad4b25d5339e50e9a9ebaec538248991153b - Sigstore transparency entry: 2194103064
- Sigstore integration time:
-
Permalink:
Harshil-Jani/seshport@4465baebf41ef76ce0b6465a8c320e8ed4196112 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Harshil-Jani
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4465baebf41ef76ce0b6465a8c320e8ed4196112 -
Trigger Event:
workflow_dispatch
-
Statement type: