gemcode 0.4.0__tar.gz → 0.4.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. {gemcode-0.4.0/src/gemcode.egg-info → gemcode-0.4.1}/PKG-INFO +102 -25
  2. {gemcode-0.4.0 → gemcode-0.4.1}/README.md +101 -24
  3. {gemcode-0.4.0 → gemcode-0.4.1}/pyproject.toml +1 -1
  4. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/agent.py +85 -32
  5. gemcode-0.4.1/src/gemcode/agent_habits.py +413 -0
  6. gemcode-0.4.1/src/gemcode/agent_intelligence.py +650 -0
  7. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/agent_mesh.py +125 -18
  8. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/callbacks.py +34 -0
  9. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/checkpoints.py +1 -1
  10. gemcode-0.4.1/src/gemcode/codebase_awareness.py +368 -0
  11. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/config.py +2 -2
  12. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/curated_memory.py +1 -1
  13. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/invoke.py +101 -95
  14. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/learning.py +1 -1
  15. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/model_routing.py +19 -0
  16. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/plugins/terminal_hooks_plugin.py +1 -1
  17. gemcode-0.4.1/src/gemcode/self_healing.py +303 -0
  18. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/session_runtime.py +1 -1
  19. gemcode-0.4.1/src/gemcode/tool_synthesis.py +234 -0
  20. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/__init__.py +14 -0
  21. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/curated_memory.py +1 -1
  22. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/edit.py +1 -1
  23. {gemcode-0.4.0 → gemcode-0.4.1/src/gemcode.egg-info}/PKG-INFO +102 -25
  24. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode.egg-info/SOURCES.txt +5 -0
  25. gemcode-0.4.1/tests/test_agent_habits.py +113 -0
  26. gemcode-0.4.0/src/gemcode/agent_intelligence.py +0 -259
  27. {gemcode-0.4.0 → gemcode-0.4.1}/LICENSE +0 -0
  28. {gemcode-0.4.0 → gemcode-0.4.1}/MANIFEST.in +0 -0
  29. {gemcode-0.4.0 → gemcode-0.4.1}/setup.cfg +0 -0
  30. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/__init__.py +0 -0
  31. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/__main__.py +0 -0
  32. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/a2a_bridge.py +0 -0
  33. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/agent_triggers.py +0 -0
  34. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/audit.py +0 -0
  35. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/autocompact.py +0 -0
  36. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/automations.py +0 -0
  37. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/autotune.py +0 -0
  38. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/capability_routing.py +0 -0
  39. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/cli.py +0 -0
  40. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/compaction.py +0 -0
  41. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/computer_use/__init__.py +0 -0
  42. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/computer_use/browser_computer.py +0 -0
  43. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/context_budget.py +0 -0
  44. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/context_warning.py +0 -0
  45. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/credentials.py +0 -0
  46. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/delegation_learning.py +0 -0
  47. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/dynamic_policy.py +0 -0
  48. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/evals/harness.py +0 -0
  49. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/event_bus.py +0 -0
  50. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/fleet_reports.py +0 -0
  51. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/hitl_session.py +0 -0
  52. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/hooks.py +0 -0
  53. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/ide_protocol.py +0 -0
  54. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/ide_stdio.py +0 -0
  55. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/intent_classifier.py +0 -0
  56. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/interactions.py +0 -0
  57. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/kaira_client.py +0 -0
  58. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/kaira_daemon.py +0 -0
  59. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/kaira_ipc.py +0 -0
  60. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/kaira_job_store.py +0 -0
  61. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/limits.py +0 -0
  62. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/live_audio_engine.py +0 -0
  63. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/logging_config.py +0 -0
  64. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/mcp_loader.py +0 -0
  65. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/memory/__init__.py +0 -0
  66. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/memory/embedding_memory_service.py +0 -0
  67. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/memory/file_memory_service.py +0 -0
  68. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/modality_tools.py +0 -0
  69. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/model_errors.py +0 -0
  70. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/multimodal_input.py +0 -0
  71. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/openapi_loader.py +0 -0
  72. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/org.py +0 -0
  73. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/output_styles.py +0 -0
  74. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/paths.py +0 -0
  75. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/permissions.py +0 -0
  76. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/plugins/__init__.py +0 -0
  77. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/plugins/tool_recovery_plugin.py +0 -0
  78. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/policy_profile.py +0 -0
  79. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/pricing.py +0 -0
  80. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/prompt_suggestions.py +0 -0
  81. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/query/__init__.py +0 -0
  82. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/query/config.py +0 -0
  83. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/query/deps.py +0 -0
  84. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/query/engine.py +0 -0
  85. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/query/stop_hooks.py +0 -0
  86. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/query/token_budget.py +0 -0
  87. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/query/transitions.py +0 -0
  88. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/query_sanitizer.py +0 -0
  89. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/refine.py +0 -0
  90. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/repl_commands.py +0 -0
  91. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/repl_slash.py +0 -0
  92. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/review_agent.py +0 -0
  93. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/rules.py +0 -0
  94. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/session_store.py +0 -0
  95. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/session_summariser.py +0 -0
  96. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/skills.py +0 -0
  97. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/slash_commands.py +0 -0
  98. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/thinking.py +0 -0
  99. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tool_prompt_manifest.py +0 -0
  100. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tool_registry.py +0 -0
  101. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tool_result_store.py +0 -0
  102. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/automations_tools.py +0 -0
  103. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/bash.py +0 -0
  104. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/browser.py +0 -0
  105. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/compress_memory.py +0 -0
  106. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/filesystem.py +0 -0
  107. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/notebook.py +0 -0
  108. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/notes.py +0 -0
  109. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/org_tools.py +0 -0
  110. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/repo_map.py +0 -0
  111. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/search.py +0 -0
  112. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/shell.py +0 -0
  113. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/shell_gate.py +0 -0
  114. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/skills.py +0 -0
  115. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/subtask.py +0 -0
  116. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/tasks.py +0 -0
  117. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/think.py +0 -0
  118. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/todo.py +0 -0
  119. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/user_choice.py +0 -0
  120. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/veomem_tools.py +0 -0
  121. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/web.py +0 -0
  122. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools/web_search.py +0 -0
  123. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tools_inspector.py +0 -0
  124. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/trust.py +0 -0
  125. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tui/input_handler.py +0 -0
  126. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tui/scrollback.py +0 -0
  127. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tui/spinner.py +0 -0
  128. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tui/welcome_banner.py +0 -0
  129. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/tui/welcome_rich.py +0 -0
  130. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/veomem_bridge.py +0 -0
  131. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/version.py +0 -0
  132. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/vertex.py +0 -0
  133. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/wal.py +0 -0
  134. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/web/__init__.py +0 -0
  135. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/web/sse_adapter.py +0 -0
  136. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/web/terminal_repl.py +0 -0
  137. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/web/web_sse_compat.py +0 -0
  138. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode/workspace_hints.py +0 -0
  139. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode.egg-info/dependency_links.txt +0 -0
  140. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode.egg-info/entry_points.txt +0 -0
  141. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode.egg-info/requires.txt +0 -0
  142. {gemcode-0.4.0 → gemcode-0.4.1}/src/gemcode.egg-info/top_level.txt +0 -0
  143. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_add_dir.py +0 -0
  144. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_agent_instruction.py +0 -0
  145. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_agent_mesh.py +0 -0
  146. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_autocompact.py +0 -0
  147. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_automations.py +0 -0
  148. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_capability_routing.py +0 -0
  149. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_checkpoint_diff_command.py +0 -0
  150. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_cli_init.py +0 -0
  151. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_compress_memory_tool.py +0 -0
  152. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_computer_use_permissions.py +0 -0
  153. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_context_budget.py +0 -0
  154. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_context_warning.py +0 -0
  155. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_credentials.py +0 -0
  156. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_eval_harness_layout.py +0 -0
  157. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_event_bus.py +0 -0
  158. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_fleet_reports.py +0 -0
  159. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_ide_stdio_attachments.py +0 -0
  160. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_interactive_permission_ask.py +0 -0
  161. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_kaira_ipc_paths.py +0 -0
  162. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_kaira_scheduler.py +0 -0
  163. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_modality_tools.py +0 -0
  164. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_model_error_retry.py +0 -0
  165. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_model_errors.py +0 -0
  166. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_model_routing.py +0 -0
  167. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_multimodal_input.py +0 -0
  168. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_output_styles_and_rules.py +0 -0
  169. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_paths.py +0 -0
  170. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_permissions.py +0 -0
  171. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_prompt_suggestions.py +0 -0
  172. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_repl_commands.py +0 -0
  173. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_repl_slash.py +0 -0
  174. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_session_runtime_cache.py +0 -0
  175. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_skills.py +0 -0
  176. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_slash_commands.py +0 -0
  177. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_slash_completion_registry.py +0 -0
  178. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_thinking_config.py +0 -0
  179. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_token_budget.py +0 -0
  180. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_tool_context_circulation.py +0 -0
  181. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_tools.py +0 -0
  182. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_tools_inspector.py +0 -0
  183. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_web_sse_adapter.py +0 -0
  184. {gemcode-0.4.0 → gemcode-0.4.1}/tests/test_workspace_hints.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gemcode
