Skip to main content
Postbag logo

postbag

Let Codex and Claude Code talk to each other.

A local MCP server. Ask Codex to review what Claude Code just wrote, or the other way round. The answer arrives as a new turn. No copying text between windows.

ci PyPI postbag MCP server License

Scripted demo in two panes, Claude Code and Codex. Both join bag review with postbag_join. Claude Code sends a review request with postbag_send, and it arrives in Codex as letter 1. Codex replies with three findings as letter 2, and Claude Code sends final letter 3. postbag_read reports 3 letters.

Install

Needs Python 3.10 or later, Claude Code and a recent Codex CLI with codex queue. Run both sessions on one machine with the same postbag version. Delivery is tested on macOS.

pipx install 'postbag[mcp]'
claude mcp add --scope user postbag -- "$(command -v postbag-mcp)"
codex mcp add postbag -- "$(command -v postbag-mcp)"

Start a new session in each app, then run /mcp. postbag should list five tools. For uvx and other setups, see MCP setup.

Or ask your agent: Install postbag using llms-install.md.

Quick start

A bag is a named conversation. Both agents join the same one. Open Codex and Claude Code in the same repository, so both see the same code.

  1. In Codex:

    Join postbag bag "review" as codex.

  2. In Claude Code:

    Join postbag bag "review" as claude, then ask codex to review my last commit.

Codex joins first so Claude Code has someone to write to. Approve the postbag tools when asked. Codex gets the request as a new turn, and its reply lands in Claude Code the same way. Either side can end with a final letter, which asks for no reply.

What to use it for

  • Cross review. Claude Code finishes a change and asks Codex to review the diff before you commit.
  • Split work. Codex writes the tests while Claude Code writes the implementation. They compare notes by letter.
  • Second opinion. When one agent is stuck on a bug, it asks the other for a fresh read.

Tools

Your agents call these. You just ask in plain words.

Tool What it does
postbag_join Registers this session under a name in a bag, creating the bag if needed.
postbag_send Sends a letter to a name in the bag. final: true asks for no reply.
postbag_read Pages through the bag's history.
postbag_bags Lists local bags with letter counts and registered names.
postbag_leave Withdraws this session from the bag. History stays.

How it works

  • Native delivery. Letters arrive as a new turn in the other session, through its own input. postbag adds no delivery daemon, polling or hooks.
  • No setup prompts. Every letter ends with how to reply, or asks for no reply.
  • One shared history. Each bag keeps a local log that either agent can page through with postbag_read.

Security

  • A delivered letter becomes a user turn in the other agent. Connect only sessions you trust with the task.
  • There is no letter limit. Keep tool approvals on to check each send before it goes.
  • The ledgers under ~/.postbag/ hold each Claude Code session's inbox token, with file mode 0600. Never commit or share them.

See SECURITY.md.

MCP setup · Concept · Changelog · Contributing · MIT

Metadata

Release files for postbag 2.2.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for postbag 2.2.2
File Size Uploaded
postbag-2.2.2.tar.gz 163.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for postbag 2.2.2
File Interpreter ABI Platform
postbag-2.2.2-py3-none-any.whl Python 3 none any Details

Total release size: 191.4 kB

Release files / postbag-2.2.2.tar.gz

Download URL postbag-2.2.2.tar.gz
Size 163.8 kB
Tags Source
SHA-256 checksum
How to use checksums
f3ec1dea1ae00bcf58eda9a814c9804b36c2d4bf63c935b166d4adf47b2d32e9
BLAKE2b-256 checksum
How to use checksums
cc2d332efdc3180e30d6ccb81b303c5debfe225e605bd74c14bc7167874a46f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 2, 2026.

Transparency log

Release files / postbag-2.2.2-py3-none-any.whl

Download URL postbag-2.2.2-py3-none-any.whl
Size 27.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8da6f7969a3dbfa103af556e9920eaff977082f33bd3a22597b84be8aaa28e04
BLAKE2b-256 checksum
How to use checksums
2bbc09e520b9a22d76363d2e52124ac0a1ff1972143596eac893d762bf2b36e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 Oct 2, 2026.

Transparency log

Release history Release notifications | RSS feed

2.3.0

2 release files

This release

2.2.2 This release

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.0

2 release files

2.0.0

2 release files

1.4.0

2 release files

1.3.0

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.1

2 release files

1.1.0

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page