Skip to content

[Bug bounty] valid non-object Antigravity config aborts a healthy launcher #255

Description

@aikinley

Stage

connect

Coding agent

OpenAI Codex

Coding agent version

Codex desktop; Monk plugin v0.1.54 (2a4f9cf)

Repro steps

  1. Check out v0.1.54 on a POSIX shell with python3 available and jq absent, so Antigravity registration takes its documented Python fallback.

  2. Create ~/.gemini/config/mcp_config.json containing syntactically valid JSON whose root is not an object:

    [{"preserved":"still here"}]
  3. 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.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions