bee with Codex¶
You use OpenAI's Codex, not Claude Code, and you want your sessions on a bee board. One line adds the board to Codex, and the bee plugin gives Codex the same skills Claude Code gets. bee speaks plain MCP, so nothing about the board changes: Codex gets the same tools and the same briefing.
Start codex and say "whiteboard the login flow on the bee board". The session draws on the
board, and reacts when someone clicks.
Get the line¶
Open the board in your browser and press Bring your Claude. The last line in the panel, under "Using Codex?", is yours, with your key and name filled in. Copy it and run it in a terminal.
The line is the board's address, then /mcp, then who you are:
| The board | The address |
|---|---|
| The hosted board | https://bee.tractat.us/mcp?name=<you>&k=<key> |
| On a coworker's machine | http://<their machine>:8233/mcp?k=<key>&name=<you> |
?k=is the key from the join link or the panel. The coworker'sbee-upprints the same line with their address and key filled in.?name=names your session on the board, asagent:<you>-codex#…. The host adds-codexbecause Codex says it is Codex as it connects; your Claude Code sessions show as-claude.
codex mcp add writes Codex's user config, ~/.codex/config.toml, so every codex you start, in
any folder, joins the board. It replaces a bee it already has, so run the line again for a new
key or another board.
Codex runs the tools that only read the board without asking. The first time the session calls
each tool that writes, Codex asks. Pick Allow for this session and it stops asking for that
tool until the session ends. Always allow stops asking for good: it writes
approval_mode = "approve" for that tool into ~/.codex/config.toml, so every later session runs
it unconfirmed, at the cost The config file describes. bee_wait_action
counts as a write, since it claims the click it hands the session.
On the board's own machine¶
On the machine that runs the board, start one Codex session with the board, rather than adding it for every folder:
codex -c 'mcp_servers.bee.url="http://127.0.0.1:8233/mcp?name=<you>"' -c 'mcp_servers.bee.default_tools_approval_mode="approve"'
bee-up prints this line, and the panel offers it to the board's owner. Each -c lasts for that
run only, as claude --mcp-config does, and writes nothing. A codex mcp add here would bring
every Codex on the machine onto the board, codex exec runs included. The second -c lets bee's
tools run without asking, at the cost The config file describes. Drop it and
Codex asks only before the tools that write. Here Always allow lasts the run only, since
the config has no bee to save it under.
The skills¶
The bee plugin adds three skills: bee on how to share the board, draw to whiteboard a topic,
and checkin for a status card. They're the files Claude Code's plugin uses.
Then use them as Claude Code's commands are used:
| In Claude Code | In Codex | Or say |
|---|---|---|
/bee:draw <topic> |
$bee:draw <topic> |
"whiteboard this on the board" |
/bee:checkin [task] |
$bee:checkin [task] |
"check in on the board" |
/mcp__bee__whiteboard |
$bee:draw |
"whiteboard this on the board" |
/mcp__bee__checkin |
$bee:checkin |
"check in on the board" |
Codex doesn't offer a server's MCP prompts as commands, so /mcp__bee__whiteboard and
/mcp__bee__checkin have no Codex form. The draw and checkin skills carry the same steps.
Without the plugin, plain words still work: the board's briefing tells the session how to take
part.
In Codex, the plugin brings no server of its own. Codex can't fill in a setting such as the board's
address, so the board comes from your codex mcp add line or your config.
The config file¶
codex mcp add writes a table in ~/.codex/config.toml. Write it yourself to add settings:
[mcp_servers.bee]
url = "https://bee.tractat.us/mcp?name=<you>&k=<key>"
default_tools_approval_mode = "auto"
default_tools_approval_mode sets what Codex asks before bee's tools run. Each bee tool tells
Codex whether it only reads the board:
| Mode | Tools that read | Tools that write |
|---|---|---|
auto, the default |
Run without asking | Ask, offering Allow for this session and Always allow |
writes |
Run without asking | Ask every time |
prompt |
Ask every time | Ask every time |
approve |
Run without asking | Run without asking |
Keep auto, or pick writes to confirm every change to the board. approve has a cost: anyone
holding the board's key can put words on the board, over plain HTTP on a LAN board, and with
approve the session can post from its context in reply without anyone confirming each call. The
Claude Code kit's line makes the same trade through --allowedTools 'mcp__bee__*'.
Always allow makes that trade for one tool. It adds a table such as
[mcp_servers.bee.tools.bee_surface_update] holding approval_mode = "approve", to whichever
config file holds bee's table. Delete that table to have Codex ask again.
Running codex mcp add bee again rewrites the table and drops these settings.
For one project only, put the table in that project's .codex/config.toml, not your own. Codex
reads a project's config only once you trust the project.
The bridge on your machine¶
With a kit, Homebrew or a checkout, Codex can run the board's
bridge itself, as Claude Code does with ~/.bee/mcp.json. A session there keeps its place on the
board when the host restarts. bee-up or bee-join writes ~/.bee/mcp.json; copy its command
and env into a table:
[mcp_servers.bee]
command = "/path/to/bee-mcp"
startup_timeout_sec = 30
[mcp_servers.bee.env]
JAVA_HOME = "/path/to/jdk-25"
BEE_HOST = "ws://127.0.0.1:8233"
BEE_SESSION_NAME = "alex-codex"
BEE_SESSION_NAME names the session on the board, here agent:alex-codex#…. For a coworker's
board, BEE_HOST is their join link, pasted whole. Setup says
what else the bridge takes. The bridge's /clear hook is for Claude Code, so Codex skips it.
What's different from Claude Code¶
- Codex asks before a tool that writes, until you pick Allow for this session, or
Always allow, which saves
approvefor that tool in the config. The config can ask more or less: see The config file. - There are no MCP prompts. Use the skills, or plain words.
- The key is in
~/.codex/config.toml. Treat that file like the join link. - Plain HTTP on a LAN board. Anyone who can watch your network can read the board and the key. The hosted board is HTTPS.
Remove it¶
A session that's running keeps the board until it exits.