Stage
connect
Coding agent
OpenAI Codex
Coding agent version
Codex desktop; Monk plugin v0.1.54 (2a4f9cf)
Repro steps
-
Check out v0.1.54 on a POSIX shell with python3 available and jq absent, so Antigravity registration takes its documented Python fallback.
-
Create ~/.gemini/config/mcp_config.json containing syntactically valid JSON whose root is not an object:
[{"preserved":"still here"}]
-
Run scripts/start-monk-agent.sh with an otherwise healthy companion response.
I reproduced this with a network-free fixture that isolates HOME and PATH, returns the expected Monk health resource, and uses an inert local executable as the companion. The v0.1.54 launcher exits 1:
Traceback (most recent call last):
File "<string>", line 5, in <module>
AttributeError: 'list' object has no attribute 'get'
The same config shape reaches an assignment failure through the jq branch because .mcpServers.monk = ... cannot index an array root by the string mcpServers.
Expected behavior
Automatic Antigravity registration is optional. A config whose JSON root has an incompatible shape should be preserved, produce a warning/manual-registration hint, and allow the already-healthy Monk launcher to succeed.
Actual behavior
The validation guard checks only JSON syntax:
jq empty "$mcp_cfg"
# or json.load(...)
A top-level array therefore passes validation. The Python fallback then calls cfg.get("mcpServers"), raises AttributeError, and aborts the entire launcher under set -e. The optional Antigravity integration can consequently break Monk startup in Codex or Claude Code after the companion health check has already passed.
I validated a minimal fix locally: require the parsed root to be an object in both validation branches (jq -e 'type == "object"' / isinstance(cfg, dict)). The isolated regression then warns, preserves the config byte-for-byte, and passes; sh -n scripts/start-monk-agent.sh and git diff --check also pass.
Collision check
This case parses successfully, reaches the current post-validation code, and fails because the guard does not validate the root shape.
Severity (your guess)
major
The optional registration aborts a healthy launcher and can block Monk tools in unrelated hosts until the user repairs or removes the Antigravity config. The file itself is preserved.
OS
Windows 11 with Git Bash for the isolated POSIX regression; the vulnerable shell path is shipped for macOS and Linux.
monkd version
Not involved; the failure happens after the local companion health check.
Target cloud
None; network-free local fixture.
Integration
Google Antigravity MCP registration
Fix PR
#265 adds the red-to-green regression and the validated fix across all three shipped launcher mirrors.
Stage
connect
Coding agent
OpenAI Codex
Coding agent version
Codex desktop; Monk plugin v0.1.54 (
2a4f9cf)Repro steps
Check out v0.1.54 on a POSIX shell with
python3available andjqabsent, so Antigravity registration takes its documented Python fallback.Create
~/.gemini/config/mcp_config.jsoncontaining syntactically valid JSON whose root is not an object:[{"preserved":"still here"}]Run
scripts/start-monk-agent.shwith an otherwise healthy companion response.I reproduced this with a network-free fixture that isolates
HOMEandPATH, returns the expected Monk health resource, and uses an inert local executable as the companion. The v0.1.54 launcher exits 1:The same config shape reaches an assignment failure through the jq branch because
.mcpServers.monk = ...cannot index an array root by the stringmcpServers.Expected behavior
Automatic Antigravity registration is optional. A config whose JSON root has an incompatible shape should be preserved, produce a warning/manual-registration hint, and allow the already-healthy Monk launcher to succeed.
Actual behavior
The validation guard checks only JSON syntax:
A top-level array therefore passes validation. The Python fallback then calls
cfg.get("mcpServers"), raisesAttributeError, and aborts the entire launcher underset -e. The optional Antigravity integration can consequently break Monk startup in Codex or Claude Code after the companion health check has already passed.I validated a minimal fix locally: require the parsed root to be an object in both validation branches (
jq -e 'type == "object"'/isinstance(cfg, dict)). The isolated regression then warns, preserves the config byte-for-byte, and passes;sh -n scripts/start-monk-agent.shandgit diff --checkalso pass.Collision check
"mcpServers": null, which is now normalized correctly.This case parses successfully, reaches the current post-validation code, and fails because the guard does not validate the root shape.
Severity (your guess)
major
The optional registration aborts a healthy launcher and can block Monk tools in unrelated hosts until the user repairs or removes the Antigravity config. The file itself is preserved.
OS
Windows 11 with Git Bash for the isolated POSIX regression; the vulnerable shell path is shipped for macOS and Linux.
monkd version
Not involved; the failure happens after the local companion health check.
Target cloud
None; network-free local fixture.
Integration
Google Antigravity MCP registration
Fix PR
#265 adds the red-to-green regression and the validated fix across all three shipped launcher mirrors.