Skip to content

Gemini native grep_search omits required metadata, then exits SUCCESS without a review #211

Description

@sumitake

Failure and impact

An ordinary managed Gemini review.repository call produced no substantive review. The native agent attempted grep_search without required toolSummary and toolAction; its tool validator rejected the call, then Agy emitted terminal SUCCESS with an empty response. The installed plugin correctly preserved the raw events as opaque recovered content, but the caller could not complete the required independent review and held the production change.

This is not a request to turn harmless tool errors into hard semantic failures or to strip native tools. The actionable failure is that the native agent did not recover from a correctable tool argument error and returned no assessment.

Exact environment and request

  • Observed 2026-09-14 UTC on macOS arm64.
  • Installed plugin agent-collab 7.0.6; signed provider runtime 5.0.7.
  • Manifest digest: a11571908933c48fc301838d1cdb5d5f71433924af5b4b8419fd7b658695f440.
  • Runtime artifact digest: 0d1897e08fc7ad13621681a60f9242d759adc04b4433eac93f53f196dd53d2f3.
  • Wire contract: a675807e0ff5f0544d7cc9d659914ce2dadac9be8efd0fb56635815e5c3e842a; schema 12, protocol 5.
  • Request ID e3232d2a-1682-40ab-9db9-af2bc0cbf8cd, work unit plan.
  • review.repository, explicit target gemini, frontier/maximum, max_parallel 1, dispatch_requested true; no outer timeout.
  • Caller used installed python3 <plugin-root>/coordinator.py, EOF-delimited JSON through subprocess.run(input=...), pipes, no PTY. native_restrictions.cwd, device and inode were derived from the real current worktree.
  • Bounded read-only configuration-plan review; repository head was sealed and the payload supplied the live configuration findings, change sequence, rollback and acceptance checks. No instruction supplied a grep_search call or omitted its fields.
  • Native init.permission_mode: proceed-in-sandbox; regular built-in tools present. No custom persona, tool allowlist, disabled sandbox, raw provider invocation or automatic replay.
  • Native model identity was null in diagnostics; Google-family route name is not accepted as proof of actual model lineage. Native CLI version was not established by this bounded investigation.

Native evidence (only local path redacted)

Conversation ID: 1c4e6e52-4e14-49a2-a1d5-f92460b10207.

{"event":"step_update","step_update":{"conversation_id":"1c4e6e52-4e14-49a2-a1d5-f92460b10207","step_index":1,"state":"DONE","step_type":"agent_response","duration_seconds":1.622851,"usage":{"input_tokens":29785,"output_tokens":1939,"thinking_tokens":1884,"cache_read_tokens":0,"total_tokens":31724}}}
{"event":"step_update","step_update":{"conversation_id":"1c4e6e52-4e14-49a2-a1d5-f92460b10207","step_index":2,"state":"ACTIVE","step_type":"tool","tool_name":"grep_search","tool_info":{"name":"grep_search","parameters":{"Query":"contact","SearchPath":"<site-worktree>"}}}}
{"event":"step_update","step_update":{"conversation_id":"1c4e6e52-4e14-49a2-a1d5-f92460b10207","step_index":2,"state":"DONE","step_type":"tool","tool_name":"grep_search","duration_seconds":0.033386,"tool_info":{"name":"grep_search","parameters":{"Query":"contact","SearchPath":"<site-worktree>"},"error":{"type":"TOOL_ERROR","message":"invalid arguments:\n- missing properties 'toolSummary', 'toolAction'"}}}}
{"event":"result","result":{"conversation_id":"1c4e6e52-4e14-49a2-a1d5-f92460b10207","status":"SUCCESS","response":"","duration_seconds":9.680554,"num_turns":1,"usage":{"input_tokens":29785,"output_tokens":1939,"thinking_tokens":1884,"cache_read_tokens":0,"total_tokens":31724}}}

Public wrapper: status=ok, one recovered deltas content frame, content_truncated=false, execution_status=ok, native_model_identity=null, returncode=0, cleanup_confirmed=true; 1 observed provider attempt, replay_count 0, observed wall clock 14456ms. Complete preserved stream has no text_delta assessment and its final response is empty. Usage/output-token counts are not evidence that review text was delivered. Stderr was empty.

Bounded root-cause analysis

Proven proximate cause: native tool-call arguments violate the native tool's required schema. The agent issued only Query/SearchPath. The failure was explicit and available to the native runtime, but no corrected call or substantive final followed in the retained stream.

Likely upstream problem, not yet proven: disagreement between the schema/model-facing tool description and validator requirements, or model omission of the required metadata followed by defective native recovery/turn termination. The validator's error establishes required fields; it does not prove the model was shown the same schema. Need an upstream native schema snapshot and tool-loop trace to distinguish these.

Plugin behavior explained by source: inspected current workspace main 47d73dd8058b6e8a54647f66f71e4636f7a6fd33. agy_launch.build_argv builds the normal native sandboxed stream-json invocation, not the agent's tool arguments. native_carriers._agy_stream first extracts final response or agent text deltas, then preserves raw stdout when neither exists. That fallback explains the raw event stream labeled recovered content. This is source-level corroboration, not proof that every current source byte equals the installed signed artifact.

No evidence of a caller timeout, missing executable, source drift, permission denial, truncated output, or tool-capability removal in this attempt. Unknown whether a transient model error or deterministic native schema mismatch. Do not infer governance approval from SUCCESS/ok.

Recovery experiment and requested follow-up

Operator explicitly authorized exactly one Gemini recovery attempt, then Grok if that second attempt fails. Recovery keeps the installed plugin and native tool access unchanged, provides the tiny actual site diff inline alongside the complete plan, and identifies the missing native fields with instructions to consult the actual schema and recover from validation errors. The result will be appended here; this is a diagnostic experiment, not a demonstrated fix.

Please reproduce through the installed managed entrypoint with a synthetic repository; inspect the native model-facing grep_search schema versus the validator, and determine why a correctable tool error ends the turn without a final. Retain these producer events as a regression fixture. Preserve normal native capabilities and opaque evidence; avoid custom restrictive personas, blanket failed-tool rejection, invented authority, or automatic retries. Changes to signed runtime behavior must go through workspace source and a signed release.

Related prior incidents (similar symptoms, not proven identical causes)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions