brigade-cli 0.10.2__tar.gz → 0.10.3__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 (246) hide show
  1. {brigade_cli-0.10.2/src/brigade_cli.egg-info → brigade_cli-0.10.3}/PKG-INFO +3 -2
  2. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/QUICKSTART.md +16 -4
  3. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/README.md +1 -1
  4. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/pyproject.toml +13 -2
  5. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/__init__.py +1 -1
  6. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/__main__.py +1 -0
  7. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/aboyeur.py +16 -19
  8. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/actionqueue.py +1 -0
  9. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/add.py +1 -0
  10. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/agents.py +1 -0
  11. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/budgets.py +1 -0
  12. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/budgets_cmd.py +2 -4
  13. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/center_cmd.py +920 -131
  14. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/chat_cmd.py +82 -17
  15. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/cli.py +2908 -908
  16. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/config.py +2 -3
  17. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/context_cmd.py +78 -13
  18. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/daily_cmd.py +860 -171
  19. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/doctor.py +44 -45
  20. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/dogfood_cmd.py +10 -3
  21. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/fragments.py +4 -10
  22. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/handoff.py +1 -0
  23. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/handoff_cmd.py +145 -78
  24. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/hermes_adapter.py +1 -0
  25. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/ingest.py +2 -3
  26. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/install.py +87 -80
  27. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/learn_cmd.py +99 -22
  28. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/localio.py +1 -0
  29. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/managed.py +71 -31
  30. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/memory_cmd.py +104 -30
  31. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/notifications_cmd.py +18 -6
  32. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/operator_cmd.py +376 -99
  33. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/pantry_cmd.py +4 -6
  34. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/phases_cmd.py +1220 -205
  35. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/proc.py +1 -0
  36. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/projects_cmd.py +49 -9
  37. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/prompt.py +2 -6
  38. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/reconfigure.py +3 -3
  39. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/registry.py +1 -0
  40. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/release_cmd.py +669 -158
  41. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/reportstore.py +1 -0
  42. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/repos_cmd.py +1439 -280
  43. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/config.py +10 -3
  44. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/engine.py +64 -32
  45. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/extract.py +26 -12
  46. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/handoff.py +3 -2
  47. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/llm.py +13 -5
  48. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/registry.py +50 -12
  49. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/report.py +26 -8
  50. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/sources/cli.py +13 -2
  51. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/sources/local.py +23 -7
  52. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/sources/web.py +18 -5
  53. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/types.py +13 -5
  54. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research_cmd.py +137 -58
  55. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/roadmap_cmd.py +22 -26
  56. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/roster.py +1 -0
  57. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/roster_cmd.py +1 -0
  58. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/runbook_cmd.py +48 -11
  59. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/runs_cmd.py +1 -0
  60. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/scrub.py +22 -6
  61. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/security_cmd.py +217 -50
  62. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/selection.py +6 -15
  63. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/skills_cmd.py +168 -44
  64. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/station.py +3 -0
  65. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/status.py +2 -4
  66. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/hermes/memory-handoff.harness.json +1 -1
  67. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/hermes/model-lanes.harness.json +1 -1
  68. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/hermes/workspace.harness.json +1 -1
  69. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/chat-memory-sweep.example.json +1 -1
  70. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/memory-care.example.json +1 -1
  71. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/policies/personal.json +1 -1
  72. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/policies/public-content.json +1 -1
  73. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/policies/public-repo.json +1 -1
  74. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates.py +1 -0
  75. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/toml_compat.py +1 -0
  76. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/tools_cmd.py +485 -128
  77. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/untrusted.py +3 -4
  78. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/untrusted_cmd.py +2 -1
  79. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/work_cmd/config.py +117 -27
  80. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/work_cmd/helpers.py +9 -1
  81. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/work_cmd/ledger.py +28 -20
  82. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/work_cmd/services.py +308 -164
  83. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/work_cmd/session.py +256 -88
  84. {brigade_cli-0.10.2 → brigade_cli-0.10.3/src/brigade_cli.egg-info}/PKG-INFO +3 -2
  85. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade_cli.egg-info/requires.txt +1 -0
  86. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_add.py +0 -1
  87. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_agents.py +24 -3
  88. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_budgets.py +3 -0
  89. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_config.py +1 -1
  90. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_doctor.py +10 -9
  91. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_dogfood_cmd.py +1 -3
  92. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_fragments.py +3 -0
  93. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_gitignore.py +7 -0
  94. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_handoff.py +1 -0
  95. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_handoff_cmd.py +197 -144
  96. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_ingest.py +16 -10
  97. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_init.py +29 -13
  98. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_install.py +5 -1
  99. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_managed.py +14 -13
  100. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_memory_cmd.py +92 -17
  101. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_notifications_cmd.py +27 -27
  102. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_operator_cmd.py +283 -113
  103. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_pantry_cmd.py +9 -3
  104. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase100_cmd.py +6 -2
  105. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase101_cmd.py +183 -33
  106. brigade_cli-0.10.3/tests/test_phase165_cmd.py +3030 -0
  107. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase36_cmd.py +88 -28
  108. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase37_cmd.py +54 -8
  109. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase38_cmd.py +105 -20
  110. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase39_cmd.py +60 -9
  111. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase40_cmd.py +53 -10
  112. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase41_cmd.py +30 -5
  113. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase42_cmd.py +70 -13
  114. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase43_cmd.py +92 -15
  115. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase44_cmd.py +148 -37
  116. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase45_cmd.py +49 -6
  117. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase46_50_cmd.py +26 -5
  118. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase51_55_cmd.py +82 -10
  119. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase56_60_cmd.py +146 -50
  120. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase97_cmd.py +44 -30
  121. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_registry.py +1 -0
  122. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_release_cmd.py +92 -25
  123. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_repos_cmd.py +4 -6
  124. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_cmd.py +18 -12
  125. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_config.py +5 -2
  126. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_engine.py +29 -12
  127. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_extract.py +21 -7
  128. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_handoff.py +12 -6
  129. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_llm.py +21 -5
  130. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_local_sources.py +3 -0
  131. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_registry.py +3 -0
  132. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_report.py +11 -7
  133. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_types.py +3 -1
  134. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_web.py +19 -5
  135. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_roadmap_cmd.py +1 -3
  136. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_roster.py +1 -4
  137. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_run_cli.py +3 -1
  138. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_scrub.py +9 -0
  139. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_security_cmd.py +62 -17
  140. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_selection.py +9 -6
  141. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_skills_cmd.py +90 -18
  142. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_untrusted.py +3 -0
  143. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_work_cmd.py +323 -88
  144. brigade_cli-0.10.2/tests/test_phase165_cmd.py +0 -1294
  145. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/LICENSE +0 -0
  146. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/MANIFEST.in +0 -0
  147. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/setup.cfg +0 -0
  148. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/py.typed +0 -0
  149. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/__init__.py +0 -0
  150. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/research/sources/__init__.py +0 -0
  151. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/adal/memory-handoffs/TEMPLATE.md +0 -0
  152. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/aider/memory-handoffs/TEMPLATE.md +0 -0
  153. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/antigravity/memory-handoffs/TEMPLATE.md +0 -0
  154. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/claude/memory-handoffs/TEMPLATE.md +0 -0
  155. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/codex/memory-handoffs/TEMPLATE.md +0 -0
  156. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/continue/memory-handoffs/TEMPLATE.md +0 -0
  157. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/copilot/memory-handoffs/TEMPLATE.md +0 -0
  158. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/cursor/memory-handoffs/TEMPLATE.md +0 -0
  159. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/depth/repo.json +0 -0
  160. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/depth/workspace.json +0 -0
  161. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/generic/harness-adapter-checklist.md +0 -0
  162. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/generic/memory-contract.md +0 -0
  163. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/goose/memory-handoffs/TEMPLATE.md +0 -0
  164. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/handoff/handoff-sources.example.json +0 -0
  165. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/handoff/openclaw-ingest-receipt.example.json +0 -0
  166. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/adal.json +0 -0
  167. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/aider.json +0 -0
  168. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/antigravity.json +0 -0
  169. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/claude.json +0 -0
  170. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/codex.json +0 -0
  171. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/continue.json +0 -0
  172. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/copilot.json +0 -0
  173. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/cursor.json +0 -0
  174. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/goose.json +0 -0
  175. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/hermes.json +0 -0
  176. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/kimi.json +0 -0
  177. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/openclaw.json +0 -0
  178. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/opencode.json +0 -0
  179. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/openhands.json +0 -0
  180. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/pi.json +0 -0
  181. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/harnesses/qwen.json +0 -0
  182. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/hermes/README.md +0 -0
  183. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/hermes/memory-handoffs/TEMPLATE.md +0 -0
  184. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/hooks/pre-push +0 -0
  185. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/includes/publisher.json +0 -0
  186. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/kimi/memory-handoffs/TEMPLATE.md +0 -0
  187. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/backup-restic.md +0 -0
  188. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/chat-surface-crawlers.md +0 -0
  189. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/content-safety.md +0 -0
  190. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/handoff-flow.md +0 -0
  191. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/memory-architecture.md +0 -0
  192. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/memory-care-staleness.md +0 -0
  193. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/memory-scanner.md +0 -0
  194. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/multi-workspace-handoff-admin.md +0 -0
  195. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/obsidian-notes.md +0 -0
  196. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/pipeline-standups.md +0 -0
  197. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/memory/cards/tokenjuice-output-compaction.md +0 -0
  198. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/openclaw/README.md +0 -0
  199. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/openclaw/acp-escalation.openclaw.json +0 -0
  200. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/openclaw/memory-sweep-cron.openclaw.json +0 -0
  201. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/openclaw/model-aliases.openclaw.json +0 -0
  202. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/openclaw/ollama-memory-search.openclaw.json +0 -0
  203. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/opencode/memory-handoffs/TEMPLATE.md +0 -0
  204. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/openhands/memory-handoffs/TEMPLATE.md +0 -0
  205. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/pi/memory-handoffs/TEMPLATE.md +0 -0
  206. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/qwen/memory-handoffs/TEMPLATE.md +0 -0
  207. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/scripts/backup-restic.sh +0 -0
  208. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/skills/note/SKILL.md +0 -0
  209. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/AGENTS.md +0 -0
  210. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/CLAUDE.md +0 -0
  211. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/HEARTBEAT.md +0 -0
  212. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/IDENTITY.md +0 -0
  213. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/INSTALL_FOR_AGENTS.md +0 -0
  214. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/MEMORY.md +0 -0
  215. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/SAFETY_RULES.md +0 -0
  216. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/SOUL.md +0 -0
  217. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/TOOLS.md +0 -0
  218. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/USER.md +0 -0
  219. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/rules/acceptance-driven-work.md +0 -0
  220. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/templates/workspace/rules/issue-tdd-loop.md +0 -0
  221. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/work_cmd/__init__.py +0 -0
  222. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade/work_cmd/constants.py +0 -0
  223. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade_cli.egg-info/SOURCES.txt +0 -0
  224. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade_cli.egg-info/dependency_links.txt +0 -0
  225. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade_cli.egg-info/entry_points.txt +0 -0
  226. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/src/brigade_cli.egg-info/top_level.txt +0 -0
  227. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_aboyeur.py +0 -0
  228. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_cli_alias.py +0 -0
  229. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_cli_help.py +0 -0
  230. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_neutrality.py +0 -0
  231. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase96_cmd.py +0 -0
  232. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase98_cmd.py +0 -0
  233. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_phase99_cmd.py +0 -0
  234. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_privacy_regression.py +0 -0
  235. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_proc.py +0 -0
  236. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_prompt.py +0 -0
  237. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_reconfigure.py +0 -0
  238. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_research_cli_sources.py +0 -0
  239. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_roster_cmd.py +0 -0
  240. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_runbook_cmd.py +0 -0
  241. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_runs_cmd.py +0 -0
  242. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_station.py +0 -0
  243. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_status.py +0 -0
  244. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_toml_compat.py +0 -0
  245. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_untrusted_cmd.py +0 -0
  246. {brigade_cli-0.10.2 → brigade_cli-0.10.3}/tests/test_work_cmd_facade.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: brigade-cli
