# Gemini API CLI v0.4.4 — notes and findings (2026-10-30, UTC+8)

Plan commit: 244a7bc at 08:50:48 (the "08:58" in the plan header is a typo; the commit time is authoritative and is before install at 08:50:57).
Active testing 08:50:57–08:54 (UTC+8). $0, no account, 0 successful model calls (5 deliberately failing calls to Google with a fake or no key).

| Claim | Core | Verdict | Why |
|---|---|---|---|
| C1 self-describing (--usage KDL, --schema 2020-12) | yes | V1 | --usage: valid KDL v2, 19/19 README commands, env vars + config keys listed. --schema: one shared resource schema for all 5 body commands; requires output-only fields (id, created, status, updated) and steps, and its ResponseFormat oneOf has a catch-all branch, so the README's own hero-image.json body FAILS a standard validator. No $schema keyword. |
| C2 safe --dry-run | yes | V1 | 9/9 runs inside a no-network namespace, 0 proxy hits, key always [REDACTED] (0 leaks), 0 keychain (D-Bus) connects with a working positive control, JSON previews parse, missing file / bad JSON -> exit 2. But image_size "3K" (not one of 512/1K/2K/4K) passed validation and was previewed. |
| C3 exit codes 0/1/2/3 + --agent-mode JSON errors | yes | V2 | 0, 1, 2, 3 each on the matching cause; JSON envelopes on stderr. |
| C4 real models, media, managed agents | yes | V0 | Needs a GEMINI_API_KEY from Google AI Studio (Google account, not approved for us). Caps overall at V1. |
| C5 one binary on macOS/Linux/Windows | no | V0 | Linux x86_64 only: installed and ran. Others not tested. |

Overall V1 (worst tested core = V1; untested core C4 caps at V1). Score = mean(C1 5, C2 5, C3 10) = 6.7.

Other observations (not scored):
- install.sh does not check checksums.txt; we checked manually: archive sha256 matched.
- With no key at all, a real call is still sent; Google returns 403 and the CLI maps it to exit 3. A local "no key configured" error would save a round trip.
- `--dry-run` shows `<bytes:14474>` for an attached PDF instead of the base64 body — good for logs.
- `--schema` is not available on tts/analyze (exit 2, unknown flag) — consistent with the README table (they take no --body).
- Our first KDL parser (kdl-py 1.2.0) is v1-only and failed; a v2 parser (ckdl) parsed the file. Agents with old KDL libraries will hit the same wall.
