Beat Code · an agentic coding CLI, powered by ModelBeat
A fork of Charm's Crush in a warm retro terminal identity, wired to the ModelBeat gateway by default. One binary: beat.
Coming soonBeat
You type once. It decides at every step.
One prompt, one turn, and every step of it routed on what that step actually needs: reasoning, an output ceiling, sight, or nothing but speed. Watch the destination change from beat to beat, and watch the status bar not change at all.
It works through all three prompts on its own. Pick one and it stays there. 5 steps, 3 capability classes, $0.021. The status line said ModelBeat v1 the whole way down. Nothing in this figure is a control the tool actually exposes. There is no model picker to show, which is the point of it.
The same engine, in a window.
Everything above runs in a terminal. Beat Desktop is the other surface: a real editor, a crew of sub-agents, and sight, on the same engine with the same absent model picker.
A real editor: Monaco, tabs, a minimap, an integrated terminal.
A crew of named sub-agents, one per spec task, each routed on what its own task actually needs, so the agent writing a six-hundred-line spec and the agent writing a Dockerfile are not served by the same model. Deploy three or the full twelve in a click.
Expert guidance documents injected into how the agent works rather than what it knows. Ten categories, all on out of the box, each with its own switch and a live count in the status bar.
A helper on Apple's Vision framework reads a screenshot, a photo of a whiteboard or a scanned document into structured context: reading order kept, tables as Markdown, key-values as JSON, barcodes decoded. Entirely on your machine.
v1.5.0 · macOS on Apple Silicon · signed .dmg · Electron 43 with Monaco 0.56 · one mb_live_ key, stored locally · also available as Beat for VS Code. Not yet: language-server IntelliSense, hunk-by-hunk review of agent edits, split editors, a settings pane. The MCP panel is UI-complete but not wired end to end, and there is no Windows or Linux build.
Activate, verify, go live
Built with Charm's Huh form. The key is checked with a real, tiny chat/completions ping, so we surface balance and confirm the engine responds before anything is stored, then persist to the OS keychain. Nothing runs against ModelBeat until this clears. No model is ever shown or chosen.
$ beat auth login Beat Code v0.1.0: no ModelBeat key on this machine. console.modelbeat.ai/keys Create one, paste it below. Prepaid; no card, no plan, no model list. ModelBeat API key: mb_live_9f2c…4c8f, pasted and masked. Validate key format (local · 0ms): mb_live · 36 chars · checksum passes; no request sent yet POST /v1/chat/completions max_tokens: 1 (api.modelbeat.ai · 248ms): 200 OK · ModelBeat v1 responding; a real completion, one token wide. The smallest honest test there is GET /v1/billing/balance (api.modelbeat.ai · 96ms): $142.60 prepaid · spend as you go; no card on file, nothing to cancel Keychain login · modelbeat.ai (macOS · 12ms): key stored · never written to disk in plaintext Key verified and activated. ModelBeat v1 is live. No model to choose. Just start. Run beat in any repo to begin.
The session runs from the top each time you watch it. One command, one paste, four checks, $142.60 of credit. A revoked key stops at the second check with 401 · invalid or revoked api key and the fix printed inline. No stack trace, and nothing written to the keychain.
Beat Code vs the field
How Beat reads against the leading agentic coding tools. Its angle is unusual: one engine, no model picker, ModelBeat orchestrating its pool per step, with honest per-turn cost and a TUI you can actually click. The honest read is that Beat has broad capability for its age but is a young build, while the mature tools have years of hardening behind them.
| Capability | Beat Code | Claude Code | Grok CLI | Kiro | Cursor | Aider |
|---|---|---|---|---|---|---|
| Interface | Terminal TUI | Terminal TUI | Terminal CLI | IDE (VS Code fork) | IDE + CLI | Terminal CLI |
| Model approach | Yes One engine, auto-orchestratedpicks per step across a pool, no model knobs | Claude modelssingle family | Grok models | Multi, via Bedrock | Multi, user-picked | Multi, user-picked |
| Cost transparency | Yes Live per-turn $ and tokens | Partial session usage | Partial | Not yet | Partial plan-based | Yes per-message |
| Agentic tool loop | Yes | Yes | Yes | Yes | Yes | Yes |
| File edits and diffs | Yes diff cards | Yes | Yes | Yes | Yes rich | Yes git diffs |
| Office docs | Yes built-in tooldocx · pdf · xlsx · csv | Partial via code | Partial via code | Partial via code | Partial via code | Not yet |
| Shell and confirmation | Yes allow once or always | Yes allowlist | Yes | Yes | Yes | Partial |
| Plan and spec mode | Yes plan to plan.md | Yes plan mode | Partial | Yes spec-drivenrequirements · design · tasks | Partial | Not yet |
| Project memory and rules | Yes BEAT.md | Yes CLAUDE.md | Partial | Yes steering | Yes rules | Yes conventions |
| MCP, stdio and HTTP | Yes plus in-CLI manager | Yes | Partial | Yes | Yes | Not yet |
| Undo and checkpoints | Yes /undo per turn | Yes rewind | Partial | Yes | Yes checkpoints | Yes git undo |
| Sessions and resume | Yes save and resume | Yes | Partial | Yes | Yes | Partial history |
| Slash and @ autocomplete | Yes | Yes | Partial | Yes | Yes | Partial |
| Mouse and clickable UI | Yes pickers, panels, forms | Partial limited | Not yet | Yes in the IDE | Yes in the IDE | Not yet |
| Vision and image input | Partial wiredengine-routed, needs a vision provider on | Yes | Yes | Yes | Yes | Partial |
| Web search and fetch | Not yet planned | Yes | Yes real-time | Partial | Yes | Partial /web |
| Git integration | Yes commit and PR | Yes commit and PR | Partial | Yes | Yes | Yes auto-commit |
| Sub-agents and parallel | Yes dispatchparallel sub-agents | Yes | Partial | Partial | Partial | Not yet |
| License | ProprietaryNeural Arc | Proprietary | Proprietary | Proprietary | Proprietary | Yes Open source |
| Maturity | Partial young build | Yes mature | Partial newer | Partial preview | Yes mature | Yes mature |
Where Beat already wins
- One engine, zero model babysitting. ModelBeat routes each step to the best fit. Nobody picks a model, or thinks about one.
- Honest, live cost. Real per-turn dollars and tokens, computed from the model that actually served, without ever naming it. A full cafe website came in under half a cent in our benchmark.
- Built-in office documents. A native tool that writes real Word, PDF, Excel and CSV files, not a script that might work.
- A TUI that feels like an app. Clickable pickers, an MCP manager with a form, live status, parallel sub-agents, and the beat motif. Most CLIs are text and nothing else.
- MCP done properly in-terminal. stdio plus hosted HTTP and SSE, a visual manager, and one-click popular servers.
What is still coming
- Vision and image input is wired and hands images to ModelBeat, but the beta needs a vision provider enabled to serve them.
- Web search and fetch to match real-time knowledge, planned to run through the same routing.
- Sub-agent cost accounting is not on the session meter yet.
- Maturity and ecosystem hardening, docs, code signing, and install channels.
Positioning. Against Claude Code and Cursor, which are mature but single-vendor or user-picked, and Grok, which is real-time, Beat's defensible lane is model agnostic orchestration, cost intelligence, and the nicest terminal interface in the category. Kiro's spec-driven flow is the one headline feature worth matching. Everything else on the roadmap is a few focused sprints, not a moat.