Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ grok login
# 3) In ~/.config/ringer/config.toml, uncomment [engines.grok]
```

Route with per-task `"engine": "grok"` and pick the model with `"model": "grok-build"` or `"model": "grok-composer-2.5-fast"` (the shipped default — the speed pick). Grok brings its own OS sandbox on macOS (profile `workspace`: read everywhere, writes confined to the task dir, temp, and `~/.grok`), and its JSON output exposes no token counts — plan-billed workers report cost as included in plan.
Route with per-task `"engine": "grok"` and pick the model with `"model": "grok-4.5"` (run `grok models` to see what your installed CLI serves — older v0.2.x also exposed `grok-build` and `grok-composer-2.5-fast`, which current CLIs reject as "unknown model id"). Grok brings its own OS sandbox on macOS (profile `workspace`: read everywhere, writes confined to the task dir, temp, and `~/.grok`), and its JSON output exposes no token counts — plan-billed workers report cost as included in plan.

`args_template` is an argv array, not a shell string. Ringer replaces `{taskdir}`, `{spec}`, and `{model}` inside each argv element. `{access_args}`, `{sandbox_args}`, `{full_access_args}`, `{model_args}` (becomes `-m <resolved model>` when the task or engine names one), and `{engine_args}` (the task's per-task `engine_args`) expand to multiple argv elements only when they appear as their own array item.

Expand Down
13 changes: 8 additions & 5 deletions config.sample.toml
Original file line number Diff line number Diff line change
Expand Up @@ -96,15 +96,18 @@ model_report_regex = "(?m)^model:[ \\t]*([^ \\t\\r\\n]+)[ \\t]*\\r?$"
# SuperGrok or X Premium Plus plan. Headless mode (-p) runs a full agentic
# loop with tools and exits. Grok brings its own OS sandbox (Seatbelt on
# macOS): profile "workspace" = read everywhere, write CWD + temp + ~/.grok,
# network allowed. Models: grok-build, grok-composer-2.5-fast (route with the
# per-task "model" field). Verified against Grok Build v0.2.81 (2026-07-06).
# Note: --no-auto-update is accepted but absent from --help in v0.2.81 (grok
# network allowed. Model: grok-4.5 (route with the per-task "model" field).
# Verified against Grok Build v0.2.111 (2026-08-03). NOTE ON MODEL NAMES:
# older v0.2.x exposed grok-build and grok-composer-2.5-fast; current CLIs
# reject those with "unknown model id" — run `grok models` to see what your
# installed CLI actually serves (v0.2.111 lists only grok-4.5).
# Note: --no-auto-update is accepted but absent from --help (grok
# rejects unknown flags, so this is a hidden flag, not a typo) — it stops the
# CLI self-updating mid-swarm.
# Uncomment to enable.
# [engines.grok]
# bin = "grok"
# model_default = "grok-composer-2.5-fast"
# model_default = "grok-4.5"
# args_template = [
# "--cwd",
# "{taskdir}",
Expand All @@ -121,7 +124,7 @@ model_report_regex = "(?m)^model:[ \\t]*([^ \\t\\r\\n]+)[ \\t]*\\r?$"
# ]
# sandbox_args = ["--sandbox", "workspace"]
# full_access_args = ["--sandbox", "off", "--permission-mode", "bypassPermissions"]
# Grok's JSON output carries no usage/token fields (verified v0.2.81) — plan
# Grok's JSON output carries no usage/token fields (verified v0.2.111) — plan
# CLIs report cost as "included in plan"; regex is a harmless no-match. Its JSON
# also does not self-report a model, so no model_report_regex is configured.
# token_regex = "\"total_tokens\"\\s*:\\s*([0-9]+)"
Expand Down
28 changes: 20 additions & 8 deletions registry/model-identity.toml
Original file line number Diff line number Diff line change
Expand Up @@ -43,24 +43,36 @@ last_verified = 2026-07-10
[engines.grok]
harness = "Grok Build CLI"
access = "OAuth plan"
default_model_key = "grok-build"
default_model_key = "grok-4.5"

[engines.grok.models."grok-4.5"]
# The live model id the Grok Build CLI serves. As of CLI v0.2.111 `grok models`
# lists grok-4.5 as the only (and default) model; route with per-task
# "model": "grok-4.5". "Grok Build" is the HARNESS (the CLI product), never a
# model name — an earlier entry wrongly recorded "Grok Build 0.1" as a model; do
# not reintroduce it.
display = "Grok 4.5"
lab = "xAI"
confidence = "verified" # `grok models` on CLI v0.2.111 (2026-08-03) lists grok-4.5; operator-confirmed the CLI serves Grok 4.5
source = "https://docs.x.ai/developers/release-notes"
last_verified = 2026-08-03
noncanonical_slugs = ["opencode:openrouter/x-ai/grok-4.5"]

# Retired CLI slugs, kept only so historical run rows still resolve to a display.
# Older Grok Build v0.2.x accepted these as `-m` values; current CLIs reject
# them with "unknown model id" (grok-composer-2.5-fast was Cursor's Composer 2.5,
# no longer offered by the CLI on our plan). Do not route new work here — use grok-4.5.
[engines.grok.models."grok-build"]
# "Grok Build" is the HARNESS (the CLI product), never a model name. The CLI
# serves exactly two models: Grok 4.5 (xAI) and Composer 2.5 (Cursor). The
# 'grok-build' engine default resolves to Grok 4.5. An earlier entry here
# wrongly recorded "Grok Build 0.1" as a model — do not reintroduce it.
display = "Grok 4.5"
lab = "xAI"
confidence = "verified" # operator-confirmed (Jon, 2026-07-10): Grok Build CLI serves Grok 4.5 + Composer 2.5
confidence = "verified" # operator-confirmed (Jon, 2026-07-10): Grok Build CLI served Grok 4.5 + Composer 2.5
source = "https://docs.x.ai/developers/release-notes"
last_verified = 2026-07-10
noncanonical_slugs = ["opencode:openrouter/x-ai/grok-4.5"]

[engines.grok.models."grok-composer-2.5-fast"]
display = "Composer 2.5 Fast"
lab = "Cursor (Anysphere)"
confidence = "verified" # Cursor (Anysphere) model, served through xAI's Grok Build CLI in our setup
confidence = "verified" # Cursor (Anysphere) model, served through xAI's Grok Build CLI in our earlier (v0.2.81) setup
source = "https://cursor.com/blog/composer-2-5"
last_verified = 2026-07-10

Expand Down