3
- Version: 0.4.0
3
+ Version: 0.4.1
4
4
  Summary: Local-first coding agent on Google Gemini + ADK
5
5
  Author: GemCode Contributors
6
6
  License: Apache License
@@ -195,14 +195,18 @@ Dynamic: license-file
195
195
  This document is the primary user-facing manual for GemCode. It explains the product at a high level and points to the subsystem-specific documentation pages that provide production-grade depth.
196
196
 
197
197
  ## What GemCode is
198
- GemCode is a local-first coding agent built around Google Gemini and the Google Agent Development Kit (ADK). It operates against a chosen project root and combines:
199
- - a configuration model
200
- - a runtime runner
201
- - a root language-model agent
202
- - a configurable tool inventory
203
- - project-local state under `.gemcode/`
198
+ GemCode is a local-first, self-evolving coding agent built on Google Gemini and the Agent Development Kit (ADK). It operates against a chosen project root and provides:
204
199
 
205
- GemCode is designed for repository-native work rather than copy-paste chat workflows.
200
+ - **Autonomous multi-agent orchestration** agents delegate, verify, and fix each other's work
201
+ - **Self-healing code** — changes are auto-verified; failures are auto-fixed
202
+ - **Self-evolving tools** — the agent creates new reusable tools from repeated patterns
203
+ - **Progressive learning** — gets smarter with every session (memory, skills, project map)
204
+ - **Scheduled habits** — agents wake up on cron/interval to run tests, audits, checks
205
+ - **Cross-machine agents** — expose/consume agents via Google A2A protocol
206
+ - **58 built-in tools** — filesystem, shell, web, search, memory, orchestration, synthesis
207
+ - **Full ADK integration** — native sub-agents, transfer_to_agent, output_key, workflow agents
208
+
209
+ All state lives under `.gemcode/` in the project root. No external services required beyond a Gemini API key.
206
210
 
207
211
  ## Runtime modes
208
212
 
@@ -331,14 +335,20 @@ Reference:
331
335
 
332
336
  ### Super mode (fully autonomous)
333
337
 
334
- Use when you want GemCode to run without GemCode’s own confirmation prompts (mutations, shell, ADK confirmation handoffs, AFC stdin prompt, attachment gate, auto-trust on CLI, and non-interactive `get_user_choice` = first option).
338
+ Use when you want GemCode to run with all powers unlocked and zero friction. In super mode:
339
+ - All capabilities auto-enable (memory, web search, agents, habits, triggers)
340
+ - Default org members auto-create (kaira + verifier)
341
+ - Habits auto-generate based on project type
342
+ - Auto-verification runs after risky changes
343
+ - No confirmation prompts for any operation
335
344
 
336
345
  - **CLI:** `gemcode -C . --super "your task"`
337
346
  - **Env:** `GEMCODE_SUPER_MODE=1`
338
- - **REPL/TUI:** `/super` (use `/super off` to clear the flag only)
339
- - **Kaira:** `gemcode kaira -C . --super`
347
+ - **REPL/TUI:** `/super` (use `/super off` to clear)
348
+
349
+ In normal mode, GemCode asks on first run: "Enable autonomous mode? [Y/n]"
340
350
 
