Run any model in Grok Bot — one-command setup, model picker UI, evidence-based provider wire maps, and an update-proof doctor. Not farming you, arming you.
Pick a model per agent. Save. It talks native and survives Grok Bot updates.
Keys never leave your machine. Every wire claim in this repo is probe-verified, not vibed.
## ✨ The LiquidGlass Observatory
The old picker was a dropdown. This is the deck it grew into — a frosted-glass
mission-control panel that lives inside the Grok Bot window itself:
Claude, GLM, Qwen, Gemini — and the agent's next reply rides the new lane. No restart.
before it counts; Copy Proof hands you the receipt.
hit rate, refreshed while the agent works.
clip mid-run.
Show All Bots walks the whole fleet; Diagnostics &Logs digs into the hop, Reset Chat clears a stuck thread.
silent Grok updates, MIT.
## ⚡ Quick start
What this repo is — and is not. opengrok is a **config sidecar for an
existing Grok Bot install**: it writes model bindings, wire maps, and a
health doctor next to your Grok Bot. It does not host or emulate Grok
Bot, does not control your machine, and does not ship auth shims — your
Grok Bot (desktop + optional cloud computer) stays exactly what it is; we
only tell it which model to talk to. A "hop" here simply means any
OpenAI-compatible base URL (the "OpenAI-compatible base URL" you'd paste in
other tools).
Prerequisites: a working Grok Bot install (desktop app), Python 3.9+,
Node 18+ (for the picker/maps), and API keys for any provider you bind.
git clone https://github.com/OnlyTerp/opengrok cd opengrok python setup.py
That's the whole install: it detects your Grok Bot install and live services,
adopts existing bindings or asks 3 questions, writes its config, baselines your
machine, and opens the picker. Then:
python tools/doctor.py # anytime: is everything still healthy? python tools/qa.py # repo self-check: leaks, refs, tests
## 🤖 What it gives each model
Dropping a foreign model into Grok Bot usually "works" and feels off — slower,
dumber, token-hungry. That's harness mismatch: the model was RL-trained on its
own harness's wire shape, and gets a generic prompt shape plus wrong reasoning
knobs. opengrok fixes the wire:
| Model family | What goes wrong vanilla | What opengrok does |
|---|---|---|
| Grok (xAI) | effort knob is xhigh, not max; fast has no field | literal token mapping, always-on reasoning documented |
| GLM (Zhipu) | thinks by default — silence is expensive; max is real | verified token table + true off-switch via thinking:disabled |
| Claude | thinking is owned by the auth shim; body-painting it 400s | shim-owned thinking, effort passes clean |
| Gemini | "fast" was decorative — the knob is the slug, not a field | fast lane rerouting, measured 1.5s → 0.9s first token |
| DeepSeek | thinking lives in the model slug, not the body | slug-owns-thinking mapping |
| local models | context/recovery edges | dedicated route, fail-closed |
Every row of that table is backed by a capture in wire-captures/
(see [glm-5.3-flash](wire-captures/glm-5.3-flash/) for the full ladder —
bare request thinks by default, disabled really switches it off, max is a
real token).
## 🧩 How it fits together
Grok Bot agent
│ modelId + parameters (thinking/effort/fast)
▼
provider-maps ──► per-provider wire truth (verified, versioned, tested)
│
▼
upstream (xAI / Zhipu / Anthropic / Google / DeepSeek / local llama.cpp)Two contracts, one story:
provider-maps.cjs — Contract A: direct body maps (client-side lanes)provider-maps-hop.cjs — Contract B: applyHarnessControls() for hop lanes — this is what ships on the boxCloud agents need one more step. Stock Grok Bot cloud hosts do not read
model-bindings.json — a saved binding is ignored until you install the
binding consumer into the host. tools/apply-box-patch.py does that (anchored,
idempotent, backs up first), and tools/file-relay.py is the box-side file
relay the picker pushes bindings to. See [CLOUD-HOST](docs/CLOUD-HOST.md) for
the full local → push → patch → bounce → verify flow.
## 🛡️ Update-proof by design
Grok Bot updates silently rewrite its bundle. Instead of hoping:
doctor.py baselines your machine on setup and watches files, services,and caches — after any update it tells you exactly what moved
--quiet mode stays silent when clean (cron-friendly), complains only on drift