You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ai gemini -m deep-research: Gemini Deep Research via the Interactions API (deep-research-pro-preview-12-2025). Submits a background job, polls every 30s until complete, cancels via DELETE on Ctrl-C. Auth: GOOGLE_API_KEY_FREE_TIER → GOOGLE_API_KEY_TIER_1 (REST-only; no OAuth path). Output follows the same -o/auto-file/stdout conventions as other models. (AI-CLI-36)
ai --version / ai -V: print the installed package version and exit.
ai gemini -s/--start-tier TIER: Skip earlier auth tiers explicitly (1=OAuth CLI, 2=free API key, 3=paid API key). Useful when OAuth returns truncated responses without erroring. (AI-CLI-36)
ai gemini -d standard/--depth standard: Planner-Executor research pipeline — query generation → concurrent Gemini-grounded search → synthesis. Per-step JSON checkpointing at ~/.local/state/ai-cli/research-runs/<run-id>/. Resume with --resume <run-id>. (AI-CLI-36)
Fixed
ai gemini -m deep-research: Interactions API submit response returns "id" (flat string), not "name" (resource path). Code was using .get("name", "").split("/")[-1], producing an empty string and silently failing before polling started. Fixed to interaction.get("id") or interaction.get("name", "").split("/")[-1]. (AI-CLI-36)
Prompt injection watcher: hardened against stale ❯ prompt visible during claude --continue startup. Added 10-cycle grace period, double capture-pane verification, removed C-u keystroke, and signal file is now deleted after injection (not before). (AI-CLI-35)
Process hygiene (ai ps): stale PID file cleanup, orphan detection, and session health checks.
ai layout command: YAML-driven iTerm2 window/tab/pane layout system. Subcommands: list, validate <name>, profiles <name>, <name> (apply). Layout files at ~/.config/iterm2/layouts/*.yaml. Nested pane split model (vertical/horizontal). Dynamic Profile generation + runtime tinted icon per tab. See docs/designs/iterm2-layout-system.md.
icon_generator module: runtime PNG icon generation with Pillow. Auto-contrast tint derived from tab background color via HSL color theory (180° hue rotation + lightness adaptation). Explicit icon_color override supported. Source logos at src/ai_cli/data/icons/. Falls back to Claude brand orange (#da7756) when no tab color is set.
Per-session Dynamic Profile generation: each session gets a ai-cli:{ai_name} Dynamic Profile JSON (inherits from base profile, sets tab color + icon) written to ~/Library/Application Support/iTerm2/DynamicProfiles/ai-cli-generated/ at launch and cleaned up on exit.
Lease-file-based collision-free iTerm2 tab color assignment. Replaces modulo-based system; any palette size supported. Lease files at ~/.local/state/ai-cli/iterm2/color-leases.json.
[iterm2.base_profiles] config section: configure which iTerm2 base profile each session type inherits from.
[iterm2.project_colors] config section: pin project/session names to preferred palette color slots.
[iterm2.icon_color_overrides] config section: explicit icon tint override per palette color slot.
ai color <name|#hex> command: ad hoc tab color reassignment for the current session.
ai internal cleanup-session-files <ai_name>: remove session icon PNG and Dynamic Profile JSON; called by EXIT trap.
OSC 1 title fix: session name now set via \033]1; instead of \033]0; so mosh on remote sessions does not prepend [mosh] to the tab title.
ai setup command: detects managed platform vs standalone environment and configures CLAUDE.md accordingly; marks file assume-unchanged in git after swap so external users don't see local modifications
CLAUDE-full.md: standalone self-contained Claude Code session config for users without the managed platform; CLAUDE.md remains the lean variant for managed platform users
pyright basic mode type checking in CI lint job
Security
iTerm2 session-tracking files moved from /tmp/ to ~/.local/state/ai-cli/iterm2/ (XDG Base Directory Specification), eliminating symlink attack surface on shared servers
Session runtime files (cc-exit-*, cc-resume-prompt-*, ai-watcher-lock-*) moved from /tmp/ to ~/.local/state/ai-cli/
session_id_uuid validated against UUID regex before bash f-string interpolation in get_engine_script(); malformed input is cleared
--project argument rejects values containing / or \ path separators
Added
CI test matrix (Python 3.11/3.12/3.13) with Codecov coverage reporting
GitHub Release automation on tag push
Pre-commit config (ruff + hygiene hooks)
Renovate for dependency management (replaces Dependabot)
Issue templates (bug report, feature request) and PR template
Full README rewrite (PyOpenSci 13-section structure)