crow-cli 0.1.41__tar.gz → 0.1.45__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 (724) hide show
  1. crow_cli-0.1.45/.agents/crow/ideas/dashing-optimal-fulmar-of-judgment-1-1.md +72 -0
  2. crow_cli-0.1.45/.agents/crow/ideas/serious-generous-ammonite-of-aptitude-1-1.md +423 -0
  3. crow_cli-0.1.45/.agents/crow/ideas/serious-generous-ammonite-of-aptitude-2-1.md +901 -0
  4. crow_cli-0.1.45/ACP_V2.md +1597 -0
  5. crow_cli-0.1.45/AGENTS.md +68 -0
  6. {crow_cli-0.1.41 → crow_cli-0.1.45}/PKG-INFO +13 -3
  7. crow_cli-0.1.45/PLAN.md +607 -0
  8. crow_cli-0.1.45/TODO.md +300 -0
  9. {crow_cli-0.1.41 → crow_cli-0.1.45}/crow-cli.spec +41 -0
  10. crow_cli-0.1.45/examples/custom_compactor.py +151 -0
  11. {crow_cli-0.1.41 → crow_cli-0.1.45}/examples/mc_escher_loop.py +3 -1
  12. crow_cli-0.1.45/extend_kernel.md +1206 -0
  13. {crow_cli-0.1.41 → crow_cli-0.1.45}/pyproject.toml +13 -3
  14. crow_cli-0.1.45/skills/crow-cli/SKILL.md +194 -0
  15. crow_cli-0.1.45/src/crow_cli/acp_helpers.py +162 -0
  16. crow_cli-0.1.45/src/crow_cli/agent/compact.py +461 -0
  17. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/agent/main.py +103 -26
  18. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/agent/memory.py +40 -8
  19. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/agent/prompt.py +83 -6
  20. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/agent/react.py +68 -28
  21. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/agent/session.py +149 -32
  22. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/agent/slash.py +3 -7
  23. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/agent/tools.py +447 -20
  24. crow_cli-0.1.45/src/crow_cli/agent2/__init__.py +18 -0
  25. crow_cli-0.1.45/src/crow_cli/agent2/agent.py +766 -0
  26. crow_cli-0.1.45/src/crow_cli/agent2/compaction.py +153 -0
  27. crow_cli-0.1.45/src/crow_cli/agent2/ctx.py +90 -0
  28. crow_cli-0.1.45/src/crow_cli/agent2/deliveries.py +66 -0
  29. crow_cli-0.1.45/src/crow_cli/agent2/driver.py +645 -0
  30. crow_cli-0.1.45/src/crow_cli/agent2/emitter.py +350 -0
  31. crow_cli-0.1.45/src/crow_cli/agent2/events.py +95 -0
  32. crow_cli-0.1.45/src/crow_cli/agent2/goal.py +153 -0
  33. crow_cli-0.1.45/src/crow_cli/agent2/llm.py +504 -0
  34. crow_cli-0.1.45/src/crow_cli/agent2/main.py +93 -0
  35. crow_cli-0.1.45/src/crow_cli/agent2/react.py +330 -0
  36. crow_cli-0.1.45/src/crow_cli/agent2/replay.py +237 -0
  37. crow_cli-0.1.45/src/crow_cli/agent2/sessions.py +650 -0
  38. crow_cli-0.1.45/src/crow_cli/agent2/slash.py +176 -0
  39. crow_cli-0.1.45/src/crow_cli/agent2/tools.py +729 -0
  40. crow_cli-0.1.45/src/crow_cli/agent2/watcher.py +133 -0
  41. crow_cli-0.1.45/src/crow_cli/agents.py +279 -0
  42. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/cli/init_cmd.py +95 -5
  43. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/cli/main.py +553 -51
  44. crow_cli-0.1.45/src/crow_cli/cli/source.py +283 -0
  45. crow_cli-0.1.45/src/crow_cli/cli/tui_cmd.py +76 -0
  46. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/client/main.py +41 -22
  47. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/client/subagent.py +88 -11
  48. crow_cli-0.1.45/src/crow_cli/client2/__init__.py +12 -0
  49. crow_cli-0.1.45/src/crow_cli/client2/main.py +673 -0
  50. crow_cli-0.1.45/src/crow_cli/client2/subagent.py +573 -0
  51. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/config/__init__.py +6 -0
  52. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/config/config.py +121 -0
  53. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/config/default/__init__.py +2 -0
  54. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/config/default/defaults.py +285 -0
  55. crow_cli-0.1.45/src/crow_cli/discover.py +317 -0
  56. crow_cli-0.1.45/src/crow_cli/mcp/__init__.py +63 -0
  57. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/editor/main.py +5 -2
  58. crow_cli-0.1.45/src/crow_cli/mcp/execute/kernel.py +189 -0
  59. crow_cli-0.1.45/src/crow_cli/mcp/execute/main.py +258 -0
  60. crow_cli-0.1.45/src/crow_cli/mcp/server/main.py +188 -0
  61. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/task/main.py +8 -37
  62. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/terminal/logging_config.py +2 -2
  63. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/terminal/main.py +46 -24
  64. crow_cli-0.1.45/src/crow_cli/mcp2/__init__.py +36 -0
  65. crow_cli-0.1.45/src/crow_cli/mcp2/execute/kernel.py +268 -0
  66. crow_cli-0.1.45/src/crow_cli/mcp2/execute/main.py +349 -0
  67. crow_cli-0.1.45/src/crow_cli/mcp2/main.py +163 -0
  68. crow_cli-0.1.45/src/crow_cli/mcp2/server.py +41 -0
  69. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/memory/__init__.py +52 -7
  70. crow_cli-0.1.45/src/crow_cli/memory/fts.py +212 -0
  71. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/memory/messages.py +47 -2
  72. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/memory/models.py +95 -0
  73. crow_cli-0.1.45/src/crow_cli/memory/reads.py +501 -0
  74. crow_cli-0.1.45/src/crow_cli/memory/writes.py +484 -0
  75. crow_cli-0.1.45/src/crow_cli/timers.py +278 -0
  76. crow_cli-0.1.45/src/crow_cli/tools/__init__.py +220 -0
  77. crow_cli-0.1.45/src/crow_cli/tools/edit_tool.py +118 -0
  78. crow_cli-0.1.45/src/crow_cli/tools/fs_tool.py +879 -0
  79. crow_cli-0.1.45/src/crow_cli/tools/goal_tool.py +195 -0
  80. crow_cli-0.1.45/src/crow_cli/tools/memory_tool.py +665 -0
  81. crow_cli-0.1.45/src/crow_cli/tools/register.py +403 -0
  82. crow_cli-0.1.45/src/crow_cli/tools/results.py +940 -0
  83. crow_cli-0.1.45/src/crow_cli/tools/rlm_tool.py +323 -0
  84. crow_cli-0.1.45/src/crow_cli/tools/sg_tool.py +125 -0
  85. crow_cli-0.1.45/src/crow_cli/tools/task_tool.py +726 -0
  86. crow_cli-0.1.45/src/crow_cli/tools/vision_tool.py +158 -0
  87. crow_cli-0.1.45/src/crow_cli/tools/web_tool.py +664 -0
  88. crow_cli-0.1.45/src/crow_cli/tools/write_tool.py +93 -0
  89. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/acp/agent.py +365 -73
  90. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/acp/api.py +13 -0
  91. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/acp/messages.py +27 -0
  92. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/acp/protocol.py +114 -0
  93. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/agent.py +27 -0
  94. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/agent_schema.py +3 -0
  95. crow_cli-0.1.45/src/crow_cli/tui/agent_servers.py +225 -0
  96. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/app.py +11 -2
  97. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/mcp.py +1 -0
  98. crow_cli-0.1.45/src/crow_cli/tui/os.py +0 -0
  99. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/path_filter.py +2 -0
  100. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/main.py +53 -1
  101. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/settings.py +6 -4
  102. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/store.py +7 -46
  103. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/session_list.py +1 -0
  104. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/settings_schema.py +1 -0
  105. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/tui.tcss +16 -0
  106. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/conversation.py +111 -27
  107. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/prompt.py +19 -1
  108. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/shell_terminal.py +2 -0
  109. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/terminal.py +2 -0
  110. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/throbber.py +1 -0
  111. crow_cli-0.1.45/src/crow_cli/wake.py +130 -0
  112. crow_cli-0.1.45/tests/e2e/custom_compactor_agent.py +146 -0
  113. crow_cli-0.1.45/tests/e2e/test_agent2_live.py +475 -0
  114. crow_cli-0.1.45/tests/e2e/test_compact_continues_live.py +219 -0
  115. crow_cli-0.1.45/tests/e2e/test_compact_live.py +209 -0
  116. crow_cli-0.1.45/tests/e2e/test_custom_compactor_live.py +263 -0
  117. crow_cli-0.1.45/tests/e2e/test_execute_acp_client.py +186 -0
  118. crow_cli-0.1.45/tests/e2e/test_execute_live.py +122 -0
  119. crow_cli-0.1.45/tests/e2e/test_mcp_multi_server.py +126 -0
  120. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/e2e/test_session_update_transmission.py +1 -1
  121. crow_cli-0.1.45/tests/e2e/test_source_first_spawn.py +153 -0
  122. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/e2e/test_task_high_priority_preemption.py +8 -3
  123. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/e2e/test_task_mcp_launch.py +6 -2
  124. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/e2e/test_task_race_regression.py +8 -3
  125. crow_cli-0.1.45/tests/integration/conftest.py +132 -0
  126. crow_cli-0.1.45/tests/integration/mock_acp_agent.py +200 -0
  127. crow_cli-0.1.45/tests/integration/test_agent2_gate.py +2467 -0
  128. crow_cli-0.1.45/tests/integration/test_agent2_task_subtool.py +681 -0
  129. crow_cli-0.1.45/tests/integration/test_agent2_watcher.py +207 -0
  130. crow_cli-0.1.45/tests/integration/test_cancel_under_load.py +460 -0
  131. crow_cli-0.1.45/tests/integration/test_cli_acp2.py +320 -0
  132. crow_cli-0.1.45/tests/integration/test_cli_run_dispatch.py +741 -0
  133. crow_cli-0.1.45/tests/integration/test_client2_subagent.py +668 -0
  134. crow_cli-0.1.45/tests/integration/test_execute_subtool_emission.py +1255 -0
  135. crow_cli-0.1.45/tests/integration/test_goal_driver.py +414 -0
  136. crow_cli-0.1.45/tests/integration/test_goal_slash.py +455 -0
  137. crow_cli-0.1.45/tests/integration/test_mcp2_runner.py +223 -0
  138. crow_cli-0.1.45/tests/integration/test_mcp_tool_selection.py +195 -0
  139. crow_cli-0.1.45/tests/integration/test_react_loop_execute_tool.py +196 -0
  140. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/integration/test_react_loop_tool_round.py +162 -10
  141. crow_cli-0.1.45/tests/integration/test_slash_commands.py +345 -0
  142. crow_cli-0.1.45/tests/integration/test_timers_live.py +355 -0
  143. crow_cli-0.1.45/tests/integration/test_tools_rlm_live.py +500 -0
  144. crow_cli-0.1.45/tests/mcp/conftest.py +54 -0
  145. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/mcp/integration/test_server_stdio.py +1 -0
  146. crow_cli-0.1.45/tests/mcp/test_execute.py +132 -0
  147. crow_cli-0.1.45/tests/mcp/test_execute_kernel_timeout.py +75 -0
  148. crow_cli-0.1.45/tests/mcp/test_execute_prelude.py +486 -0
  149. crow_cli-0.1.45/tests/mcp/test_mcp2_server.py +222 -0
  150. crow_cli-0.1.45/tests/mcp/test_server.py +89 -0
  151. crow_cli-0.1.45/tests/mcp/test_terminal.py +92 -0
  152. crow_cli-0.1.45/tests/mcp/test_tool_selection.py +238 -0
  153. crow_cli-0.1.45/tests/memory/test_goal_state.py +281 -0
  154. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/memory/test_store.py +199 -0
  155. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/memory/test_task_state.py +43 -0
  156. crow_cli-0.1.45/tests/unit/test_agent2_mcp_wiring.py +186 -0
  157. crow_cli-0.1.45/tests/unit/test_agent2_normalize_prompt.py +222 -0
  158. crow_cli-0.1.45/tests/unit/test_agent2_tools_drain.py +231 -0
  159. crow_cli-0.1.45/tests/unit/test_agent_servers_spawn.py +170 -0
  160. crow_cli-0.1.45/tests/unit/test_agents_registry.py +351 -0
  161. crow_cli-0.1.45/tests/unit/test_client2_render.py +893 -0
  162. crow_cli-0.1.45/tests/unit/test_compact.py +460 -0
  163. crow_cli-0.1.45/tests/unit/test_compact_last_messages_list_content.py +128 -0
  164. crow_cli-0.1.45/tests/unit/test_configure.py +157 -0
  165. crow_cli-0.1.45/tests/unit/test_discover.py +302 -0
  166. crow_cli-0.1.45/tests/unit/test_fork.py +559 -0
  167. crow_cli-0.1.45/tests/unit/test_goal_continuation.py +185 -0
  168. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_init_postgres.py +2 -2
  169. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_init_rustfs.py +1 -1
  170. crow_cli-0.1.45/tests/unit/test_init_source.py +314 -0
  171. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_session_mcp_servers_wiring.py +26 -0
  172. crow_cli-0.1.45/tests/unit/test_source.py +146 -0
  173. crow_cli-0.1.45/tests/unit/test_timers.py +245 -0
  174. crow_cli-0.1.45/tests/unit/test_tools_edit.py +167 -0
  175. crow_cli-0.1.45/tests/unit/test_tools_facade_names.py +88 -0
  176. crow_cli-0.1.45/tests/unit/test_tools_fs.py +1272 -0
  177. crow_cli-0.1.45/tests/unit/test_tools_goal.py +312 -0
  178. crow_cli-0.1.45/tests/unit/test_tools_memory.py +1013 -0
  179. crow_cli-0.1.45/tests/unit/test_tools_register_db.py +213 -0
  180. crow_cli-0.1.45/tests/unit/test_tools_rlm.py +192 -0
  181. crow_cli-0.1.45/tests/unit/test_tools_task.py +507 -0
  182. crow_cli-0.1.45/tests/unit/test_tools_vision.py +222 -0
  183. crow_cli-0.1.45/tests/unit/test_tools_web.py +850 -0
  184. crow_cli-0.1.45/tests/unit/test_tools_write.py +139 -0
  185. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_usage_update.py +18 -9
  186. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_uv_project_enforcement.py +62 -7
  187. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_version.py +10 -0
  188. crow_cli-0.1.45/tests/unit/tui/__init__.py +0 -0
  189. crow_cli-0.1.45/tests/unit/tui/test_agent_log_writer.py +127 -0
  190. crow_cli-0.1.45/tests/unit/tui/test_config_options.py +213 -0
  191. {crow_cli-0.1.41 → crow_cli-0.1.45}/uv.lock +1037 -24
  192. crow_cli-0.1.41/AGENTS.md +0 -30
  193. crow_cli-0.1.41/PLAN.md +0 -187
  194. crow_cli-0.1.41/TODO.md +0 -74
  195. crow_cli-0.1.41/sandbox/agent-client/SUCCESS.md +0 -90
  196. crow_cli-0.1.41/sandbox/agent-client/TODO.md +0 -50
  197. crow_cli-0.1.41/sandbox/docs/ancestors/IMPLEMENTATION_PLAN.md +0 -903
  198. crow_cli-0.1.41/sandbox/repl-agent/docs/AGENT_CLIENT_PLAN.md +0 -341
  199. crow_cli-0.1.41/src/crow_cli/agent/compact.py +0 -223
  200. crow_cli-0.1.41/src/crow_cli/cli/tui_cmd.py +0 -88
  201. crow_cli-0.1.41/src/crow_cli/mcp/__init__.py +0 -35
  202. crow_cli-0.1.41/src/crow_cli/mcp/server/main.py +0 -79
  203. crow_cli-0.1.41/src/crow_cli/memory/fts.py +0 -94
  204. crow_cli-0.1.41/src/crow_cli/memory/reads.py +0 -296
  205. crow_cli-0.1.41/src/crow_cli/memory/writes.py +0 -212
  206. crow_cli-0.1.41/src/crow_cli/tui/widgets/mandelbrot.py +0 -294
  207. crow_cli-0.1.41/tests/analyze_payload_cache_invalidation.py +0 -242
  208. crow_cli-0.1.41/tests/analyze_payload_deep.py +0 -317
  209. crow_cli-0.1.41/tests/integration/test_slash_commands.py +0 -148
  210. crow_cli-0.1.41/tests/mcp/test_server.py +0 -53
  211. crow_cli-0.1.41/tests/mcp/test_terminal.py +0 -36
  212. crow_cli-0.1.41/tests/unit/test_compact.py +0 -197
  213. crow_cli-0.1.41/tests/unit/test_compact_last_messages_list_content.py +0 -34
  214. crow_cli-0.1.41/tests/unit/test_configure.py +0 -61
  215. crow_cli-0.1.41/tests/unit/test_fork.py +0 -218
  216. {crow_cli-0.1.41 → crow_cli-0.1.45}/.env.example +0 -0
  217. {crow_cli-0.1.41 → crow_cli-0.1.45}/.github/workflows/build-binaries.yml +0 -0
  218. {crow_cli-0.1.41 → crow_cli-0.1.45}/.github/workflows/publish-crow-cli.yml +0 -0
  219. {crow_cli-0.1.41 → crow_cli-0.1.45}/.gitignore +0 -0
  220. {crow_cli-0.1.41 → crow_cli-0.1.45}/.python-version +0 -0
  221. {crow_cli-0.1.41 → crow_cli-0.1.45}/LICENSE.md +0 -0
  222. {crow_cli-0.1.41 → crow_cli-0.1.45}/PYINSTALLER_BUILD.md +0 -0
  223. {crow_cli-0.1.41 → crow_cli-0.1.45}/README.md +0 -0
  224. {crow_cli-0.1.41 → crow_cli-0.1.45}/TERMINAL_STACK.md +0 -0
  225. {crow_cli-0.1.41 → crow_cli-0.1.45}/agent.json +0 -0
  226. {crow_cli-0.1.41 → crow_cli-0.1.45}/dev-crow-2.yaml +0 -0
  227. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/CNAME +0 -0
  228. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/crow-cli-docs/getting-started/installation.md +0 -0
  229. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/crow-cli-docs/getting-started/quickstart.md +0 -0
  230. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/crow-cli-docs/index.md +0 -0
  231. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/crow-cli-docs/memory-tool-design.md +0 -0
  232. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/crow-cli-docs/myst.yml +0 -0
  233. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/crow-cli-docs/styles/purple.css +0 -0
  234. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/crow-logo.svg +0 -0
  235. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/get-llamacpp-working.md +0 -0
  236. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/getting-started/installation.md +0 -0
  237. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/getting-started/quickstart.md +0 -0
  238. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/icon.ico +0 -0
  239. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/img/crow-icon-purple.svg +0 -0
  240. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/img/crow-logo-crop.png +0 -0
  241. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/img/icon.svg +0 -0
  242. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/img/whiteboard_capture.png +0 -0
  243. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/index.html +0 -0
  244. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/index.md +0 -0
  245. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/journal/03May2026.md +0 -0
  246. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/journal/19Feb2026.md +0 -0
  247. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/journal/20Feb2026.md +0 -0
  248. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/journal/22Feb2026.md +0 -0
  249. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/journal/29Aug2026.md +0 -0
  250. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/llm-wiki.md +0 -0
  251. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/myst.yml +0 -0
  252. {crow_cli-0.1.41 → crow_cli-0.1.45}/docs/styles/purple.css +0 -0
  253. {crow_cli-0.1.41 → crow_cli-0.1.45}/examples/quick_test.py +0 -0
  254. {crow_cli-0.1.41 → crow_cli-0.1.45}/run_tests.sh +0 -0
  255. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/.python-version +0 -0
  256. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/README.md +0 -0
  257. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/agent_client.py +0 -0
  258. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/echo_agent.py +0 -0
  259. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/fire_up_echo.py +0 -0
  260. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/fire_up_simple.py +0 -0
  261. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/main.py +0 -0
  262. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/pyproject.toml +0 -0
  263. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/run_bridge.py +0 -0
  264. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/simple_agent.py +0 -0
  265. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/stdio_to_ws.py +0 -0
  266. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/test_acp_ws_client.py +0 -0
  267. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/test_agent_client.py +0 -0
  268. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/test_bridge.py +0 -0
  269. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/test_bridge_and_client.py +0 -0
  270. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/test_bridge_direct.py +0 -0
  271. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/test_client.py +0 -0
  272. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/test_date_terminal.py +0 -0
  273. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/test_echo_agent.py +0 -0
  274. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/test_fs_terminal.py +0 -0
  275. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/test_http_multisession.py +0 -0
  276. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/test_raw_stdio.py +0 -0
  277. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/test_simple.py +0 -0
  278. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/test_ws_client.py +0 -0
  279. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/two_sessions_same_question.py +0 -0
  280. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/agent-client/uv.lock +0 -0
  281. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/async-react/.python-version +0 -0
  282. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/async-react/README.md +0 -0
  283. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/async-react/db_integrity_test.py +0 -0
  284. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/async-react/e2e_tool_integrity.py +0 -0
  285. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/async-react/persistence_integrity_test.py +0 -0
  286. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/async-react/pyproject.toml +0 -0
  287. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/async-react/streaming_async_react.py +0 -0
  288. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/async-react/streaming_async_react_with_cancellation.py +0 -0
  289. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/async-react/test_usage.py +0 -0
  290. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/async-react/tool_call_integrity_test.py +0 -0
  291. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/async-react/uv.lock +0 -0
  292. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-acp-learning/README.md +0 -0
  293. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-acp-learning/agent.py +0 -0
  294. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-acp-learning/client.py +0 -0
  295. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-acp-learning/duet.py +0 -0
  296. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-acp-learning/echo_agent.py +0 -0
  297. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-acp-learning/fire_up_echo.py +0 -0
  298. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-acp-learning/gemini.py +0 -0
  299. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-acp-learning/pyproject.toml +0 -0
  300. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-acp-learning/terminal_agent.py +0 -0
  301. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-acp-learning/test_acp.py +0 -0
  302. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-acp-learning/uv.lock +0 -0
  303. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-test/.python-version +0 -0
  304. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-test/README.md +0 -0
  305. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-test/graph.png +0 -0
  306. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-test/graph.py +0 -0
  307. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-test/main.py +0 -0
  308. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-test/pyproject.toml +0 -0
  309. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/crow-test/uv.lock +0 -0
  310. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/dirtree/.python-version +0 -0
  311. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/dirtree/README.md +0 -0
  312. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/dirtree/main.py +0 -0
  313. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/dirtree/pyproject.toml +0 -0
  314. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/dirtree/uv.lock +0 -0
  315. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/00-architecture-overview.md +0 -0
  316. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/01-parallel-tool-calling.md +0 -0
  317. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/02-toad-integration.md +0 -0
  318. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/03-session-persistence.md +0 -0
  319. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/04-cancellation-and-state.md +0 -0
  320. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/05-loop-detection.md +0 -0
  321. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/06-finish-tool.md +0 -0
  322. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/07-python-repl.md +0 -0
  323. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/08-system-prompt-skills.md +0 -0
  324. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/09-session-continuity-and-compaction.md +0 -0
  325. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/AGENTS_OLD.md +0 -0
  326. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/ARCHITECTURE.md +0 -0
  327. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/CANCELLATION_IMPLEMENTATION.md +0 -0
  328. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/CANCELLATION_SANDBOX_COMPARISON.md +0 -0
  329. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/CANCELLATION_SUMMARY.md +0 -0
  330. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/CRITICAL_CLARIFICATIONS.md +0 -0
  331. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/CROW_SDK_ANALYSIS.md +0 -0
  332. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/EXTENSION_DISCUSSION.md +0 -0
  333. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/IMPLEMENTATION_SUMMARY.md +0 -0
  334. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/IMPLEMENTATION_SUMMARY_ACP_SESSIONS.md +0 -0
  335. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/INSTRUCTIONS_FOR_KIMI.md +0 -0
  336. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/PROJECT_VISION.md +0 -0
  337. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/PROMPT.md +0 -0
  338. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/PULSE_CHECK.md +0 -0
  339. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/REPL_GUIDE.md +0 -0
  340. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/TABLE_SCHEMA.md +0 -0
  341. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/THOUGHTS.md +0 -0
  342. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/check_acp_agent.py +0 -0
  343. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/conversation-wrapper-analysis.md +0 -0
  344. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/crow-agent-good-stuff.md +0 -0
  345. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/crow_agent_example.py +0 -0
  346. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/crow_inspect.py +0 -0
  347. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/database.py +0 -0
  348. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/00-file-editor-semantics-and-fastmcp.md +0 -0
  349. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/01-mcp-server-package-structure.md +0 -0
  350. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/02-hooks-realization-and-agent-core.md +0 -0
  351. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/03-where-we-are-now-and-whats-next.md +0 -0
  352. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/04-acp-mcp-configuration.md +0 -0
  353. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/04-hooks-as-first-class-citizens.md +0 -0
  354. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/05-hook-design-analysis.md +0 -0
  355. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/05-python-sdk-that-emerged.md +0 -0
  356. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/06-acp-native-sessions.md +0 -0
  357. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/07-extension-api-design.md +0 -0
  358. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/08-flask-extension-pattern-with-context-variables.md +0 -0
  359. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/09-git-commit-violation-last-testament.md +0 -0
  360. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/10-monorepo-refactor-to-avoid-cyclic-dependencies.md +0 -0
  361. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/11-acp-terminal-tool-swapping.md +0 -0
  362. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/12-hook-based-architecture-and-the-frameworkless-framework.md +0 -0
  363. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/13-acp-terminal-architecture.md +0 -0
  364. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/14-terminal-mcp-implementation.md +0 -0
  365. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/15-terminal-mcp-complete.md +0 -0
  366. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/16-fractal-filesystem-sandbox-parallel-tool-calling.md +0 -0
  367. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/17-composition-over-inheritance-extension-design.md +0 -0
  368. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/18-self-injection-the-god-mode-pattern.md +0 -0
  369. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/19-pluggy-the-missing-piece.md +0 -0
  370. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/20-terminal-tool-failure-bug-report.md +0 -0
  371. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/21-callback-architecture-multi-agent-bridges.md +0 -0
  372. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/22-the-agent-was-always-here.md +0 -0
  373. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/23-cancellation-solid-plan.md +0 -0
  374. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/24-async-tool-hanging-debug-thoughts.md +0 -0
  375. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/25-acp-client-terminal-integration.md +0 -0
  376. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/26-graceful-cancellation-streaming.md +0 -0
  377. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/essays/llms-txt-and-agent-skills.md +0 -0
  378. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/fire_up_echo.py +0 -0
  379. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/kernel_kernel.py +0 -0
  380. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/merging-agents-guide.md +0 -0
  381. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/plans/acp-tool-enhancements.md +0 -0
  382. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/quick_test.py +0 -0
  383. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/research-findings.md +0 -0
  384. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/search.py +0 -0
  385. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/simple_crow_agent.py +0 -0
  386. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/streaming_async_react.py +0 -0
  387. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/streaming_async_react_with_db.py +0 -0
  388. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/streaming_react.py +0 -0
  389. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/terminal_demo.py +0 -0
  390. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/test_client_caps.py +0 -0
  391. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/test_crow_e2e.py +0 -0
  392. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/test_terminal_client.py +0 -0
  393. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/docs/ancestors/zai_tool_integration.py +0 -0
  394. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/fastmcp-test/.gitignore +0 -0
  395. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/fastmcp-test/.python-version +0 -0
  396. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/fastmcp-test/README.md +0 -0
  397. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/fastmcp-test/client.py +0 -0
  398. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/fastmcp-test/docs/essays/00-fractal-filesystem-sandbox-parallel-tool-calling.md +0 -0
  399. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/fastmcp-test/pyproject.toml +0 -0
  400. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/fastmcp-test/src/fastmcp_test/__init__.py +0 -0
  401. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/fastmcp-test/src/fastmcp_test/server/__init__.py +0 -0
  402. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/fastmcp-test/src/fastmcp_test/server/main.py +0 -0
  403. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/fastmcp-test/src/fastmcp_test/tool/__init__.py +0 -0
  404. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/fastmcp-test/src/fastmcp_test/tool/main.py +0 -0
  405. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/fastmcp-test/uv.lock +0 -0
  406. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/lancedb-testing/.gitignore +0 -0
  407. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/lancedb-testing/.python-version +0 -0
  408. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/lancedb-testing/README.md +0 -0
  409. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/lancedb-testing/bench_colpali.py +0 -0
  410. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/lancedb-testing/bench_dual_model.py +0 -0
  411. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/lancedb-testing/bench_latency.py +0 -0
  412. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/lancedb-testing/lancedb_session.py +0 -0
  413. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/lancedb-testing/load_crow_db.py +0 -0
  414. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/lancedb-testing/main.py +0 -0
  415. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/lancedb-testing/multivector.py +0 -0
  416. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/lancedb-testing/pyproject.toml +0 -0
  417. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/lancedb-testing/uv.lock +0 -0
  418. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/langfuse-test/.python-version +0 -0
  419. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/langfuse-test/README.md +0 -0
  420. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/langfuse-test/explore.py +0 -0
  421. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/langfuse-test/main.py +0 -0
  422. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/langfuse-test/pyproject.toml +0 -0
  423. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/langfuse-test/uv.lock +0 -0
  424. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/litellm-dashscope/.python-version +0 -0
  425. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/litellm-dashscope/README.md +0 -0
  426. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/litellm-dashscope/main.py +0 -0
  427. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/litellm-dashscope/pyproject.toml +0 -0
  428. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/litellm-dashscope/test_all_models_reasoning.py +0 -0
  429. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/litellm-dashscope/test_fix_correctness.py +0 -0
  430. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/litellm-dashscope/test_llamacpp_reasoning.py +0 -0
  431. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/litellm-dashscope/test_rc_empty.py +0 -0
  432. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/litellm-dashscope/test_reasoning_tool_transition.py +0 -0
  433. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/litellm-dashscope/test_reasoning_transition.py +0 -0
  434. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/litellm-dashscope/uv.lock +0 -0
  435. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/litellm-proxy/.python-version +0 -0
  436. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/litellm-proxy/README.md +0 -0
  437. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/litellm-proxy/config.yaml +0 -0
  438. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/litellm-proxy/main.py +0 -0
  439. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/litellm-proxy/pyproject.toml +0 -0
  440. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/litellm-proxy/uv.lock +0 -0
  441. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/murder-architecture.md +0 -0
  442. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/pathlib-test/.python-version +0 -0
  443. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/pathlib-test/README.md +0 -0
  444. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/pathlib-test/main.py +0 -0
  445. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/pathlib-test/pyproject.toml +0 -0
  446. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/pathlib-test/src/pathlib_test/test.py +0 -0
  447. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/pathlib-test/uv.lock +0 -0
  448. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/pyinstaller-async-test/.python-version +0 -0
  449. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/pyinstaller-async-test/main.py +0 -0
  450. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/pyinstaller-async-test/pyproject.toml +0 -0
  451. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/pyinstaller-async-test/test.spec +0 -0
  452. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/pyinstaller-async-test/uv.lock +0 -0
  453. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/.crow/compose.yaml +0 -0
  454. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/.crow/config.yaml +0 -0
  455. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/.crow/litellm/config.yaml +0 -0
  456. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/.crow/searxng/settings.yml +0 -0
  457. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/.gitignore +0 -0
  458. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/.python-version +0 -0
  459. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/AGENT_CLIENT_INTEGRATION.md +0 -0
  460. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/README.md +0 -0
  461. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/client.py +0 -0
  462. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/compact_agent.py +0 -0
  463. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/compact_e2e_test.py +0 -0
  464. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/compact_fixtures/case_01_system_user_only.json +0 -0
  465. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/compact_fixtures/case_02_reasoning_only.json +0 -0
  466. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/compact_fixtures/case_03_content_only.json +0 -0
  467. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/compact_fixtures/case_04_unexecuted_tools.json +0 -0
  468. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/compact_fixtures/case_05_mid_conversation_all_responded.json +0 -0
  469. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/compact_fixtures/case_06_partial_tool_responses.json +0 -0
  470. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/compact_fixtures/case_07_complete_turn.json +0 -0
  471. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/compact_fixtures/case_08_reasoning_ending.json +0 -0
  472. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/compact_fixtures/case_09_content_ending.json +0 -0
  473. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/compact_fixtures/chubby_full_conversation.jsonl +0 -0
  474. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/docs/COMPACT_AND_SCHEMA_REWRITE.md +0 -0
  475. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/docs/STRATEGIC_PIVOT.md +0 -0
  476. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/generate_compact_fixtures.py +0 -0
  477. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/iterative_refinement.py +0 -0
  478. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/iterative_refinement_agent.py +0 -0
  479. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/iterative_refinement_mcp.py +0 -0
  480. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/main.py +0 -0
  481. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/multi_compact.py +0 -0
  482. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/orchestrator.py +0 -0
  483. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/pyproject.toml +0 -0
  484. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/run_iterative_refinement_agent.py +0 -0
  485. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/run_repl_clients.py +0 -0
  486. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/scratch_db.py +0 -0
  487. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/task_description.yaml +0 -0
  488. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/test_compact_fixtures.py +0 -0
  489. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/test_compact_one.py +0 -0
  490. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/test_compact_real.py +0 -0
  491. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/test_compact_run.py +0 -0
  492. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/test_drift_instrumentation.py +0 -0
  493. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/test_hook.py +0 -0
  494. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/test_iterative_refinement.py +0 -0
  495. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/test_multi_compact_client.py +0 -0
  496. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/test_refinement_agent.py +0 -0
  497. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/test_repl_client.py +0 -0
  498. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/repl-agent/uv.lock +0 -0
  499. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/textual-term-toy/bridge.py +0 -0
  500. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/textual-term-toy/harness/index.html +0 -0
  501. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/textual-term-toy/harness/main.js +0 -0
  502. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/textual-term-toy/pyproject.toml +0 -0
  503. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/textual-term-toy/sample.md +0 -0
  504. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/textual-term-toy/toy.py +0 -0
  505. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/textual-term-toy/uv.lock +0 -0
  506. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/yaml-configs/.python-version +0 -0
  507. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/yaml-configs/README.md +0 -0
  508. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/yaml-configs/main.py +0 -0
  509. {crow_cli-0.1.41 → crow_cli-0.1.45}/sandbox/yaml-configs/pyproject.toml +0 -0
  510. {crow_cli-0.1.41 → crow_cli-0.1.45}/scripts/consolidate_history.py +0 -0
  511. {crow_cli-0.1.41 → crow_cli-0.1.45}/scripts/e2e_compact_live.py +0 -0
  512. {crow_cli-0.1.41 → crow_cli-0.1.45}/scripts/e2e_image_store_live.py +0 -0
  513. {crow_cli-0.1.41 → crow_cli-0.1.45}/scripts/e2e_memory_live.py +0 -0
  514. {crow_cli-0.1.41 → crow_cli-0.1.45}/scripts/e2e_postgres_live.py +0 -0
  515. {crow_cli-0.1.41 → crow_cli-0.1.45}/scripts/mcp_ram_repro.py +0 -0
  516. {crow_cli-0.1.41 → crow_cli-0.1.45}/scripts/merge_live_into_migrated.py +0 -0
  517. {crow_cli-0.1.41 → crow_cli-0.1.45}/scripts/migrate_taskmaster.py +0 -0
  518. {crow_cli-0.1.41 → crow_cli-0.1.45}/scripts/migrate_v5.py +0 -0
  519. {crow_cli-0.1.41 → crow_cli-0.1.45}/scripts/migrate_v6.py +0 -0
  520. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/__init__.py +0 -0
  521. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/agent/__init__.py +0 -0
  522. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/agent/context.py +0 -0
  523. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/agent/hooks.py +0 -0
  524. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/agent/llm.py +0 -0
  525. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/agent/logger.py +0 -0
  526. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/agent/mcp_client.py +0 -0
  527. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/agent/model_routing.py +0 -0
  528. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/agent_runner.py +0 -0
  529. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/cli/__init__.py +0 -0
  530. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/cli/install.py +0 -0
  531. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/client/__init__.py +0 -0
  532. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/client/terminal.py +0 -0
  533. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/config/default/searxng_settings.py +0 -0
  534. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/editor/README.md +0 -0
  535. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/editor/__init__.py +0 -0
  536. {crow_cli-0.1.41/src/crow_cli/mcp/memory → crow_cli-0.1.45/src/crow_cli/mcp/execute}/__init__.py +0 -0
  537. {crow_cli-0.1.41/src/crow_cli/mcp/read → crow_cli-0.1.45/src/crow_cli/mcp/memory}/__init__.py +0 -0
  538. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/memory/client.py +0 -0
  539. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/memory/main.py +0 -0
  540. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/memory/store.py +0 -0
  541. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/read/README.md +0 -0
  542. {crow_cli-0.1.41/src/crow_cli/mcp/task → crow_cli-0.1.45/src/crow_cli/mcp/read}/__init__.py +0 -0
  543. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/read/main.py +0 -0
  544. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/server/README.md +0 -0
  545. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/server/__init__.py +0 -0
  546. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/server/app.py +0 -0
  547. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/server/logger.py +0 -0
  548. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/server/memtrim.py +0 -0
  549. {crow_cli-0.1.41/src/crow_cli/mcp/vision → crow_cli-0.1.45/src/crow_cli/mcp/task}/__init__.py +0 -0
  550. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/terminal/README.md +0 -0
  551. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/terminal/__init__.py +0 -0
  552. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/terminal/backend.py +0 -0
  553. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/terminal/constants.py +0 -0
  554. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/terminal/metadata.py +0 -0
  555. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/terminal/session.py +0 -0
  556. {crow_cli-0.1.41/src/crow_cli/mcp/write → crow_cli-0.1.45/src/crow_cli/mcp/vision}/__init__.py +0 -0
  557. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/vision/client.py +0 -0
  558. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/vision/main.py +0 -0
  559. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/web_fetch/README.md +0 -0
  560. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/web_fetch/__init__.py +0 -0
  561. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/web_fetch/main.py +0 -0
  562. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/web_search/README.md +0 -0
  563. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/web_search/__init__.py +0 -0
  564. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/web_search/main.py +0 -0
  565. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/write/README.md +0 -0
  566. {crow_cli-0.1.41/tests/unit/tui → crow_cli-0.1.45/src/crow_cli/mcp/write}/__init__.py +0 -0
  567. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/mcp/write/main.py +0 -0
  568. /crow_cli-0.1.41/src/crow_cli/tui/os.py → /crow_cli-0.1.45/src/crow_cli/mcp2/execute/__init__.py +0 -0
  569. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/memory/db.py +0 -0
  570. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/memory/ids.py +0 -0
  571. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/memory/image_store.py +0 -0
  572. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/memory/session_tabs.py +0 -0
  573. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/NOTICE +0 -0
  574. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/__init__.py +0 -0
  575. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/_loop.py +0 -0
  576. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/_path_fuzzy_search.py +0 -0
  577. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/_path_match.py +0 -0
  578. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/acp/encode_tool_call_id.py +0 -0
  579. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/acp/prompt.py +0 -0
  580. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/agent_terminal.py +0 -0
  581. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/agents.py +0 -0
  582. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/ansi/__init__.py +0 -0
  583. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/ansi/_ansi.py +0 -0
  584. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/ansi/_ansi_colors.py +0 -0
  585. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/ansi/_control_codes.py +0 -0
  586. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/ansi/_keys.py +0 -0
  587. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/ansi/_sgr_styles.py +0 -0
  588. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/ansi/_stream_parser.py +0 -0
  589. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/answer.py +0 -0
  590. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/atomic.py +0 -0
  591. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/code_analyze.py +0 -0
  592. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/complete.py +0 -0
  593. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/constants.py +0 -0
  594. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/conversation_markdown.py +0 -0
  595. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/danger.py +0 -0
  596. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/data/agents/crowai.dev.toml +0 -0
  597. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/data/images/crow.png +0 -0
  598. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/data/images/frog.png +0 -0
  599. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/data/sounds/question.wav +0 -0
  600. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/data/sounds/turn-over.wav +0 -0
  601. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/db.py +0 -0
  602. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/dec.py +0 -0
  603. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/directory.py +0 -0
  604. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/directory_suggester.py +0 -0
  605. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/directory_watcher.py +0 -0
  606. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/format_path.py +0 -0
  607. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/fuzzy.py +0 -0
  608. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/fuzzy_index.py +0 -0
  609. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/history.py +0 -0
  610. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/jsonrpc.py +0 -0
  611. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/menus.py +0 -0
  612. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/messages.py +0 -0
  613. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/option_content.py +0 -0
  614. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/path_complete.py +0 -0
  615. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/paths.py +0 -0
  616. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/pill.py +0 -0
  617. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/prompt/extract.py +0 -0
  618. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/prompt/resource.py +0 -0
  619. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/protocol.py +0 -0
  620. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/action_modal.py +0 -0
  621. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/agent_modal.py +0 -0
  622. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/command_edit_modal.py +0 -0
  623. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/editor.py +0 -0
  624. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/editor.tcss +0 -0
  625. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/history.py +0 -0
  626. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/history.tcss +0 -0
  627. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/main.tcss +0 -0
  628. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/permissions.py +0 -0
  629. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/permissions.tcss +0 -0
  630. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/session_resume_modal.py +0 -0
  631. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/session_resume_modal.tcss +0 -0
  632. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/sessions.py +0 -0
  633. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/sessions.tcss +0 -0
  634. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/settings.tcss +0 -0
  635. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/screens/store.tcss +0 -0
  636. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/session_tracker.py +0 -0
  637. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/settings.py +0 -0
  638. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/shell.py +0 -0
  639. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/shell_read.py +0 -0
  640. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/slash_command.py +0 -0
  641. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/themes.py +0 -0
  642. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/visuals/columns.py +0 -0
  643. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/acp_content.py +0 -0
  644. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/agent_response.py +0 -0
  645. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/agent_thought.py +0 -0
  646. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/command_pane.py +0 -0
  647. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/condensed_path.py +0 -0
  648. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/danger_warning.py +0 -0
  649. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/diff_view.py +0 -0
  650. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/directory_input.py +0 -0
  651. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/editor_terminal.py +0 -0
  652. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/flash.py +0 -0
  653. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/future_text.py +0 -0
  654. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/grid_select.py +0 -0
  655. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/highlighted_textarea.py +0 -0
  656. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/markdown_note.py +0 -0
  657. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/menu.py +0 -0
  658. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/non_selectable_label.py +0 -0
  659. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/note.py +0 -0
  660. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/path_search.py +0 -0
  661. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/plan.py +0 -0
  662. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/project_directory_tree.py +0 -0
  663. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/question.py +0 -0
  664. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/session_grid_select.py +0 -0
  665. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/session_summary.py +0 -0
  666. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/session_tabs.py +0 -0
  667. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/shell_result.py +0 -0
  668. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/side_bar.py +0 -0
  669. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/slash_complete.py +0 -0
  670. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/strike_text.py +0 -0
  671. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/terminal_tool.py +0 -0
  672. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/tool_call.py +0 -0
  673. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/user_input.py +0 -0
  674. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/version.py +0 -0
  675. {crow_cli-0.1.41 → crow_cli-0.1.45}/src/crow_cli/tui/widgets/welcome.py +0 -0
  676. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/__init__.py +0 -0
  677. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/conftest.py +0 -0
  678. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/e2e/test_react_live.py +0 -0
  679. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/integration/test_acp_http.py +0 -0
  680. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/integration/test_agent_init.py +0 -0
  681. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/integration/test_auth_validation.py +0 -0
  682. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/integration/test_react_loop_cancel_integrity.py +0 -0
  683. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/integration/test_react_loop_delegation_hold.py +0 -0
  684. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/integration/test_reasoning_effort_react_loop.py +0 -0
  685. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/mcp/test_edit.py +0 -0
  686. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/mcp/test_memory.py +0 -0
  687. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/mcp/test_memory_store.py +0 -0
  688. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/mcp/test_memtrim.py +0 -0
  689. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/mcp/test_read.py +0 -0
  690. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/mcp/test_task_tool.py +0 -0
  691. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/mcp/test_vision.py +0 -0
  692. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/mcp/test_web_fetch.py +0 -0
  693. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/mcp/test_web_search.py +0 -0
  694. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/mcp/test_write.py +0 -0
  695. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/memory/test_db.py +0 -0
  696. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/memory/test_image_store.py +0 -0
  697. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/memory/test_migrate_taskmaster.py +0 -0
  698. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/memory/test_migrate_v5.py +0 -0
  699. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/memory/test_migrate_v6.py +0 -0
  700. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/memory/test_session_mcp_servers.py +0 -0
  701. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/memory/test_session_tabs.py +0 -0
  702. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_agent_store.py +0 -0
  703. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_cli_fork_flags.py +0 -0
  704. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_cli_telemetry.py +0 -0
  705. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_client_terminal.py +0 -0
  706. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_compact_last_messages_list_content.json +0 -0
  707. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_json_repair.py +0 -0
  708. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_mcp_client.py +0 -0
  709. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_model_override.py +0 -0
  710. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_model_routing.py +0 -0
  711. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_per_model_compact_threshold.py +0 -0
  712. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_prompt.py +0 -0
  713. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_react.py +0 -0
  714. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_reasoning_effort.py +0 -0
  715. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_request_logging.py +0 -0
  716. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_session.py +0 -0
  717. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_stream_processing.py +0 -0
  718. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_subagent_parse_servers.py +0 -0
  719. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_system_prompt_skills.py +0 -0
  720. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/test_task_tool_schema.py +0 -0
  721. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/tui/test_agent_terminal.py +0 -0
  722. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/tui/test_ansi_resize.py +0 -0
  723. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/tui/test_editor_screen.py +0 -0
  724. {crow_cli-0.1.41 → crow_cli-0.1.45}/tests/unit/tui/test_editor_terminal.py +0 -0
