This release is a pre-release and may not be stable for production use.
climax
A local browser + MCP surface for coding agents. Chat, live canvas, and multi-agent tabs — all running on your machine, orchestrated by any MCP- speaking CLI (Claude Code, codex, gemini, aider, cursor-agent…).
┌───────────────────────────────────────────────┐
│ https://local.climax.com.mx:8011 │
│ ┌─────────────────────────────────────────┐ │
│ │ │ │
│ │ CANVAS (sandboxed iframe — │ │
│ │ agent-authored HTML, live) │ │
│ │ │ │
│ └─────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────┐ │
│ │ Chat ● Canvas · Chat │ │
│ │ ...conversation with your agent... │ │
│ │ [ type here ] │ │
│ └─────────────────────────────────────────┘ │
└───────────────────────────────────────────────┘
↑ ↑
WebSocket stdio
↓ ↓
backend ←──── HTTP ──── mcp_server
Install
One line:
curl -fsSL https://climax.com.mx/install.sh | sh
Or with pip:
pip install climax
Then start it:
climax
# → https://local.climax.com.mx:8011
Open the URL. Click + agent in the browser to launch a coding agent — the backend spawns it with an ephemeral MCP config, so nothing to wire up by hand.
Why local.climax.com.mx?
Modern browsers won't let a page at https://climax.com.mx talk to
http://localhost. So climax runs on the loopback address using a real
Let's Encrypt certificate for local.climax.com.mx — a public DNS name
that always resolves to 127.0.0.1. Traffic never leaves your machine,
but the browser sees a valid HTTPS origin.
MCP tools exposed to the agent
| Tool | What it does |
|---|---|
page_set(html) |
Replace the canvas with new HTML. |
page_append(html) |
Append an HTML fragment to the canvas. |
notify(msg, level) |
Corner toast (info · success · warn). |
chat_say(msg) |
Send an assistant bubble to the chat. |
wait(timeout?) |
Block until the user chats or the canvas emits an event. |
snapshot_* |
Save/list/restore/patch canvas snapshots. |
telemetry_recent |
Recent backend events for debugging. |
The canvas iframe can talk back to the agent:
window.parent.postMessage({
type: 'climax.event',
name: 'submit',
data: { /* whatever */ },
}, '*');
wait returns {stream:'canvas', name, data, ts} for canvas events and
{stream:'chat', msg} for typed chat. One tool, both surfaces.
Multi-agent
Every MCP client identifies itself with an X-Climax-Agent header. The
browser shows one tab per agent — canvas, chat, and pty terminal each.
Click + agent to launch a new one from a preset (see
climax/agents.toml). Bring-your-own preset via ~/.climax/agents.toml.
Development
git clone https://github.com/sheunaluko/climax
cd climax
pip install -e ".[dev]"
climax --host 127.0.0.1 --port 8011
Set PYTHON=/path/to/python ./start.sh for the convenience launcher
(kills a stale instance on the port first).
Design notes
- Iframe is
sandbox="allow-scripts allow-forms allow-popups"— no parent-frame access, no cookies. Safe for LLM-authored HTML. - Backend state is per-agent in-memory; snapshots persist to a local SQLite file for offline reference.
waitraces both queues so agents never miss input on the wrong stream.
License
MIT — see LICENSE.
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 python_climax-0.1.0rc1.tar.gz.
File metadata
- Download URL: python_climax-0.1.0rc1.tar.gz
- Upload date:
- Size: 41.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4ad5153351f79e31f28a6228744261aaa570af90360b275660846cefb7dfefa5
|
|
| MD5 |
38270894bd965d6811fbc55f52b64b2b
|
|
| BLAKE2b-256 |
be13c4a6c660adbddbda579f711e4e25c7811245272804eebf548289f6ed3f54
|
File details
Details for the file python_climax-0.1.0rc1-py3-none-any.whl.
File metadata
- Download URL: python_climax-0.1.0rc1-py3-none-any.whl
- Upload date:
- Size: 45.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/7.0.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25a5c5506b9c8c50b983de2c80a49040ba09687657d2485b79b4d876bf711e22
|
|
| MD5 |
83c27b75af5c75cabacf0d6541749117
|
|
| BLAKE2b-256 |
0e70c0a9de98dfbcf23c91c40255995ed3f76df76f828bd2bf2fb88ed14219dd
|