Local-first coding agent on Google Gemini + ADK with tool synthesis, org delegation, automations, and semantic search capabilities
GemCode exposes 13 tools with mixed quality. Naming is generally verb-first and clear (semantic_search_files, synthesize_tool, org_delegate). Descriptions are present and substantive (avg ~150 chars), explaining WHAT and WHEN. However, input schemas are incomplete: many parameters lack type definitions or descriptions. For example, synthesize_tool's 'script_content' has no length limits or format guidance. Output schemas are entirely undocumented, callers cannot predict response structure. Error handling is minimal; no recovery guidance or actionable error messages visible. Tool composition is reasonable (single responsibility mostly observed), but parameter relationships (e.g., trigger_kind determining which of at_hhmm/every_seconds/cron apply) are documented only in descriptions, not enforced. Security concerns: org_delegate and org_spawn accept arbitrary task strings with no sanitization visible; synthesize_tool accepts bash/python scripts with no validation. No audit logging, permission gates, or scope declarations evident.
Create a new `.gemcode/automations/<name>.json` config (idempotent unless overwrite=true). Supports trigger kinds: nightly|daily (uses at_hhmm), interval (uses every_seconds), cron (uses cron).
List automation configs under `.gemcode/automations/*.json`.
Enqueue an automation's prompt into the Kaira runtime now (best-effort). Requires a running manager runtime (see ``fleet_manager_ipc_path`` / ``manager_ipc.txt``).
List all synthesized tools available in this project.
Delegate a task to an org member. Uses the mesh — no daemon required.
Hire a new org member (persistent under .gemcode/org.json).
Output schemas completely undocumented. No tool returns a documented response structure. LLMs cannot predict what fields to expect or plan downstream calls.
synthesize_tool and run_synthesized_tool accept arbitrary bash/python scripts with no validation, sanitization, or sandboxing visible. Command injection risk.
org_delegate and org_spawn accept free-form task strings with no input validation or prompt injection guards. Malicious task descriptions could manipulate downstream agents.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | 2026-07-28+ | v2 |
Append improvements to a member's skill so future delegations perform better.
List available org members (workers).
Hire a member and immediately delegate a task to them.
Show org hierarchy (manager → reports).
Run a previously synthesized tool by name.
Embeddings-powered semantic search across files under the project root. This MVP performs per-call embedding (no persistent vector index). It is intentionally bounded (max_files/max_total_chunks) to limit API calls and latency.
Create a new reusable tool from a script. Use this when you find yourself repeating the same multi-step operation. Instead of running the same commands every time, synthesize a tool once and invoke it by name in the future. The tool is stored in .gemcode/synthesized_tools/ and persists across sessions.
Parameter descriptions lack format constraints. synthesize_tool's 'name' says 'lowercase, letters/numbers/dashes' but no regex or enum enforces it. automations_init's 'cron' has no validation guidance.
No error handling or recovery guidance visible. Tools return errors but do not tell LLMs what to do next or whether errors are retryable.