@@ -0,0 +1,72 @@
1
+ ---
2
+ kind: ideas
3
+ session: dashing-optimal-fulmar-of-judgment
4
+ agent: dashing-optimal-fulmar-of-judgment-1-1
5
+ model: qwen3.8-max
6
+ cwd: /home/thomas/.agents/crow/src/crow-cli
7
+ generated: 2026-09-12T19:52:02.136609+00:00
8
+ ---
9
+
10
+ ## Assumptions worth attacking
11
+
12
+ **1. That a bare `Callable[...]` alias is a safe public contract.** This session installed three: `SystemPromptFactory`, `Compactor`, `CompactSystemPrompt`. The fragility is already visible — the user riffed `def init_sys() -> SystemPromptResponse` with *no* arguments, and the implementation had to invent `(config, cwd, session_id)` because `session_id` is minted inside `make_agent_session` and the default template interpolates it. Argument *order and arity* just became load-bearing API with no additive path. Note the asymmetry the session accepted without comment: compaction got a frozen `CompactCtx` (extensible by adding a field), session/new got three positionals (extensible only by breaking callers). **Wrong if:** the factory never needs a fourth argument. **Cheapest hedge:** make it keyword-only (`def default_system_prompt(*, config, cwd, session_id=None)`) — one line, and it converts every future addition from breaking to additive. The user rejected "ctx nonsense" here, so this is an attack on a settled decision; re-litigate only when someone asks for `tools` inside their prompt.
13
+
14
+ **2. That `prompt_args["workspace"]` and `prompt_args["rlm_depth"]` can be documented rather than enforced.** The refactor now lets any user return an arbitrary `template_args` dict, and two keys are load-bearing *outside* rendering: `get_session_by_cwd` filters on `prompt_args["workspace"] == cwd` (session.py:54), so omitting it makes the session vanish from the TUI list; `AgentSession.rlm_depth` reads `prompt_args["rlm_depth"]`, so omitting it reads as "not a delegate" and the delegation budget silently becomes unlimited. Both failures are silent, delayed, and present as unrelated bugs. A docstring on `SystemPromptResponse` warns about them. A docstring is not a guardrail. **Instead:** the real fix is to stop reading `prompt_args["workspace"]` and filter on the `agents.cwd` column, which already exists and is authoritative — five lines, and it deletes the coupling instead of defending it. That belongs with plan item 6 ("make session_id a column… how hard is that really").
15
+
16
+ **3. That compaction was the right home for harness self-critique.** The passes were deleted because they tripled cost and repeated themselves — but the *cause* of the repetition is the finding: a compaction-time reflection has no memory of prior reflections. The chosen fix (delete it, wait for a scheduler agent) leaves crow with **no** feedback loop from agents to maintainers, while `skills/crow-cli/SKILL.md` and the `learn` skill both still document one. **Instead:** keep one pass and feed it the predecessor's file — `<config_dir>/analysis/<agent_id>.md` is computable from the lineage, so "say something new" becomes mechanically possible rather than aspirational. **Wrong if:** including the predecessor costs more tokens than the repetition saved, or models ignore it and repeat anyway.
17
+
18
+ **4. That an e2e test can drive compaction by lowering the threshold in `react_loop`.** This is where the session was headed, and it has a hazard nobody had hit: react.py:853 checks `usage["total_tokens"] > compact_threshold`, compacts, and `continue`s. With a very low threshold the *compacted* session's next turn also exceeds it, so it compacts forever until `max_turns` (default 50000) is exhausted. The user's redirect — a real ACP agent process plus a client that sends `/compact` — is strictly better and not only because it dodges the loop: `/compact` goes through `slash.compact_command`, which is the *other* of the two call sites and the one that reads `agent._compactor` / `agent._compact_system_prompt` directly. The threshold approach should be dropped, not bounded.
19
+
20
+ **5. That `sandbox/` is inert scratch.** `sandbox/repl-agent/main.py` is the file the user pointed at as the canonical "how a project builds an agent" example, and it imports `crow_cli.agent.configure`, which no longer exists. Its `test_compact_*.py` call `compact(session=…, llm=…, cwd=…)` — a signature that died when `cwd` became `config`. Meanwhile the new `examples/custom_compactor.py` is the real reference. Search tools walk `sandbox/` by default; this session's own `sg` sweeps surfaced those stale call sites repeatedly. A reader or an agent will find the dead API first and confidently teach it.
21
+
22
+ ## Prior art you should steal from
23
+
24
+ **1. Claude Code's compaction — keep the tail verbatim.** crow's `last_messages(session, n_messages=20, max_chars=300)` flattens the last 20 messages into a truncated text blob with `USER:` / `TOOL RESULT:` labels and appends it to the summary. Flattening destroys role tags, `tool_call_id`s, and image blocks; a successor that needs to re-issue or answer a tool call cannot, because the id is gone. The mechanism worth taking: replay the last N messages as real role-tagged dicts after the summary turn. **This is the most valuable contract change available and it is cheapest right now**, because `CompactResponse.prompt` is typed `str` and forbids it — widen to `str | list[dict]` (or add `messages`) before `examples/custom_compactor.py` teaches anyone the `str`-only shape. **Wrong if:** a flattened blob answers questions about the tail as well as verbatim messages do.
25
+
26
+ **2. pluggy (pytest's plugin system) — hookspecs and keyword dispatch.** pluggy solves "let third parties override a step of my pipeline" by declaring argument names and the return contract once, calling by keyword, and letting plugins implement a subset. `CompactCtx` / `SystemPromptResponse` are hand-rolled hookspecs without the discipline. Not worth the dependency for three hooks — pluggy's indirection makes stack traces miserable — but worth stealing the rule: **every callable keyword-only**, so adding an argument never breaks a `main.py`. **Wrong if:** crow never grows past ~5 hooks and never adds an argument, in which case the aliases are fine as written.
27
+
28
+ **3. LangGraph's `Command(goto=…, update=…)` — return a description, not a side effect.** LangGraph's customization points return declarative next-state rather than performing it. `CompactResponse` is already 80% of that shape, and `compact()` owning the mechanics (agent_idx arithmetic, the row, `on_compact`) is exactly LangGraph's split. What's missing is that `Command` can also say *go somewhere else* — the crow equivalent is a compactor returning "don't compact, fork instead" or "mint two generations". **Wrong if:** every real strategy only ever wants one successor, which is plausible; don't add the field speculatively.
29
+
30
+ **4. Anthropic's prompt-cache breakpoints — and a warning the new example gets wrong.** crow's deleted docstring said the three passes shared "a byte-identical message prefix, which is what makes the provider's prompt-prefix cache pay for passes two and three." Nothing enforces prefix stability, and the new contract actively threatens it: `examples/custom_compactor.py` interpolates `{{ generation }}` into the **template**, so the rendered system bytes change every generation and bust the prefix cache for the whole conversation. The example currently teaches the expensive thing. **Instead:** document on `SystemPromptResponse` that anything in the system prompt is re-paid on every subsequent turn, and put `generation` in the handoff message where it costs once. **Wrong if:** the local llama.cpp box isn't prefix-caching anyway — check before rewriting the example.
31
+
32
+ **5. Dagster's materialization event log.** Dagster writes a structured event per asset run (duration, metadata, which code version). crow logs `f"Compact usage: {usage}"` to text and throws it away. A `compactions` table — session, from_agent, to_agent, strategy name, prompt/completion tokens, wall time — makes "is my custom compactor worth it" a SQL question instead of a vibe, and the `memory` tool could read it. The schema is `create_all`-additive (see the comment at session.py:243), so a new table needs no migration. **Wrong if:** the `learn` skill can already reconstruct this from `messages` usage columns — check that first, it may be free.
33
+
34
+ **6. Zed's extension model — process composition over library composition.** Zed agents are a manifest plus a separate binary speaking ACP; customization never imports the host. crow's "single main.py that adds crow-cli to pyproject.toml" goal is fighting the fact that ACP already provides process-level composition. Not instead of the callable contract — the callable is far cheaper for the common case — but `extend_kernel.md` and `TERMINAL_STACK.md` both imply library-first and neither says when to ship a separate agent instead.
35
+
36
+ ## Directions nobody has pointed at
37
+
38
+ **1. Make compaction strategies automatically A/B-able by the `learn` skill.** A `Compactor` is now a near-pure function from `(session, llm, config)` to `(system_template, system_args, prompt)` — which means the bench-and-judge machinery that already exists in `learn` can hill-climb compaction the same way it hill-climbs prompts. Run N real sessions to compaction under K variants; judge the *successor's* next turn (did it redo work? lose the thread?). This is the only mechanism in the repo that could tell you whether `last_messages(20, 300)` is the right tail policy. **Wrong if:** successor performance is dominated by base-model quality rather than handoff content — test that first with two deliberately-bad variants (empty handoff vs. full handoff); if those don't separate, the bench measures noise.
39
+
40
+ **2. Generation-aware behavior, not just generation-aware prompts.** A session compacted four times is a different kind of agent: it holds a summary-of-a-summary and is more likely to confabulate continuity. `agent_idx` already encodes depth and nothing in the repo connects it to behavior. Progressive policy — at generation 3+, "you are working from a summary; verify file state before editing"; at 5+, refuse to compact and fork a fresh session with a pointer instead. **Wrong if:** models ignore the injected caution, which they usually do. Make it measurable: does generation 4+ re-read files it "knows" more or less often with the caution present?
41
+
42
+ **3. Ship `compact()` as an MCP tool for other people's agents.** It needs a session, an OpenAI-compatible client, and a config — nothing ACP-specific. A `crow-compact` MCP tool ("conversation in, summary plus handoff out") would let the Rust ACP v2 work in the `acp-v2` skill, or any framework, use crow's compaction without importing crow. The MCP machinery and `--include-tools` slicing already exist. **Wrong if:** the value is entirely in the coupling to crow's agent-row model — and `make_agent_session` sitting *inside* `compact()` argues it partly is.
43
+
44
+ **4. Read the `prompts` table as a versioned artifact store.** `lookup_or_create_prompt` content-addresses templates, so that table is already an append-only history of every system prompt crow has ever run, across every session and every user edit of `system_prompt.jinja2`. Nothing reads it that way. A `crow-cli prompts` command listing distinct templates with usage counts and first/last-seen would expose prompt drift over time — and let `learn` diff "prompts that produced good sessions" against "prompts that produced bad ones" with zero new instrumentation. **Wrong if:** there are only ever two or three distinct templates, making it a dedupe cache rather than a history.
45
+
46
+ **5. Let the client own the compaction trigger.** The TUI already renders a context meter from `usage_update`; the agent-side threshold is a policy decision made in the layer with the *least* visibility into what the user is doing. Let the client send `/compact` (or a real ACP method) when the moment is right, including mid-turn. **Wrong if:** third-party clients (Zed) will never implement crow policy — they won't, so the threshold must stay as a fallback, meaning this adds a path rather than replacing one. Still worth it if manual compaction is what users actually want.
47
+
48
+ **6. Promote or delete `sandbox/repl-agent/`.** It contains `orchestrator.py`, `iterative_refinement_agent.py`, `compact_agent.py`, `multi_compact.py` — real attempts at exactly the delegation frameworks the user wants to build on top of crow. They are unfindable (dead imports, no docs, buried under ~30 test files) and they encode orchestration lessons the `acp-v2` skill is re-deriving from scratch. **Wrong if:** more than half of each file is dead imports — then `git rm -r sandbox/repl-agent` and write the example fresh, which is faster than resurrection.
49
+
50
+ ## What would make this obsolete
51
+
52
+ **1. Providers shipping compaction natively — and they are close.** Anthropic's context editing / memory tool and OpenAI's stateful `responses` API both move "the conversation is too long, compress it" server-side, where the provider has true token counts, the cache state, and no round trip. crow's compaction subsystem — the threshold check, the summary pass, the new-agent-row mechanics, and the `CompactCtx` contract built *today* — is a client-side reimplementation of something the provider is better positioned to own. The maintainer should worry that this is an investment in a layer that becomes a no-op within two years. **What survives:** the session-lineage model — agent rows, forks, nothing ever deleted, `memory` over a multi-month multi-agent corpus. No provider will replicate that, because it is about a user's history across processes and machines, not one API conversation. That is the asset; the compaction strategy is the disposable part. It argues for keeping the compactor contract *small* — which is what the user insisted on all session, against repeated attempts to grow it — and for putting design weight on lineage and memory instead.
53
+
54
+ **2. ACP v2 moving orchestration to the client.** The repo's own `acp-v2` skill describes a draft where the agent emits `session/update` streams and the client drives state, including `state_update` and moving "beyond the turn". If v2 lands that way, `AcpAgent` as a long-lived Python object you configure with callables is the wrong shape — the right shape is a stateless process answering prompts, with customization in the conductor. crow is building library-level extension points at the same moment its own skill documents a protocol change that would relocate that responsibility to the other side of the wire. Nobody has written down whether the two are compatible.
55
+
56
+ **3. The memory moat is thinner than it feels.** Zed (which crow forks), Cursor, and Claude Code all ship agent-in-terminal with real engineering behind the rendering, and Claude Code's `CLAUDE.md` auto-memory is the early form of agent-authored persistent notes. crow's differentiator is not the TUI — the user says so explicitly — it is the database plus lineage plus skills. If a competitor ships cross-session memory with agent-authored notes, crow's moat is a schema and a `memory` tool. **The underexploited asset:** the tables can already answer "show me every session that touched this file and what it concluded" (`messages` + `agents` + `subtool_calls`), and nothing in the repo exposes it. That query is harder to clone than a summarizer.
57
+
58
+ **4. The local-model assumption carries a lot of dead weight.** Streaming compaction ("a non-streaming request must produce the ENTIRE summary before the client's read timeout fires, which kills compaction outright on slow local models"), per-model `max_compact_tokens`, and the now-deleted degenerate-repeat detector all exist because crow runs against a llama.cpp box on the user's hardware. If local models stop being what people run agents against, that complexity is ballast and the cloud-only path is much simpler. **The counter that survives:** local is the only configuration where the memory database and the model are on the same machine and nothing leaves. For this user that is the point, not a constraint — so the complexity is load-bearing, but it should be *labeled* as local-only rather than paid for by every deployment.
59
+
60
+ ## Cheapest decisive experiments
61
+
62
+ **1. Does `prompt: str` actually block the verbatim-tail design? (Half a day.)** Widen `CompactResponse.prompt` to `str | list[dict]`, teach `compact()` to append either one user turn or a list of role-tagged messages, run one real session through both handoff shapes on the local model, and ask the successor a question whose answer sits in a tool result ~15 messages back. **Stop if** the flattened `last_messages` blob already answers it — then the extra tokens buy nothing and `str` stays.
63
+
64
+ **2. Is the `workspace` coupling really user-breakable? (One hour.)** Build an `AcpAgent(system_prompt=…)` returning `template_args` without `workspace`, create a session, call `get_session_by_cwd`. **Stop if** the TUI never calls that path for agent-server sessions — grep `tui/` first. Either outcome is a five-line fix (guardrail, or switch the filter to `agents.cwd`), so this is cheap enough to just do rather than debate.
65
+
66
+ **3. Does `/compact` over a real ACP process work with a custom compactor? (One day — this is the test the session was about to write.)** Two scripts: an agent script building `AcpAgent(config, system_prompt=dummy, compactor=mine, compact_system_prompt=mine_too)` against the standard config dir and local `qwen3.8-flash-next`; a client script that spawns it, opens a session, sends two prompts, sends `/compact`, and asserts the new generation's system message came from `mine_too` and its first user message came from `mine`. **Stop if** the ACP client can't be driven headlessly in-process — fall back to calling `slash.compact_command` directly with a fake agent, which tests the same wiring minus the wire.
67
+
68
+ **4. Does feeding the predecessor's analysis stop the repetition? (One afternoon, local box.)** Re-add a single reflection pass that first reads `<config_dir>/analysis/<predecessor_agent_id>.md` and prepends "here is what your predecessor said; do not repeat it". Run three successive compactions of one session. **Stop if** generation 3 still repeats generation 1 — then the scheduler-agent plan is the only real answer and the pass should stay deleted.
69
+
70
+ **5. Does keyword-only cost anything? (Ten minutes.)** Change `default_system_prompt` to `(*, config, cwd, session_id=None)`, relax the alias to `Callable[..., SystemPromptResponse]`, update the two call sites, run the suite. **Stop if** the user objects on readability grounds — but the experiment is free and it is the only item here that protects the contract against future growth.
71
+
72
+ **6. Is `sandbox/repl-agent` worth promoting? (Two hours.)** Read `orchestrator.py` and `iterative_refinement_agent.py` against the current API and count dead imports. **Stop if** more than half of each file is stale — then delete the directory and write the delegation example fresh.
@@ -0,0 +1,423 @@
1
+ ---
2
+ kind: ideas
3
+ session: serious-generous-ammonite-of-aptitude
4
+ agent: serious-generous-ammonite-of-aptitude-1-1
5
+ model: github-copilot/gpt-5.6-luna
6
+ cwd: /home/thomas/.agents/crow/src/crow-cli
7
+ generated: 2026-09-09T18:38:45.278495+00:00
8
+ ---
9
+
10
+ I cannot persist the file in this turn, but here is the standalone content that should be written to `.agents/crow/ideas/`:
11
+
12
+ # Adversarial Review of Crow CLI
13
+
14
+ ## Assumptions worth attacking
15
+
16
+ ### 1. Protocol correctness will compensate for implementation gaps
17
+
18
+ Crow correctly treats ACP/MCP as more authoritative than local naming, but protocol alignment is not binary. The current `load_session` behavior is known to approximate replay semantics while omitting the frontend replay contract. That is not merely a naming mismatch: clients can render an apparently empty session, lose tool state, or duplicate messages.
19
+
20
+ **What breaks if false:** ACP clients cannot reliably reconnect, reconstruct UI state, or distinguish resumed context from replayed history. Crow becomes “ACP-compatible enough for one client” rather than interoperable.
21
+
22
+ **Evidence:** this session explicitly identified that `load_session` does not replay the full session to the frontend.
23
+
24
+ **Alternative:** build a protocol conformance layer with recorded ACP transcripts. Test `new → prompt → disconnect → load/resume → replay` against a reference client, including tool calls, artifacts, thoughts, modes, and cancellation.
25
+
26
+ **Proved wrong if:** a reference ACP client can reconnect to arbitrary persisted sessions and reconstruct the exact visible state from the wire, including interrupted and tool-heavy turns.
27
+
28
+ ### 2. SQLite plus stable IDs equals durable agent execution
29
+
30
+ SQLite makes history durable and forks easy to inspect, but it does not make live execution durable. The Celery experiment exposed the distinction: task results can persist, while a running worker, kernel, subprocess, or in-memory async task may disappear on process death.
31
+
32
+ **What breaks if false:** a daemon reports work as active when the worker is gone; completion events are lost; a session can be resumed but not know whether its subprocess was still running; duplicate work becomes likely.
33
+
34
+ **Evidence:** Crow’s RLM background path keeps live tasks in process-local state while writing transcripts to SQLite. The proposed daemon architecture also relies on completion wakeups.
35
+
36
+ **Alternative:** model execution as durable state transitions, not as a live task plus a transcript. Every job needs an idempotency key, heartbeat, lease, attempt number, external process identity, completion record, and recovery policy.
37
+
38
+ **Proved wrong if:** killing the agent daemon, Celery worker, broker, or subprocess at each lifecycle stage results in exactly-once semantic completion or a clearly recoverable state without manual repair.
39
+
40
+ ### 3. A single local model endpoint is effectively unlimited
41
+
42
+ The local AMD machine removes API cost, but it does not remove prefill latency, memory contention, thermal limits, context-window pressure, or scheduling conflicts. The user already identified prefill as the scarce resource.
43
+
44
+ **What breaks if false:** automatic reminders and completion reviews produce a self-inflicted queue of expensive supervisor turns. Ambient research competes with user interaction. Persistent context becomes a liability instead of an advantage.
45
+
46
+ **Evidence:** the proposed daemon would wake on idle/completion events, run periodic prompts, review subagents, and maintain research pipelines against one llama.cpp endpoint.
47
+
48
+ **Alternative:** introduce a model-turn scheduler before building broad autonomy. Prioritize interactive user turns, active project supervision, and ambient research separately. Batch events into one review, deduplicate wakeups, and use compact state references instead of replaying transcripts.
49
+
50
+ **Proved wrong if:** a benchmark with realistic completion bursts shows that automatic supervision preserves acceptable interactive latency and does not cause unbounded model backlog.
51
+
52
+ ### 4. `execute` is a sufficient universal composition substrate
53
+
54
+ The persistent kernel is unusually powerful, but it has environment, lifecycle, and trust boundaries. The Celery installation mistake demonstrated that “the project environment” and “the current kernel environment” can diverge. A separate subprocess may use one `.venv`, while the active kernel uses another. `reload()` refreshes modules; it does not repair arbitrary interpreter or dependency state.
55
+
56
+ **What breaks if false:** generated workflows work in one session and fail in another; hot-installed dependencies are invisible; daemon jobs inherit the wrong cwd, credentials, or Python environment; self-modifying code becomes hard to reproduce.
57
+
58
+ **Alternative:** expose runtime identity in the kernel: executable path, project root, environment fingerprint, package-lock digest, loaded tool versions, and subprocess inheritance rules. Treat kernel reset as a defined environment boundary.
59
+
60
+ **Proved wrong if:** a test can install a dependency, reset or spawn the intended kernel, import it, launch a child process, and reproduce the same environment from a clean machine using only declared project metadata.
61
+
62
+ ### 5. A read-only MCP remains a read-only agent capability
63
+
64
+ The MCP may be read-only with respect to Component Service while the host agent can generate GenBank files, operate an authenticated browser, upload artifacts, and trigger mutations through the UI.
65
+
66
+ **What breaks if false:** security review approves a supposedly read-only agent while overlooking the actual side-effect path. Tool-level authorization becomes misleading because the agent’s capability is the composition of all tools and interfaces.
67
+
68
+ **Evidence:** this session demonstrated the authenticated LMnext UI and Playwright access, and explicitly recognized that a read-only domain MCP can drive write workflows through `execute` and the browser.
69
+
70
+ **Alternative:** classify capabilities at the composition boundary. Track data access, local artifact creation, external network access, browser mutation, backend mutation, and publication separately. Require approval at irreversible edges, not merely at MCP calls.
71
+
72
+ **Proved wrong if:** a capability manifest for an agent accurately predicts every side effect it can perform, including indirect UI mutations, and tests reject an unapproved upload or submit path.
73
+
74
+ ### 6. Self-modification naturally improves the harness
75
+
76
+ Crow can edit tools, prompts, skills, and source, then reload and continue. That is a capability, not a guarantee of improvement. A system that can mutate itself can also silently degrade its own reliability.
77
+
78
+ **What breaks if false:** prompt changes improve one task while damaging another; tool schema changes invalidate clients; skills accumulate contradictory instructions; a successful local experiment becomes an unreviewed permanent regression.
79
+
80
+ **Evidence:** the `learn` skill already recognizes this by requiring copies, one-dimension mutations, judging, Pareto retention, and explicit diffs before promotion.
81
+
82
+ **Alternative:** make self-modification transactional. Every mutation gets a parent revision, affected capability list, test/bench evidence, rollback pointer, and promotion status. Keep live execution on a known-good revision until evaluation passes.
83
+
84
+ **Proved wrong if:** repeated optimization runs produce improvements across held-out tasks without increasing regressions, tool failures, or prompt size, and every promotion can be rolled back deterministically.
85
+
86
+ ### 7. A client daemon is merely a transport wrapper
87
+
88
+ The proposed daemon is more than HTTP around an agent. It would own session attachment, job execution, wakeups, scheduling, completion handling, and possibly ACP-compatible control. If it is treated as a thin server, its lifecycle semantics will be underspecified.
89
+
90
+ **What breaks if false:** clients disagree about ownership, events are lost, prompts race with cancellation, and a daemon restart changes the meaning of “active session.”
91
+
92
+ **Evidence:** the proposed architecture distinguishes the daemon agent from the client daemon and from Celery workers, while also requiring ACP-style session control.
93
+
94
+ **Alternative:** define the daemon as a stateful control plane with explicit ownership and event semantics. ACP should be the conversational interface; a small extension surface should manage jobs, subscriptions, schedules, artifacts, and approvals.
95
+
96
+ **Proved wrong if:** multiple clients can attach, detach, reconnect, subscribe, prompt, cancel, and resume the same session without duplicated turns or ambiguous ownership.
97
+
98
+ ## Prior art you should steal from
99
+
100
+ ### 1. Agent Client Protocol and its session-resume direction
101
+
102
+ ACP provides the canonical boundary Crow should conform to rather than reinterpret. The important mechanism is separating conversational session identity from transport connection identity, then defining what resume and replay mean.
103
+
104
+ **Steal:** conformance fixtures for session creation, reconnection, replay, cancellation, tool updates, and capability negotiation.
105
+
106
+ **Cost:** protocol replay is more work than simply loading internal state. It also forces Crow to preserve enough structured history to reconstruct frontend-visible state.
107
+
108
+ **How it lands here:** turn Crow’s existing SQLite transcript into an ACP replay source. Keep internal `load` and external replay semantics distinct even if one implementation initially serves both.
109
+
110
+ **Failure condition:** if real ACP clients do not need replay, or if Crow’s own clients never consume it, prioritize other work. But an external client interoperability test should decide this, not intuition.
111
+
112
+ ### 2. Temporal durable execution
113
+
114
+ Temporal treats long-running work as durable workflows with event history, signals, retries, timers, and recovery rather than as background functions that happen to return results.
115
+
116
+ **Steal:** workflow IDs, idempotent activities, durable timers, signals for follow-up prompts, and explicit retry/compensation semantics.
117
+
118
+ **Cost:** deterministic workflow constraints and an additional service can be heavy for a local single-machine system.
119
+
120
+ **How it lands here:** do not adopt Temporal wholesale. Borrow its state-machine vocabulary for the Crow client daemon and Celery bridge: `submitted`, `leased`, `running`, `waiting`, `completed`, `failed`, `cancel_requested`, `recovered`.
121
+
122
+ **Failure condition:** if a SQLite event ledger plus Celery already survives all injected failures at acceptable complexity, Temporal’s machinery is unnecessary.
123
+
124
+ ### 3. Celery events, Beat, and result backends
125
+
126
+ Celery already provides task queues, worker execution, retries, periodic scheduling, task state, and monitoring events.
127
+
128
+ **Steal:** task IDs, event receivers, Beat schedules, retry policies, and worker heartbeats.
129
+
130
+ **Cost:** broker/backend operational complexity, event-vs-result ambiguity, and weak semantics for conversational agents and durable subprocess ownership.
131
+
132
+ **How it lands here:** Celery should be the worker plane, not the session plane. Crow should persist its own semantic event ledger and treat Celery events as inputs. Completion should enqueue a structured review event rather than inject raw task output into the model.
133
+
134
+ **Failure condition:** if Celery cannot reliably run locally with the required broker, persistence, and process supervision, replace it with a smaller local executor before designing around its APIs.
135
+
136
+ ### 4. Prime Agent’s persistent REPL and daemon
137
+
138
+ Prime Agent makes the persistent REPL and child-agent orchestration explicit. Its useful ideas include retained child sessions, direct follow-up, a background daemon, session recovery, and harness state as mutable objects.
139
+
140
+ **Steal:** named child identity, direct follow-up, daemon-owned session lifecycle, and a first-class distinction between initial delegation and later communication.
141
+
142
+ **Cost:** more runtime state, cleanup logic, process recovery, and a larger conceptual surface.
143
+
144
+ **How it lands here:** Crow already has the primitives: `execute`, historical forks, `session/load`, session IDs, memory, and ACP drivers. Add a small follow-up API to RLM, then put richer lifecycle control in the client daemon rather than making RLM carry every orchestration feature.
145
+
146
+ **Failure condition:** if sequential one-shot delegation plus CLI resume handles actual user workflows better than retained children, do not import Prime’s persistent-child abstraction merely for symmetry.
147
+
148
+ ### 5. Pi’s extension and hot-reload model
149
+
150
+ Pi’s appeal is not only its TUI. Its extension ecosystem gives users a clear way to add tools, commands, prompts, and behavior without modifying the core.
151
+
152
+ **Steal:** an explicit extension contract, discoverable package layout, reloadable capability registry, and generated documentation for installed extensions.
153
+
154
+ **Cost:** compatibility burden and a public API that becomes difficult to change.
155
+
156
+ **How it lands here:** Crow’s skills and live module reload are more powerful but less productized. Define a capability manifest for a skill: tools added, files touched, dependencies, restart requirements, and compatibility version. Generated MCP CLIs and `SKILL.md` files are a natural distribution mechanism.
157
+
158
+ **Failure condition:** if users can reliably compose skills from ordinary Python today and no one needs installation/versioning, formal extension packaging may be premature.
159
+
160
+ ### 6. GEPA and MemoHarness
161
+
162
+ The existing `learn` skill is already built around these ideas: reflective trace analysis, six optimization dimensions, Pareto frontiers, minibatches of failures, and evidence-backed mutation.
163
+
164
+ **Steal:** reflection over traces rather than scalar scores; preserve complementary winners; separate context, tools, generation, orchestration, memory, and output dimensions.
165
+
166
+ **Cost:** benchmarks are expensive, judging is noisy, and prompt improvements can overfit the trace distribution.
167
+
168
+ **How it lands here:** the historical fork mechanism is an excellent missing primitive for learning. An optimizer can fork a session at the exact pre-failure offset, ask the historical agent what it believed, test an alternative prompt/tool configuration, and compare the resulting branch without destroying the original.
169
+
170
+ **Failure condition:** if historical interrogation does not produce better mutation proposals than reading transcripts directly, do not make branching central to optimization.
171
+
172
+ ### 7. Git’s branches, reflog, and content-addressed history
173
+
174
+ Crow’s session forks are conceptually closer to Git branches than to disposable subagents. A fork shares history up to an anchor, then diverges.
175
+
176
+ **Steal:** immutable anchors, branch labels, parent pointers, reflog-like recovery, and cheap comparison between branches.
177
+
178
+ **Cost:** users may misunderstand message history as executable state; merge semantics are difficult when branches contain conflicting tool actions.
179
+
180
+ **How it lands here:** expose session ancestry and fork anchors as inspectable metadata. Add “compare branches” as a first-class analysis operation, not a merge operation. Historical forks should be read/interrogate/replay branches by default.
181
+
182
+ **Failure condition:** if users only ever need latest-session resume and never compare alternate trajectories, ancestry tooling becomes decoration.
183
+
184
+ ## Directions nobody has pointed at
185
+
186
+ ### 1. A protocol conformance laboratory for agents
187
+
188
+ Crow could become a test harness for ACP implementations, not merely an ACP agent. Given a persisted transcript and a protocol scenario, it could replay, fork, inject disconnects, inspect notifications, and score another agent’s behavior.
189
+
190
+ This follows directly from the protocol-first architecture and the historical fork machinery.
191
+
192
+ **Prove it wrong:** build three conformance scenarios against Crow, a second ACP agent, and a real client. If the results reveal no actionable interoperability failures, do not make conformance tooling a product.
193
+
194
+ ### 2. A session debugger and “time-travel debugger” for agents
195
+
196
+ The combination of SQLite history, agent indexes, fork offsets, and programmable execution supports a debugger-like product:
197
+
198
+ ```text
199
+ show what the agent knew here
200
+ show tools available here
201
+ fork before this mistake
202
+ ask why it chose that action
203
+ rerun with a changed prompt
204
+ compare branches
205
+ ```
206
+
207
+ This is more valuable than a conventional transcript viewer because it treats agent behavior as a replayable program.
208
+
209
+ **Prove it wrong:** give experienced users three failure traces and measure whether historical interrogation identifies root cause faster than ordinary transcript inspection. If not, keep it as internal tooling.
210
+
211
+ ### 3. A local inference scheduler optimized for prefill
212
+
213
+ The daemon could schedule model turns using estimated prompt-token cost, cached session locality, urgency, and user interaction priority. Completion events would be coalesced into one review prompt.
214
+
215
+ This is specifically suited to the Ryzen/llama.cpp deployment described in this session and would differentiate Crow from cloud-first swarm architectures.
216
+
217
+ **Prove it wrong:** benchmark naive wake-on-event against coalesced, token-budgeted scheduling. If interactive latency and total prefill are not materially better, do not add scheduler complexity.
218
+
219
+ ### 4. An intent compiler for the user’s evolving work
220
+
221
+ The daemon agent could compile user messages into durable hypotheses:
222
+
223
+ - active goals;
224
+ - project candidates;
225
+ - constraints;
226
+ - recurring interests;
227
+ - unresolved questions;
228
+ - explicit decisions;
229
+ - likely next research.
230
+
231
+ The critical feature would be provenance and confidence. It must preserve whether something was explicitly requested, inferred, suggested, or merely observed.
232
+
233
+ **Prove it wrong:** run it over a month of real user messages and inspect whether it produces useful, non-annoying research prompts without turning agent speculation into fake requirements. If most outputs are noise or require manual correction, keep memory retrieval instead.
234
+
235
+ ### 5. MCP as a schema compiler and capability distribution format
236
+
237
+ The Component Service experiment suggests a broader product: one typed MCP domain surface generates an agent interface, a CLI, a Crow skill, test fixtures, and UI render contracts.
238
+
239
+ The generated CLI is not just convenience. It is an executable consumer that exposes whether the MCP schema is understandable and complete.
240
+
241
+ **Prove it wrong:** generate a CLI and skill from the first real Component Service MCP, then have a human use both without reading the server implementation. If the generated artifacts are unusable or lose important domain semantics, the MCP schema is not yet a good canonical contract.
242
+
243
+ ### 6. Human-reviewed definition-of-done production
244
+
245
+ The proposed comprehensive definitions of done could become an agent-maintained evidence system. Agents gather implementation evidence, tests, screenshots, API traces, and historical decisions; humans curate claims and approve the final definition.
246
+
247
+ This is stronger than documentation generation because each requirement could point to evidence and a verification procedure.
248
+
249
+ **Prove it wrong:** select one real workflow and ask agents to draft its definition of done from code, UI, API, and existing artifacts. If human reviewers spend more time correcting hallucinated scope than editing useful evidence, the approach is not ready.
250
+
251
+ ### 7. A capability firewall for compositional agents
252
+
253
+ Because read-only MCP plus `execute` plus browser automation can produce writes, Crow could expose a machine-readable capability graph:
254
+
255
+ ```text
256
+ domain read
257
+ local file write
258
+ network request
259
+ browser mutation
260
+ backend mutation
261
+ publication
262
+ ```
263
+
264
+ Every tool and subtool declares the capabilities it enables. The agent daemon can require approval when a composed path crosses a policy boundary.
265
+
266
+ **Prove it wrong:** model a real LMNext upload workflow and see whether the graph predicts its side effects without either overblocking ordinary work or missing a mutation path.
267
+
268
+ ## What would make this obsolete
269
+
270
+ ### 1. Agent hosts may absorb the entire runtime
271
+
272
+ VS Code, Zed, OpenAI, Anthropic, and model providers are all moving toward persistent agent hosts with session recovery, tools, background work, and cross-client attachment. If those hosts provide a durable protocol, local execution environment, rich extension system, and provider-neutral model routing, Crow’s core value could collapse into “another ACP client.”
273
+
274
+ **The maintainer should worry about:** protocol compatibility alone is not a moat. If the host owns the session daemon and extensions, Crow’s native persistence becomes an implementation detail.
275
+
276
+ **Countermeasure:** own the programmable control plane and historical agent debugger, not just ACP compliance.
277
+
278
+ **Obsolete if:** three mainstream hosts provide equivalent local session orchestration, self-modification, background jobs, and historical branching with open APIs.
279
+
280
+ ### 2. Models may stop drifting enough to need Crow’s persistence story
281
+
282
+ A model with a huge reliable context window, strong compaction, and provider-managed session state could reduce the perceived value of durable local memory.
283
+
284
+ **The maintainer should worry about:** persistence is valuable partly because today’s models are unreliable long-horizon workers. If the model itself becomes much better at maintaining task state, users may accept provider-hosted sessions.
285
+
286
+ **Countermeasure:** emphasize inspectability, portability, local ownership, and orchestration—not merely “we remember.”
287
+
288
+ **Obsolete if:** users prefer opaque provider sessions even when they can no longer audit, fork, export, or locally resume them.
289
+
290
+ ### 3. Local inference may remain technically cheap but operationally unpleasant
291
+
292
+ The project assumes enthusiasts will maintain local models, proxies, quantizations, networking, and browser auth. Most users will not. A hosted plan with a polished agent may win despite higher cost.
293
+
294
+ **The maintainer should worry about:** local-first architecture can become a hobbyist advantage with no broad adoption path.
295
+
296
+ **Countermeasure:** preserve provider neutrality and make the runtime work equally well with local llama.cpp, OpenAI-compatible endpoints, and hosted models. Keep the local path excellent without making it mandatory.
297
+
298
+ **Obsolete if:** the majority of target users report that model setup, latency, and compatibility are more painful than the persistence benefits are worth.
299
+
300
+ ### 4. Self-modifying execution may fail enterprise trust requirements
301
+
302
+ A tool that can edit its own code, install dependencies, control a browser, launch subprocesses, and alter skills is difficult to approve in regulated environments. Capability composition makes “read-only” labels unreliable.
303
+
304
+ **The maintainer should worry about:** the feature that makes Crow ambitious also makes it hard to deploy safely.
305
+
306
+ **Countermeasure:** add capability manifests, approval boundaries, audit logs, signed skill revisions, sandbox profiles, and reproducible execution records.
307
+
308
+ **Obsolete if:** target customers require a fixed, centrally reviewed tool graph that cannot support Crow’s dynamic runtime.
309
+
310
+ ### 5. The ecosystem may punish unknown clients regardless of technical quality
311
+
312
+ Provider User-Agent allowlists, plan-specific agent whitelists, editor integrations, and marketplace distribution create a compatibility moat around established agents. A technically superior local harness can remain invisible if it cannot access the same models and integrations.
313
+
314
+ **The maintainer should worry about:** discovery and access are separate from engineering merit.
315
+
316
+ **Countermeasure:** distribute ACP/MCP adapters, generated CLIs, skills, and provider-compatible integration layers. Make Crow useful even when a provider refuses to recognize its identity.
317
+
318
+ **Obsolete if:** provider policies require a closed agent identity that Crow cannot legally or technically support, and target users will not run compatible local endpoints.
319
+
320
+ ### 6. Complexity can outrun the maintainer
321
+
322
+ The current project already spans ACP, MCP, TUI, SQLite memory, kernels, browser automation, skills, provider routing, and experimental orchestration. A daemon, Celery integration, scheduler, artifact system, and replay protocol can turn a small agent into an unmaintainable distributed system.
323
+
324
+ **The maintainer should worry about:** the project’s extensibility could become an accumulation of half-defined lifecycle models.
325
+
326
+ **Countermeasure:** keep the core small, protocol-driven, and boring. Put daemon/task features behind explicit state machines and integration boundaries. Prefer fewer primitives with strong semantics over many tools.
327
+
328
+ **Obsolete if:** adding each new subsystem creates more cross-layer bugs than user value, or the maintainer can no longer explain ownership and recovery for every persistent object.
329
+
330
+ ## Cheapest decisive experiments
331
+
332
+ ### 1. ACP replay conformance test
333
+
334
+ **Question:** Does Crow’s session loading/replay behavior actually interoperate with a real ACP client?
335
+
336
+ **Experiment:** record a session containing text, tool calls, tool results, cancellation, and a fork. Disconnect. Reconnect through a reference ACP client and verify that the frontend reconstructs the same visible state.
337
+
338
+ **Cost:** one focused test fixture and a small protocol harness.
339
+
340
+ **Success:** identical reconstructed conversation and tool state.
341
+
342
+ **Wrong if:** the client cannot rebuild state without Crow-specific assumptions. Then replay must become a top-priority protocol implementation task.
343
+
344
+ ### 2. Crash matrix for Celery plus Crow sessions
345
+
346
+ **Question:** Can the proposed background-job architecture recover cleanly?
347
+
348
+ **Experiment:** launch a subprocess task, then kill the worker, agent process, kernel, broker, and subprocess at different points. Inspect SQLite and resume from the recorded session/job ID.
349
+
350
+ **Cost:** one afternoon and a local memory broker or Redis instance.
351
+
352
+ **Success:** every interruption lands in a distinguishable state with no silent loss or duplicate semantic completion.
353
+
354
+ **Wrong if:** recovery requires manually inspecting logs or guessing whether work ran. Add a durable job ledger before building the daemon.
355
+
356
+ ### 3. Historical interrogation versus transcript reading
357
+
358
+ **Question:** Does forking at an offset provide real debugging value?
359
+
360
+ **Experiment:** select ten historical mistakes from Crow sessions. For each, compare:
361
+ 1. a human reading the transcript;
362
+ 2. an agent asked from the original offset why it acted as it did;
363
+ 3. an agent given only the final transcript.
364
+
365
+ Measure time to identify cause and propose a correction.
366
+
367
+ **Cost:** ten sessions and a simple rubric.
368
+
369
+ **Success:** offset forks produce materially better causal explanations or fixes.
370
+
371
+ **Wrong if:** they merely repeat the transcript or invent rationalizations. Keep the feature as a convenience, not a core optimization primitive.
372
+
373
+ ### 4. Follow-up API versus direct driver composition
374
+
375
+ **Question:** Is adding follow-up to `rlm()` worth making public?
376
+
377
+ **Experiment:** implement a temporary helper that loads a forked wire ID and sends a second prompt. Use it on real delegated research tasks and compare ergonomics, failure handling, and transcript clarity with direct `SubagentDriver` code.
378
+
379
+ **Cost:** a small temporary wrapper and several real tasks.
380
+
381
+ **Success:** follow-up is common enough that hiding it behind direct driver plumbing is clearly wasteful.
382
+
383
+ **Wrong if:** almost all children are one-shot or follow-up needs daemon ownership, scheduling, and retries. Keep follow-up in the client daemon rather than RLM.
384
+
385
+ ### 5. Prefill-aware wakeup benchmark
386
+
387
+ **Question:** Does event coalescing materially improve local responsiveness?
388
+
389
+ **Experiment:** replay a synthetic burst of 20 completions and periodic reminders against the local model. Compare immediate wakeups, fixed batching, and priority-based batching. Record prefill time, response latency, and user-turn delay.
390
+
391
+ **Cost:** one benchmark script and three scheduler policies.
392
+
393
+ **Success:** batching reduces prefill and preserves interactive latency.
394
+
395
+ **Wrong if:** the endpoint handles naive wakeups acceptably or batching harms review quality. Avoid prematurely building a scheduler.
396
+
397
+ ### 6. Real Component Service MCP generated-artifact test
398
+
399
+ **Question:** Can one MCP schema produce useful agent, CLI, and skill surfaces?
400
+
401
+ **Experiment:** implement only three read tools—entry search, entry detail, and lineage—against the authenticated Component Service. Generate the CLI and `SKILL.md`. Use:
402
+ - the existing LMNext agent backend;
403
+ - the generated CLI;
404
+ - a Crow skill;
405
+ - a human unfamiliar with the adapter.
406
+
407
+ **Cost:** three tools, typed result models, and contract tests.
408
+
409
+ **Success:** all consumers retrieve the same stable IDs, provenance, and pagination without adapter-specific instructions.
410
+
411
+ **Wrong if:** structured results are insufficient for the UI, generated commands are confusing, or authorization cannot be propagated cleanly. Fix the domain contract before adding tool breadth.
412
+
413
+ ### 7. Composite capability boundary test
414
+
415
+ **Question:** Can a “read-only MCP” agent be safely described and governed?
416
+
417
+ **Experiment:** give an agent the read-only Component MCP, `execute`, local file access, and authenticated Playwright. Ask it to generate a GenBank file and stop before upload, then separately ask it to upload only after explicit approval. Record every side effect.
418
+
419
+ **Cost:** one staged environment and a small capability manifest.
420
+
421
+ **Success:** the agent can do useful work while approvals occur exactly at upload/submission boundaries.
422
+
423
+ **Wrong if:** the agent can bypass the approval path or the manifest cannot express the workflow. Then the daemon needs a stronger capability firewall before broader deployment.