Steer AI drafts with marks, not chat.
This is the STEER solution: the review desk, the server, and the Grok Bot recipe that runs the rewrite loop. The thing in the video. Not a prompt with no page.
The same repo powers a portable agent skill (Claude Code, Codex, Cursor, or any host that reads SKILL.md). One codebase — no fork.
-
Build or download
steer-skill-portable-<version>.zipviapython3 scripts/build-steer-portable.py(writesdist/steer-skill-portable-*.zip, reproducible sha256). -
Install the skill (
SKILL.md) and runbash install-catalog.shfrom the unzipped package (bundleddesk/, no network). Seepackaging/INSTALL.md. -
Catalog path defaults to
./steer-catalog(override withSTEER_CATALOG). Portable installs refuse implicit/workspace/steer-catalogunlessSTEER_CATALOGis set explicitly. Grok Botinstall-desk.shstill defaults there when/workspaceexists. -
Start the desk:
python3 start.pyinside the catalog. -
No webhook required. After Save, either the user says "saved" and the agent reads
review/saves/latest.jsonagainstprocessed.json, or the agent runs a blocking wait:python3 start.py wait-save --timeout 600
Optional review/.webhook.env still works unchanged for Grok Bot (Save POSTs the same as today). Voice LLM markup needs the user's own xAI or other host key (XAI_API_KEY, review/.voice.env).
Shared skill text lives in skills/_core/; Grok Bot skills are generated from that source by the build script.
Import STEER as a Grok Bot. On first conversation the bot runs Steer onboarding:
- If
/workspace/steer-catalogis missing, it pullsdesk/from this repo (tarball, not a git clone). - It starts the page at http://127.0.0.1:8766/steer/.
- It wires Save once (webhook URL + sender key via secret-request).
The first open should be the slop sample. Mark it. Save. That is the product.
You can also run the same install yourself:
curl -fsSL https://raw.githubusercontent.com/GlobalTC/steer/main/install-desk.sh | bashOr, if you already have this repo:
cp -R desk /workspace/steer-catalog
python3 /workspace/steer-catalog/start.pyLearn sandbox (does not write the catalog): http://127.0.0.1:8766/steer/?learn=1
The catalog is the copy of record. Operating law: desk/CONSTITUTION.md.
The page is the product. The recipe is the rewrite loop that wakes on Save.
| Slot | Path |
|---|---|
| Profile | profile.json |
| Memory | memory.json |
| Skills | skills/ |
| Save-ping | routines/draft-review-save-ping.md |
| Plugins | plugins.json |
share.json is those slots in one file. Grok Bot's packer still cannot ship the desk files; first-run reconstructs them from this repo.
Localhost is the product path. If this computer is on a tailnet:
tailscale serve --bg --set-path=/steer http://127.0.0.1:8766
Tailnet only. Never Funnel. Never tailscale serve reset.
- Wordmark:
assets/steer-logo.svg - Square mark:
assets/steer-mark.svg
MIT License. Copyright (c) 2026 Bill French (832Labs). A readable copy is in LICENSE.md.