Bridge daemon for codex CLI ↔ Molecule platform — long-polls the platform inbox, runs `codex exec --resume <session>` per inbound message, replies via send_message_to_user MCP tool. Counterpart to hermes-channel-molecule.
Project description
codex-channel-molecule
Bridge daemon — gives codex CLI push parity with the Molecule AI platform's other external runtimes.
The Molecule platform's hermes-channel-molecule plugin gives hermes-agent true push delivery — peer agents and canvas-user messages land mid-session as conversation turns. Codex CLI has no plugin API today and its MCP runtime drops inbound notifications, so this daemon is the equivalent push surface — built outside the codex process.
How it works
canvas user / peer agent ──► molecule platform inbox
│
wait_for_message (long-poll)
│
▼
codex-channel-molecule daemon
│
codex exec --resume <sid> "<msg>"
│
capture stdout
│
send_message_to_user / delegate_task
│
inbox_pop(activity_id)
│
▼
canvas chat / peer workspace
Per chat thread (one canvas-user thread or one peer-workspace thread) gets its own codex session_id, persisted to ~/.codex-channel-molecule/sessions.json so daemon restarts don't lose conversation context. Set CODEX_CHANNEL_MOLECULE_STATE_DIR to override the default location (e.g. when running under systemd with a per-instance state dir).
When to use this vs. the codex tab in the External Connect modal
The codex tab wires the molecule MCP server into ~/.codex/config.toml so codex can call platform tools (list_peers, delegate_task, send_message_to_user, commit_memory, etc.). That's outbound — codex calls out to the platform.
This daemon is the inbound counterpart — the platform pushes to codex. Run both for full bidirectional integration.
Install
npm install -g @openai/codex@^0.57
pip install codex-channel-molecule
Configure + run
The same env-var contract as hermes-channel-molecule's outbound MCP path (WORKSPACE_ID, PLATFORM_URL, MOLECULE_WORKSPACE_TOKEN):
export WORKSPACE_ID=<uuid from External Connect modal>
export PLATFORM_URL=https://<your-tenant>.moleculesai.app
export MOLECULE_WORKSPACE_TOKEN=<bearer token from External Connect modal>
codex-channel-molecule
The daemon runs in the foreground; logs go to stderr. For systemd hosts, register a unit; for one-off use, nohup ... & plus a log file works.
Deprecation path
When openai/codex#17543 lands upstream — a generic path for handling MCP custom notifications in codex and forwarding them into the active session as user submissions — this daemon becomes redundant. Codex itself will accept inbound molecule messages as Op::UserInput directly through the MCP server already wired in ~/.codex/config.toml. Until then, this is the operator-facing answer.
Development
git clone https://github.com/Molecule-AI/codex-channel-molecule
cd codex-channel-molecule
pip install -e ".[test]"
pytest -q
Tests are entirely real-subprocess (no mocking the spawn boundary) so the boot path is covered the same way the daemon runs in production.
Releasing
Tag-on-push triggers publish.yml which builds + publishes to PyPI via OIDC trusted publishing (no API token needed).
# Bump pyproject.toml `version`, commit, then:
git tag v0.1.1 && git push origin v0.1.1
The workflow refuses to publish if the tag doesn't match pyproject.toml's version — keeps PyPI versions and git tags in lockstep.
One-time PyPI setup (before the first release):
- Create the project on PyPI by uploading the first wheel manually, OR
- Pre-register the project on PyPI under a "Pending publisher" config so the first tagged push creates it.
Either way, on the project's PyPI page → "Manage" → "Publishing" → "Add a new publisher", configure:
- Owner:
Molecule-AI - Repository:
codex-channel-molecule - Workflow filename:
publish.yml - Environment name:
pypi
After this, every git push origin v*.*.* ships the wheel to PyPI without any further intervention.
License
Apache-2.0
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 Distribution
Built Distribution
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 codex_channel_molecule-0.1.1.tar.gz.
File metadata
- Download URL: codex_channel_molecule-0.1.1.tar.gz
- Upload date:
- Size: 21.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
566757079335f391e07607c6a94d39ceb6dd31709f59933a5f8683ed9dd30d41
|
|
| MD5 |
77df19f1f907ae1513013a4cb8314bdf
|
|
| BLAKE2b-256 |
8186aa4274de9ba9e7d820227f25cbdad6095e524d7a251aa5af1ccd4bd4ad2f
|
Provenance
The following attestation bundles were made for codex_channel_molecule-0.1.1.tar.gz:
Publisher:
publish.yml on Molecule-AI/codex-channel-molecule
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
codex_channel_molecule-0.1.1.tar.gz -
Subject digest:
566757079335f391e07607c6a94d39ceb6dd31709f59933a5f8683ed9dd30d41 - Sigstore transparency entry: 1439043923
- Sigstore integration time:
-
Permalink:
Molecule-AI/codex-channel-molecule@9abf6bfa79bca0be3e032aa5265942b19fb184dd -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/Molecule-AI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9abf6bfa79bca0be3e032aa5265942b19fb184dd -
Trigger Event:
push
-
Statement type:
File details
Details for the file codex_channel_molecule-0.1.1-py3-none-any.whl.
File metadata
- Download URL: codex_channel_molecule-0.1.1-py3-none-any.whl
- Upload date:
- Size: 16.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
63c797173ae6c20cbe054e014728cd08df2051f30fd28e4e12cf599213018403
|
|
| MD5 |
800925376142cd681276e5500f627c44
|
|
| BLAKE2b-256 |
cc5568e60613556b5b6bab1e4f65d9cce3b32ee4b9b37214f074eb570589cfd8
|
Provenance
The following attestation bundles were made for codex_channel_molecule-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on Molecule-AI/codex-channel-molecule
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
codex_channel_molecule-0.1.1-py3-none-any.whl -
Subject digest:
63c797173ae6c20cbe054e014728cd08df2051f30fd28e4e12cf599213018403 - Sigstore transparency entry: 1439043947
- Sigstore integration time:
-
Permalink:
Molecule-AI/codex-channel-molecule@9abf6bfa79bca0be3e032aa5265942b19fb184dd -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/Molecule-AI
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9abf6bfa79bca0be3e032aa5265942b19fb184dd -
Trigger Event:
push
-
Statement type: