[PR #1134] [MERGED] feat(clients): register Grok Build and Grok Bot during setup #2670

Closed
opened 2026-10-17 21:08:53 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/1134
Author: @morluto
Created: 10/8/2026
Status: ✅ Merged
Merged: 10/8/2026
Merged by: @morluto

Base: main ← Head: cursor/fix-grok-client-setup-0b56


📝 Commits (8)

  • 16a8fe0 feat(clients): register Grok Build and Grok Bot during setup
  • f2ce174 merge: bring grok client setup up to date with main
  • ab8a544 fix(clients): clear a disabled Grok Build registration during setup
  • 7d317e8 merge: bring grok client setup up to date with main
  • b649a02 fix(verify): check packed Hopper search as literal-only
  • 3b1b4c0 fix(clients): stop treating a Grok Bot data directory as registered
  • 854db77 fix(clients): drop multiline Grok disable-list entries
  • 23baf4a merge: bring grok client setup up to date with main

📊 Changes

40 files changed (+2501 additions, -68 deletions)

View changed files

📝 README.md (+1 -1)
📝 README_ar.md (+1 -1)
📝 README_de.md (+1 -1)
📝 README_es.md (+1 -1)
📝 README_ja.md (+1 -1)
📝 README_ko.md (+1 -1)
📝 README_pl.md (+1 -1)
📝 README_pt-BR.md (+1 -1)
📝 README_ru.md (+1 -1)
📝 README_th.md (+1 -1)
📝 README_tr.md (+1 -1)
📝 README_uk.md (+1 -1)
📝 README_vi.md (+1 -1)
📝 README_zh-TW.md (+1 -1)
📝 README_zh.md (+1 -1)
📝 docs/installation.md (+28 -2)
📝 docs/roadmap.md (+1 -1)
📝 scripts/verify-package-environment.mjs (+2 -0)
📝 scripts/verify-package-update.mjs (+2 -0)
📝 scripts/verify-published-package.mjs (+9 -0)

...and 20 more files

📄 Description

Summary

Continues #1132 and keeps that change as its own commit, authored by monomyth (16a8fe03). Setup detects Grok Build and installs its local REA MCP registration. Grok Bot is detected, but setup does not write a local file or report that file as aligned.

#1136 squashed this work into one agent commit and dropped that authorship. It is closed. #1132 stays the fork pull request.

Problem and expected behavior

Setup already configured Claude Code, Codex, Cursor, Gemini CLI, and the other supported clients. It did not detect Grok Build.

Grok Build suppresses a server named in the root disabled_mcp_servers list. Setup removes only the rea name from that list, keeps every other name, and doctor reports the registration stale until that name is gone. A multiline basic or literal string that the TOML parser decodes as rea is that same name, including """rea""", '''rea''', and a multiline string whose opening newline trims away. A multiline value that is not exactly rea stays. Uninstall of an inline mcp_servers table whose only server is REA keeps the comments around that entry.

A detected Grok Build install receives [mcp_servers.rea] in its TOML config, with startup_timeout_sec = 30, edited without rewriting the rest of the file.

Grok Bot stores connectors in the signed-in account and runs them on its hosted computer. A mcp.json under ~/.grokbot or SAND_DATA_ROOT is not that store, and a stdio server on this machine is not attached. Setup does not call the account connector API. Selecting grok_bot returns the manual chat step instead of writing a file. rea doctor --client grok_bot reports that step and does not treat the data directory as aligned. An audit-wide doctor run does not fail only because the directory exists. Uninstall does not remove the account connector.

main replaced the packed-bridge runtime probe with a shipped-file and Python syntax check (826583dd). This branch had restored tests/fixtures/bridgeSearchProbe.py so the old probe could assert literal search and regex refusal. The merge keeps main's check and removes that fixture.

Change and scope

Grok Build uses a grok document format. Parsing matches TOML, and serialization edits only the REA server tables and a root disabled_mcp_servers assignment that names rea. Comments, spacing, and unrelated settings stay in place. Codex keeps its existing full-document TOML rewrite. Disable-list strings are decoded with that same parser, so the editor removes an entry exactly when readback would still see rea.

Grok Build is found from GROK_HOME or ~/.grok. Grok Bot is found from an absolute SAND_DATA_ROOT, and otherwise from ~/.grokbot. That path is a detection marker only. The shared skill stays under ~/.agents/skills.

The lifecycle suite is split into smaller suites so the test callback stays within the function-length check. README translations name Grok Build. Installation, the website, and the skill describe the Grok Bot chat step.

Not included: calling Grok Bot's account connector API, copying another client's mcp.json, or duplicating the skill into a Grok directory.

Contract and boundary impact

  • Semantic owner and earliest changed stage: client setup and uninstall, at configuration write time. The package verifier is a separate check of the already-shipped Hopper bridge.
  • CLI and MCP/tool-catalog contract: none. The MCP server tools are unchanged. Setup gains grok_build as a file registration and grok_bot as a detected client with manual remediation.
  • Provider, bridge, target-format, or platform compatibility: the packed Hopper bridge is not changed. verify:package confirms the shipped bridge files and that the packed Python parses. Real Hopper and Ghidra lanes cover runtime behavior.
  • Evidence, artifact, provenance, or reconstruction contract: none.
  • Process execution, authorization, cleanup, or containment impact: none. Setup still writes only the local client config it already owns for other agents. It does not write a Grok Bot connector.
  • Generated metadata: skill-src names the client ids. Generated skills/ and docs/public/product-catalog.json are not in this commit.

Evidence and regression coverage

  • Tests added or updated: client lifecycle, registration status, configuration dialects, doctor scope, and setup planning. Grok Bot coverage shows a populated data-directory mcp.json stays unchanged, is not aligned, and uninstall skips it. Grok Build coverage removes multiline rea disable-list entries and leaves a multiline value that decodes as rea plus a newline.
  • Package check: scripts/verify-packed-bridge.mjs follows main. It checks that the Hopper and Ghidra bridges are in the package and that the packed Hopper Python parses. It does not load a test fixture.
  • Remaining proof gaps: no live Grok Build or Grok Bot session was run. The chat registration step is the documented account workflow, not a call this change executes.

Validation performed

  • npm run test:focused -- tests/boundary/filesystem/clientLifecycle.test.ts tests/boundary/filesystem/clientConfigurationDialects.test.ts tests/boundary/filesystem/clientRegistrationStatus.test.ts src/application/Doctor.test.ts src/application/Setup.planning.test.ts tests/conformance/readmeConsistency.test.ts
  • npm run test:focused -- tests/boundary/filesystem/clientLifecycle.test.ts tests/boundary/cli/analysisSelectorCli.test.ts tests/boundary/mcp/largeToolResult.test.ts — 41 passed after the merge
  • npm run check:fast — typecheck and lint passed

Compatibility, safety, and release

  • Breaking changes or migration steps: none for existing file-backed clients. Grok Bot is no longer presented as configured by a local mcp.json.
  • Real Hopper/Ghidra, browser, or OS coverage: not run for this revision.
  • Package or release metadata impact: no version bump.
  • Security, privacy, process, or containment review: setup does not send a Grok Bot registration to the account API and does not put credentials in the documented command.

Review checklist

  • The PR has one focused outcome and the title follows type(scope): outcome.
  • Related issue is linked, or the reason for not linking one is stated above. Continues #1132; no separate issue is filed.
  • Tests cover changed observable behavior and meaningful failure paths.
  • Owning docs, contracts, and generated metadata are updated where needed.
  • User-visible CLI/MCP changes include representative output.
  • I checked the final diff for secrets, unrelated cleanup, and unsupported claims.
Open in Web Open in Cursor 

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/1134 **Author:** [@morluto](https://github.com/morluto) **Created:** 10/8/2026 **Status:** ✅ Merged **Merged:** 10/8/2026 **Merged by:** [@morluto](https://github.com/morluto) **Base:** `main` ← **Head:** `cursor/fix-grok-client-setup-0b56` --- ### 📝 Commits (8) - [`16a8fe0`](https://github.com/morluto/rea/commit/16a8fe03e98b903bb03c690fe6983a22a3a6f2a4) feat(clients): register Grok Build and Grok Bot during setup - [`f2ce174`](https://github.com/morluto/rea/commit/f2ce174c63f3f876031dee7e26b034326ecebe94) merge: bring grok client setup up to date with main - [`ab8a544`](https://github.com/morluto/rea/commit/ab8a544cb8c1a9f165f07095dadd25bf401804e3) fix(clients): clear a disabled Grok Build registration during setup - [`7d317e8`](https://github.com/morluto/rea/commit/7d317e86b034a295b8f3ee3207975c7c6fb1c400) merge: bring grok client setup up to date with main - [`b649a02`](https://github.com/morluto/rea/commit/b649a02bfd653fb2b4e0f555b1468e100a9e9344) fix(verify): check packed Hopper search as literal-only - [`3b1b4c0`](https://github.com/morluto/rea/commit/3b1b4c019559e60acdef92ddb170785fc7214369) fix(clients): stop treating a Grok Bot data directory as registered - [`854db77`](https://github.com/morluto/rea/commit/854db778ac16c12ce6d4dfc04817531b1bd5bb10) fix(clients): drop multiline Grok disable-list entries - [`23baf4a`](https://github.com/morluto/rea/commit/23baf4acdabfb6f82dd32d6d4d25a1748efc47a1) merge: bring grok client setup up to date with main ### 📊 Changes **40 files changed** (+2501 additions, -68 deletions) <details> <summary>View changed files</summary> 📝 `README.md` (+1 -1) 📝 `README_ar.md` (+1 -1) 📝 `README_de.md` (+1 -1) 📝 `README_es.md` (+1 -1) 📝 `README_ja.md` (+1 -1) 📝 `README_ko.md` (+1 -1) 📝 `README_pl.md` (+1 -1) 📝 `README_pt-BR.md` (+1 -1) 📝 `README_ru.md` (+1 -1) 📝 `README_th.md` (+1 -1) 📝 `README_tr.md` (+1 -1) 📝 `README_uk.md` (+1 -1) 📝 `README_vi.md` (+1 -1) 📝 `README_zh-TW.md` (+1 -1) 📝 `README_zh.md` (+1 -1) 📝 `docs/installation.md` (+28 -2) 📝 `docs/roadmap.md` (+1 -1) 📝 `scripts/verify-package-environment.mjs` (+2 -0) 📝 `scripts/verify-package-update.mjs` (+2 -0) 📝 `scripts/verify-published-package.mjs` (+9 -0) _...and 20 more files_ </details> ### 📄 Description <!-- CURSOR_AGENT_PR_BODY_BEGIN --> ## Summary Continues #1132 and keeps that change as its own commit, authored by monomyth (`16a8fe03`). Setup detects Grok Build and installs its local REA MCP registration. Grok Bot is detected, but setup does not write a local file or report that file as aligned. #1136 squashed this work into one agent commit and dropped that authorship. It is closed. #1132 stays the fork pull request. ## Problem and expected behavior Setup already configured Claude Code, Codex, Cursor, Gemini CLI, and the other supported clients. It did not detect Grok Build. Grok Build suppresses a server named in the root `disabled_mcp_servers` list. Setup removes only the `rea` name from that list, keeps every other name, and doctor reports the registration stale until that name is gone. A multiline basic or literal string that the TOML parser decodes as `rea` is that same name, including `"""rea"""`, `'''rea'''`, and a multiline string whose opening newline trims away. A multiline value that is not exactly `rea` stays. Uninstall of an inline `mcp_servers` table whose only server is REA keeps the comments around that entry. A detected Grok Build install receives `[mcp_servers.rea]` in its TOML config, with `startup_timeout_sec = 30`, edited without rewriting the rest of the file. Grok Bot stores connectors in the signed-in account and runs them on its hosted computer. A `mcp.json` under `~/.grokbot` or `SAND_DATA_ROOT` is not that store, and a stdio server on this machine is not attached. Setup does not call the account connector API. Selecting `grok_bot` returns the manual chat step instead of writing a file. `rea doctor --client grok_bot` reports that step and does not treat the data directory as aligned. An audit-wide doctor run does not fail only because the directory exists. Uninstall does not remove the account connector. `main` replaced the packed-bridge runtime probe with a shipped-file and Python syntax check (`826583dd`). This branch had restored `tests/fixtures/bridgeSearchProbe.py` so the old probe could assert literal search and regex refusal. The merge keeps `main`'s check and removes that fixture. ## Change and scope Grok Build uses a `grok` document format. Parsing matches TOML, and serialization edits only the REA server tables and a root `disabled_mcp_servers` assignment that names `rea`. Comments, spacing, and unrelated settings stay in place. Codex keeps its existing full-document TOML rewrite. Disable-list strings are decoded with that same parser, so the editor removes an entry exactly when readback would still see `rea`. Grok Build is found from `GROK_HOME` or `~/.grok`. Grok Bot is found from an absolute `SAND_DATA_ROOT`, and otherwise from `~/.grokbot`. That path is a detection marker only. The shared skill stays under `~/.agents/skills`. The lifecycle suite is split into smaller suites so the test callback stays within the function-length check. README translations name Grok Build. Installation, the website, and the skill describe the Grok Bot chat step. Not included: calling Grok Bot's account connector API, copying another client's `mcp.json`, or duplicating the skill into a Grok directory. ## Contract and boundary impact - Semantic owner and earliest changed stage: client setup and uninstall, at configuration write time. The package verifier is a separate check of the already-shipped Hopper bridge. - CLI and MCP/tool-catalog contract: none. The MCP server tools are unchanged. Setup gains `grok_build` as a file registration and `grok_bot` as a detected client with manual remediation. - Provider, bridge, target-format, or platform compatibility: the packed Hopper bridge is not changed. `verify:package` confirms the shipped bridge files and that the packed Python parses. Real Hopper and Ghidra lanes cover runtime behavior. - Evidence, artifact, provenance, or reconstruction contract: none. - Process execution, authorization, cleanup, or containment impact: none. Setup still writes only the local client config it already owns for other agents. It does not write a Grok Bot connector. - Generated metadata: `skill-src` names the client ids. Generated `skills/` and `docs/public/product-catalog.json` are not in this commit. ## Evidence and regression coverage - Tests added or updated: client lifecycle, registration status, configuration dialects, doctor scope, and setup planning. Grok Bot coverage shows a populated data-directory `mcp.json` stays unchanged, is not aligned, and uninstall skips it. Grok Build coverage removes multiline `rea` disable-list entries and leaves a multiline value that decodes as `rea` plus a newline. - Package check: `scripts/verify-packed-bridge.mjs` follows `main`. It checks that the Hopper and Ghidra bridges are in the package and that the packed Hopper Python parses. It does not load a test fixture. - Remaining proof gaps: no live Grok Build or Grok Bot session was run. The chat registration step is the documented account workflow, not a call this change executes. ## Validation performed - `npm run test:focused -- tests/boundary/filesystem/clientLifecycle.test.ts tests/boundary/filesystem/clientConfigurationDialects.test.ts tests/boundary/filesystem/clientRegistrationStatus.test.ts src/application/Doctor.test.ts src/application/Setup.planning.test.ts tests/conformance/readmeConsistency.test.ts` - `npm run test:focused -- tests/boundary/filesystem/clientLifecycle.test.ts tests/boundary/cli/analysisSelectorCli.test.ts tests/boundary/mcp/largeToolResult.test.ts` — 41 passed after the merge - `npm run check:fast` — typecheck and lint passed ## Compatibility, safety, and release - Breaking changes or migration steps: none for existing file-backed clients. Grok Bot is no longer presented as configured by a local `mcp.json`. - Real Hopper/Ghidra, browser, or OS coverage: not run for this revision. - Package or release metadata impact: no version bump. - Security, privacy, process, or containment review: setup does not send a Grok Bot registration to the account API and does not put credentials in the documented command. ## Review checklist - [x] The PR has one focused outcome and the title follows `type(scope): outcome`. - [x] Related issue is linked, or the reason for not linking one is stated above. Continues #1132; no separate issue is filed. - [x] Tests cover changed observable behavior and meaningful failure paths. - [x] Owning docs, contracts, and generated metadata are updated where needed. - [ ] User-visible CLI/MCP changes include representative output. - [x] I checked the final diff for secrets, unrelated cleanup, and unsupported claims. <!-- CURSOR_AGENT_PR_BODY_END --> <div><a href="https://cursor.com/agents/bc-5298c7c7-9401-4a5b-9b0e-76d332f70b56?cursor_ref=pr_footer&cursor_cta=open_in_web"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-web-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-web-light.png"><img alt="Open in Web" width="114" height="28" src="https://cursor.com/assets/images/open-in-web-dark.png"></picture></a>&nbsp;<a href="https://cursor.com/background-agent?bcId=bc-5298c7c7-9401-4a5b-9b0e-76d332f70b56&cursor_ref=pr_footer&cursor_cta=open_in_cursor"><picture><source media="(prefers-color-scheme: dark)" srcset="https://cursor.com/assets/images/open-in-cursor-dark.png"><source media="(prefers-color-scheme: light)" srcset="https://cursor.com/assets/images/open-in-cursor-light.png"><img alt="Open in Cursor" width="131" height="28" src="https://cursor.com/assets/images/open-in-cursor-dark.png"></picture></a>&nbsp;</div> --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-17 21:08:53 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#2670
No description provided.