ROK Code 0.1.1
A coding agent that proves the job is done instead of saying so.
ROK Code runs in your terminal, in the folder you already have open, on your own ROK key. When it thinks it has finished, it runs your project's build and test command first — and if that fails, it is not finished. Free, no subscription, no second model provider in the loop.
npm install -g rok-code # or: npx rok-code "explain this repo" rok # first run asks for your key, then remembers it
Install
One command, Node 20.11 or newer, no other dependencies. Create a key on the key dashboard — ROK stores only its SHA-256 hash, so a lost key is replaced rather than recovered — then run rok in the project you want it to work on. The first run asks for the key and keeps it; nothing is written until the key has been checked against ROK.
rok "make the failing test pass" rok -p "explain this repo" --plan # read-only: no writes, no commands rok models # what your key can use rok undo # revert the last turn rok upgrade # update this install in place
On a machine with no terminal — a script, CI — set ROK_API_KEY instead (setx on Windows, then open a new shell). A piped run never blocks on a prompt it cannot show.
The gate needs something to judge. ROK Code detects a verification command from package.json, pyproject.toml or Cargo.toml; rok init writes it to .rok/config.json, or pass --verify "npm test".
New in 0.1.1
- First run is the whole setup
- Run
rokand it asks for your key once, checks it against ROK before writing anything, and keeps it in~/.rok/config.json— your config, never the project's.rok loginreplaces a rotated key, androk doctortells you what is wrong when something is. - Nothing to install, if you would rather not
npx rok-code "explain this repo"runs the newest published build straight from the registry, so you can try it on a repo without touching a global install.- It updates itself
rok upgradeasks the registry whatlatestis and replaces the copy that is running — but only where that is unambiguous. A project dependency, annpxcache or a source checkout get the exact command to run instead of a surprise edit to somebody else's manifest.rok upgrade --checkreports and installs nothing, for CI.- The box never leaves the screen
- The input is a bordered box docked at the bottom of the terminal and repainted in place: agent output, tool activity and reports are written above it, the command palette opens above it and filters as you type, long input wraps instead of scrolling sideways, and a status line underneath shows the model, the workspace, whether completion is gated and how many requests are queued.
- Type ahead while it works
- The box stays editable during a turn: write your next request and press
Enterto queue it,Escto interrupt the running turn and keep what you typed,Ctrl+Ctwice to leave. - A scoreboard, not a vibe
rok bench recordfreezes a real request into a case,rok benchreplays it in a sandbox and scores it with your verification command, androk bench comparedoes the same to a rival CLI — printing what each tool claimed beside what your command found.
Why ROK Code
Claude Code and Codex CLI are good tools, and both can be wired up to run your tests. The difference is what the harness does by default, and whether “done” is a claim or a measurement. Everything below is their own documentation, checked in October 2026 — read it there, because both move fast.
| Claude Code | Codex CLI | ROK Code | |
|---|---|---|---|
| What it costs | Included with a paid Claude plan (Pro is $20/mo, Max from $100/mo) — not on the free plan — or billed per token through an Anthropic API key. | Included with a ChatGPT plan (Plus is $20/mo) or billed per token through an OpenAI API key. | Nothing. Your ROK account is free and the CLI bills to your own ROK key — there is no second subscription to run an agent on your machine. |
| Is “done” verified? | You can configure a check: a /goal, or a Stop hook that exits non-zero. Not the default, and /goal’s evaluator judges what Claude has said in the conversation rather than running your command. | You can ask it to run your checks, and put that instruction in AGENTS.md. Nothing makes it mandatory, and its own success message is not a test result. | Built in and not optional. finish is a tool call, the harness runs your build and test command before accepting it, and a red result goes back to the model as work to do. Every run that ends without a green command exits 3. |
| Whose failure is it? | Not tracked. | Not tracked. | Tracked before the first edit: failures are labelled new, pre-existing or flaky, so the agent is never sent to chase a bug that predates the session — and a pre-existing red suite never makes the run look green. |
| Can you measure it? | No built-in per-repo eval runner documented; the usual answer is a framework you assemble yourself. | No built-in per-repo eval runner documented. | rok bench freezes real requests into cases, replays them in a sandbox and scores them with your command — and rok bench compare runs the same cases against any other CLI, with verified and claimed in separate columns. |
| In CI | Exit status reflects whether the run itself failed. | Emits JSONL events describing the run; not a verdict on your build. | The exit code is the verdict: 3 when the verification command never went green, 4 when a hook blocked it, 0 only when the work actually verified. |
| Extending it | Hooks, subagents, commands and MCP servers. | Instructions and configuration in the repo, open source under Apache-2.0. | Permission rules, lifecycle hooks, project commands and MCP servers — all files in the repository, reviewed in a PR and versioned beside the code they govern. No plugin build step. |
Whoever you pick, the useful habit is the same: give the agent a check it has to pass, and keep the receipt. ROK Code simply refuses to let the receipt be optional — and if you want the comparison to be about your code instead of a marketing page, rok bench compare will run both tools on your repo and score them with your own command.
How the gate works
Every agentic tool runs the same loop: send messages, call tools, repeat. What decides whether a long run ends in working code is whether “done” means anything. ROK Code does not take the model's word for it — finish is a tool call, and the harness runs your command before accepting it.
The harder question is whose failure it is reading. A harness that blames your change for a pre-existing red suite traps the model on somebody else's bug; one that waves failures through is not worth having. So before the first edit it records the identity of every failure your command already reports, and when the gate fails it runs the command once more — anything that disappeared was never yours. What is left is new (the model goes back to work, told exactly which failures are new), pre-existing (reported with the baseline as evidence, never chased, and after two refusals the harness stops refusing rather than burn the run) or flaky (the retry wins). /verify shows the verdicts and the history. Attribution never changes the exit code.
Make it yours
Four extension points, all file-based, so a project's rules travel with the repo and need no plugin API:
permissionsTool(specifier)rules in.rok/config.json— a prefix rule likeBash(npm run test:*)stops at a word boundary, a glob likeEdit(src/**)covers a tree, and deny beats ask beats allow. You can also write new ones straight from the prompt with/permissions allow.hooks- Shell commands at
PreToolUse,PostToolUse,UserPromptSubmitandStop. A hook can block a call (exit 2), inject context, or just have a side effect — so “you may not finish until the changelog is updated” is a nine-line script instead of a hope. commands- Any
.rok/commands/*.mdfile becomes a slash command in the palette, with$ARGUMENTSsubstitution, a per-command model, andallowed-toolsthat narrows the tool surface — a review command literally cannot edit anything. They work headlessly too:rok -p "/review main". MCP- stdio and streamable-HTTP servers from
.mcp.json; each tool joins the agent asmcp__server__toolwith the server's own schema, obeys permission rules, and is approved before it runs — a server that will not start is a status row, not a broken session.
The CLI also carries durable project memory (.rok/memory.md), a ranked symbol-annotated map of the codebase in every prompt, output that spills to .rok/artifacts/ instead of being truncated, and a vision model behind look_at_image — so the agent can check the UI it just built against the design it was given.
Create a free API key to run it — every signed-in account can make one instantly, and your live usage for the day is on the key dashboard.
The API reference documents the OpenAI-compatible endpoint ROK Code runs on, at https://rokremasteredapi.rokteam.org/v1.