Rock is an AI coding CLI in Go: a clone of public xai-org/grok-build, with a Charm TUI. It is not a mash-up of several harnesses.
The binary name is rock.
A fullscreen Charm TUI, rock -p, rock acp, and rock serve share the same harness. The program lives in cmd/rock and internal/. Raid notes under docs/ are study, not the identity.
A coding agent with a Charm TUI, a headless print mode, ACP on stdio, and a loopback HTTP API.
Jev is a decision API the agent uses for cheap checks, triage, and filtering. The Risk gate is mandatory. A Jev key is required (rock setup jev). See VISION.md.
- Vision — product goals, clone target, constraints.
- Jev audit — how the Go calls Jev today (mostly hard-coded gates).
- ask_jev plan — slices to make those calls agent-driven.
- Raid notes — per-tool dissections. Useful. Not a recipe to blend five products.
Language is Go only. See docs/synthesis/v1-plan.md. Do not price the work in pre-AI years.
| Start here | What it is |
|---|---|
| VISION.md | Product goals, clone target, constraints. |
| AGENTS.md | Conventions for humans and coding agents working in this repo. |
| docs/synthesis/jev-audit.md | Current Jev call sites, keys, offline, tests. |
| docs/synthesis/ask-jev-plan.md | Engineer-sized PRs for ask_jev. |
| docs/README.md | Raid process and index. |
| docs/synthesis/v1-plan.md | 1.0 decisions: Go, shipped Jev gates, Suzuri. |
| docs/synthesis/tui-parity.md | Charm TUI vs Grok Build: intended diffs + visual backlog. |
| docs/synthesis/subscription-auth.md | Consumer-plan model sign-in. Jev is a separate key. |
Per-tool pages live under docs/clis/. The page template is docs/_template.md. Older synthesis pages that framed Rock as a mash-up are marked superseded and kept as history.
- Product: Grok Build-class CLI (public tree, reimplemented in Go). Charm TUI,
-p, ACP, serve. - Jev: Decision API. The agent tool is
ask_jev. Hard-wired gates still run, including Risk. See the audit. - TUI: Charm v2. Crush is FSL-1.1-MIT; study freely, do not wholesale-copy while FSL applies.
- License: MIT. See LICENSE.
1.0 is a Go binary, rock. The plan is docs/synthesis/v1-plan.md.
go test ./...
go build -o rock ./cmd/rock
./rock setup jev
./rock inspect
./rock -p "Say hello in one sentence"| Command | What it does |
|---|---|
rock |
Fullscreen Charm TUI |
rock -p "…" |
One headless turn; --output streaming-json for scripts |
rock --resume ID |
Open a session in the TUI |
rock --yolo |
Skip asks; the destructive Jev (or offline) gate still blocks |
rock --mode plan |
Plan mode: edits and every shell command blocked |
rock --verbose |
Show ◇ jev turn / risk diagnostics in the TUI |
rock inspect |
Config, skills, MCP, Jev key source, model auth class (api_key / siwc / grok-cli / offline_model) |
rock login chatgpt |
Sign in with ChatGPT (OSS SIWC). Model credentials only. Not Jev. Does not start the agent. |
rock logout chatgpt |
Revoke and clear the ChatGPT session. Same: not the agent, not a Jev bypass. |
rock setup |
Huh form → ~/.config/rock/config.toml. Does not store API keys. |
rock setup jev |
Validate a Jev key and save it (OS keychain, or ROCK_HOME/jev.key at 0600). |
rock sessions |
List sessions for this folder |
rock permissions |
Allow / ask / deny |
rock fork |
Print Suzuri OSC 7880 (brand=rock) for a new host pane |
rock serve |
Loopback HTTP and SSE |
rock acp |
ACP v1 and v2 on stdio |
rock update |
Install the latest GitHub release (checksum + atomic replace). --check prints current → latest |
rock version |
Print the build version (dev unless a release injected one) |
In the TUI: /plan, /yolo, /default, /permissions, /agents (subagents this session), /ready (Jev plan-readiness — never approves), /verbose, /fork [prompt], /sessions, /provider (ChatGPT / SuperGrok / API key / offline model), /update, /help, /quit. The TUI asks for a Jev key before any turn. A signed-in official grok binary on PATH is picked up automatically for SuperGrok models; Rock never runs grok login and never reads ~/.grok token files. Set auth = "grok-cli" to force it.
The public page is stephenshorton.github.io/rock. Source for it is site/, a Vite app. The page swaps one install command by operating system. macOS and Linux:
curl -fsSL https://stephenshorton.github.io/rock/install.sh | bashWindows PowerShell: irm https://stephenshorton.github.io/rock/install.ps1 | iex
install.sh / install.ps1 download the latest GitHub release for your OS/arch, verify checksums.txt, and put rock on ~/.local/bin (or %LOCALAPPDATA%\Programs\rock on Windows). If no asset matches, they fall back to go install github.com/StephenSHorton/rock/cmd/rock@latest (needs Go 1.27). rock update does the same replace for a release binary. A go install tree is left alone and prints that module command instead.
A Jev key is required. After install:
rock setup jevOpt out of the once-a-day “Rock vX available” notice with ROCK_NO_UPDATE=1 or [update] check = false in config.toml. The check is off in CI and under ROCK_TEST_FAKE_JEV.
The TUI asks on first launch if no working key is stored. JEV_API_KEY and TYPESAFE_API_KEY still count as configured; they still have to validate. Headless -p, rock serve, and rock acp fail without a valid key. site/ builds with Vite (base: /rock/). .github/workflows/pages.yml deploys site/dist on push to main once Pages is set to GitHub Actions in the repo settings. Until then the live copy stays on StephenSHorton/StephenSHorton.github.io.
Cloud agents can run the rock-docs reader on port 4173 to serve the tree as HTML and link-check the docs. Build the product binary with go build ./cmd/rock.
Set ROCK_API_KEY (or OPENAI_API_KEY) and ROCK_BASE_URL for a real model. Store a Jev key with rock setup jev, or set JEV_API_KEY / TYPESAFE_API_KEY. Rock does not start an agent without one. Suzuri can set ROCK_SESSION_TITLE when it launches a pane.
rock setup writes ~/.config/rock/config.toml. It does not store API keys. Use rock setup jev for the Jev key.