## Summary

<!-- What does this PR do? Link to related issue if applicable: Fixes #123 -->

## Changes

<!-- Bullet list of key changes -->

-

## Test plan

- [ ] All existing tests pass: `uv run pytest tests/ -v`
- [ ] Lint passes: `uv run ruff check src/ tests/`
- [ ] New/changed functionality has tests
- [ ] No real API calls in tests (use `mock_gemini_client`)

## Checklist

- [ ] Commit messages follow [Conventional Commits](https://www.conventionalcommits.org/)
- [ ] CLAUDE.md updated if architecture changed (tool table, dependencies, etc.)
- [ ] CHANGELOG.md updated under `[Unreleased]`