3
- Version: 0.10.2
3
+ Version: 0.10.3
4
4
  Summary: AI agent memory, handoffs, and local guardrails for Codex, Claude Code, OpenCode, Hermes, and OpenClaw.
5
5
  Author-email: Solomon Neas <srneas@gmail.com>
6
6
  License: MIT
@@ -23,6 +23,7 @@ Description-Content-Type: text/markdown
23
23
  License-File: LICENSE
24
24
  Provides-Extra: dev
25
25
  Requires-Dist: pytest>=7; extra == "dev"
26
+ Requires-Dist: ruff>=0.15; extra == "dev"
26
27
  Provides-Extra: research
27
28
  Requires-Dist: playwright>=1.40; extra == "research"
28
29
  Dynamic: license-file
@@ -117,7 +118,7 @@ brigade handoff lint --target ./my-repo
117
118
  brigade handoff doctor --target ./my-repo
118
119
  ```
119
120
 
120
- New here? Start with [docs/first-10-minutes.md](docs/first-10-minutes.md). Already have a homegrown setup with scripts, crons, and handoff folders? Brigade has an adoption path that inventories what you have before changing anything: start with `brigade operator adopt plan` and see the [technical guide](docs/technical-guide.md). Want an agent to set this up for you? Point it at this repo; [AGENTS.md](AGENTS.md) tells it exactly what to do and where to stop.
121
+ New here? Start with [QUICKSTART.md](QUICKSTART.md) for the five-minute install, then [docs/first-10-minutes.md](docs/first-10-minutes.md) for the guided first session. Already have a homegrown setup with scripts, crons, and handoff folders? Brigade has an adoption path that inventories what you have before changing anything: start with `brigade operator adopt plan` and see the [technical guide](docs/technical-guide.md). Want an agent to set this up for you? Point it at this repo; [AGENTS.md](AGENTS.md) tells it exactly what to do and where to stop.
121
122
 
122
123
  ## Harness support
123
124
 
@@ -31,8 +31,20 @@ $ brigade init --target ~/agent-kitchen
31
31
  Which harnesses do you use? (type numbers separated by space/comma to toggle, enter to confirm)
32
32
  [x] 1. Claude Code
33
33
  [ ] 2. Codex
34
- [ ] 3. OpenClaw
35
- [ ] 4. Hermes (experimental)
34
+ [ ] 3. OpenCode
35
+ [ ] 4. Antigravity
36
+ [ ] 5. Pi
37
+ [ ] 6. Cursor
38
+ [ ] 7. Aider
39
+ [ ] 8. Goose
40
+ [ ] 9. Continue
41
+ [ ] 10. GitHub Copilot CLI
42
+ [ ] 11. Qwen Code
43
+ [ ] 12. Kimi Code
44
+ [ ] 13. AdaL
45
+ [ ] 14. OpenHands
46
+ [ ] 15. OpenClaw
47
+ [ ] 16. Hermes (experimental)
36
48
 
37
49
  Depth? (type a number, enter for default)
38
50
  * 1. repo (handoff flow + publish guard)
@@ -103,6 +115,6 @@ See the [Solo Cookbook](https://github.com/escoffier-labs/solos-cookbook) for th
103
115
  - Read [the cookbook](https://github.com/escoffier-labs/solos-cookbook) for the deep version of every concept here.
104
116
  - Customize `USER.md` and `TOOLS.md` with your real preferences and runbooks (kept private; do not commit personal details).
105
117
  - Wire the ingester on a cron or a manual end-of-day workflow.
106
- - Add a memory-care staleness scan when your card set starts to matter. See `memory/cards/memory-care-staleness.md`.
107
- - If you use TokenJuice, wire Claude Code and Codex hooks deliberately and tell agents what the wrapper means. See `memory/cards/tokenjuice-output-compaction.md`.
118
+ - Add a memory-care staleness scan when your card set starts to matter. See [docs/memory-care.md](docs/memory-care.md).
119
+ - If you use TokenJuice, wire Claude Code and Codex hooks deliberately and tell agents what the wrapper means. See the tokens station in [docs/technical-guide.md](docs/technical-guide.md#managed-stations).
108
120
  - Run `brigade work bootstrap` inside active repos when you want the dogfood-backed daily work loop, scanner inbox, and local evidence receipts.
@@ -88,7 +88,7 @@ brigade handoff lint --target ./my-repo
88
88
  brigade handoff doctor --target ./my-repo
89
89
  ```
