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 soon
Terminal · beat

Beat

codev0.1.0 · build 137 engine ModelBeat v1 · 460 approved models · routed per step Describe a task. Every step is routed to the model that suits it (planning, editing, review) and the context carries across. You never pick one. ? keys · /route last decision · ctrl+c quit
A live turn

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.

Ask it
Fig. 01 · one turnidle
beat · ~/src/beat-code
wire the ModelBeat base URL into the provider and add key verification
? for shortcuts
NORMALModelBeat v1ctx 0%main ✚2turn $0.000
Under the hoodstep 0/5

Reading the request…

Considered this step
best-fitidle
high-ceilingidle
vision-capableidle
fast and cheapidle
Spent so far$0.000

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.

Beat Desktop

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.

Fig. 03 · Beat Desktopv1.5.0 · macOS
Beatone engine · task-routed
⇧P CommandsOCR image…Open folder…ModelBeat v1
previewOpen…
assets
elytra.html
index.html
partners.html
pricing.html
index.html
New file⌘S SaveRun
1<!doctype html>
2<html lang="en">
3<head>
4 <meta charset="utf-8">
5 <meta name="viewport" content="width=device-width, initial-scale=1">
6 <title>Preview · ModelBeat</title>
7 <link rel="stylesheet" href="assets/mb.css">
8</head>
9<body>
10
11 <div class="plate">
12 <div class="wrap plate-row">
13 <a class="plate-mark" href="index.html">
14 <span>ModelBeat</span>
15 </a>
16 <nav class="plate-nav u">
17 <a href="pricing.html">Pricing</a>
18 <a href="elytra.html">Elytra</a>
19 <a href="partners.html">Partners</a>
20 </nav>
21 </div>
22 </div>
23
24 <div class="desig">
25 <span class="spec">Three routes · content and art direction</span>
26 </div>
27</body>
28</html>
ProblemsOutputDebug ConsoleTerminal
apple@Noahs-MacBook-Air preview % npx serve .
┌ Serving preview
│ Local: http://localhost:4173
└ watching for changes…
apple@Noahs-MacBook-Air preview %
Agentworking…
analyse the preview folder and wire pricing.html to the live rates
Read four files in `/Users/apple/Downloads/preview`. `pricing.html` has three hard-coded tiers and no fetch. The rates are literals in the markup. Here is what I changed: - `assets/mb.css`: added a `.rate` class so a figure can update without reflowing the row - `pricing.html`: replaced the three literals with spans keyed by tier - `assets/rates.js`: new; reads `/v1/rates` once on load, falls back to the markup if the call fails The fallback matters: with no network the page still renders the tiers it shipped with, so a failed fetch degrades to today's behaviour rather than an empty table.
run it and check the console
Ask Beat to build something… ⌘↵ to send
thinkplandeploy 12 agentsSend
WORKINGModelBeat v1 2,140 tok · ~$0.001644 skillspreviewmain

A real editor: Monaco, tabs, a minimap, an integrated terminal.

The crew · one agent per spec task
CipherNovaAtlasEchoVegaOnyxQuillFluxZephyrOrionSableKilo
Twelve, four at a time

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.

Forty-four skills

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.

It can see

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.

Setup

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.

Fig. 03 · first runwaiting on a key
Terminal · beat~/.config/beat
SETUPno enginebalance key not stored

$ 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.

Comparison

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.

yes partial or basic not yet, or plannedAssessed Aug 2026. Competitors move fast, so read this as directional.
Beat Code compared with Claude Code, Grok CLI, Kiro, Cursor and Aider across interface, model approach, cost, agentic capability, and maturity.
CapabilityBeat CodeClaude CodeGrok CLIKiroCursorAider
InterfaceTerminal TUITerminal TUITerminal CLIIDE (VS Code fork)IDE + CLITerminal CLI
Model approachYes One engine, auto-orchestratedpicks per step across a pool, no model knobsClaude modelssingle familyGrok modelsMulti, via BedrockMulti, user-pickedMulti, user-picked
Cost transparencyYes Live per-turn $ and tokensPartial session usagePartial Not yet Partial plan-basedYes per-message
Agentic tool loopYes Yes Yes Yes Yes Yes
File edits and diffsYes diff cardsYes Yes Yes Yes richYes git diffs
Office docsYes built-in tooldocx · pdf · xlsx · csvPartial via codePartial via codePartial via codePartial via codeNot yet
Shell and confirmationYes allow once or alwaysYes allowlistYes Yes Yes Partial
Plan and spec modeYes plan to plan.mdYes plan modePartial Yes spec-drivenrequirements · design · tasksPartial Not yet
Project memory and rulesYes BEAT.mdYes CLAUDE.mdPartial Yes steeringYes rulesYes conventions
MCP, stdio and HTTPYes plus in-CLI managerYes Partial Yes Yes Not yet
Undo and checkpointsYes /undo per turnYes rewindPartial Yes Yes checkpointsYes git undo
Sessions and resumeYes save and resumeYes Partial Yes Yes Partial history
Slash and @ autocompleteYes Yes Partial Yes Yes Partial
Mouse and clickable UIYes pickers, panels, formsPartial limitedNot yet Yes in the IDEYes in the IDENot yet
Vision and image inputPartial wiredengine-routed, needs a vision provider onYes Yes Yes Yes Partial
Web search and fetchNot yet plannedYes Yes real-timePartial Yes Partial /web
Git integrationYes commit and PRYes commit and PRPartial Yes Yes Yes auto-commit
Sub-agents and parallelYes dispatchparallel sub-agentsYes Partial Partial Partial Not yet
LicenseProprietaryNeural ArcProprietaryProprietaryProprietaryProprietaryYes Open source
MaturityPartial young buildYes maturePartial newerPartial previewYes matureYes 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.