341
- Details and safety notes: [`../docs/tools-and-permissions.md`](../docs/tools-and-permissions.md#super-mode-fully-autonomous).
351
+ Details: [`../docs/orchestration.md`](../docs/orchestration.md).
342
352
 
343
353
  ## Common commands
344
354
 
@@ -367,17 +377,22 @@ gemcode kaira -C .
367
377
  GemCode includes a built-in multi-agent orchestration system that works automatically — no separate daemon required.
368
378
 
369
379
  **Key features:**
370
- - **Agent Mesh** — in-process concurrent agent execution with full tool access
380
+ - **Native ADK sub-agents** — org members are real ADK sub-agents with `transfer_to_agent` routing
381
+ - **Agent Mesh** — async background execution with full GemCode sessions per agent
371
382
  - **Event Bus** — agents communicate via pub/sub (no Unix sockets needed)
372
- - **Self-Triggering Agents** — agents auto-activate on events (e.g., verifier reviews completed work)
383
+ - **Self-Healing** — closed loop: change verify fix verify → done
384
+ - **Self-Triggers** — agents auto-activate on events (verification, failure recovery)
385
+ - **Tool Synthesis** — agent creates new reusable tools from repeated patterns
373
386
  - **Delegation Learning** — remembers which agents succeed at which tasks
374
- - **A2A Bridge** — expose/consume agents across machines via Google's A2A protocol
387
+ - **A2A Bridge** — expose/consume agents across machines via Google A2A protocol
375
388
 
376
389
  Quick example in the REPL:
377
390
  ```text
378
391
  > Analyze the auth module. Delegate security review to the verifier.
379
392
  ```
380
- The agent calls `org_delegate("verifier", ...)` → mesh runs a full-power verifier agent → result flows back automatically.
393
+ The LLM calls `transfer_to_agent(agent_name='verifier')` → ADK routes natively verifier runs → result saved to session state.
394
+
395
+ For background work: `org_delegate("kaira", "run tests")` → mesh runs kaira as a full GemCode session → result flows back via fleet reports.
381
396
 
382
397
  Docs:
383
398
  - [`../docs/orchestration.md`](../docs/orchestration.md)
@@ -428,6 +443,60 @@ Status note:
428
443
  | `/agent assign <member> <task>` | Delegate work to a member |
429
444
  | `/agent improve <member> <lessons>` | Improve a member's skill |
430
445
 
446
+ ## Intelligence features (automatic)
447
+
448
+ These work without configuration. In super mode, everything is enabled silently. In normal mode, GemCode asks once on first run.
449
+
450
+ | Feature | How it works |
451
+ |---|---|
452
+ | **Codebase awareness** | Builds a persistent understanding of the project from every tool call — file structure, imports/exports, recent changes, learned facts. The agent starts each turn already knowing the project. |
453
+ | **Self-healing** | After file changes, auto-runs tests/lint. If they fail, auto-fixes (up to 2 attempts). Closed loop: change → verify → fix → verify → done. |
454
+ | **Tool synthesis** | When the agent repeats multi-step operations, it can create a reusable tool (bash/python script) stored in `.gemcode/synthesized_tools/`. |
455
+ | **Self-improving skills** | When a delegation succeeds, the member's skill file gets a "Learned pattern" appended. Future invocations benefit from past successes. |
456
+ | **Proactive memory** | After exploring 5+ files or running 3+ commands, key discoveries are auto-saved to curated memory. Future sessions start with this knowledge. |
457
+ | **Impact analysis** | When a file changes, GemCode knows which other files are affected (via import tracking + learned correlations). Self-healing runs only relevant tests. |
458
+ | **Auto-verification** | After 3+ file writes, the verifier agent auto-checks for syntax errors, broken imports, and logic bugs. |
459
+ | **Delegation suggestions** | `suggest_delegate(task)` recommends the best agent based on historical success patterns. |
460
+ | **Capability auto-enable** | If a project consistently uses web search or memory, those capabilities auto-enable in future sessions. |
461
+
462
+ ## Tool Synthesis (self-evolving)
463
+
464
+ The agent can create new reusable tools when it detects repeated patterns:
465
+
466
+ ```text
467
+ # Create a tool
468
+ synthesize_tool("run-tests", "Run pytest with coverage", "pytest --cov=src -q")
469
+ synthesize_tool("deploy-staging", "Deploy to staging", "git push origin main && ssh staging 'cd app && git pull'")
470
+
471
+ # Use it later
472
+ run_synthesized_tool("run-tests")
473
+ run_synthesized_tool("deploy-staging")
474
+
475
+ # List all synthesized tools
476
+ list_synthesized_tools()
477
+ ```
478
+
479
+ Tools persist in `.gemcode/synthesized_tools/` across sessions.
480
+
481
+ ## Agent Habits (scheduled tasks)
482
+
483
+ Agents can run recurring tasks on a schedule — no daemon needed, runs inside the main GemCode process.
484
+
485
+ ```text
486
+ # From the agent (tools):
487
+ habits_add("test-watch", "kaira", "Run pytest -q and report", every_minutes=30)
488
+ habits_add("nightly-audit", "verifier", "Full security review", daily_at="02:00")
489
+ habits_add("hourly-status", "self", "Summarize recent changes", cron="0 * * * *")
490
+
491
+ # Management:
492
+ habits_list()
493
+ habits_pause("test-watch")
494
+ habits_resume("test-watch")
495
+ habits_remove("test-watch")
496
+ ```
497
+
498
+ In super mode, GemCode auto-creates habits based on project type (test-watch for Python, lint-watch for Node).
499
+
431
500
  Detailed behavior:
432
501
  - [`../docs/cli-and-repl.md`](../docs/cli-and-repl.md)
433
502
 
@@ -435,15 +504,23 @@ Detailed behavior:
435
504
 
436
505
  | Capability | What it adds |
437
506
  |---|---|
438
- | Agent Mesh | In-process multi-agent orchestration (automatic, no daemon needed) |
439
- | A2A Bridge | Cross-machine agent communication via Google A2A protocol |
440
- | Self-Triggers | Agents auto-activate on events (verification, failure recovery) |
441
- | Delegation Learning | Remembers successful patterns, suggests optimal routing |
442
- | Deep research | Research-focused tool routing and optional dedicated model path |
443
- | Embeddings | Semantic search and optional embedding-backed memory |
444
- | Memory | Retrieval-oriented persistent memory |
445
- | Browser/computer use | Playwright-backed browser automation and inspection |
446
- | Live audio | Gemini Live microphone sessions (experimental) |
507
+ | **Codebase Awareness** | Persistent understanding of the project — structure graph, change journal, insight cache. Compounds over time, zero extra cost |
508
+ | **Agent Mesh** | In-process multi-agent orchestration each agent is a full GemCode session with own workspace, memory, and persistent history |
509
+ | **Self-Healing** | Closed loop: change verify fix → verify → done. Code repairs itself automatically |
510
+ | **Tool Synthesis** | Agent creates new reusable tools at runtime from repeated patterns |
511
+ | **Agent Habits** | Scheduled recurring tasks (cron/interval/daily) — agents wake up and do work autonomously |
512
+ | **Self-Triggers** | Agents auto-activate on events (verification after changes, failure recovery) |
513
+ | **Self-Improving Skills** | Skills evolve successful patterns are appended automatically |
514
+ | **Delegation Learning** | Remembers which agents succeed at which tasks, suggests optimal routing |
515
+ | **Proactive Memory** | Auto-saves important discoveries to curated memory without being asked |
516
+ | **A2A Bridge** | Cross-machine agent communication via Google A2A protocol |
517
+ | **Event Bus** | In-memory pub/sub for agent-to-agent communication |
518
+ | **Deep research** | Research-focused tool routing and optional dedicated model path |
519
+ | **Embeddings** | Semantic search and optional embedding-backed memory |
520
+ | **Memory** | Retrieval-oriented persistent memory across sessions |
521
+ | **Browser/computer use** | Playwright-backed browser automation and inspection |
522
+ | **Checkpoints** | File mutations are reversible — undo any agent edit |
523
+ | **Live audio** | Gemini Live microphone sessions (experimental) |
447
524
 
448
525
  Detailed behavior:
449
526
  - [`../docs/capabilities.md`](../docs/capabilities.md)
@@ -3,14 +3,18 @@
3
3
  This document is the primary user-facing manual for GemCode. It explains the product at a high level and points to the subsystem-specific documentation pages that provide production-grade depth.
4
4
 
5
5
  ## What GemCode is
6
- GemCode is a local-first coding agent built around Google Gemini and the Google Agent Development Kit (ADK). It operates against a chosen project root and combines:
7
- - a configuration model
8
- - a runtime runner
9
- - a root language-model agent
10
- - a configurable tool inventory
11
- - project-local state under `.gemcode/`
6
+ GemCode is a local-first, self-evolving coding agent built on Google Gemini and the Agent Development Kit (ADK). It operates against a chosen project root and provides:
12
7
 
13
- GemCode is designed for repository-native work rather than copy-paste chat workflows.
8
+ - **Autonomous multi-agent orchestration** agents delegate, verify, and fix each other's work
9
+ - **Self-healing code** — changes are auto-verified; failures are auto-fixed
10
+ - **Self-evolving tools** — the agent creates new reusable tools from repeated patterns
11
+ - **Progressive learning** — gets smarter with every session (memory, skills, project map)
12
+ - **Scheduled habits** — agents wake up on cron/interval to run tests, audits, checks
13
+ - **Cross-machine agents** — expose/consume agents via Google A2A protocol
14
+ - **58 built-in tools** — filesystem, shell, web, search, memory, orchestration, synthesis
15
+ - **Full ADK integration** — native sub-agents, transfer_to_agent, output_key, workflow agents
16
+
17
+ All state lives under `.gemcode/` in the project root. No external services required beyond a Gemini API key.
14
18
 
15
19
  ## Runtime modes
16
20
 
@@ -139,14 +143,20 @@ Reference:
139
143
 
140
144
  ### Super mode (fully autonomous)
141
145
 
142
- Use when you want GemCode to run without GemCode’s own confirmation prompts (mutations, shell, ADK confirmation handoffs, AFC stdin prompt, attachment gate, auto-trust on CLI, and non-interactive `get_user_choice` = first option).
146
+ Use when you want GemCode to run with all powers unlocked and zero friction. In super mode:
147
+ - All capabilities auto-enable (memory, web search, agents, habits, triggers)
148
+ - Default org members auto-create (kaira + verifier)
149
+ - Habits auto-generate based on project type
150
+ - Auto-verification runs after risky changes
151
+ - No confirmation prompts for any operation
143
152
 
144
153
  - **CLI:** `gemcode -C . --super "your task"`
145
154
  - **Env:** `GEMCODE_SUPER_MODE=1`
146
- - **REPL/TUI:** `/super` (use `/super off` to clear the flag only)
147
- - **Kaira:** `gemcode kaira -C . --super`
155
+ - **REPL/TUI:** `/super` (use `/super off` to clear)
156
+
157
+ In normal mode, GemCode asks on first run: "Enable autonomous mode? [Y/n]"
148
158
 
149
- Details and safety notes: [`../docs/tools-and-permissions.md`](../docs/tools-and-permissions.md#super-mode-fully-autonomous).
159
+ Details: [`../docs/orchestration.md`](../docs/orchestration.md).
150
160
 
151
161
  ## Common commands
152
162
 
@@ -175,17 +185,22 @@ gemcode kaira -C .
175
185
  GemCode includes a built-in multi-agent orchestration system that works automatically — no separate daemon required.
176
186
 
177
187
  **Key features:**
178
- - **Agent Mesh** — in-process concurrent agent execution with full tool access
188
+ - **Native ADK sub-agents** — org members are real ADK sub-agents with `transfer_to_agent` routing
189
+ - **Agent Mesh** — async background execution with full GemCode sessions per agent
179
190
  - **Event Bus** — agents communicate via pub/sub (no Unix sockets needed)
180
- - **Self-Triggering Agents** — agents auto-activate on events (e.g., verifier reviews completed work)
191
+ - **Self-Healing** — closed loop: change verify fix verify → done
192
+ - **Self-Triggers** — agents auto-activate on events (verification, failure recovery)
193
+ - **Tool Synthesis** — agent creates new reusable tools from repeated patterns
181
194
  - **Delegation Learning** — remembers which agents succeed at which tasks
182
- - **A2A Bridge** — expose/consume agents across machines via Google's A2A protocol
195
+ - **A2A Bridge** — expose/consume agents across machines via Google A2A protocol
183
196
 
184
197
  Quick example in the REPL:
185
198
  ```text
186
199
  > Analyze the auth module. Delegate security review to the verifier.
187
200
  ```
188
- The agent calls `org_delegate("verifier", ...)` → mesh runs a full-power verifier agent → result flows back automatically.
201
+ The LLM calls `transfer_to_agent(agent_name='verifier')` → ADK routes natively verifier runs → result saved to session state.
202
+
203
+ For background work: `org_delegate("kaira", "run tests")` → mesh runs kaira as a full GemCode session → result flows back via fleet reports.
189
204
 
190
205
  Docs:
191
206
  - [`../docs/orchestration.md`](../docs/orchestration.md)
@@ -236,6 +251,60 @@ Status note:
236
251
  | `/agent assign <member> <task>` | Delegate work to a member |
237
252
  | `/agent improve <member> <lessons>` | Improve a member's skill |
238
253
 
254
+ ## Intelligence features (automatic)
255
+
256
+ These work without configuration. In super mode, everything is enabled silently. In normal mode, GemCode asks once on first run.
257
+
258
+ | Feature | How it works |
259
+ |---|---|
260
+ | **Codebase awareness** | Builds a persistent understanding of the project from every tool call — file structure, imports/exports, recent changes, learned facts. The agent starts each turn already knowing the project. |
261
+ | **Self-healing** | After file changes, auto-runs tests/lint. If they fail, auto-fixes (up to 2 attempts). Closed loop: change → verify → fix → verify → done. |
262
+ | **Tool synthesis** | When the agent repeats multi-step operations, it can create a reusable tool (bash/python script) stored in `.gemcode/synthesized_tools/`. |
263
+ | **Self-improving skills** | When a delegation succeeds, the member's skill file gets a "Learned pattern" appended. Future invocations benefit from past successes. |
264
+ | **Proactive memory** | After exploring 5+ files or running 3+ commands, key discoveries are auto-saved to curated memory. Future sessions start with this knowledge. |
265
+ | **Impact analysis** | When a file changes, GemCode knows which other files are affected (via import tracking + learned correlations). Self-healing runs only relevant tests. |
266
+ | **Auto-verification** | After 3+ file writes, the verifier agent auto-checks for syntax errors, broken imports, and logic bugs. |
267
+ | **Delegation suggestions** | `suggest_delegate(task)` recommends the best agent based on historical success patterns. |
268
+ | **Capability auto-enable** | If a project consistently uses web search or memory, those capabilities auto-enable in future sessions. |
269
+
270
+ ## Tool Synthesis (self-evolving)
271
+
272
+ The agent can create new reusable tools when it detects repeated patterns:
273
+
274
+ ```text
275
+ # Create a tool
276
+ synthesize_tool("run-tests", "Run pytest with coverage", "pytest --cov=src -q")
277
+ synthesize_tool("deploy-staging", "Deploy to staging", "git push origin main && ssh staging 'cd app && git pull'")
278
+
279
+ # Use it later
280
+ run_synthesized_tool("run-tests")
281
+ run_synthesized_tool("deploy-staging")
282
+
283
+ # List all synthesized tools
284
+ list_synthesized_tools()
285
+ ```
286
+
287
+ Tools persist in `.gemcode/synthesized_tools/` across sessions.
288
+
289
+ ## Agent Habits (scheduled tasks)
290
+
291
+ Agents can run recurring tasks on a schedule — no daemon needed, runs inside the main GemCode process.
292
+
293
+ ```text
294
+ # From the agent (tools):
295
+ habits_add("test-watch", "kaira", "Run pytest -q and report", every_minutes=30)
296
+ habits_add("nightly-audit", "verifier", "Full security review", daily_at="02:00")
297
+ habits_add("hourly-status", "self", "Summarize recent changes", cron="0 * * * *")
298
+
299
+ # Management:
300
+ habits_list()
301
+ habits_pause("test-watch")
302
+ habits_resume("test-watch")
303
+ habits_remove("test-watch")
304
+ ```
305
+
306
+ In super mode, GemCode auto-creates habits based on project type (test-watch for Python, lint-watch for Node).
307
+
239
308
  Detailed behavior:
240
309
  - [`../docs/cli-and-repl.md`](../docs/cli-and-repl.md)
241
310
 
@@ -243,15 +312,23 @@ Detailed behavior:
243
312
 
244
313
  | Capability | What it adds |
245
314
  |---|---|
246
- | Agent Mesh | In-process multi-agent orchestration (automatic, no daemon needed) |
247
- | A2A Bridge | Cross-machine agent communication via Google A2A protocol |
248
- | Self-Triggers | Agents auto-activate on events (verification, failure recovery) |
249
- | Delegation Learning | Remembers successful patterns, suggests optimal routing |
250
- | Deep research | Research-focused tool routing and optional dedicated model path |
251
- | Embeddings | Semantic search and optional embedding-backed memory |
252
- | Memory | Retrieval-oriented persistent memory |
253
- | Browser/computer use | Playwright-backed browser automation and inspection |
254
- | Live audio | Gemini Live microphone sessions (experimental) |
315
+ | **Codebase Awareness** | Persistent understanding of the project — structure graph, change journal, insight cache. Compounds over time, zero extra cost |
316
+ | **Agent Mesh** | In-process multi-agent orchestration each agent is a full GemCode session with own workspace, memory, and persistent history |
317
+ | **Self-Healing** | Closed loop: change verify fix → verify → done. Code repairs itself automatically |
318
+ | **Tool Synthesis** | Agent creates new reusable tools at runtime from repeated patterns |
319
+ | **Agent Habits** | Scheduled recurring tasks (cron/interval/daily) — agents wake up and do work autonomously |
320
+ | **Self-Triggers** | Agents auto-activate on events (verification after changes, failure recovery) |
321
+ | **Self-Improving Skills** | Skills evolve successful patterns are appended automatically |
322
+ | **Delegation Learning** | Remembers which agents succeed at which tasks, suggests optimal routing |
323
+ | **Proactive Memory** | Auto-saves important discoveries to curated memory without being asked |
324
+ | **A2A Bridge** | Cross-machine agent communication via Google A2A protocol |
325
+ | **Event Bus** | In-memory pub/sub for agent-to-agent communication |
326
+ | **Deep research** | Research-focused tool routing and optional dedicated model path |
327
+ | **Embeddings** | Semantic search and optional embedding-backed memory |
328
+ | **Memory** | Retrieval-oriented persistent memory across sessions |
329
+ | **Browser/computer use** | Playwright-backed browser automation and inspection |
330
+ | **Checkpoints** | File mutations are reversible — undo any agent edit |
331
+ | **Live audio** | Gemini Live microphone sessions (experimental) |
255
332
 
256
333
  Detailed behavior:
257
334
  - [`../docs/capabilities.md`](../docs/capabilities.md)
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "gemcode"
7
- version = "0.4.0"
7
+ version = "0.4.1"
8
8
  description = "Local-first coding agent on Google Gemini + ADK"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -1287,37 +1287,90 @@ def build_root_agent(
1287
1287
  sub_agents = []
1288
1288
  if getattr(cfg, "enable_adk_agent_transfer", True) and _tools is None:
1289
1289
  try:
1290
- # Explorer: read-only, fast, low-risk. Keep instruction short.
1291
- explorer_tools = build_function_tools(cfg, include_subtask=False)
1292
- explorer_tools = [t for t in explorer_tools if getattr(t, "__name__", "") not in ("write_file", "search_replace", "delete_file", "move_file", "bash", "run_command")]
1293
- explorer = LlmAgent(
1294
- name="explorer",
1295
- model=getattr(cfg, "model_alt", None) or cfg.model,
1296
- instruction=(
1297
- "You are Explorer. Your job is to quickly map the codebase and answer: "
1298
- "what files/symbols matter and where to look next. Use read-only tools only. "
1299
- "Return concise findings with file paths and symbol names."
1300
- ),
1301
- tools=explorer_tools,
1302
- generate_content_config=gen_cfg,
1303
- **cb_kwargs,
1304
- )
1305
- # Verifier: focuses on checking, tests, and consistency.
1306
- verifier_tools = build_function_tools(cfg, include_subtask=False)
1307
- verifier_tools = [t for t in verifier_tools if getattr(t, "__name__", "") not in ("write_file", "search_replace", "delete_file", "move_file")]
1308
- verifier = LlmAgent(
1309
- name="verifier",
1310
- model=getattr(cfg, "model_alt", None) or cfg.model,
1311
- instruction=(
1312
- "You are Verifier. Your job is to verify changes: run checks/tests when needed, "
1313
- "spot inconsistencies, and report PASS/FAIL with concrete evidence. "
1314
- "Prefer minimal commands and short outputs."
1315
- ),
1316
- tools=verifier_tools,
1317
- generate_content_config=gen_cfg,
1318
- **cb_kwargs,
1319
- )
1320
- sub_agents = [explorer, verifier]
1290
+ from gemcode.org import list_members, resolve_fleet_root
1291
+
1292
+ fleet_root = resolve_fleet_root(cfg.project_root)
1293
+ members = list_members(fleet_root)
1294
+
1295
+ for m in members:
1296
+ # Build a specialized sub-agent for each org member
1297
+ member_tools = build_function_tools(cfg, include_subtask=False)
1298
+
1299
+ # Restrict tools based on member kind
1300
+ if m.kind == "subagent" and m.name in ("verifier", "reviewer"):
1301
+ # Verifiers don't need write tools
1302
+ member_tools = [t for t in member_tools if getattr(t, "__name__", "") not in (
1303
+ "write_file", "search_replace", "delete_file", "move_file",
1304
+ )]
1305
+
1306
+ # Build instruction from member's skill if available
1307
+ member_instruction = (
1308
+ f"You are {m.name} ({m.title}).\n"
1309
+ f"Role: {m.description or 'General assistant'}\n"
1310
+ f"Reports to: {m.reports_to or 'manager'}\n\n"
1311
+ "Complete assigned tasks concisely. Return structured JSON when possible.\n"
1312
+ )
1313
+
1314
+ # Load skill content if available
1315
+ if m.skill_name:
1316
+ try:
1317
+ skill = load_skill(fleet_root, m.skill_name)
1318
+ if skill is not None:
1319
+ member_instruction += "\n" + expand_skill_text(skill, arguments="", session_id="")
1320
+ except Exception:
1321
+ pass
1322
+
1323
+ member_agent = LlmAgent(
1324
+ name=m.name,
1325
+ model=getattr(cfg, "model_alt", None) or cfg.model,
1326
+ description=m.description or f"{m.name} — {m.title}",
1327
+ instruction=member_instruction,
1328
+ tools=member_tools,
1329
+ generate_content_config=gen_cfg,
1330
+ output_key=f"agent_{m.name}_result",
1331
+ **cb_kwargs,
1332
+ )
1333
+ sub_agents.append(member_agent)
1334
+
1335
+ # If no org members exist, create default explorer + verifier
1336
+ if not sub_agents:
1337
+ explorer_tools = build_function_tools(cfg, include_subtask=False)
1338
+ explorer_tools = [t for t in explorer_tools if getattr(t, "__name__", "") not in (
1339
+ "write_file", "search_replace", "delete_file", "move_file", "bash", "run_command",
1340
+ )]
1341
+ explorer = LlmAgent(
1342
+ name="explorer",
1343
+ model=getattr(cfg, "model_alt", None) or cfg.model,
1344
+ description="Quickly maps the codebase and finds relevant files/symbols.",
1345
+ instruction=(
1346
+ "You are Explorer. Your job is to quickly map the codebase and answer: "
1347
+ "what files/symbols matter and where to look next. Use read-only tools only. "
1348
+ "Return concise findings with file paths and symbol names."
1349
+ ),
1350
+ tools=explorer_tools,
1351
+ generate_content_config=gen_cfg,
1352
+ output_key="explorer_result",
1353
+ **cb_kwargs,
1354
+ )
1355
+ verifier_tools = build_function_tools(cfg, include_subtask=False)
1356
+ verifier_tools = [t for t in verifier_tools if getattr(t, "__name__", "") not in (
1357
+ "write_file", "search_replace", "delete_file", "move_file",
1358
+ )]
1359
+ verifier = LlmAgent(
1360
+ name="verifier",
1361
+ model=getattr(cfg, "model_alt", None) or cfg.model,
1362
+ description="Verifies changes: runs checks/tests, spots inconsistencies, reports PASS/FAIL.",
1363
+ instruction=(
1364
+ "You are Verifier. Your job is to verify changes: run checks/tests when needed, "
1365
+ "spot inconsistencies, and report PASS/FAIL with concrete evidence. "
1366
+ "Prefer minimal commands and short outputs."
1367
+ ),
1368
+ tools=verifier_tools,
1369
+ generate_content_config=gen_cfg,
1370
+ output_key="verifier_result",
1371
+ **cb_kwargs,
1372
+ )
1373
+ sub_agents = [explorer, verifier]
1321
1374
  except Exception:
1322
1375
  sub_agents = []
1323
1376
 
@@ -1327,8 +1380,8 @@ def build_root_agent(
1327
1380
  instruction=build_instruction(cfg),
1328
1381
  tools=tools,
1329
1382
  generate_content_config=gen_cfg,
1330
- # ADK expects a list; passing None can fail validation on some versions.
1331
1383
  sub_agents=sub_agents,
1384
+ output_key="gemcode_last_output",
1332
1385
  **cb_kwargs,
1333
1386
  )
1334
1387