90
90
 
91
- New here? Start with [docs/first-10-minutes.md](docs/first-10-minutes.md). Already have a homegrown setup with scripts, crons, and handoff folders? Brigade has an adoption path that inventories what you have before changing anything: start with `brigade operator adopt plan` and see the [technical guide](docs/technical-guide.md). Want an agent to set this up for you? Point it at this repo; [AGENTS.md](AGENTS.md) tells it exactly what to do and where to stop.
91
+ New here? Start with [QUICKSTART.md](QUICKSTART.md) for the five-minute install, then [docs/first-10-minutes.md](docs/first-10-minutes.md) for the guided first session. Already have a homegrown setup with scripts, crons, and handoff folders? Brigade has an adoption path that inventories what you have before changing anything: start with `brigade operator adopt plan` and see the [technical guide](docs/technical-guide.md). Want an agent to set this up for you? Point it at this repo; [AGENTS.md](AGENTS.md) tells it exactly what to do and where to stop.
92
92
 
93
93
  ## Harness support
94
94
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "brigade-cli"
7
- version = "0.10.2"
7
+ version = "0.10.3"
8
8
  description = "AI agent memory, handoffs, and local guardrails for Codex, Claude Code, OpenCode, Hermes, and OpenClaw."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -22,7 +22,7 @@ classifiers = [
22
22
  dependencies = []
23
23
 
24
24
  [project.optional-dependencies]
25
- dev = ["pytest>=7"]
25
+ dev = ["pytest>=7", "ruff>=0.15"]
26
26
  research = ["playwright>=1.40"]
27
27
 
28
28
  [project.urls]
@@ -47,3 +47,14 @@ brigade = ["py.typed", "templates/**/*"]
47
47
  [tool.pytest.ini_options]
48
48
  testpaths = ["tests"]
49
49
  addopts = "-ra"
50
+
51
+ [tool.ruff]
52
+ line-length = 120
53
+ src = ["src", "tests"]
54
+
55
+ [tool.ruff.lint]
56
+ # Pragmatic initial gate: ruff's default rule set (pyflakes plus the
57
+ # E4/E7/E9 pycodestyle errors). Deferred for later, separate passes:
58
+ # import sorting (I), pyupgrade (UP), bugbear (B), the full pycodestyle
59
+ # E/W set, and any type checking (mypy/pyright).
60
+ select = ["E4", "E7", "E9", "F"]
@@ -1,3 +1,3 @@
1
1
  """Brigade: local operator-system CLI for agent workspaces."""
2
2
 
3
- __version__ = "0.10.2"
3
+ __version__ = "0.10.3"
@@ -1,4 +1,5 @@
1
1
  """Enable `python -m brigade`."""
2
+
2
3
  from .cli import main
3
4
 
4
5
  if __name__ == "__main__":
@@ -1,4 +1,5 @@
1
1
  """Bounded cross-model orchestration for `brigade run`."""
2
+
2
3
  from __future__ import annotations
3
4
 
4
5
  import json
@@ -36,9 +37,7 @@ def build_plan_prompt(
36
37
  corrective_note: str | None = None,
37
38
  read_only: bool = False,
38
39
  ) -> str:
39
- worker_lines = "\n".join(
40
- f"- {agent.name}: cli={agent.cli}; role={agent.role}" for agent in workers(roster)
41
- )
40
+ worker_lines = "\n".join(f"- {agent.name}: cli={agent.cli}; role={agent.role}" for agent in workers(roster))
42
41
  if not worker_lines:
43
42
  worker_lines = "- no workers configured"
44
43
 
@@ -139,14 +138,18 @@ def write_run_handoff(
139
138
  timestamp = (now or datetime.now(timezone.utc)).strftime("%Y-%m-%d-%H%M")
140
139
  safe_task = _one_line(task)
141
140
  path = inbox / f"{timestamp}-brigade-run-{_slug(safe_task)}.md"
142
- worker_summary = "\n".join(
143
- f"- {result.worker}: {'ok' if result.ok else 'failed'}"
144
- + (f" ({_one_line(result.detail)})" if result.detail else "")
145
- for result in worker_results
146
- ) or "- no workers dispatched"
147
- assignment_summary = "\n".join(
148
- f"- {assignment.worker}: {_one_line(assignment.task)}" for assignment in assignments
149
- ) or "- no worker assignments"
141
+ worker_summary = (
142
+ "\n".join(
143
+ f"- {result.worker}: {'ok' if result.ok else 'failed'}"
144
+ + (f" ({_one_line(result.detail)})" if result.detail else "")
145
+ for result in worker_results
146
+ )
147
+ or "- no workers dispatched"
148
+ )
149
+ assignment_summary = (
150
+ "\n".join(f"- {assignment.worker}: {_one_line(assignment.task)}" for assignment in assignments)
151
+ or "- no worker assignments"
152
+ )
150
153
  artifact_line = f"- artifacts: `{output_dir}`" if output_dir is not None else "- artifacts: none"
151
154
  cwd_line = f"- cwd: `{cwd}`" if cwd is not None else "- cwd: not set"
152
155
  mode_line = "- mode: read-only" if read_only else "- mode: normal"
@@ -404,10 +407,7 @@ def dispatch(
404
407
  results_by_index: dict[int, WorkerResult] = {}
405
408
  max_workers = min(roster.max_workers, len(assignments))
406
409
  with ThreadPoolExecutor(max_workers=max_workers) as executor:
407
- future_to_index = {
408
- executor.submit(run_one, assignment): index
409
- for index, assignment in enumerate(assignments)
410
- }
410
+ future_to_index = {executor.submit(run_one, assignment): index for index, assignment in enumerate(assignments)}
411
411
  for future in as_completed(future_to_index):
412
412
  index = future_to_index[future]
413
413
  try:
@@ -474,10 +474,7 @@ def _print_worker_status(results: list[WorkerResult]) -> None:
474
474
 
475
475
 
476
476
  def _assignment_payload(assignments: list[Assignment]) -> list[dict[str, str]]:
477
- return [
478
- {"worker": assignment.worker, "task": assignment.task}
479
- for assignment in assignments
480
- ]
477
+ return [{"worker": assignment.worker, "task": assignment.task} for assignment in assignments]
481
478
 
482
479
 
483
480
  def _worker_payload(results: list[WorkerResult]) -> list[dict[str, object]]:
@@ -11,6 +11,7 @@ The phase-ledger queue in phases_cmd stays local: it stores one JSON file
11
11
  per action and stamps `reviewed_at`/`review_reason` instead of the
12
12
  `started_at`/`completed_at`/`deferred_at` lifecycle fields below.
13
13
  """
14
+
14
15
  from __future__ import annotations
15
16
 
16
17
  import json
@@ -1,4 +1,5 @@
1
1
  """`brigade add <station>` - install and wire a station's managed tools."""
2
+
2
3
  from __future__ import annotations
3
4
 
4
5
  import sys
@@ -3,6 +3,7 @@
3
3
  Each adapter reaches a model through the user's own authenticated CLI. Brigade
4
4
  does not store provider keys or import provider SDKs.
5
5
  """
6
+
6
7
  from __future__ import annotations
7
8
 
8
9
  from dataclasses import dataclass
@@ -10,6 +10,7 @@ Satellite tools (bootstrap-doctor, memory-doctor) are intended to depend on
10
10
  brigade and consume these definitions rather than redeclaring them, so updating
11
11
  a budget here updates every downstream consumer.
12
12
  """
13
+
13
14
  from __future__ import annotations
14
15
 
15
16
  from pathlib import Path
@@ -1,4 +1,5 @@
1
1
  """CLI helpers for Brigade's canonical operator budgets."""
2
+
2
3
  from __future__ import annotations
3
4
 
4
5
  import json
@@ -77,8 +78,5 @@ def check(*, target: Path, json_output: bool = False) -> int:
77
78
 
78
79
  print(f"budget check: {target}")
79
80
  for row in checks:
80
- print(
81
- f"[{row['status']}] {row['name']}: "
82
- f"{row['size_bytes']}/{row['budget_bytes']} bytes"
83
- )
81
+ print(f"[{row['status']}] {row['name']}: {row['size_bytes']}/{row['budget_bytes']} bytes")
84
82
  return 0 if payload["valid"] else 1