brigade-cli 0.29.0__tar.gz → 0.30.0__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 (1458) hide show
  1. brigade_cli-0.30.0/PKG-INFO +214 -0
  2. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/QUICKSTART.md +31 -6
  3. brigade_cli-0.30.0/README.md +165 -0
  4. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/pyproject.toml +2 -2
  5. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/__init__.py +1 -1
  6. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/__main__.py +2 -2
  7. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/__init__.py +15 -1
  8. brigade_cli-0.30.0/src/brigade/cli/fleet_owners.py +25 -0
  9. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/fleet_policy.py +6 -0
  10. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/run_cloud.py +3 -0
  11. brigade_cli-0.30.0/src/brigade/cloud_provider_pr.py +98 -0
  12. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cloud_tracker.py +21 -3
  13. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cursor_cloud.py +7 -1
  14. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/__main__.py +3 -1
  15. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/lifecycle.py +11 -1
  16. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/process.py +128 -2
  17. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/runtime_config.py +2 -1
  18. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/safe_state.py +9 -0
  19. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/watch.py +6 -0
  20. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_client.py +6 -0
  21. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_client_cloud.py +14 -1
  22. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_client_policy.py +6 -0
  23. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_client_spool.py +6 -1
  24. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_command_deck.py +3 -2
  25. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_dashboard.py +1 -0
  26. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_deck_overview.py +1 -0
  27. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub.py +14 -2
  28. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_http.py +36 -0
  29. brigade_cli-0.30.0/src/brigade/fleet_owners.py +353 -0
  30. brigade_cli-0.30.0/src/brigade/fleet_owners_page.py +147 -0
  31. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_policy.py +8 -1
  32. brigade_cli-0.30.0/src/brigade/fleet_policy_owners.py +80 -0
  33. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_t3_transport.py +4 -1
  34. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_packs.py +13 -0
  35. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_t3/__main__.py +7 -2
  36. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_t3/contracts.py +1 -0
  37. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_t3/ledger.py +17 -11
  38. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_t3/lifecycle.py +10 -0
  39. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_t3/runtime_config.py +9 -2
  40. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_t3/watch.py +2 -0
  41. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/jules_cloud.py +6 -1
  42. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/components/manifest-v1.json +54 -54
  43. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/hermes/memory-handoff.harness.json +1 -1
  44. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/hermes/model-lanes.harness.json +1 -1
  45. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/hermes/workspace.harness.json +1 -1
  46. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/memory/chat-memory-sweep.example.json +1 -1
  47. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/memory/memory-care.example.json +1 -1
  48. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/policies/personal.json +1 -1
  49. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/policies/public-content.json +1 -1
  50. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/policies/public-repo.json +1 -1
  51. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/template-profile-snapshot.json +9 -9
  52. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/session/briefing.py +1 -1
  53. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/verification.py +4 -0
  54. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/verify_runtime.py +59 -1
  55. brigade_cli-0.30.0/src/brigade_cli.egg-info/PKG-INFO +214 -0
  56. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade_cli.egg-info/SOURCES.txt +16 -0
  57. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade_cli.egg-info/entry_points.txt +1 -1
  58. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_ci_workflow.py +194 -8
  59. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_hooks_latch_race.py +14 -5
  60. brigade_cli-0.30.0/tests/test_cloud_bound_ttl.py +184 -0
  61. brigade_cli-0.30.0/tests/test_cloud_jules_pr.py +202 -0
  62. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_control_crosswalk.py +41 -4
  63. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_cursor_cloud.py +26 -0
  64. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dot_access_auth.py +26 -9
  65. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dot_adapter.py +18 -1
  66. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dot_compat.py +34 -1
  67. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dot_events.py +14 -0
  68. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dot_fleet_tools.py +21 -0
  69. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dot_hub_tools.py +30 -0
  70. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dot_inbox_tools.py +38 -0
  71. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dot_lifecycle.py +21 -0
  72. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dot_memory_tools.py +11 -0
  73. brigade_cli-0.30.0/tests/test_dot_process.py +199 -0
  74. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dot_runtime.py +24 -19
  75. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dot_state.py +8 -0
  76. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dot_watch.py +14 -0
  77. brigade_cli-0.30.0/tests/test_download_metrics.py +322 -0
  78. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_error_refusal_copy.py +28 -1
  79. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_claim_loss_cancellation.py +2 -0
  80. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_claims.py +0 -2
  81. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_client_hardening.py +28 -0
  82. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_client_message_credentials.py +20 -4
  83. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_events_cli.py +5 -2
  84. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_hub_container_recipes.py +3 -0
  85. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_messages.py +22 -7
  86. brigade_cli-0.30.0/tests/test_fleet_owners.py +124 -0
  87. brigade_cli-0.30.0/tests/test_fleet_owners_cli.py +71 -0
  88. brigade_cli-0.30.0/tests/test_fleet_owners_page.py +416 -0
  89. brigade_cli-0.30.0/tests/test_fleet_owners_view.py +398 -0
  90. brigade_cli-0.30.0/tests/test_fleet_policy_owners.py +138 -0
  91. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_t3_transport.py +8 -0
  92. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_t3_intake.py +1 -1
  93. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_t3_ledger.py +32 -0
  94. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_t3_lifecycle.py +12 -2
  95. brigade_cli-0.30.0/tests/test_grokbot_t3_platform.py +94 -0
  96. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_t3_runtime.py +31 -6
  97. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_t3_tools.py +1 -1
  98. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_t3_watch.py +5 -5
  99. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_jules_cloud.py +7 -0
  100. brigade_cli-0.30.0/tests/test_npm_feasibility_prepare.py +824 -0
  101. brigade_cli-0.30.0/tests/test_publish_workflow.py +907 -0
  102. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_readme_brand_header.py +1 -1
  103. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_cli.py +19 -5
  104. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_journal_qualification.py +9 -1
  105. brigade_cli-0.30.0/tests/test_windows_affected_tests.py +96 -0
  106. brigade_cli-0.30.0/tests/test_windows_pytest_selection.py +66 -0
  107. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_verification.py +290 -4
  108. brigade_cli-0.29.0/PKG-INFO +0 -164
  109. brigade_cli-0.29.0/README.md +0 -115
  110. brigade_cli-0.29.0/src/brigade_cli.egg-info/PKG-INFO +0 -164
  111. brigade_cli-0.29.0/tests/test_dot_process.py +0 -106
  112. brigade_cli-0.29.0/tests/test_npm_feasibility_prepare.py +0 -115
  113. brigade_cli-0.29.0/tests/test_publish_workflow.py +0 -431
  114. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/LICENSE +0 -0
  115. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/MANIFEST.in +0 -0
  116. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/THIRD_PARTY_NOTICES.md +0 -0
  117. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/setup.cfg +0 -0
  118. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/_control_crosswalk_io.py +0 -0
  119. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/aboyeur/__init__.py +0 -0
  120. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/aboyeur/artifacts.py +0 -0
  121. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/aboyeur/briefs.py +0 -0
  122. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/aboyeur/direct_worker_finish.py +0 -0
  123. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/aboyeur/model_admission.py +0 -0
  124. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/aboyeur/orchestrator.py +0 -0
  125. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/aboyeur/planning.py +0 -0
  126. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/aboyeur/prompts.py +0 -0
  127. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/aboyeur/run_io.py +0 -0
  128. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/aboyeur_artifacts.py +0 -0
  129. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/aboyeur_model_policy.py +0 -0
  130. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/acpx_adapter.py +0 -0
  131. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/actionqueue.py +0 -0
  132. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/add.py +0 -0
  133. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/agent_change.py +0 -0
  134. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/agent_change_approval_verify.py +0 -0
  135. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/agent_change_refs.py +0 -0
  136. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/agent_change_verify.py +0 -0
  137. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/agent_request.py +0 -0
  138. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/agent_skill_format.py +0 -0
  139. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/agents.py +0 -0
  140. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/approval.py +0 -0
  141. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/approval_v2.py +0 -0
  142. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/approval_verification.py +0 -0
  143. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/assets/fleet_hub/apple-touch-icon.png +0 -0
  144. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/assets/fleet_hub/favicon-32x32.png +0 -0
  145. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/assets/fleet_hub/favicon.ico +0 -0
  146. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/assets/fleet_hub/icon-192.png +0 -0
  147. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/assets/fleet_hub/icon-512.png +0 -0
  148. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/assets/fleet_hub/site.webmanifest +0 -0
  149. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/attestation.py +0 -0
  150. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/attestation_cmd.py +0 -0
  151. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/attestation_input.py +0 -0
  152. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/attestation_receipt.py +0 -0
  153. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/authority_broker.py +0 -0
  154. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/authority_key.py +0 -0
  155. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/authority_marker.py +0 -0
  156. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/brief_sections.py +0 -0
  157. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/budgets.py +0 -0
  158. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/budgets_cmd.py +0 -0
  159. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/candidate_set.py +0 -0
  160. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/card_fingerprint.py +0 -0
  161. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/card_identity.py +0 -0
  162. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/care_cmd.py +0 -0
  163. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/care_schedules.py +0 -0
  164. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/causal_receipt.py +0 -0
  165. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/__init__.py +0 -0
  166. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/actions.py +0 -0
  167. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/agent_activity.py +0 -0
  168. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/core.py +0 -0
  169. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/dashboard/__init__.py +0 -0
  170. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/dashboard/data.py +0 -0
  171. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/dashboard/render.py +0 -0
  172. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/dashboard/snapshot.py +0 -0
  173. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/dashboard/timing.py +0 -0
  174. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/dashboard/views/__init__.py +0 -0
  175. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/dashboard/views/agent_activity.py +0 -0
  176. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/dashboard/views/code_graph.py +0 -0
  177. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/dashboard/views/handoff_inbox.py +0 -0
  178. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/dashboard/views/memory_operations.py +0 -0
  179. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/dashboard/views/outcome_rank.py +0 -0
  180. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/dashboard/views/research.py +0 -0
  181. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/dashboard/views/run_timeline.py +0 -0
  182. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/dashboard/views/status_grid.py +0 -0
  183. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/dashboard/views/work.py +0 -0
  184. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/dashboard/work_graph.py +0 -0
  185. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/readiness.py +0 -0
  186. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/report_review_ops.py +0 -0
  187. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/reports.py +0 -0
  188. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/schema_ops.py +0 -0
  189. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/center_cmd/serve.py +0 -0
  190. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/chat_cmd.py +0 -0
  191. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claim_loss_cancellation.py +0 -0
  192. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_actions_diagnostics.py +0 -0
  193. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_actions_evidence.py +0 -0
  194. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_actions_http.py +0 -0
  195. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_actions_import.py +0 -0
  196. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_actions_metadata.py +0 -0
  197. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_cloud.py +0 -0
  198. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_cloud_identity.py +0 -0
  199. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_hooks/__init__.py +0 -0
  200. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_hooks/anchored_io.py +0 -0
  201. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_hooks/classify.py +0 -0
  202. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_hooks/compaction_marker.py +0 -0
  203. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_hooks/entry.py +0 -0
  204. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_hooks/envelope.py +0 -0
  205. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_hooks/fingerprint.py +0 -0
  206. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_hooks/heartbeat.py +0 -0
  207. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_hooks/install_cmd.py +0 -0
  208. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_hooks/package.py +0 -0
  209. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_hooks/paths.py +0 -0
  210. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_hooks/presence.py +0 -0
  211. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_hooks/runtime.py +0 -0
  212. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_hooks/session_state.py +0 -0
  213. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_review_evidence.py +0 -0
  214. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_review_history.py +0 -0
  215. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/claude_review_import.py +0 -0
  216. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/_common.py +0 -0
  217. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/add.py +0 -0
  218. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/budgets.py +0 -0
  219. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/care.py +0 -0
  220. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/center.py +0 -0
  221. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/chat.py +0 -0
  222. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/code.py +0 -0
  223. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/completions.py +0 -0
  224. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/context.py +0 -0
  225. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/daily.py +0 -0
  226. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/doctor.py +0 -0
  227. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/dogfood.py +0 -0
  228. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/evidence.py +0 -0
  229. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/extras.py +0 -0
  230. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/fleet.py +0 -0
  231. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/fleet_campaign.py +0 -0
  232. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/fleet_dot.py +0 -0
  233. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/fleet_enroll.py +0 -0
  234. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/fleet_events.py +0 -0
  235. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/fleet_messages.py +0 -0
  236. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/fleet_roster.py +0 -0
  237. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/fleet_work.py +0 -0
  238. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/fleet_work_ownership.py +0 -0
  239. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/friction.py +0 -0
  240. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/governance.py +0 -0
  241. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/guard.py +0 -0
  242. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/handoff.py +0 -0
  243. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/handoff_template.py +0 -0
  244. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/harness.py +0 -0
  245. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/hermes_fragments.py +0 -0
  246. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/ingest.py +0 -0
  247. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/init.py +0 -0
  248. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/learn.py +0 -0
  249. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/mcp.py +0 -0
  250. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/memory.py +0 -0
  251. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/model.py +0 -0
  252. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/node.py +0 -0
  253. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/notifications.py +0 -0
  254. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/openclaw_fragments.py +0 -0
  255. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/operator.py +0 -0
  256. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/outcome.py +0 -0
  257. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/pantry.py +0 -0
  258. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/profiles.py +0 -0
  259. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/projection.py +0 -0
  260. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/projects.py +0 -0
  261. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/receipts.py +0 -0
  262. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/reconfigure.py +0 -0
  263. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/release.py +0 -0
  264. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/repos.py +0 -0
  265. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/research.py +0 -0
  266. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/roadmap.py +0 -0
  267. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/roster.py +0 -0
  268. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/route.py +0 -0
  269. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/run.py +0 -0
  270. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/run_cloud_build_feed.py +0 -0
  271. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/runbook.py +0 -0
  272. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/runs.py +0 -0
  273. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/scrub.py +0 -0
  274. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/search.py +0 -0
  275. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/security.py +0 -0
  276. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/setup.py +0 -0
  277. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/skills.py +0 -0
  278. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/stations.py +0 -0
  279. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/status.py +0 -0
  280. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/tokens.py +0 -0
  281. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/tools.py +0 -0
  282. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/untrusted.py +0 -0
  283. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/update.py +0 -0
  284. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/version.py +0 -0
  285. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/work/__init__.py +0 -0
  286. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/work/dispatching.py +0 -0
  287. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/work/phases.py +0 -0
  288. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/work/registration.py +0 -0
  289. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cli/workflow.py +0 -0
  290. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/code_cmd.py +0 -0
  291. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/code_export.py +0 -0
  292. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/code_references.py +0 -0
  293. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/codex_appserver.py +0 -0
  294. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/codex_cloud.py +0 -0
  295. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/commit_linkage.py +0 -0
  296. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/commit_linkage_verify.py +0 -0
  297. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/completions.py +0 -0
  298. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/component_bins.py +0 -0
  299. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/component_install.py +0 -0
  300. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/component_manifest.py +0 -0
  301. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/component_paths.py +0 -0
  302. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/component_report.py +0 -0
  303. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/component_state.py +0 -0
  304. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/config.py +0 -0
  305. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/context_cmd.py +0 -0
  306. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/context_eval.py +0 -0
  307. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/context_preview.py +0 -0
  308. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/control_crosswalk.py +0 -0
  309. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/control_crosswalk_cosign.py +0 -0
  310. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/control_crosswalk_package.py +0 -0
  311. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/control_readiness.py +0 -0
  312. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cosign_attestation.py +0 -0
  313. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/cursor_user_cmd.py +0 -0
  314. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/daily_cmd/__init__.py +0 -0
  315. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/daily_cmd/approvals.py +0 -0
  316. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/daily_cmd/candidates.py +0 -0
  317. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/daily_cmd/closeout_ops.py +0 -0
  318. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/daily_cmd/config.py +0 -0
  319. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/daily_cmd/hardening.py +0 -0
  320. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/daily_cmd/run_loop.py +0 -0
  321. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/daily_cmd/status_plan.py +0 -0
  322. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/daily_cmd/telemetry_ops.py +0 -0
  323. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dirfd.py +0 -0
  324. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/distribution.py +0 -0
  325. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/doctor.py +0 -0
  326. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/doctor_agent.py +0 -0
  327. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/doctor_instruction_chain.py +0 -0
  328. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dogfood_cmd.py +0 -0
  329. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/__init__.py +0 -0
  330. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/access_auth.py +0 -0
  331. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/adapter.py +0 -0
  332. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/contracts.py +0 -0
  333. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/event_app.py +0 -0
  334. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/events.py +0 -0
  335. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/fleet_tools.py +0 -0
  336. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/hub_inbox.py +0 -0
  337. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/hub_tools.py +0 -0
  338. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/inbox_tools.py +0 -0
  339. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/memory_tools.py +0 -0
  340. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/server.py +0 -0
  341. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/state.py +0 -0
  342. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/dot/webhooks.py +0 -0
  343. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/evidence_ack_acceptance.py +0 -0
  344. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/evidence_ack_crypto.py +0 -0
  345. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/evidence_ack_protocol.py +0 -0
  346. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/evidence_brief.py +0 -0
  347. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/evidence_cmd.py +0 -0
  348. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/evidence_derivative.py +0 -0
  349. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/evidence_package.py +0 -0
  350. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/evidence_package_snapshot.py +0 -0
  351. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/evidence_redaction.py +0 -0
  352. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/evidence_runtime.py +0 -0
  353. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/extras.py +0 -0
  354. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fixtures/causal-receipt.v1.golden.json +0 -0
  355. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fixtures/provenance-envelope.v1.golden.json +0 -0
  356. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fixtures/trust-policy.v1.json +0 -0
  357. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fixtures/worker-events-appserver.v1.golden.json +0 -0
  358. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_campaign.py +0 -0
  359. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_campaign_authority.py +0 -0
  360. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_center_links.py +0 -0
  361. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_claim_display.py +0 -0
  362. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_claim_lifecycle.py +0 -0
  363. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_claim_target.py +0 -0
  364. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_client_enrollment.py +0 -0
  365. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_client_grokbot.py +0 -0
  366. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_client_message_credentials.py +0 -0
  367. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_client_messages.py +0 -0
  368. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_deck_brands.py +0 -0
  369. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_deck_shell.py +0 -0
  370. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_dot.py +0 -0
  371. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_event_freshness.py +0 -0
  372. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_event_report.py +0 -0
  373. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_execution_context.py +0 -0
  374. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_export.py +0 -0
  375. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_capacity.py +0 -0
  376. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_claim_cardinality.py +0 -0
  377. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_claims.py +0 -0
  378. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_cloud_policy.py +0 -0
  379. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_enrollment.py +0 -0
  380. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_event_bounds.py +0 -0
  381. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_grokbot.py +0 -0
  382. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_message_grants.py +0 -0
  383. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_messages.py +0 -0
  384. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_model_roster.py +0 -0
  385. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_policy.py +0 -0
  386. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_policy_api.py +0 -0
  387. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_preference.py +0 -0
  388. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_roster_page.py +0 -0
  389. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_routing.py +0 -0
  390. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_server.py +0 -0
  391. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_sessions.py +0 -0
  392. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_hub_status.py +0 -0
  393. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_master_roster.py +0 -0
  394. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_model_admission.py +0 -0
  395. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_model_inventory.py +0 -0
  396. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_model_roster.py +0 -0
  397. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_policy_delegation.py +0 -0
  398. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_policy_form.py +0 -0
  399. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_policy_migration.py +0 -0
  400. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_policy_page.py +0 -0
  401. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_quota.py +0 -0
  402. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_repo_policy_page.py +0 -0
  403. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_session_bootstrap.py +0 -0
  404. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_session_presence.py +0 -0
  405. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fleet_work_page.py +0 -0
  406. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/fragments.py +0 -0
  407. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/friction_cmd.py +0 -0
  408. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/generated_patch_quarantine.py +0 -0
  409. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/governance_inventory.py +0 -0
  410. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/graphtrail_delta.py +0 -0
  411. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_backup/__init__.py +0 -0
  412. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_backup/actions.py +0 -0
  413. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_backup/adapters.py +0 -0
  414. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_backup/contracts.py +0 -0
  415. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_backup/exec.py +0 -0
  416. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_backup/ledger.py +0 -0
  417. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_backup/lifecycle.py +0 -0
  418. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_backup/normalize.py +0 -0
  419. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_backup/runtime_config.py +0 -0
  420. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_backup/tools.py +0 -0
  421. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_build_feed.py +0 -0
  422. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_cerebro.py +0 -0
  423. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_feed.py +0 -0
  424. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_findings.py +0 -0
  425. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_findings_relay.py +0 -0
  426. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_fleet/__init__.py +0 -0
  427. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_fleet/actions.py +0 -0
  428. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_fleet/app.py +0 -0
  429. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_fleet/contracts.py +0 -0
  430. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_fleet/exec.py +0 -0
  431. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_fleet/ledger.py +0 -0
  432. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_fleet/lifecycle.py +0 -0
  433. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_fleet/normalize.py +0 -0
  434. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_fleet/policy.py +0 -0
  435. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_fleet/probes.py +0 -0
  436. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_fleet/registry.py +0 -0
  437. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_fleet/runtime_config.py +0 -0
  438. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_fleet/tools.py +0 -0
  439. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_job_clock.py +0 -0
  440. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_job_validation.py +0 -0
  441. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_jobs.py +0 -0
  442. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_jobs_claim_target.py +0 -0
  443. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_jobs_expiry.py +0 -0
  444. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_jobs_hub.py +0 -0
  445. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_mcp.py +0 -0
  446. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_n8n/__init__.py +0 -0
  447. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_n8n/actions.py +0 -0
  448. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_n8n/client.py +0 -0
  449. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_n8n/contracts.py +0 -0
  450. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_n8n/lifecycle.py +0 -0
  451. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_n8n/runtime_config.py +0 -0
  452. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_n8n/tools.py +0 -0
  453. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_obsidian/__init__.py +0 -0
  454. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_obsidian/actions.py +0 -0
  455. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_obsidian/adapters.py +0 -0
  456. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_obsidian/capabilities.py +0 -0
  457. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_obsidian/catalog.py +0 -0
  458. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_obsidian/content_policy.py +0 -0
  459. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_obsidian/contracts.py +0 -0
  460. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_obsidian/excalidraw_client.py +0 -0
  461. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_obsidian/lifecycle.py +0 -0
  462. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_obsidian/native_client.py +0 -0
  463. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_obsidian/operator_adapter.py +0 -0
  464. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_obsidian/path_policy.py +0 -0
  465. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_obsidian/runtime_config.py +0 -0
  466. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_obsidian/store.py +0 -0
  467. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_obsidian/tls.py +0 -0
  468. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_obsidian/tools.py +0 -0
  469. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_obsidian/utf8.py +0 -0
  470. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_operations_relay.py +0 -0
  471. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_ops.py +0 -0
  472. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_pack_relay.py +0 -0
  473. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_paths.py +0 -0
  474. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_reconcile.py +0 -0
  475. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_scout_feed.py +0 -0
  476. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_t3/__init__.py +0 -0
  477. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_t3/fleet.py +0 -0
  478. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_t3/intake.py +0 -0
  479. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_t3/tools.py +0 -0
  480. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_wazuh/__init__.py +0 -0
  481. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_wazuh/contracts.py +0 -0
  482. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_wazuh/lifecycle.py +0 -0
  483. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_wazuh/normalize.py +0 -0
  484. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_wazuh/policy.py +0 -0
  485. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_wazuh/store.py +0 -0
  486. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/grokbot_wazuh/tools.py +0 -0
  487. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/__init__.py +0 -0
  488. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/__main__.py +0 -0
  489. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/allowlist.py +0 -0
  490. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/audit.py +0 -0
  491. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/baseline.py +0 -0
  492. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/cli.py +0 -0
  493. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/detectors/__init__.py +0 -0
  494. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/detectors/opf.py +0 -0
  495. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/engine.py +0 -0
  496. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/examples/n8n-validation/blocked-local-service.json +0 -0
  497. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/examples/n8n-validation/blocked-secret-token.json +0 -0
  498. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/examples/n8n-validation/clean-blog-post.json +0 -0
  499. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/examples/n8n-validation/clean-social-post.json +0 -0
  500. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/examples/n8n-validation/warn-review-email.json +0 -0
  501. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/git_commits.py +0 -0
  502. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/git_scan.py +0 -0
  503. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/n8n_advisory.py +0 -0
  504. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/n8n_validate.py +0 -0
  505. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/policies/in-house-repo.json +0 -0
  506. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/policies/openclaw-message.json +0 -0
  507. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/policies/pr-draft.json +0 -0
  508. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/policies/public-content.json +0 -0
  509. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/policies/public-repo.json +0 -0
  510. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/policy.py +0 -0
  511. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/pr_draft.py +0 -0
  512. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/pr_prepare.py +0 -0
  513. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/publish_check.py +0 -0
  514. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/report.py +0 -0
  515. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/rev_range.py +0 -0
  516. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/rules.py +0 -0
  517. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/guard/types.py +0 -0
  518. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/handoff.py +0 -0
  519. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/handoff_cmd/__init__.py +0 -0
  520. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/handoff_cmd/drafts.py +0 -0
  521. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/handoff_cmd/inspect_ops.py +0 -0
  522. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/handoff_cmd/issue_ops.py +0 -0
  523. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/handoff_cmd/linting.py +0 -0
  524. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/handoff_cmd/migrate_ops.py +0 -0
  525. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/handoff_cmd/models.py +0 -0
  526. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/handoff_cmd/readability.py +0 -0
  527. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/handoff_cmd/receipts.py +0 -0
  528. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/handoff_cmd/sources.py +0 -0
  529. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/handoff_content.py +0 -0
  530. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/harness_profile_cmd.py +0 -0
  531. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/harness_profile_doctor.py +0 -0
  532. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/harness_profiles.py +0 -0
  533. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/hermes_adapter.py +0 -0
  534. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/inbox_lock.py +0 -0
  535. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/ingest.py +0 -0
  536. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/install.py +0 -0
  537. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/journal_export.py +0 -0
  538. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/learn_cmd.py +0 -0
  539. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/localio.py +0 -0
  540. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/managed.py +0 -0
  541. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/managed_block.py +0 -0
  542. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/managed_snapshot.py +0 -0
  543. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/mcp_adapters.py +0 -0
  544. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/mcp_cmd.py +0 -0
  545. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/mcp_fidelity.py +0 -0
  546. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/mcp_runtime.py +0 -0
  547. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/mcp_server.py +0 -0
  548. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_care_closeout.py +0 -0
  549. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_care_plan.py +0 -0
  550. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_cmd.py +0 -0
  551. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_doctor/__init__.py +0 -0
  552. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_doctor/__main__.py +0 -0
  553. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_doctor/cli.py +0 -0
  554. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_doctor/compact.py +0 -0
  555. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_doctor/git.py +0 -0
  556. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_doctor/init_git.py +0 -0
  557. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_doctor/lint.py +0 -0
  558. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_doctor/parsing.py +0 -0
  559. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_doctor/paths.py +0 -0
  560. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_doctor/safety.py +0 -0
  561. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_doctor/status.py +0 -0
  562. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_doctor_cmd.py +0 -0
  563. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_hooks.py +0 -0
  564. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_identity_audit.py +0 -0
  565. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_operations.py +0 -0
  566. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_proposal_io.py +0 -0
  567. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_proposals.py +0 -0
  568. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_retrieval_eval/__init__.py +0 -0
  569. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_retrieval_eval/__main__.py +0 -0
  570. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_retrieval_eval/adapters.py +0 -0
  571. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_retrieval_eval/corpus.py +0 -0
  572. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_retrieval_eval/harness.py +0 -0
  573. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_retrieval_eval/metrics.py +0 -0
  574. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_retrieval_eval/projection.py +0 -0
  575. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_retrieval_eval/quality.py +0 -0
  576. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_retrieval_eval/report.py +0 -0
  577. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_search_diagnostics.py +0 -0
  578. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/memory_vault.py +0 -0
  579. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/message_envelope.py +0 -0
  580. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/model_inventory.py +0 -0
  581. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/model_scorecard.py +0 -0
  582. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/model_trials.py +0 -0
  583. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/node.py +0 -0
  584. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/notifications_cmd.py +0 -0
  585. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/obsidian_vault.py +0 -0
  586. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/operator_cmd/__init__.py +0 -0
  587. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/operator_cmd/adoption.py +0 -0
  588. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/operator_cmd/guide.py +0 -0
  589. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/operator_cmd/health.py +0 -0
  590. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/operator_cmd/lifecycle.py +0 -0
  591. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/operator_cmd/migration.py +0 -0
  592. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/operator_cmd/surfaces.py +0 -0
  593. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/outcome.py +0 -0
  594. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/outcome_cmd.py +0 -0
  595. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/outcome_discovery.py +0 -0
  596. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/outcome_repair.py +0 -0
  597. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/pantry_cmd.py +0 -0
  598. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/pantry_compat.py +0 -0
  599. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/phases_cmd/__init__.py +0 -0
  600. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/phases_cmd/checks_actions.py +0 -0
  601. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/phases_cmd/constants.py +0 -0
  602. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/phases_cmd/session_lifecycle.py +0 -0
  603. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/phases_cmd/session_ops.py +0 -0
  604. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/pi_mcp_bridge.py +0 -0
  605. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/pi_mcp_cmd.py +0 -0
  606. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/proc.py +0 -0
  607. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/profiles.py +0 -0
  608. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/profiles_cmd.py +0 -0
  609. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/projection/__init__.py +0 -0
  610. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/projection/fixture.py +0 -0
  611. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/projection/kernel.py +0 -0
  612. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/projection_cmd.py +0 -0
  613. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/projects_cmd.py +0 -0
  614. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/prompt.py +0 -0
  615. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/provenance.py +0 -0
  616. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/py.typed +0 -0
  617. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/receipt_schema.py +0 -0
  618. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/receipt_signing.py +0 -0
  619. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/receipts_cmd.py +0 -0
  620. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/receipts_trailer.py +0 -0
  621. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/reconfigure.py +0 -0
  622. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/registry.py +0 -0
  623. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/release_cmd/__init__.py +0 -0
  624. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/release_cmd/candidate.py +0 -0
  625. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/release_cmd/candidate_audit_ops.py +0 -0
  626. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/release_cmd/ci.py +0 -0
  627. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/release_cmd/commands.py +0 -0
  628. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/release_cmd/evidence.py +0 -0
  629. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/release_cmd/install_smoke.py +0 -0
  630. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/release_cmd/paths.py +0 -0
  631. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/release_cmd/schema_ops.py +0 -0
  632. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/release_cmd/version_guard.py +0 -0
  633. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/release_version_sync.py +0 -0
  634. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/render.py +0 -0
  635. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/reportstore.py +0 -0
  636. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/repos_cmd/__init__.py +0 -0
  637. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/repos_cmd/actions_dispatch.py +0 -0
  638. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/repos_cmd/adoption.py +0 -0
  639. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/repos_cmd/constants.py +0 -0
  640. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/repos_cmd/fleet.py +0 -0
  641. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/repos_cmd/fleet_health.py +0 -0
  642. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/repos_cmd/friction_fleet.py +0 -0
  643. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/repos_cmd/release_ops.py +0 -0
  644. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/repos_cmd/release_train.py +0 -0
  645. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/repos_cmd/sweeps.py +0 -0
  646. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/__init__.py +0 -0
  647. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/browser_preflight.py +0 -0
  648. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/claim_audit.py +0 -0
  649. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/config.py +0 -0
  650. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/doctor.py +0 -0
  651. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/engine.py +0 -0
  652. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/extract.py +0 -0
  653. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/handoff.py +0 -0
  654. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/llm.py +0 -0
  655. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/provenance.py +0 -0
  656. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/registry.py +0 -0
  657. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/report.py +0 -0
  658. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/sources/__init__.py +0 -0
  659. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/sources/browser_ai.py +0 -0
  660. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/sources/cli.py +0 -0
  661. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/sources/local.py +0 -0
  662. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/sources/web.py +0 -0
  663. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research/types.py +0 -0
  664. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/research_cmd.py +0 -0
  665. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/result_integrity.py +0 -0
  666. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/roadmap_cmd.py +0 -0
  667. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/roster.py +0 -0
  668. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/roster_cmd.py +0 -0
  669. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/route_catalog.py +0 -0
  670. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/route_policy.py +0 -0
  671. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/route_receipts.py +0 -0
  672. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/router.py +0 -0
  673. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_audit.py +0 -0
  674. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_budget.py +0 -0
  675. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_checkpoint.py +0 -0
  676. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_control.py +0 -0
  677. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_control_journal.py +0 -0
  678. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_dirfd.py +0 -0
  679. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_event_cursor.py +0 -0
  680. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_events.py +0 -0
  681. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_id.py +0 -0
  682. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_journal.py +0 -0
  683. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_lifecycle.py +0 -0
  684. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_preference.py +0 -0
  685. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_projector.py +0 -0
  686. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_reap.py +0 -0
  687. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_receipts.py +0 -0
  688. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_redaction.py +0 -0
  689. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_resume.py +0 -0
  690. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_seat.py +0 -0
  691. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_shadow.py +0 -0
  692. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/run_transport.py +0 -0
  693. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/runbook_cmd.py +0 -0
  694. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/runguard.py +0 -0
  695. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/runs_cmd.py +0 -0
  696. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/runs_cmd_worktrees.py +0 -0
  697. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/runs_diff.py +0 -0
  698. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/runs_serve.py +0 -0
  699. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/runs_view.html +0 -0
  700. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/scanner_isolation.py +0 -0
  701. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/scorecard.py +0 -0
  702. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/scrub.py +0 -0
  703. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/search_cmd.py +0 -0
  704. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/seat_health.py +0 -0
  705. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/seat_health_policy.py +0 -0
  706. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/security_cmd/__init__.py +0 -0
  707. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/security_cmd/commands.py +0 -0
  708. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/security_cmd/config.py +0 -0
  709. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/security_cmd/enrichment.py +0 -0
  710. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/security_cmd/models.py +0 -0
  711. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/security_cmd/reports.py +0 -0
  712. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/security_cmd/scan_detectors.py +0 -0
  713. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/security_cmd/scan_engine.py +0 -0
  714. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/security_cmd/suppression.py +0 -0
  715. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/security_cmd/template_audit_ops.py +0 -0
  716. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/selection.py +0 -0
  717. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/skill_obligations.py +0 -0
  718. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/skills_cmd/__init__.py +0 -0
  719. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/skills_cmd/adapters.py +0 -0
  720. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/skills_cmd/inbox.py +0 -0
  721. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/skills_cmd/install.py +0 -0
  722. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/skills_cmd/packs.py +0 -0
  723. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/skills_cmd/registry.py +0 -0
  724. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/skills_cmd/search_validate.py +0 -0
  725. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/skills_cmd/sync_history.py +0 -0
  726. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/station.py +0 -0
  727. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/station_health.py +0 -0
  728. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/station_manifest.py +0 -0
  729. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/stations_cmd.py +0 -0
  730. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/status.py +0 -0
  731. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/telemetry_export.py +0 -0
  732. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/template_profiles.py +0 -0
  733. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/adal/memory-handoffs/TEMPLATE.md +0 -0
  734. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/aider/memory-handoffs/TEMPLATE.md +0 -0
  735. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/amp/memory-handoffs/TEMPLATE.md +0 -0
  736. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/antigravity/memory-handoffs/TEMPLATE.md +0 -0
  737. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/claude/memory-handoffs/TEMPLATE.md +0 -0
  738. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/codex/memory-handoffs/TEMPLATE.md +0 -0
  739. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/continue/memory-handoffs/TEMPLATE.md +0 -0
  740. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/control-crosswalk.json +0 -0
  741. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/copilot/memory-handoffs/TEMPLATE.md +0 -0
  742. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/crush/memory-handoffs/TEMPLATE.md +0 -0
  743. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/cursor/memory-handoffs/TEMPLATE.md +0 -0
  744. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/depth/repo.json +0 -0
  745. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/depth/workspace.json +0 -0
  746. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/evals/adversarial/failed-verification/cases/acknowledge-broken-receipt.prompt.md +0 -0
  747. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/evals/adversarial/failed-verification/cases/report-failing-tests.prompt.md +0 -0
  748. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/evals/adversarial/failed-verification/manifest.json +0 -0
  749. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/evals/adversarial/prompt-injection/cases/disregard-system-prompt.prompt.md +0 -0
  750. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/evals/adversarial/prompt-injection/cases/fake-system-block.prompt.md +0 -0
  751. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/evals/adversarial/prompt-injection/cases/handoff-lint-regression.prompt.md +0 -0
  752. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/evals/adversarial/prompt-injection/fixtures/handoff-lint-regression.md +0 -0
  753. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/evals/adversarial/prompt-injection/manifest.json +0 -0
  754. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/evals/adversarial/unsafe-command/cases/refuse-destructive-shell.prompt.md +0 -0
  755. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/evals/adversarial/unsafe-command/cases/refuse-force-push.prompt.md +0 -0
  756. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/evals/adversarial/unsafe-command/manifest.json +0 -0
  757. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/evals/adversarial/untrusted-evidence/cases/benign-quoted-payload.prompt.md +0 -0
  758. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/evals/adversarial/untrusted-evidence/cases/hostile-tool-output.prompt.md +0 -0
  759. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/evals/adversarial/untrusted-evidence/manifest.json +0 -0
  760. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/generic/harness-adapter-checklist.md +0 -0
  761. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/generic/memory-contract.md +0 -0
  762. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/goose/memory-handoffs/TEMPLATE.md +0 -0
  763. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/grok/hooks/brigade-work.json +0 -0
  764. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/grok/hooks/brigade-work.sh +0 -0
  765. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/grok/memory-handoffs/TEMPLATE.md +0 -0
  766. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/handoff/handoff-sources.example.json +0 -0
  767. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/handoff/openclaw-ingest-receipt.example.json +0 -0
  768. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/adal.json +0 -0
  769. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/aider.json +0 -0
  770. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/amp.json +0 -0
  771. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/antigravity.json +0 -0
  772. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/claude.json +0 -0
  773. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/codex.json +0 -0
  774. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/continue.json +0 -0
  775. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/copilot.json +0 -0
  776. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/crush.json +0 -0
  777. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/cursor.json +0 -0
  778. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/goose.json +0 -0
  779. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/grok.json +0 -0
  780. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/hermes.json +0 -0
  781. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/kimi.json +0 -0
  782. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/openclaw.json +0 -0
  783. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/opencode.json +0 -0
  784. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/openhands.json +0 -0
  785. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/pi.json +0 -0
  786. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/harnesses/qwen.json +0 -0
  787. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/hermes/README.md +0 -0
  788. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/hermes/memory-handoffs/TEMPLATE.md +0 -0
  789. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/hooks/pre-push +0 -0
  790. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/includes/publisher.json +0 -0
  791. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/includes/repo-extras.json +0 -0
  792. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/kimi/memory-handoffs/TEMPLATE.md +0 -0
  793. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/memory/cards/backup-restic.md +0 -0
  794. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/memory/cards/chat-surface-crawlers.md +0 -0
  795. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/memory/cards/content-safety.md +0 -0
  796. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/memory/cards/handoff-flow.md +0 -0
  797. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/memory/cards/memory-architecture.md +0 -0
  798. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/memory/cards/memory-care-staleness.md +0 -0
  799. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/memory/cards/memory-scanner.md +0 -0
  800. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/memory/cards/multi-workspace-handoff-admin.md +0 -0
  801. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/memory/cards/obsidian-notes.md +0 -0
  802. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/memory/cards/pipeline-standups.md +0 -0
  803. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/memory/cards/token-glace-output-compaction.md +0 -0
  804. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/memory/cards/workspace-file-maintenance.md +0 -0
  805. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/memory-care/runbooks/daily-care-pass.json +0 -0
  806. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/memory-care/runbooks/ingest-sweep.json +0 -0
  807. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/memory-care/runbooks/weekly-outcome-ratchet.json +0 -0
  808. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/openclaw/README.md +0 -0
  809. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/openclaw/acp-escalation.openclaw.json +0 -0
  810. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/openclaw/memory-sweep-cron.openclaw.json +0 -0
  811. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/openclaw/model-aliases.openclaw.json +0 -0
  812. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/openclaw/ollama-memory-search.openclaw.json +0 -0
  813. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/opencode/memory-handoffs/TEMPLATE.md +0 -0
  814. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/openhands/memory-handoffs/TEMPLATE.md +0 -0
  815. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/pi/extensions/brigade-mcp-bridge.js +0 -0
  816. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/pi/memory-handoffs/TEMPLATE.md +0 -0
  817. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/qwen/memory-handoffs/TEMPLATE.md +0 -0
  818. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/repo/AGENTS.md +0 -0
  819. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/repo/CLAUDE.md +0 -0
  820. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/repo/INSTALL_FOR_AGENTS.md +0 -0
  821. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/rosters/budget-open-weight.toml +0 -0
  822. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/rosters/full-multi-lane.toml +0 -0
  823. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/rosters/minimal-single-cli.toml +0 -0
  824. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/rosters/review-heavy.toml +0 -0
  825. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/scripts/backup-restic.sh +0 -0
  826. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/brigade-work/CHANGELOG.md +0 -0
  827. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/brigade-work/SKILL.md +0 -0
  828. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/brigade-work/skill.json +0 -0
  829. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/card-refresh/CHANGELOG.md +0 -0
  830. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/card-refresh/SKILL.md +0 -0
  831. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/card-refresh/skill.json +0 -0
  832. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/forward-plan/CHANGELOG.md +0 -0
  833. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/forward-plan/SKILL.md +0 -0
  834. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/forward-plan/plan.template.json +0 -0
  835. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/forward-plan/skill.json +0 -0
  836. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/handoff-inbox-drain/CHANGELOG.md +0 -0
  837. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/handoff-inbox-drain/SKILL.md +0 -0
  838. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/handoff-inbox-drain/skill.json +0 -0
  839. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/note/CHANGELOG.md +0 -0
  840. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/note/SKILL.md +0 -0
  841. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/note/skill.json +0 -0
  842. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/ultra-work-scout/CHANGELOG.md +0 -0
  843. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/ultra-work-scout/SKILL.md +0 -0
  844. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/skills/ultra-work-scout/skill.json +0 -0
  845. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/stations/managed-snapshot.json +0 -0
  846. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/workspace/AGENTS.md +0 -0
  847. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/workspace/CLAUDE.md +0 -0
  848. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/workspace/HEARTBEAT.md +0 -0
  849. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/workspace/IDENTITY.md +0 -0
  850. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/workspace/INSTALL_FOR_AGENTS.md +0 -0
  851. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/workspace/MEMORY.md +0 -0
  852. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/workspace/SAFETY_RULES.md +0 -0
  853. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/workspace/SOUL.md +0 -0
  854. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/workspace/TOOLS.md +0 -0
  855. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/workspace/USER.md +0 -0
  856. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/workspace/rules/acceptance-driven-work.md +0 -0
  857. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates/workspace/rules/issue-tdd-loop.md +0 -0
  858. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/templates.py +0 -0
  859. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tokens_cmd.py +0 -0
  860. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/toml_compat.py +0 -0
  861. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/__init__.py +0 -0
  862. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/calls.py +0 -0
  863. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/catalog_health.py +0 -0
  864. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/catalog_manage.py +0 -0
  865. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/checkpoint_store.py +0 -0
  866. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/checkpoints.py +0 -0
  867. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/config.py +0 -0
  868. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/constants.py +0 -0
  869. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/helpers.py +0 -0
  870. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/issues.py +0 -0
  871. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/mcp.py +0 -0
  872. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/packs.py +0 -0
  873. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/paths.py +0 -0
  874. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/projections.py +0 -0
  875. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/runs.py +0 -0
  876. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/runtimes.py +0 -0
  877. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/safety.py +0 -0
  878. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/tools_cmd/status.py +0 -0
  879. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/trust_gate.py +0 -0
  880. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/ui_theme.py +0 -0
  881. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/untrusted.py +0 -0
  882. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/untrusted_cmd.py +0 -0
  883. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/update_cmd.py +0 -0
  884. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/update_notify.py +0 -0
  885. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/verification_contract.py +0 -0
  886. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/verify_manifest.py +0 -0
  887. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/verify_trial.py +0 -0
  888. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/version_cmd.py +0 -0
  889. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/wiring.py +0 -0
  890. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/__init__.py +0 -0
  891. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/backup.py +0 -0
  892. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/campaign.py +0 -0
  893. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/claiming.py +0 -0
  894. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/config.py +0 -0
  895. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/constants.py +0 -0
  896. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/edges.py +0 -0
  897. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/footprint.py +0 -0
  898. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/helpers.py +0 -0
  899. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/imports.py +0 -0
  900. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/inbox_lock.py +0 -0
  901. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/ledger/__init__.py +0 -0
  902. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/ledger/authority_store.py +0 -0
  903. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/ledger/descriptor_anchors.py +0 -0
  904. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/ledger/import_model.py +0 -0
  905. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/ledger/inbox_provenance.py +0 -0
  906. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/ledger/locking.py +0 -0
  907. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/ledger/queries_handoffs.py +0 -0
  908. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/ledger/tasks_plans.py +0 -0
  909. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/nt_dirfd.py +0 -0
  910. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/partition.py +0 -0
  911. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/reviews.py +0 -0
  912. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/scanner_platform.py +0 -0
  913. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/scanners.py +0 -0
  914. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/services.py +0 -0
  915. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/session/__init__.py +0 -0
  916. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/session/fleet_routing.py +0 -0
  917. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/session/lifecycle.py +0 -0
  918. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/session/run_status.py +0 -0
  919. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/session/task_ops.py +0 -0
  920. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/session_resume.py +0 -0
  921. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/sweeps.py +0 -0
  922. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/verify_ranking.py +0 -0
  923. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/verify_reaper.py +0 -0
  924. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_cmd/verify_scoreability.py +0 -0
  925. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/work_run_archive.py +0 -0
  926. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/worker_events.py +0 -0
  927. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/worker_failure.py +0 -0
  928. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/workflow_cmd.py +0 -0
  929. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/worklore_brigade.py +0 -0
  930. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/worklore_brigade_sync.py +0 -0
  931. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/worklore_client.py +0 -0
  932. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/worklore_github.py +0 -0
  933. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/worklore_github_sync.py +0 -0
  934. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/worklore_http.py +0 -0
  935. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/worklore_ownership.py +0 -0
  936. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/worklore_scope.py +0 -0
  937. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/worklore_store.py +0 -0
  938. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/worklore_store_operations.py +0 -0
  939. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade/worklore_validate.py +0 -0
  940. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade_cli.egg-info/dependency_links.txt +0 -0
  941. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade_cli.egg-info/requires.txt +0 -0
  942. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/src/brigade_cli.egg-info/top_level.txt +0 -0
  943. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_aboyeur.py +0 -0
  944. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_aboyeur_facade.py +0 -0
  945. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_aboyeur_orchestrator_health_routing.py +0 -0
  946. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_aboyeur_run_io.py +0 -0
  947. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_aboyeur_seat_health_probe.py +0 -0
  948. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_aboyeur_status.py +0 -0
  949. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_acpx_adapter.py +0 -0
  950. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_actionqueue.py +0 -0
  951. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_add.py +0 -0
  952. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_agent_change.py +0 -0
  953. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_agent_change_approval_integration.py +0 -0
  954. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_agent_change_approval_policy.py +0 -0
  955. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_agent_change_approval_resources.py +0 -0
  956. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_agent_notify_station_contracts.py +0 -0
  957. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_agent_request.py +0 -0
  958. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_agent_skill_format.py +0 -0
  959. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_agent_write_probes.py +0 -0
  960. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_agents.py +0 -0
  961. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_agents_model_pin.py +0 -0
  962. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_agents_oracle.py +0 -0
  963. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_agents_windows_executable.py +0 -0
  964. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_approval.py +0 -0
  965. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_attestation.py +0 -0
  966. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_attestation_input.py +0 -0
  967. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_attestation_input_integration.py +0 -0
  968. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_attestation_receipt.py +0 -0
  969. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_authority_broker.py +0 -0
  970. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_authority_store_hmac.py +0 -0
  971. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_budgets.py +0 -0
  972. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_candidate_set.py +0 -0
  973. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_card_fingerprint.py +0 -0
  974. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_card_identity.py +0 -0
  975. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_care_cmd.py +0 -0
  976. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_causal_receipt.py +0 -0
  977. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_center_actions_cmd.py +0 -0
  978. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_center_agent_activity.py +0 -0
  979. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_center_dashboard.py +0 -0
  980. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_center_page_load.py +0 -0
  981. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_center_readiness_cmd.py +0 -0
  982. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_center_report_cmd.py +0 -0
  983. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_center_research_view.py +0 -0
  984. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_center_serve.py +0 -0
  985. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_ci_pytest_shard.py +0 -0
  986. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claim_loss_review.py +0 -0
  987. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_actions_diagnostics.py +0 -0
  988. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_actions_evidence.py +0 -0
  989. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_actions_http.py +0 -0
  990. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_actions_import.py +0 -0
  991. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_actions_metadata.py +0 -0
  992. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_cloud.py +0 -0
  993. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_cloud_adoption.py +0 -0
  994. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_cloud_identity.py +0 -0
  995. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_hooks_compaction_marker.py +0 -0
  996. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_hooks_doctor.py +0 -0
  997. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_hooks_entry.py +0 -0
  998. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_hooks_envelope.py +0 -0
  999. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_hooks_fingerprint.py +0 -0
  1000. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_hooks_heartbeat.py +0 -0
  1001. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_hooks_runtime.py +0 -0
  1002. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_hooks_settings_merge.py +0 -0
  1003. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_hooks_state_containment.py +0 -0
  1004. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_hooks_stdin_bounds.py +0 -0
  1005. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_hooks_tilde_user.py +0 -0
  1006. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_hooks_user_scope.py +0 -0
  1007. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_hooks_user_target.py +0 -0
  1008. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_review_evidence.py +0 -0
  1009. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_review_history.py +0 -0
  1010. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_review_import.py +0 -0
  1011. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_claude_workflow.py +0 -0
  1012. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_cli_help.py +0 -0
  1013. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_cli_inventory_contract.py +0 -0
  1014. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_cli_setup.py +0 -0
  1015. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_cli_update.py +0 -0
  1016. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_cloud_tracker.py +0 -0
  1017. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_code_export.py +0 -0
  1018. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_code_graph_brief.py +0 -0
  1019. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_code_reference_schema.py +0 -0
  1020. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_code_verbs_and_target.py +0 -0
  1021. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_codex_appserver.py +0 -0
  1022. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_codex_appserver_integration.py +0 -0
  1023. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_codex_cloud.py +0 -0
  1024. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_commit_linkage.py +0 -0
  1025. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_completions.py +0 -0
  1026. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_component_bins.py +0 -0
  1027. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_component_install.py +0 -0
  1028. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_component_manifest.py +0 -0
  1029. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_component_manifest_provenance.py +0 -0
  1030. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_component_paths.py +0 -0
  1031. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_component_report.py +0 -0
  1032. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_component_state.py +0 -0
  1033. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_config.py +0 -0
  1034. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_conftest_home_isolation.py +0 -0
  1035. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_conftest_host_daemons.py +0 -0
  1036. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_context_cmd.py +0 -0
  1037. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_context_eval.py +0 -0
  1038. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_context_learning_closeout_cmd.py +0 -0
  1039. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_context_preview.py +0 -0
  1040. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_cosign_attestation.py +0 -0
  1041. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_cosign_statement_profiles.py +0 -0
  1042. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_cursor_install_state_migration.py +0 -0
  1043. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_cursor_user_cmd.py +0 -0
  1044. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_daily_driver_cmd.py +0 -0
  1045. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dashboard_code_graph.py +0 -0
  1046. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dashboard_handoffs.py +0 -0
  1047. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dashboard_memory_operations.py +0 -0
  1048. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dashboard_outcomes.py +0 -0
  1049. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dashboard_runs.py +0 -0
  1050. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dashboard_status.py +0 -0
  1051. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dashboard_work.py +0 -0
  1052. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_direct_worker_finish_tree.py +0 -0
  1053. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_directory_authority_legacy_migration.py +0 -0
  1054. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dirfd.py +0 -0
  1055. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_doctor.py +0 -0
  1056. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_doctor_agent.py +0 -0
  1057. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dogfood_cmd.py +0 -0
  1058. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_dot_contracts.py +0 -0
  1059. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_evidence_ack_acceptance.py +0 -0
  1060. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_evidence_ack_crypto.py +0 -0
  1061. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_evidence_ack_protocol.py +0 -0
  1062. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_evidence_branded_surface.py +0 -0
  1063. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_evidence_cmd.py +0 -0
  1064. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_evidence_derivative.py +0 -0
  1065. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_evidence_package.py +0 -0
  1066. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_evidence_package_snapshot.py +0 -0
  1067. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_evidence_redaction.py +0 -0
  1068. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_evidence_runtime.py +0 -0
  1069. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_extras_gate.py +0 -0
  1070. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_action_dispatch_cmd.py +0 -0
  1071. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_agent_unread.py +0 -0
  1072. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_authority_proof.py +0 -0
  1073. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_campaign.py +0 -0
  1074. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_campaign_authority.py +0 -0
  1075. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_center_links.py +0 -0
  1076. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_claim_display.py +0 -0
  1077. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_claim_generations.py +0 -0
  1078. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_claim_release.py +0 -0
  1079. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_claim_target.py +0 -0
  1080. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_cloud.py +0 -0
  1081. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_command_deck.py +0 -0
  1082. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_dashboard.py +0 -0
  1083. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_deck_badges.py +0 -0
  1084. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_deck_overview.py +0 -0
  1085. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_dot.py +0 -0
  1086. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_enrollment.py +0 -0
  1087. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_export.py +0 -0
  1088. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_hub_capacity.py +0 -0
  1089. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_hub_event_bounds.py +0 -0
  1090. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_hub_grokbot_expiry.py +0 -0
  1091. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_hub_policy.py +0 -0
  1092. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_hub_request_bounds.py +0 -0
  1093. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_hub_review_bounds.py +0 -0
  1094. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_hub_server.py +0 -0
  1095. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_master_roster.py +0 -0
  1096. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_message_grants.py +0 -0
  1097. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_messages_metadata.py +0 -0
  1098. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_messages_startup.py +0 -0
  1099. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_model_admission.py +0 -0
  1100. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_model_inventory.py +0 -0
  1101. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_model_roster.py +0 -0
  1102. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_models_list.py +0 -0
  1103. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_native_launch_binding.py +0 -0
  1104. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_nodes.py +0 -0
  1105. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_policy.py +0 -0
  1106. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_policy_api.py +0 -0
  1107. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_policy_api_context.py +0 -0
  1108. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_policy_cli.py +0 -0
  1109. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_policy_core_completion.py +0 -0
  1110. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_policy_delegation.py +0 -0
  1111. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_policy_migration.py +0 -0
  1112. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_policy_page.py +0 -0
  1113. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_quota.py +0 -0
  1114. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_repo_policy_page.py +0 -0
  1115. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_roster_page.py +0 -0
  1116. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_routing.py +0 -0
  1117. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_session_bootstrap.py +0 -0
  1118. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_session_presence.py +0 -0
  1119. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_sync.py +0 -0
  1120. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_t3_contract.py +0 -0
  1121. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_work_next.py +0 -0
  1122. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_work_ownership_cli.py +0 -0
  1123. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fleet_work_page.py +0 -0
  1124. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_forward_plan_skill.py +0 -0
  1125. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_fragments.py +0 -0
  1126. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_friction_cmd.py +0 -0
  1127. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_generated_patch_quarantine.py +0 -0
  1128. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_gitignore.py +0 -0
  1129. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_governance_inventory.py +0 -0
  1130. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_graphtrail_delta.py +0 -0
  1131. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grok_hook_runtime.py +0 -0
  1132. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_backup_actions.py +0 -0
  1133. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_backup_adapters.py +0 -0
  1134. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_backup_contracts.py +0 -0
  1135. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_backup_ledger.py +0 -0
  1136. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_backup_lifecycle.py +0 -0
  1137. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_backup_runtime.py +0 -0
  1138. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_build_feed.py +0 -0
  1139. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_cerebro.py +0 -0
  1140. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_client_identity.py +0 -0
  1141. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_feed.py +0 -0
  1142. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_findings.py +0 -0
  1143. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_findings_relay.py +0 -0
  1144. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_fleet_actions.py +0 -0
  1145. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_fleet_app.py +0 -0
  1146. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_fleet_contracts.py +0 -0
  1147. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_fleet_exec.py +0 -0
  1148. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_fleet_ledger.py +0 -0
  1149. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_fleet_lifecycle.py +0 -0
  1150. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_fleet_normalize.py +0 -0
  1151. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_fleet_probes.py +0 -0
  1152. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_fleet_registry.py +0 -0
  1153. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_fleet_remediation.py +0 -0
  1154. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_fleet_runtime_config.py +0 -0
  1155. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_fleet_tools.py +0 -0
  1156. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_jobs.py +0 -0
  1157. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_mcp.py +0 -0
  1158. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_n8n_actions.py +0 -0
  1159. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_n8n_client.py +0 -0
  1160. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_n8n_contracts.py +0 -0
  1161. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_n8n_lifecycle.py +0 -0
  1162. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_n8n_runtime.py +0 -0
  1163. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_n8n_tools.py +0 -0
  1164. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_obsidian_actions.py +0 -0
  1165. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_obsidian_adapters.py +0 -0
  1166. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_obsidian_capabilities.py +0 -0
  1167. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_obsidian_client.py +0 -0
  1168. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_obsidian_contracts.py +0 -0
  1169. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_obsidian_excalidraw_client.py +0 -0
  1170. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_obsidian_lifecycle.py +0 -0
  1171. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_obsidian_operator_install.py +0 -0
  1172. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_obsidian_operator_plugin.py +0 -0
  1173. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_obsidian_phase2.py +0 -0
  1174. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_obsidian_policy.py +0 -0
  1175. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_obsidian_runtime.py +0 -0
  1176. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_operations_relay.py +0 -0
  1177. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_ops.py +0 -0
  1178. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_pack_relay.py +0 -0
  1179. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_packs.py +0 -0
  1180. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_reconcile.py +0 -0
  1181. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_scout_feed.py +0 -0
  1182. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_t3_contracts.py +0 -0
  1183. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_t3_fleet.py +0 -0
  1184. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_wazuh_contracts.py +0 -0
  1185. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_wazuh_lifecycle.py +0 -0
  1186. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_wazuh_normalize.py +0 -0
  1187. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_wazuh_policy.py +0 -0
  1188. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_wazuh_store.py +0 -0
  1189. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_grokbot_wazuh_tools.py +0 -0
  1190. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_handoff.py +0 -0
  1191. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_handoff_cmd.py +0 -0
  1192. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_handoff_injection_lint.py +0 -0
  1193. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_handoff_readability.py +0 -0
  1194. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_harness_conformance_probe.py +0 -0
  1195. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_harness_profile_cmd.py +0 -0
  1196. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_harness_user_scope.py +0 -0
  1197. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_harness_user_scope_slice2.py +0 -0
  1198. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_hub_seat_resolution.py +0 -0
  1199. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_ingest.py +0 -0
  1200. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_init.py +0 -0
  1201. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_install.py +0 -0
  1202. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_instruction_profiles.py +0 -0
  1203. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_issue266_benchmark.py +0 -0
  1204. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_issue266_work_status_memory.py +0 -0
  1205. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_issue362_code_evidence_facades.py +0 -0
  1206. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_journal_export.py +0 -0
  1207. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_ledger_1233_findings.py +0 -0
  1208. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_ledger_facade.py +0 -0
  1209. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_localio.py +0 -0
  1210. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_managed.py +0 -0
  1211. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_managed_block.py +0 -0
  1212. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_managed_snapshot.py +0 -0
  1213. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_mcp_adapters.py +0 -0
  1214. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_mcp_cmd.py +0 -0
  1215. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_mcp_fidelity.py +0 -0
  1216. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_mcp_integration.py +0 -0
  1217. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_mcp_projection.py +0 -0
  1218. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_mcp_runtime.py +0 -0
  1219. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_mcp_server.py +0 -0
  1220. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_mcp_url_only_import.py +0 -0
  1221. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_mcp_user_scope.py +0 -0
  1222. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_memory_care_skills.py +0 -0
  1223. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_memory_cmd.py +0 -0
  1224. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_memory_hooks.py +0 -0
  1225. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_memory_identity_audit.py +0 -0
  1226. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_memory_inventory_cmd.py +0 -0
  1227. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_memory_proposal_capabilities.py +0 -0
  1228. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_memory_proposals.py +0 -0
  1229. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_memory_retrieval_eval.py +0 -0
  1230. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_memory_search_mcp.py +0 -0
  1231. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_memory_search_redundancy.py +0 -0
  1232. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_memory_task_recall.py +0 -0
  1233. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_memory_topology_cmd.py +0 -0
  1234. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_memory_vault_projection.py +0 -0
  1235. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_memory_vault_propose.py +0 -0
  1236. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_memory_vault_search.py +0 -0
  1237. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_message_envelope.py +0 -0
  1238. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_model_inventory.py +0 -0
  1239. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_model_scorecard.py +0 -0
  1240. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_model_seat_denial.py +0 -0
  1241. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_model_trials.py +0 -0
  1242. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_model_trials_adversarial_fixtures.py +0 -0
  1243. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_module_size_ratchet.py +0 -0
  1244. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_mypy_override_ratchet.py +0 -0
  1245. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_neutrality.py +0 -0
  1246. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_node.py +0 -0
  1247. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_notifications_cmd.py +0 -0
  1248. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_opencode_mcp_contract.py +0 -0
  1249. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_opencode_profile_contract.py +0 -0
  1250. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_operator_checkup.py +0 -0
  1251. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_operator_cmd.py +0 -0
  1252. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_outcome.py +0 -0
  1253. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_outcome_activegraph.py +0 -0
  1254. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_outcome_backfill_scorecard.py +0 -0
  1255. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_outcome_cmd.py +0 -0
  1256. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_outcome_execute.py +0 -0
  1257. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_outcome_infrastructure_attribution.py +0 -0
  1258. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_outcome_repair.py +0 -0
  1259. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_outcome_reused_receipt_dedup.py +0 -0
  1260. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_pantry_cmd.py +0 -0
  1261. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_pantry_compat.py +0 -0
  1262. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_parity_backlog.py +0 -0
  1263. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_phase257_facades.py +0 -0
  1264. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_phase_ledger_session_cmd.py +0 -0
  1265. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_phases_cmd_facade.py +0 -0
  1266. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_pi_mcp_bridge.py +0 -0
  1267. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_posix_facade_behaviour.py +0 -0
  1268. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_posix_facade_guard.py +0 -0
  1269. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_pre_push_hook.py +0 -0
  1270. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_privacy_regression.py +0 -0
  1271. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_proc.py +0 -0
  1272. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_producer_run_id.py +0 -0
  1273. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_profiles.py +0 -0
  1274. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_projection_cli.py +0 -0
  1275. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_projection_conformance.py +0 -0
  1276. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_projection_kernel.py +0 -0
  1277. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_prompt.py +0 -0
  1278. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_provenance_envelope.py +0 -0
  1279. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_published_artifact_acceptance.py +0 -0
  1280. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_read_only_enforcement.py +0 -0
  1281. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_receipt_schema_audit.py +0 -0
  1282. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_receipt_signing.py +0 -0
  1283. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_receipts_cmd.py +0 -0
  1284. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_receipts_trailer.py +0 -0
  1285. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_reconfigure.py +0 -0
  1286. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_registry.py +0 -0
  1287. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_release_checklist.py +0 -0
  1288. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_release_ci_health_cmd.py +0 -0
  1289. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_release_cmd.py +0 -0
  1290. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_release_manifest_generator.py +0 -0
  1291. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_release_metadata.py +0 -0
  1292. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_release_readiness_hygiene_cmd.py +0 -0
  1293. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_release_reconcile_evidence_cmd.py +0 -0
  1294. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_release_smoke_health_cmd.py +0 -0
  1295. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_release_train_evidence_cmd.py +0 -0
  1296. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_release_version_guard.py +0 -0
  1297. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_release_version_sync.py +0 -0
  1298. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_release_waivers_manifest_cmd.py +0 -0
  1299. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_repeat_watch_approval_runner.py +0 -0
  1300. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_report_review_closeout_cmd.py +0 -0
  1301. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_reportstore.py +0 -0
  1302. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_repos_actions_cmd.py +0 -0
  1303. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_repos_adoption_cmd.py +0 -0
  1304. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_repos_cmd.py +0 -0
  1305. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_repos_cmd_facade.py +0 -0
  1306. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_repos_friction_cmd.py +0 -0
  1307. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_repos_release_train_cmd.py +0 -0
  1308. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_repos_sweep_health_cmd.py +0 -0
  1309. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_acceptance.py +0 -0
  1310. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_browser_ai.py +0 -0
  1311. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_claim_audit.py +0 -0
  1312. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_cli_sources.py +0 -0
  1313. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_cmd.py +0 -0
  1314. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_config.py +0 -0
  1315. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_doctor.py +0 -0
  1316. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_engine.py +0 -0
  1317. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_extract.py +0 -0
  1318. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_finding_envelope.py +0 -0
  1319. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_handoff.py +0 -0
  1320. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_llm.py +0 -0
  1321. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_local_sources.py +0 -0
  1322. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_provenance.py +0 -0
  1323. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_registry.py +0 -0
  1324. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_report.py +0 -0
  1325. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_review_regressions.py +0 -0
  1326. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_types.py +0 -0
  1327. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_research_web.py +0 -0
  1328. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_result_integrity.py +0 -0
  1329. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_roadmap_cmd.py +0 -0
  1330. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_roadmap_inventory_cmd.py +0 -0
  1331. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_roster.py +0 -0
  1332. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_roster_cmd.py +0 -0
  1333. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_roster_doctor.py +0 -0
  1334. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_route_policy.py +0 -0
  1335. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_route_receipts.py +0 -0
  1336. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_router.py +0 -0
  1337. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_router_properties.py +0 -0
  1338. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_audit.py +0 -0
  1339. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_budget.py +0 -0
  1340. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_checkpoint.py +0 -0
  1341. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_control.py +0 -0
  1342. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_detach.py +0 -0
  1343. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_dirfd.py +0 -0
  1344. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_event_cursor.py +0 -0
  1345. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_events.py +0 -0
  1346. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_events_cursor_control.py +0 -0
  1347. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_journal.py +0 -0
  1348. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_journal_measurement.py +0 -0
  1349. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_journal_process_qualification.py +0 -0
  1350. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_lifecycle.py +0 -0
  1351. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_preference.py +0 -0
  1352. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_projector.py +0 -0
  1353. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_reap.py +0 -0
  1354. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_receipts.py +0 -0
  1355. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_redaction.py +0 -0
  1356. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_resume.py +0 -0
  1357. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_seat.py +0 -0
  1358. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_shadow.py +0 -0
  1359. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_transport.py +0 -0
  1360. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_transport_dag.py +0 -0
  1361. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_transport_env.py +0 -0
  1362. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_transport_failfast.py +0 -0
  1363. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_transport_recovery.py +0 -0
  1364. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_run_worktree.py +0 -0
  1365. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_runbook_cmd.py +0 -0
  1366. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_runbook_import.py +0 -0
  1367. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_runguard.py +0 -0
  1368. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_runguard_wait.py +0 -0
  1369. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_runs_cmd.py +0 -0
  1370. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_runs_diff.py +0 -0
  1371. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_runs_json_contracts.py +0 -0
  1372. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_runs_serve.py +0 -0
  1373. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_runs_watch.py +0 -0
  1374. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_scanner_runs_dir_adoption.py +0 -0
  1375. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_scorecard.py +0 -0
  1376. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_scorecard_reconcile.py +0 -0
  1377. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_scrub.py +0 -0
  1378. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_search_cmd.py +0 -0
  1379. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_seat_health.py +0 -0
  1380. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_seat_health_policy.py +0 -0
  1381. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_security_cmd.py +0 -0
  1382. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_security_diff.py +0 -0
  1383. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_security_template_audit_cmd.py +0 -0
  1384. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_selection.py +0 -0
  1385. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_size_ratchet_baseline.py +0 -0
  1386. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_skill_obligations_audit.py +0 -0
  1387. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_skill_templates_metadata.py +0 -0
  1388. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_skills_cmd.py +0 -0
  1389. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_skills_cmd_facade.py +0 -0
  1390. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_skills_state_windows.py +0 -0
  1391. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_station.py +0 -0
  1392. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_station_manifest.py +0 -0
  1393. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_stations_discover.py +0 -0
  1394. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_stations_verify.py +0 -0
  1395. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_status.py +0 -0
  1396. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_subprocess_guards.py +0 -0
  1397. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_surface_aware_install.py +0 -0
  1398. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_telemetry_export.py +0 -0
  1399. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_template_profiles.py +0 -0
  1400. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_test_fixture_contract.py +0 -0
  1401. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_thread_sync.py +0 -0
  1402. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_tokens_cmd.py +0 -0
  1403. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_toml_compat.py +0 -0
  1404. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_tool_output_compaction.py +0 -0
  1405. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_tools_cmd_facade.py +0 -0
  1406. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_trust_capability.py +0 -0
  1407. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_ui_theme.py +0 -0
  1408. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_ui_theme_integration.py +0 -0
  1409. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_untrusted.py +0 -0
  1410. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_untrusted_cmd.py +0 -0
  1411. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_update_cmd.py +0 -0
  1412. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_update_notify.py +0 -0
  1413. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_verification_contract.py +0 -0
  1414. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_verify_brigade_skill.py +0 -0
  1415. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_verify_manifest_tracked.py +0 -0
  1416. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_verify_parallel.py +0 -0
  1417. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_verify_reaper.py +0 -0
  1418. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_verify_script.py +0 -0
  1419. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_verify_trial.py +0 -0
  1420. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_version_sync_script.py +0 -0
  1421. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_waiver_policy_health_cmd.py +0 -0
  1422. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_windows_job.py +0 -0
  1423. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_windows_pytest.py +0 -0
  1424. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_windows_read_security.py +0 -0
  1425. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_wiring_resolve_target.py +0 -0
  1426. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_backup.py +0 -0
  1427. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_campaign.py +0 -0
  1428. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_claim.py +0 -0
  1429. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_dispatch_annotations.py +0 -0
  1430. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_edges.py +0 -0
  1431. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_facade.py +0 -0
  1432. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_footprint.py +0 -0
  1433. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_imports.py +0 -0
  1434. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_ledger.py +0 -0
  1435. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_ledger_integrity.py +0 -0
  1436. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_partition.py +0 -0
  1437. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_reviews.py +0 -0
  1438. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_scanners.py +0 -0
  1439. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_services.py +0 -0
  1440. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_session.py +0 -0
  1441. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_sweeps.py +0 -0
  1442. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_verify_ranking.py +0 -0
  1443. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_cmd_work_graph_hardening.py +0 -0
  1444. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_import_inbox_windows.py +0 -0
  1445. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_import_provenance_stamp.py +0 -0
  1446. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_run_archive.py +0 -0
  1447. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_work_store_measurement.py +0 -0
  1448. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_worker_events.py +0 -0
  1449. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_worker_failure.py +0 -0
  1450. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_workflow_cmd.py +0 -0
  1451. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_worklore_brigade.py +0 -0
  1452. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_worklore_client.py +0 -0
  1453. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_worklore_github.py +0 -0
  1454. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_worklore_http.py +0 -0
  1455. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_worklore_ownership.py +0 -0
  1456. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_worklore_scope.py +0 -0
  1457. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_worklore_store.py +0 -0
  1458. {brigade_cli-0.29.0 → brigade_cli-0.30.0}/tests/test_worklore_validate.py +0 -0
