Claude Code's persistent multimodal substrate via Gemini. Intercepts image reads and visual diffs through PreToolUse/PostToolUse hooks, routes them through Google Gemini for safe text descriptions instead of raw image bytes. Includes MCP server for structured vision analysis with profile-typed outputs (chart, diagram, document, screenshot, code, video).
be-my-geminis is a specialized vision-analysis tool with significant definition gaps. Tool names lack action verbs (bmg_describe, bmg_diff, hook_* are non-standard). Descriptions exist but are verbose (200+ chars) and lack clarity on when to use each tool vs. alternatives. Input schemas are present but incomplete: many parameters lack type constraints (e.g., 'model' is free-form string with no enum; 'profile' has enum but no validation guidance). Critical issue: hook_* tools (5 of 10) are infrastructure hooks, not user-facing tools, they should not be exposed as MCP tools. Output schemas are undocumented. Error handling is absent, no guidance on recovery, retryability, or actionable error messages. Security concern: file paths are user-provided without documented sanitization against traversal attacks.
Manual one-shot describe of an image or video file. Accepts optional model selection, intent specification, and profile selection (auto, general, chart, diagram, document, screenshot, code, video). Returns prose summary and profile-typed structured JSON output.
Structured visual diff of two images for regression testing and design review. Compares before and after images and returns differential analysis.
Remove cached vision reports. Supports filtering by age (--older-than) and dry-run mode. Default removes all entries.
Report cache occupancy in entries and bytes. Shows current cache directory and usage statistics.
Health check across 6 axes: API key availability, cache directory accessibility, Gemini API reachability, hook configuration, and MCP server status.
PostToolUse:Bash hook handler. Pre-warms the cache for images that Bash commands just produced (matplotlib savefig, screenshot tools, etc.). Extracts image paths from command output and spawns detached describe-cached child process.
Hook tools (hook_pre_read, hook_post_tool, hook_session_start) are infrastructure callbacks, not user-facing tools. They should not be exposed as MCP tools, they belong in server initialization or internal handlers. Exposing them confuses the tool surface and violates single-responsibility principle.
Tool names lack action verbs. 'bmg_describe' and 'bmg_diff' do not follow verb_noun convention (should be 'describe_image' and 'diff_images'). 'cache_stats' and 'cache_clean' are acceptable but inconsistent with the bmg_ prefix. LLMs rely on verb-first naming to infer intent.
Input schemas lack type constraints and validation guidance. 'model' parameter accepts any string (should be enum of supported Gemini models). 'intent' and 'profile' descriptions do not explain valid values or constraints. No minimum/maximum for numeric parameters. Descriptions under 20 chars for some params (e.g., 'Path to image or video file').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 37 | 2026-07-28+ | v2 |
PreToolUse:Read hook handler invoked by Claude Code before file reads. Intercepts image reads and routes them through Gemini for safe text descriptions instead of raw bytes.
SessionStart hook handler. Primes Claude on the trust-fenced output format and the OCR-is-UNTRUSTED rule at session initialization.
Wire bmg hooks into Claude Code's settings.json. Optionally installs hooks into project-local .claude/settings.json (--project flag) or user scope (~/.claude/). Can also register bmg as an MCP server (--enable-mcp flag).
Remove hook entries from Claude Code's settings.json. In user scope, also removes MCP server registration.
Output schemas are completely undocumented. No description of what bmg_describe returns (prose summary + JSON structure). No documentation of cache_stats output format, doctor health check results, or error responses. LLMs cannot plan downstream actions without knowing response structure.
No error handling guidance. Tools do not document failure modes, retryability, or recovery steps. File path validation is absent, no documented protection against path traversal attacks (e.g., '../../../etc/passwd'). Security concern for a tool that reads arbitrary files.