@@ -0,0 +1,214 @@
1
+ Metadata-Version: 2.4
2
+ Name: brigade-cli
3
+ Version: 0.30.0
4
+ Summary: Your agents run loops. Brigade keeps the receipts. Local control plane for multi-agent coding: share MCP/tools/memory, remember via handoffs, prove with file receipts, improve by promoting skills only on real exit codes. Claude Code, Codex, Grok, Hermes, OpenClaw, and more. Stations for evidence, code graph, pantry, skills. pipx install brigade-cli.
5
+ Author-email: Solomon Neas <me@solomonneas.dev>
6
+ License: MIT
7
+ Project-URL: Homepage, https://brigade.tools
8
+ Project-URL: Documentation, https://brigade.tools/docs
9
+ Project-URL: Compare, https://brigade.tools/compare/sync-mcp-servers-across-coding-agents
10
+ Project-URL: Handoffs, https://brigade.tools/compare/memory-handoffs-across-coding-agents
11
+ Project-URL: CodeGraph, https://brigade.tools/compare/local-code-graph-for-ai-coding-agents
12
+ Project-URL: Evidence, https://brigade.tools/compare/local-evidence-ledger-for-agent-work
13
+ Project-URL: Skills, https://brigade.tools/compare/portable-skills-across-coding-agents
14
+ Project-URL: LLMs, https://brigade.tools/llms.txt
15
+ Project-URL: Repository, https://github.com/escoffier-labs/brigade
16
+ Project-URL: Cookbook, https://escoffierlabs.dev/cookbook/
17
+ Project-URL: CookbookSource, https://github.com/escoffier-labs/solos-cookbook
18
+ Project-URL: OpenClaw, https://github.com/solomonneas/openclaw
19
+ Project-URL: ContentGuard, https://github.com/escoffier-labs/content-guard
20
+ Project-URL: AgentPantry, https://github.com/escoffier-labs/agentpantry
21
+ Project-URL: MiseLedger, https://brigade.tools/miseledger
22
+ Project-URL: GraphTrail, https://brigade.tools/graphtrail
23
+ Project-URL: Issues, https://github.com/escoffier-labs/brigade/issues
24
+ Keywords: agents,ai-agents,agent-memory,agent-handoffs,ai-memory,mcp,mcp-config,mcp-sync,model-context-protocol,openclaw,claude-code,codex,opencode,grok,hermes,memory,bootstrap,brigade,brigade-cli,operator,local-first,guardrails,agents-md,miseledger,graphtrail,agentpantry,code-graph,evidence-ledger
25
+ Classifier: Development Status :: 3 - Alpha
26
+ Classifier: License :: OSI Approved :: MIT License
27
+ Classifier: Programming Language :: Python :: 3
28
+ Classifier: Programming Language :: Python :: 3.10
29
+ Classifier: Programming Language :: Python :: 3.11
30
+ Classifier: Programming Language :: Python :: 3.12
31
+ Classifier: Operating System :: Microsoft :: Windows
32
+ Classifier: Operating System :: MacOS
33
+ Classifier: Operating System :: POSIX :: Linux
34
+ Requires-Python: >=3.10
35
+ Description-Content-Type: text/markdown
36
+ License-File: LICENSE
37
+ Provides-Extra: dev
38
+ Requires-Dist: pytest>=7; extra == "dev"
39
+ Requires-Dist: pytest-cov>=5; extra == "dev"
40
+ Requires-Dist: pytest-xdist>=3.6; extra == "dev"
41
+ Requires-Dist: ruff>=0.15; extra == "dev"
42
+ Requires-Dist: mypy>=1.11; extra == "dev"
43
+ Provides-Extra: grokbot
44
+ Requires-Dist: mcp<3,>=2; extra == "grokbot"
45
+ Requires-Dist: pyjwt[crypto]>=2; extra == "grokbot"
46
+ Provides-Extra: research
47
+ Requires-Dist: playwright>=1.40; extra == "research"
48
+ Dynamic: license-file
49
+
50
+ <p align="center">
51
+ <img src="docs/assets/brigade-wordmark.svg" alt="Brigade (by Escoffier Labs)" width="640">
52
+ </p>
53
+
54
+ <p align="center">
55
+ One shared record for every coding agent you run: ready work, safe claims, proof that checks passed, and memory that carries over between tools.
56
+ </p>
57
+
58
+ <p align="center">
59
+ <a href="https://brigade.tools/docs/getting-started/install">Install</a> ·
60
+ <a href="https://brigade.tools/docs">Docs</a> ·
61
+ <a href="docs/comparison.md">Compare</a> ·
62
+ <a href="QUICKSTART.md">Quickstart</a>
63
+ </p>
64
+
65
+ <p align="center">
66
+ <img src="https://shieldcn.dev/github/ci/escoffier-labs/brigade.svg?workflow=ci.yml&branch=main&label=ci&size=xs" alt="CI status">
67
+ <img src="https://shieldcn.dev/pypi/v/brigade-cli.svg?label=pypi&size=xs" alt="PyPI version">
68
+ <img src="https://shieldcn.dev/https/raw.githubusercontent.com/escoffier-labs/brigade/download-metrics/downloads.json.svg?size=xs" alt="Combined PyPI and npm downloads per month">
69
+ <img src="https://shieldcn.dev/badge/python-3.10+-blue.svg?logo=python&logoColor=white&size=xs" alt="Python 3.10+">
70
+ <img src="https://shieldcn.dev/badge/rust-code_graph-b7410e.svg?logo=rust&logoColor=white&size=xs" alt="Rust: code graph engine">
71
+ <img src="https://shieldcn.dev/badge/go-evidence_log-00add8.svg?logo=go&logoColor=white&size=xs" alt="Go: evidence log engine">
72
+ <img src="https://shieldcn.dev/badge/license-MIT-4e7247.svg?size=xs" alt="MIT license">
73
+ </p>
74
+
75
+ Brigade is a local CLI for people who point Claude Code, Codex, Cursor, and other agents at the same repos. Each harness keeps its own notes, its own MCP config, and its own idea of what "tests pass" means. Brigade gives them one ledger in the repo instead: what is ready, who claimed it, which commands actually ran and how they exited, and what the last session handed off.
76
+
77
+ **Stable:** v0.29.0 (`brigade-cli==0.29.0` on PyPI, `@escoffier-labs/brigade@0.29.0` on npm). **Beta:** main is the 0.30 preview line. See the [changelog](CHANGELOG.md) for what each release changed.
78
+
79
+ The downloads badge sums `brigade-cli` on PyPI (excluding mirrors) and `@escoffier-labs/brigade` on npm over the same 30 completed UTC days. Downloads include automation and do not count unique people. The [metric JSON](https://raw.githubusercontent.com/escoffier-labs/brigade/download-metrics/downloads.json) records each source, the period, and the last successful refresh. npm platform companions are excluded. Daily refreshes retain the previous metric if a source fails validation or its latest day is more than three UTC days old.
80
+
81
+ ## What it does
82
+
83
+ - **Ready work and safe claims.** `brigade work ready` lists unblocked tasks. Claims are atomic, so two agents cannot take the same item.
84
+ - **Verification receipts.** A check run through Brigade records the command, the real exit code, and the Git state. An agent's "tests pass" becomes something you can open and read.
85
+ - **Shared memory with an owner.** Agents write handoffs. The memory owner lints and files them. Safe notes can auto-file, and risky ones wait for review. Session-start recall is capped.
86
+ - **One tool catalog, previewed first.** MCP servers, tools, and skills are defined once and shown as a dry run before Brigade writes them into each harness.
87
+ - **Cloud agents tracked next to local ones.** Tasks you hand to Codex Cloud, Cursor cloud agents, or Jules are registered with their provider task ID and reconciled against provider and GitHub state, so they show up beside local runs instead of disappearing into another tab.
88
+ - **Optional fleet view.** A self-hosted hub can arbitrate repo claims across machines and show runs, harness sessions, and cloud tasks on one board.
89
+
90
+ Learning in Brigade means scoring skills against captured receipts, then promoting or rolling them back. It is not autonomous reflective memory.
91
+
92
+ <details>
93
+ <summary><b>Examples</b></summary>
94
+
95
+ **Two agents, one backlog.** Each agent asks for the next ready task. The second claim on the same item fails with exit 13 and names the holder.
96
+
97
+ ```bash
98
+ brigade work ready --parallel-safe # ready tasks, grouped into waves that do not touch the same files
99
+ brigade work claim --next --actor codex # take the highest-priority ready task
100
+ ```
101
+
102
+ **"Tests pass" with a receipt.** The agent runs the check through Brigade instead of reporting it from memory.
103
+
104
+ ```bash
105
+ brigade work verify run --target . --command "pytest -q"
106
+ ```
107
+
108
+ The receipt keeps the command, exit code, Git commit, and dirty state, so a reviewer can check the claim without rerunning it.
109
+
110
+ **Switching harnesses mid-task.** Claude Code ends a session with a handoff. The next Codex session starts from the brief instead of a blank context.
111
+
112
+ ```bash
113
+ brigade handoff lint # check the handoff before it is filed
114
+ brigade work brief --target . # what the next agent sees at session start
115
+ ```
116
+
117
+ **One MCP config for every tool.**
118
+
119
+ ```bash
120
+ brigade mcp plan # read-only preview
121
+ brigade mcp sync --write # merge into each harness's native config
122
+ ```
123
+
124
+ </details>
125
+
126
+ ## Install
127
+
128
+ If Node.js 22 or newer and npm are installed on glibc Linux x64/ARM64, macOS x64/ARM64, or Windows x64, install the [npm package](https://www.npmjs.com/package/@escoffier-labs/brigade). This route does not need Python or pipx first:
129
+
130
+ ```bash
131
+ npm install --global @escoffier-labs/brigade@0.29.0
132
+ brigade setup
133
+ ```
134
+
135
+ To try it without a global install, run each command through npx instead, for example `npx --yes @escoffier-labs/brigade@0.29.0 --version`. The package brings its own uv, through platform packages that npm installs as optional dependencies, and the published 0.29.0 wheel. Leave optional dependencies enabled. The first launch downloads a managed Python, so it needs network access. Install Git yourself for repository features. npm targets are Linux (glibc) x64 and ARM64, macOS x64 and ARM64, and Windows x64. Upgrade with npm, because `brigade update` refuses npm-managed installs. Platform details and known limits: [npm package notes](npm/feasibility/README.md).
136
+
137
+ On other platforms, or to use Python 3.10 or newer directly:
138
+
139
+ ```bash
140
+ pipx install brigade-cli # or: uv tool install brigade-cli
141
+ brigade setup
142
+ ```
143
+
144
+ Then follow the [install guide](https://brigade.tools/docs/getting-started/install) or [QUICKSTART.md](QUICKSTART.md). To let your coding agent do the setup, hand it [first 10 minutes](docs/first-10-minutes.md) and the [agents guide](docs/agents-guide.md).
145
+
146
+ For preview builds on a pipx install, run `brigade update --channel beta`. Details: [update channels](docs/update-channels.md).
147
+
148
+ ## How it compares
149
+
150
+ Most neighbors go deeper on one layer. Brigade connects work, memory, tool config, and evidence around the same coding-agent task. Where a neighbor is stronger, its cell says so. Sources, dated notes, and projects that left these tables: [docs/comparison.md](docs/comparison.md) (checked 2026-10-18).
151
+
152
+ Key: <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Supported · <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Partial · <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented
153
+
154
+ ### Work and orchestration
155
+
156
+ | Project | Ready work | Claim safety | Parallel and run control | Task store | Verification |
157
+ | --- | --- | --- | --- | --- | --- |
158
+ | [Brigade](https://github.com/escoffier-labs/brigade) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Ready set + parallel-safe waves | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Fail-closed claims, optional hub | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Waves, campaigns, declared limits | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Local JSON ledger, not a task DB | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Command receipts |
159
+ | [Beads](https://github.com/gastownhall/beads) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Built in | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Atomic claim | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Agent workflow + Dolt sync | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Dolt-backed distributed store | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Task history |
160
+ | [Gas Town](https://github.com/gastownhall/gastown) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Beads-backed | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Multi-agent runtime | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Beads ledger | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Refinery merge-queue gates |
161
+ | [Claude Code agent teams](https://code.claude.com/docs/en/agent-teams) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Shared list with dependencies | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> File-locked self-claim | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Lead + teammates, experimental | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> One Claude Code session | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> TaskCompleted hook can block |
162
+ | [Backlog.md](https://github.com/MrLesk/Backlog.md) | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Board + dependencies | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Markdown in Git | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Acceptance criteria |
163
+
164
+ ### Memory
165
+
166
+ | Project | Durable memory | Capture and recall | Care and operations | Learning | Provenance |
167
+ | --- | --- | --- | --- | --- | --- |
168
+ | [Brigade](https://github.com/escoffier-labs/brigade) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Shared files + cards | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Linted handoffs + bounded recall | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Owner policy + Memory Operations | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Outcome score, promote, rollback | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Work receipts + sources |
169
+ | [agentmemory](https://github.com/rohitg00/agentmemory) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Shared coding-agent memory | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Hooks + MCP + REST | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Decay, audit, governed delete | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Lessons + reflect | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Write-time origin + citations |
170
+ | [Hindsight](https://github.com/vectorize-io/hindsight) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Facts + experiences + models | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Retain + recall | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Reflect + feedback | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Reflective memory learning | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Temporal + causal links |
171
+ | [Mem0](https://github.com/mem0ai/mem0) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> User + agent + session | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Extraction + hybrid search | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> History + metadata | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Extraction + retrieval | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Timestamps + entities |
172
+ | [Built-in harness memory](https://code.claude.com/docs/en/memory) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Per tool | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Rules + auto memory | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Varies by harness | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Harness-specific | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Harness-specific |
173
+
174
+ ### Tools and configuration
175
+
176
+ | Project | MCP | Rules and skills | Projection | Source of truth | Audit and rollback |
177
+ | --- | --- | --- | --- | --- | --- |
178
+ | [Brigade](https://github.com/escoffier-labs/brigade) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> MCP + tools catalog | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Skills + harness adapters | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Dry run first, then write | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Brigade catalog | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Preserve, gate, roll back |
179
+ | [Rulesync](https://github.com/dyoshikawa/rulesync) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Supported | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Rules, skills, hooks, subagents | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Per-target generation | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Rulesync project | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Generated outputs |
180
+ | [Ruler](https://github.com/intellectronica/ruler) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Supported | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Rules, skills, subagents | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Per-agent files | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> `.ruler/` directory | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Gitignore automation, no rollback |
181
+ | [add-mcp](https://github.com/neon-solutions/add-mcp) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> MCP servers | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Maps fields into native files | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Native files + sync | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Warns on dropped fields |
182
+ | [agentsync](https://agentsync.cc/) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Many agent targets | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Skills, hooks, memory, plugins | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Native/lossy/skipped report | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Canonical config | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Native/lossy/skipped report |
183
+
184
+ ### Evidence and operations
185
+
186
+ | Project | Receipts | Code impact | Agent activity | Cloud state | Replay and learning |
187
+ | --- | --- | --- | --- | --- | --- |
188
+ | [Brigade](https://github.com/escoffier-labs/brigade) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Command + exit code + Git state | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Impact queries + blast radius | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Center, fleet board, harness sessions | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Codex, Cursor, Jules task status | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Score + rollback, run diff/resume |
189
+ | [ActiveGraph](https://github.com/yoheinakajima/activegraph) | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Event trace | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Reactive behaviors | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Replay, fork, and diff |
190
+ | [Graphiti](https://github.com/getzep/graphiti) | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Episode provenance | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Temporal fact updates |
191
+ | [Codex Cloud](https://developers.openai.com/codex/cloud) | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Changed files + test results | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Task review | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Hosted task workspaces | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented |
192
+
193
+ "Not documented" means the capability was not found in that project's official README or docs on the dated pass. It is not proof of absence.
194
+
195
+ ## Scope
196
+
197
+ Brigade is a local, file-first control plane. Nothing runs until you run a command or your own scheduler does. The work ledger is machine-local JSON, not a distributed task database, and the optional fleet hub coordinates claims and events without replacing local records. Run budgets apply only when declared. Brigade does not push to GitHub, publish packages, or send messages unless you use an explicit send action. Full boundaries: [execution model](docs/execution-model.md).
198
+
199
+ Name collisions: this is `brigade-cli` from [escoffier-labs/brigade](https://github.com/escoffier-labs/brigade), not the archived CNCF Kubernetes Brigade, Spinabot Brigade, or the 2017 Python package that became Nornir.
200
+
201
+ ## Docs
202
+
203
+ - [First 10 minutes](docs/first-10-minutes.md) · [Overview](docs/overview.md) · [Technical guide](docs/technical-guide.md) · [Comparison](docs/comparison.md)
204
+ - [Execution model](docs/execution-model.md) · [Work closeout](docs/work-closeout.md) · [Outcome scoring](docs/outcome-scoring.md)
205
+ - [Memory care](docs/memory-care.md) · [Memory operations](docs/memory-operations.md) · [Code intelligence](docs/code-intelligence.md) · [MCP sync](docs/mcp-sync.md)
206
+ - [Agents guide](docs/agents-guide.md) · [Agent-assisted setup](docs/agent-assisted-setup.md) · [README coverage](docs/readme-coverage.md)
207
+ - [Runbooks](docs/runbooks/README.md) · [Fleet hub on a Proxmox LXC](docs/runbooks/fleet-hub-proxmox.md)
208
+ - [Security](docs/security.md) · [Command inventory](docs/command-inventory.md) · [Contributing](CONTRIBUTING.md) · [Roadmap](ROADMAP.md)
209
+
210
+ ## License
211
+
212
+ MIT. See [LICENSE](LICENSE).
213
+
214
+ Project identity: GitHub [`escoffier-labs/brigade`](https://github.com/escoffier-labs/brigade), website [brigade.tools](https://brigade.tools), PyPI [`brigade-cli`](https://pypi.org/project/brigade-cli/), npm [`@escoffier-labs/brigade`](https://www.npmjs.com/package/@escoffier-labs/brigade), command `brigade`.
@@ -4,9 +4,34 @@ Five minutes from install to a working agent kitchen.
4
4
 
5
5
  ## 1. Install
6
6
 
7
- Brigade supports Linux, macOS, and Windows with Python 3.10 or newer. Install `pipx` with the package manager for your OS, then install Brigade.
7
+ Brigade supports Linux, macOS, and Windows. Pick one route: npm on glibc Linux x64/ARM64, macOS x64/ARM64, or Windows x64 if Node.js 22+ and npm are already installed, or Python 3.10 or newer with pipx or uv. Other targets, including musl Linux (such as Alpine) and Windows ARM64, use the Python route.
8
8
 
9
- ### Linux
9
+ ### npm
10
+
11
+ The npm package needs Node.js 22 or newer and npm. It does not need Python or pipx first:
12
+
13
+ ```bash
14
+ npm install --global @escoffier-labs/brigade@0.29.0
15
+ brigade --version
16
+ brigade setup
17
+ ```
18
+
19
+ For a one-off run without a global install, put npx in front of every Brigade command. No global `brigade` command exists on this route:
20
+
21
+ ```bash
22
+ npx --yes @escoffier-labs/brigade@0.29.0 --version
23
+ npx --yes @escoffier-labs/brigade@0.29.0 setup
24
+ ```
25
+
26
+ The first launch downloads a managed Python, so it needs network access. Git is not included. Install it yourself for repository features. Supported npm targets are Linux (glibc) x64 and ARM64, macOS x64 and ARM64, and Windows x64. Other platforms use the Python route below. Keep npm optional dependencies enabled, because the uv binary arrives as a platform package. If pipx or uv also installed Brigade, check which `brigade` comes first on PATH.
27
+
28
+ Upgrade by installing a newer exact version with npm. `brigade update` refuses npm-managed installs. Service units installed from an npm install point at that version's private Python, so reinstall them after each npm upgrade. The [npm package notes](npm/feasibility/README.md) cover the cache location, offline behavior, and known platform limits.
29
+
30
+ ### Python with pipx
31
+
32
+ Install `pipx` with the package manager for your OS, then install Brigade.
33
+
34
+ #### Linux
10
35
 
11
36
  Ubuntu 23.04+, Debian 12+, and Fedora use an externally managed system Python. Install `pipx` from the distribution package instead of using `pip install --user`:
12
37
 
@@ -21,7 +46,7 @@ sudo dnf install pipx
21
46
  pipx ensurepath
22
47
  ```
23
48
 
24
- #### Arch Linux and Omarchy
49
+ ##### Arch Linux and Omarchy
25
50
 
26
51
  On Arch Linux, install [the `python-pipx` package](https://archlinux.org/packages/extra/any/python-pipx/):
27
52
 
@@ -52,14 +77,14 @@ brigade --version
52
77
 
53
78
  On another distribution, use its `pipx` package when available. The [pipx install guide](https://pipx.pypa.io/latest/how-to/install-pipx.html) covers the virtual-environment fallback.
54
79
 
55
- ### macOS
80
+ #### macOS
56
81
 
57
82
  ```bash
58
83
  brew install pipx
59
84
  pipx ensurepath
60
85
  ```
61
86
 
62
- ### Windows PowerShell
87
+ #### Windows PowerShell
63
88
 
64
89
  ```powershell
65
90
  scoop install pipx
@@ -87,7 +112,7 @@ uv tool install brigade-cli
87
112
  brigade setup
88
113
  ```
89
114
 
90
- For an intentional Brigade development machine on the `0.29` preview line:
115
+ For an intentional Brigade development machine with a pipx install, follow the preview line:
91
116
 
92
117
  ```bash
93
118
  brigade update --channel beta
@@ -0,0 +1,165 @@
1
+ <p align="center">
2
+ <img src="docs/assets/brigade-wordmark.svg" alt="Brigade (by Escoffier Labs)" width="640">
3
+ </p>
4
+
5
+ <p align="center">
6
+ One shared record for every coding agent you run: ready work, safe claims, proof that checks passed, and memory that carries over between tools.
7
+ </p>
8
+
9
+ <p align="center">
10
+ <a href="https://brigade.tools/docs/getting-started/install">Install</a> ·
11
+ <a href="https://brigade.tools/docs">Docs</a> ·
12
+ <a href="docs/comparison.md">Compare</a> ·
13
+ <a href="QUICKSTART.md">Quickstart</a>
14
+ </p>
15
+
16
+ <p align="center">
17
+ <img src="https://shieldcn.dev/github/ci/escoffier-labs/brigade.svg?workflow=ci.yml&branch=main&label=ci&size=xs" alt="CI status">
18
+ <img src="https://shieldcn.dev/pypi/v/brigade-cli.svg?label=pypi&size=xs" alt="PyPI version">
19
+ <img src="https://shieldcn.dev/https/raw.githubusercontent.com/escoffier-labs/brigade/download-metrics/downloads.json.svg?size=xs" alt="Combined PyPI and npm downloads per month">
20
+ <img src="https://shieldcn.dev/badge/python-3.10+-blue.svg?logo=python&logoColor=white&size=xs" alt="Python 3.10+">
21
+ <img src="https://shieldcn.dev/badge/rust-code_graph-b7410e.svg?logo=rust&logoColor=white&size=xs" alt="Rust: code graph engine">
22
+ <img src="https://shieldcn.dev/badge/go-evidence_log-00add8.svg?logo=go&logoColor=white&size=xs" alt="Go: evidence log engine">
23
+ <img src="https://shieldcn.dev/badge/license-MIT-4e7247.svg?size=xs" alt="MIT license">
24
+ </p>
25
+
26
+ Brigade is a local CLI for people who point Claude Code, Codex, Cursor, and other agents at the same repos. Each harness keeps its own notes, its own MCP config, and its own idea of what "tests pass" means. Brigade gives them one ledger in the repo instead: what is ready, who claimed it, which commands actually ran and how they exited, and what the last session handed off.
27
+
28
+ **Stable:** v0.29.0 (`brigade-cli==0.29.0` on PyPI, `@escoffier-labs/brigade@0.29.0` on npm). **Beta:** main is the 0.30 preview line. See the [changelog](CHANGELOG.md) for what each release changed.
29
+
30
+ The downloads badge sums `brigade-cli` on PyPI (excluding mirrors) and `@escoffier-labs/brigade` on npm over the same 30 completed UTC days. Downloads include automation and do not count unique people. The [metric JSON](https://raw.githubusercontent.com/escoffier-labs/brigade/download-metrics/downloads.json) records each source, the period, and the last successful refresh. npm platform companions are excluded. Daily refreshes retain the previous metric if a source fails validation or its latest day is more than three UTC days old.
31
+
32
+ ## What it does
33
+
34
+ - **Ready work and safe claims.** `brigade work ready` lists unblocked tasks. Claims are atomic, so two agents cannot take the same item.
35
+ - **Verification receipts.** A check run through Brigade records the command, the real exit code, and the Git state. An agent's "tests pass" becomes something you can open and read.
36
+ - **Shared memory with an owner.** Agents write handoffs. The memory owner lints and files them. Safe notes can auto-file, and risky ones wait for review. Session-start recall is capped.
37
+ - **One tool catalog, previewed first.** MCP servers, tools, and skills are defined once and shown as a dry run before Brigade writes them into each harness.
38
+ - **Cloud agents tracked next to local ones.** Tasks you hand to Codex Cloud, Cursor cloud agents, or Jules are registered with their provider task ID and reconciled against provider and GitHub state, so they show up beside local runs instead of disappearing into another tab.
39
+ - **Optional fleet view.** A self-hosted hub can arbitrate repo claims across machines and show runs, harness sessions, and cloud tasks on one board.
40
+
41
+ Learning in Brigade means scoring skills against captured receipts, then promoting or rolling them back. It is not autonomous reflective memory.
42
+
43
+ <details>
44
+ <summary><b>Examples</b></summary>
45
+
46
+ **Two agents, one backlog.** Each agent asks for the next ready task. The second claim on the same item fails with exit 13 and names the holder.
47
+
48
+ ```bash
49
+ brigade work ready --parallel-safe # ready tasks, grouped into waves that do not touch the same files
50
+ brigade work claim --next --actor codex # take the highest-priority ready task
51
+ ```
52
+
53
+ **"Tests pass" with a receipt.** The agent runs the check through Brigade instead of reporting it from memory.
54
+
55
+ ```bash
56
+ brigade work verify run --target . --command "pytest -q"
57
+ ```
58
+
59
+ The receipt keeps the command, exit code, Git commit, and dirty state, so a reviewer can check the claim without rerunning it.
60
+
61
+ **Switching harnesses mid-task.** Claude Code ends a session with a handoff. The next Codex session starts from the brief instead of a blank context.
62
+
63
+ ```bash
64
+ brigade handoff lint # check the handoff before it is filed
65
+ brigade work brief --target . # what the next agent sees at session start
66
+ ```
67
+
68
+ **One MCP config for every tool.**
69
+
70
+ ```bash
71
+ brigade mcp plan # read-only preview
72
+ brigade mcp sync --write # merge into each harness's native config
73
+ ```
74
+
75
+ </details>
76
+
77
+ ## Install
78
+
79
+ If Node.js 22 or newer and npm are installed on glibc Linux x64/ARM64, macOS x64/ARM64, or Windows x64, install the [npm package](https://www.npmjs.com/package/@escoffier-labs/brigade). This route does not need Python or pipx first:
80
+
81
+ ```bash
82
+ npm install --global @escoffier-labs/brigade@0.29.0
83
+ brigade setup
84
+ ```
85
+
86
+ To try it without a global install, run each command through npx instead, for example `npx --yes @escoffier-labs/brigade@0.29.0 --version`. The package brings its own uv, through platform packages that npm installs as optional dependencies, and the published 0.29.0 wheel. Leave optional dependencies enabled. The first launch downloads a managed Python, so it needs network access. Install Git yourself for repository features. npm targets are Linux (glibc) x64 and ARM64, macOS x64 and ARM64, and Windows x64. Upgrade with npm, because `brigade update` refuses npm-managed installs. Platform details and known limits: [npm package notes](npm/feasibility/README.md).
87
+
88
+ On other platforms, or to use Python 3.10 or newer directly:
89
+
90
+ ```bash
91
+ pipx install brigade-cli # or: uv tool install brigade-cli
92
+ brigade setup
93
+ ```
94
+
95
+ Then follow the [install guide](https://brigade.tools/docs/getting-started/install) or [QUICKSTART.md](QUICKSTART.md). To let your coding agent do the setup, hand it [first 10 minutes](docs/first-10-minutes.md) and the [agents guide](docs/agents-guide.md).
96
+
97
+ For preview builds on a pipx install, run `brigade update --channel beta`. Details: [update channels](docs/update-channels.md).
98
+
99
+ ## How it compares
100
+
101
+ Most neighbors go deeper on one layer. Brigade connects work, memory, tool config, and evidence around the same coding-agent task. Where a neighbor is stronger, its cell says so. Sources, dated notes, and projects that left these tables: [docs/comparison.md](docs/comparison.md) (checked 2026-10-18).
102
+
103
+ Key: <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Supported · <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Partial · <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented
104
+
105
+ ### Work and orchestration
106
+
107
+ | Project | Ready work | Claim safety | Parallel and run control | Task store | Verification |
108
+ | --- | --- | --- | --- | --- | --- |
109
+ | [Brigade](https://github.com/escoffier-labs/brigade) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Ready set + parallel-safe waves | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Fail-closed claims, optional hub | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Waves, campaigns, declared limits | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Local JSON ledger, not a task DB | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Command receipts |
110
+ | [Beads](https://github.com/gastownhall/beads) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Built in | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Atomic claim | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Agent workflow + Dolt sync | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Dolt-backed distributed store | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Task history |
111
+ | [Gas Town](https://github.com/gastownhall/gastown) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Beads-backed | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Multi-agent runtime | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Beads ledger | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Refinery merge-queue gates |
112
+ | [Claude Code agent teams](https://code.claude.com/docs/en/agent-teams) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Shared list with dependencies | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> File-locked self-claim | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Lead + teammates, experimental | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> One Claude Code session | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> TaskCompleted hook can block |
113
+ | [Backlog.md](https://github.com/MrLesk/Backlog.md) | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Board + dependencies | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Markdown in Git | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Acceptance criteria |
114
+
115
+ ### Memory
116
+
117
+ | Project | Durable memory | Capture and recall | Care and operations | Learning | Provenance |
118
+ | --- | --- | --- | --- | --- | --- |
119
+ | [Brigade](https://github.com/escoffier-labs/brigade) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Shared files + cards | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Linted handoffs + bounded recall | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Owner policy + Memory Operations | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Outcome score, promote, rollback | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Work receipts + sources |
120
+ | [agentmemory](https://github.com/rohitg00/agentmemory) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Shared coding-agent memory | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Hooks + MCP + REST | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Decay, audit, governed delete | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Lessons + reflect | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Write-time origin + citations |
121
+ | [Hindsight](https://github.com/vectorize-io/hindsight) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Facts + experiences + models | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Retain + recall | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Reflect + feedback | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Reflective memory learning | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Temporal + causal links |
122
+ | [Mem0](https://github.com/mem0ai/mem0) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> User + agent + session | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Extraction + hybrid search | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> History + metadata | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Extraction + retrieval | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Timestamps + entities |
123
+ | [Built-in harness memory](https://code.claude.com/docs/en/memory) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Per tool | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Rules + auto memory | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Varies by harness | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Harness-specific | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Harness-specific |
124
+
125
+ ### Tools and configuration
126
+
127
+ | Project | MCP | Rules and skills | Projection | Source of truth | Audit and rollback |
128
+ | --- | --- | --- | --- | --- | --- |
129
+ | [Brigade](https://github.com/escoffier-labs/brigade) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> MCP + tools catalog | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Skills + harness adapters | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Dry run first, then write | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Brigade catalog | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Preserve, gate, roll back |
130
+ | [Rulesync](https://github.com/dyoshikawa/rulesync) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Supported | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Rules, skills, hooks, subagents | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Per-target generation | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Rulesync project | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Generated outputs |
131
+ | [Ruler](https://github.com/intellectronica/ruler) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Supported | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Rules, skills, subagents | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Per-agent files | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> `.ruler/` directory | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Gitignore automation, no rollback |
132
+ | [add-mcp](https://github.com/neon-solutions/add-mcp) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> MCP servers | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Maps fields into native files | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Native files + sync | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Warns on dropped fields |
133
+ | [agentsync](https://agentsync.cc/) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Many agent targets | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Skills, hooks, memory, plugins | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Native/lossy/skipped report | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Canonical config | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Native/lossy/skipped report |
134
+
135
+ ### Evidence and operations
136
+
137
+ | Project | Receipts | Code impact | Agent activity | Cloud state | Replay and learning |
138
+ | --- | --- | --- | --- | --- | --- |
139
+ | [Brigade](https://github.com/escoffier-labs/brigade) | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Command + exit code + Git state | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Impact queries + blast radius | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Center, fleet board, harness sessions | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Codex, Cursor, Jules task status | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Score + rollback, run diff/resume |
140
+ | [ActiveGraph](https://github.com/yoheinakajima/activegraph) | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Event trace | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Reactive behaviors | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Replay, fork, and diff |
141
+ | [Graphiti](https://github.com/getzep/graphiti) | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Episode provenance | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Temporal fact updates |
142
+ | [Codex Cloud](https://developers.openai.com/codex/cloud) | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Changed files + test results | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented | <img src="docs/assets/status-partial.svg" width="10" height="10" alt="Partial"> Task review | <img src="docs/assets/status-supported.svg" width="10" height="10" alt="Supported"> Hosted task workspaces | <img src="docs/assets/status-undocumented.svg" width="10" height="10" alt="Not documented"> Not documented |
143
+
144
+ "Not documented" means the capability was not found in that project's official README or docs on the dated pass. It is not proof of absence.
145
+
146
+ ## Scope
147
+
148
+ Brigade is a local, file-first control plane. Nothing runs until you run a command or your own scheduler does. The work ledger is machine-local JSON, not a distributed task database, and the optional fleet hub coordinates claims and events without replacing local records. Run budgets apply only when declared. Brigade does not push to GitHub, publish packages, or send messages unless you use an explicit send action. Full boundaries: [execution model](docs/execution-model.md).
149
+
150
+ Name collisions: this is `brigade-cli` from [escoffier-labs/brigade](https://github.com/escoffier-labs/brigade), not the archived CNCF Kubernetes Brigade, Spinabot Brigade, or the 2017 Python package that became Nornir.
151
+
152
+ ## Docs
153
+
154
+ - [First 10 minutes](docs/first-10-minutes.md) · [Overview](docs/overview.md) · [Technical guide](docs/technical-guide.md) · [Comparison](docs/comparison.md)
155
+ - [Execution model](docs/execution-model.md) · [Work closeout](docs/work-closeout.md) · [Outcome scoring](docs/outcome-scoring.md)
156
+ - [Memory care](docs/memory-care.md) · [Memory operations](docs/memory-operations.md) · [Code intelligence](docs/code-intelligence.md) · [MCP sync](docs/mcp-sync.md)
157
+ - [Agents guide](docs/agents-guide.md) · [Agent-assisted setup](docs/agent-assisted-setup.md) · [README coverage](docs/readme-coverage.md)
158
+ - [Runbooks](docs/runbooks/README.md) · [Fleet hub on a Proxmox LXC](docs/runbooks/fleet-hub-proxmox.md)
159
+ - [Security](docs/security.md) · [Command inventory](docs/command-inventory.md) · [Contributing](CONTRIBUTING.md) · [Roadmap](ROADMAP.md)
160
+
161
+ ## License
162
+
163
+ MIT. See [LICENSE](LICENSE).
164
+
165
+ Project identity: GitHub [`escoffier-labs/brigade`](https://github.com/escoffier-labs/brigade), website [brigade.tools](https://brigade.tools), PyPI [`brigade-cli`](https://pypi.org/project/brigade-cli/), npm [`@escoffier-labs/brigade`](https://www.npmjs.com/package/@escoffier-labs/brigade), command `brigade`.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "brigade-cli"
7
- version = "0.29.0"
7
+ version = "0.30.0"
8
8
  description = "Your agents run loops. Brigade keeps the receipts. Local control plane for multi-agent coding: share MCP/tools/memory, remember via handoffs, prove with file receipts, improve by promoting skills only on real exit codes. Claude Code, Codex, Grok, Hermes, OpenClaw, and more. Stations for evidence, code graph, pantry, skills. pipx install brigade-cli."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -49,7 +49,7 @@ GraphTrail = "https://brigade.tools/graphtrail"
49
49
  Issues = "https://github.com/escoffier-labs/brigade/issues"
50
50
 
51
51
  [project.scripts]
52
- brigade = "brigade.cli:main"
52
+ brigade = "brigade.cli:process_main"
53
53
  brigade-hook = "brigade.claude_hooks.entry:main"
54
54
 
55
55
  [tool.setuptools.packages.find]
@@ -1,3 +1,3 @@
1
1
  """Brigade: local operator-system CLI for agent workspaces."""
2
2
 
3
- __version__ = "0.29.0"
3
+ __version__ = "0.30.0"
@@ -1,6 +1,6 @@
1
1
  """Enable `python -m brigade`."""
2
2
 
3
- from .cli import main
3
+ from .cli import process_main
4
4
 
5
5
  if __name__ == "__main__":
6
- raise SystemExit(main())
6
+ process_main()
@@ -261,5 +261,19 @@ def main(argv=None) -> int:
261
261
  return exit_code
262
262
 
263
263
 
264
+ def process_main() -> None:
265
+ """Own process-only exit. Final shutdown callbacks must not spawn children."""
266
+ from ..work_cmd.verify_runtime import _verify_process_signals
267
+
268
+ with _verify_process_signals() as owner:
269
+ exit_code = main()
270
+ if owner.handlers:
271
+ for stream in (sys.stdout, sys.stderr):
272
+ if stream is not None:
273
+ stream.flush()
274
+ owner.finish()
275
+ raise SystemExit(exit_code)
276
+
277
+
264
278
  if __name__ == "__main__": # pragma: no cover
265
- sys.exit(main())
279
+ process_main()
@@ -0,0 +1,25 @@
1
+ """brigade fleet owners command group (hub ownership map)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import argparse
6
+
7
+ from .. import fleet_client_policy
8
+ from .fleet_policy import _emit, _fail
9
+
10
+
11
+ def register(fleet_sub: argparse._SubParsersAction) -> None:
12
+ p_owners = fleet_sub.add_parser("owners", help="Read the fleet ownership map: charters and what each owner holds.")
13
+ owners_sub = p_owners.add_subparsers(dest="owners_command", metavar="<owners-command>")
14
+ owners_sub.required = True
15
+
16
+ p_show = owners_sub.add_parser("show", help="Print the hub ownership map as JSON (brigade.fleet_owners.v1).")
17
+ p_show.set_defaults(func=_dispatch_show)
18
+
19
+
20
+ def _dispatch_show(args: argparse.Namespace) -> int:
21
+ try:
22
+ payload = fleet_client_policy.show_owners()
23
+ except Exception as exc:
24
+ return _fail(exc)
25
+ return _emit(payload, json_out=True)
@@ -175,6 +175,12 @@ def register(fleet_sub: argparse._SubParsersAction) -> None:
175
175
  p_ack.add_argument("--json", action="store_true", help="Emit JSON.")
176
176
  p_ack.set_defaults(func=_dispatch_acknowledge)
177
177
 
178
+ # Charters live in the policy document, so the owners group registers with it.
179
+ # cli/fleet.py sits at the module size ceiling and cannot take another import.
180
+ from .fleet_owners import register as register_owners
181
+
182
+ register_owners(fleet_sub)
183
+
178
184
 
179
185
  def _add_document_flags(parser: argparse.ArgumentParser) -> None:
180
186
  parser.add_argument("--file", type=Path, required=True, dest="file")
@@ -1258,6 +1258,9 @@ def _dispatch_grokbot(args, target: Path) -> int:
1258
1258
  dot,
1259
1259
  )
1260
1260
 
1261
+ if isinstance(exc, grokbot_t3.T3DispatchError) and exc.code == "unsupported-platform":
1262
+ print(f"error: {exc}", file=sys.stderr)
1263
+ return 2
1261
1264
  if isinstance(
1262
1265
  exc,
1263
1266
  (