brigade-cli 0.13.0__tar.gz → 0.14.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 (344) hide show
  1. {brigade_cli-0.13.0/src/brigade_cli.egg-info → brigade_cli-0.14.0}/PKG-INFO +86 -28
  2. brigade_cli-0.13.0/PKG-INFO → brigade_cli-0.14.0/README.md +82 -55
  3. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/pyproject.toml +4 -3
  4. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/__init__.py +1 -1
  5. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/init.py +10 -0
  6. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/install.py +35 -0
  7. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/depth/workspace.json +1 -0
  8. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/hermes/memory-handoff.harness.json +1 -1
  9. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/hermes/model-lanes.harness.json +1 -1
  10. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/hermes/workspace.harness.json +1 -1
  11. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/memory/chat-memory-sweep.example.json +1 -1
  12. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/memory/memory-care.example.json +1 -1
  13. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/policies/personal.json +1 -1
  14. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/policies/public-content.json +1 -1
  15. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/policies/public-repo.json +1 -1
  16. brigade_cli-0.14.0/src/brigade/templates/skills/brigade-work/SKILL.md +57 -0
  17. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/workspace/AGENTS.md +12 -23
  18. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/workspace/CLAUDE.md +4 -0
  19. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/workspace/INSTALL_FOR_AGENTS.md +11 -0
  20. brigade_cli-0.13.0/README.md → brigade_cli-0.14.0/src/brigade_cli.egg-info/PKG-INFO +113 -25
  21. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade_cli.egg-info/SOURCES.txt +1 -0
  22. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_init.py +30 -0
  23. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/LICENSE +0 -0
  24. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/MANIFEST.in +0 -0
  25. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/QUICKSTART.md +0 -0
  26. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/setup.cfg +0 -0
  27. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/__main__.py +0 -0
  28. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/aboyeur.py +0 -0
  29. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/actionqueue.py +0 -0
  30. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/add.py +0 -0
  31. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/agents.py +0 -0
  32. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/budgets.py +0 -0
  33. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/budgets_cmd.py +0 -0
  34. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/center_cmd.py +0 -0
  35. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/chat_cmd.py +0 -0
  36. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/__init__.py +0 -0
  37. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/_common.py +0 -0
  38. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/add.py +0 -0
  39. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/budgets.py +0 -0
  40. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/center.py +0 -0
  41. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/chat.py +0 -0
  42. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/completions.py +0 -0
  43. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/context.py +0 -0
  44. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/daily.py +0 -0
  45. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/doctor.py +0 -0
  46. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/dogfood.py +0 -0
  47. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/friction.py +0 -0
  48. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/handoff.py +0 -0
  49. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/handoff_template.py +0 -0
  50. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/hermes_fragments.py +0 -0
  51. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/ingest.py +0 -0
  52. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/learn.py +0 -0
  53. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/mcp.py +0 -0
  54. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/memory.py +0 -0
  55. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/notifications.py +0 -0
  56. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/openclaw_fragments.py +0 -0
  57. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/operator.py +0 -0
  58. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/outcome.py +0 -0
  59. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/pantry.py +0 -0
  60. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/projects.py +0 -0
  61. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/reconfigure.py +0 -0
  62. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/release.py +0 -0
  63. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/repos.py +0 -0
  64. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/research.py +0 -0
  65. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/roadmap.py +0 -0
  66. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/roster.py +0 -0
  67. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/run.py +0 -0
  68. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/runbook.py +0 -0
  69. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/runs.py +0 -0
  70. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/scrub.py +0 -0
  71. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/security.py +0 -0
  72. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/skills.py +0 -0
  73. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/status.py +0 -0
  74. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/tools.py +0 -0
  75. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/untrusted.py +0 -0
  76. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/cli/work.py +0 -0
  77. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/completions.py +0 -0
  78. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/config.py +0 -0
  79. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/context_cmd.py +0 -0
  80. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/daily_cmd.py +0 -0
  81. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/doctor.py +0 -0
  82. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/dogfood_cmd.py +0 -0
  83. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/fragments.py +0 -0
  84. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/friction_cmd.py +0 -0
  85. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/handoff.py +0 -0
  86. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/handoff_cmd.py +0 -0
  87. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/hermes_adapter.py +0 -0
  88. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/ingest.py +0 -0
  89. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/learn_cmd.py +0 -0
  90. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/localio.py +0 -0
  91. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/managed.py +0 -0
  92. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/mcp_adapters.py +0 -0
  93. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/mcp_cmd.py +0 -0
  94. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/mcp_server.py +0 -0
  95. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/memory_cmd.py +0 -0
  96. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/notifications_cmd.py +0 -0
  97. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/operator_cmd/__init__.py +0 -0
  98. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/operator_cmd/adoption.py +0 -0
  99. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/operator_cmd/guide.py +0 -0
  100. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/operator_cmd/health.py +0 -0
  101. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/operator_cmd/lifecycle.py +0 -0
  102. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/operator_cmd/migration.py +0 -0
  103. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/operator_cmd/surfaces.py +0 -0
  104. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/outcome.py +0 -0
  105. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/outcome_cmd.py +0 -0
  106. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/pantry_cmd.py +0 -0
  107. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/phases_cmd.py +0 -0
  108. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/proc.py +0 -0
  109. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/projects_cmd.py +0 -0
  110. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/prompt.py +0 -0
  111. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/py.typed +0 -0
  112. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/reconfigure.py +0 -0
  113. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/registry.py +0 -0
  114. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/release_cmd.py +0 -0
  115. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/reportstore.py +0 -0
  116. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/repos_cmd.py +0 -0
  117. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/research/__init__.py +0 -0
  118. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/research/config.py +0 -0
  119. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/research/engine.py +0 -0
  120. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/research/extract.py +0 -0
  121. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/research/handoff.py +0 -0
  122. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/research/llm.py +0 -0
  123. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/research/registry.py +0 -0
  124. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/research/report.py +0 -0
  125. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/research/sources/__init__.py +0 -0
  126. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/research/sources/cli.py +0 -0
  127. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/research/sources/local.py +0 -0
  128. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/research/sources/web.py +0 -0
  129. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/research/types.py +0 -0
  130. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/research_cmd.py +0 -0
  131. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/roadmap_cmd.py +0 -0
  132. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/roster.py +0 -0
  133. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/roster_cmd.py +0 -0
  134. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/runbook_cmd.py +0 -0
  135. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/runguard.py +0 -0
  136. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/runs_cmd.py +0 -0
  137. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/scrub.py +0 -0
  138. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/security_cmd.py +0 -0
  139. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/selection.py +0 -0
  140. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/skills_cmd.py +0 -0
  141. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/station.py +0 -0
  142. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/status.py +0 -0
  143. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/adal/memory-handoffs/TEMPLATE.md +0 -0
  144. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/aider/memory-handoffs/TEMPLATE.md +0 -0
  145. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/amp/memory-handoffs/TEMPLATE.md +0 -0
  146. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/antigravity/memory-handoffs/TEMPLATE.md +0 -0
  147. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/claude/memory-handoffs/TEMPLATE.md +0 -0
  148. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/codex/memory-handoffs/TEMPLATE.md +0 -0
  149. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/continue/memory-handoffs/TEMPLATE.md +0 -0
  150. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/copilot/memory-handoffs/TEMPLATE.md +0 -0
  151. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/crush/memory-handoffs/TEMPLATE.md +0 -0
  152. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/cursor/memory-handoffs/TEMPLATE.md +0 -0
  153. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/depth/repo.json +0 -0
  154. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/generic/harness-adapter-checklist.md +0 -0
  155. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/generic/memory-contract.md +0 -0
  156. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/goose/memory-handoffs/TEMPLATE.md +0 -0
  157. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/grok/memory-handoffs/TEMPLATE.md +0 -0
  158. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/handoff/handoff-sources.example.json +0 -0
  159. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/handoff/openclaw-ingest-receipt.example.json +0 -0
  160. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/adal.json +0 -0
  161. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/aider.json +0 -0
  162. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/amp.json +0 -0
  163. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/antigravity.json +0 -0
  164. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/claude.json +0 -0
  165. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/codex.json +0 -0
  166. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/continue.json +0 -0
  167. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/copilot.json +0 -0
  168. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/crush.json +0 -0
  169. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/cursor.json +0 -0
  170. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/goose.json +0 -0
  171. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/grok.json +0 -0
  172. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/hermes.json +0 -0
  173. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/kimi.json +0 -0
  174. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/openclaw.json +0 -0
  175. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/opencode.json +0 -0
  176. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/openhands.json +0 -0
  177. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/pi.json +0 -0
  178. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/harnesses/qwen.json +0 -0
  179. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/hermes/README.md +0 -0
  180. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/hermes/memory-handoffs/TEMPLATE.md +0 -0
  181. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/hooks/pre-push +0 -0
  182. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/includes/publisher.json +0 -0
  183. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/kimi/memory-handoffs/TEMPLATE.md +0 -0
  184. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/memory/cards/backup-restic.md +0 -0
  185. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/memory/cards/chat-surface-crawlers.md +0 -0
  186. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/memory/cards/content-safety.md +0 -0
  187. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/memory/cards/handoff-flow.md +0 -0
  188. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/memory/cards/memory-architecture.md +0 -0
  189. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/memory/cards/memory-care-staleness.md +0 -0
  190. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/memory/cards/memory-scanner.md +0 -0
  191. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/memory/cards/multi-workspace-handoff-admin.md +0 -0
  192. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/memory/cards/obsidian-notes.md +0 -0
  193. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/memory/cards/pipeline-standups.md +0 -0
  194. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/memory/cards/tokenjuice-output-compaction.md +0 -0
  195. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/openclaw/README.md +0 -0
  196. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/openclaw/acp-escalation.openclaw.json +0 -0
  197. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/openclaw/memory-sweep-cron.openclaw.json +0 -0
  198. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/openclaw/model-aliases.openclaw.json +0 -0
  199. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/openclaw/ollama-memory-search.openclaw.json +0 -0
  200. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/opencode/memory-handoffs/TEMPLATE.md +0 -0
  201. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/openhands/memory-handoffs/TEMPLATE.md +0 -0
  202. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/pi/memory-handoffs/TEMPLATE.md +0 -0
  203. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/qwen/memory-handoffs/TEMPLATE.md +0 -0
  204. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/scripts/backup-restic.sh +0 -0
  205. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/skills/note/SKILL.md +0 -0
  206. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/workspace/HEARTBEAT.md +0 -0
  207. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/workspace/IDENTITY.md +0 -0
  208. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/workspace/MEMORY.md +0 -0
  209. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/workspace/SAFETY_RULES.md +0 -0
  210. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/workspace/SOUL.md +0 -0
  211. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/workspace/TOOLS.md +0 -0
  212. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/workspace/USER.md +0 -0
  213. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/workspace/rules/acceptance-driven-work.md +0 -0
  214. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates/workspace/rules/issue-tdd-loop.md +0 -0
  215. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/templates.py +0 -0
  216. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/toml_compat.py +0 -0
  217. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/tools_cmd.py +0 -0
  218. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/untrusted.py +0 -0
  219. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/untrusted_cmd.py +0 -0
  220. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/work_cmd/__init__.py +0 -0
  221. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/work_cmd/backup.py +0 -0
  222. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/work_cmd/config.py +0 -0
  223. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/work_cmd/constants.py +0 -0
  224. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/work_cmd/helpers.py +0 -0
  225. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/work_cmd/imports.py +0 -0
  226. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/work_cmd/ledger.py +0 -0
  227. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/work_cmd/reviews.py +0 -0
  228. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/work_cmd/scanners.py +0 -0
  229. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/work_cmd/services.py +0 -0
  230. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/work_cmd/session.py +0 -0
  231. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/work_cmd/sweeps.py +0 -0
  232. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade/work_cmd/verification.py +0 -0
  233. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade_cli.egg-info/dependency_links.txt +0 -0
  234. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade_cli.egg-info/entry_points.txt +0 -0
  235. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade_cli.egg-info/requires.txt +0 -0
  236. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/src/brigade_cli.egg-info/top_level.txt +0 -0
  237. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_aboyeur.py +0 -0
  238. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_actionqueue.py +0 -0
  239. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_add.py +0 -0
  240. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_agents.py +0 -0
  241. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_budgets.py +0 -0
  242. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_cli_alias.py +0 -0
  243. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_cli_help.py +0 -0
  244. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_completions.py +0 -0
  245. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_config.py +0 -0
  246. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_context_cmd.py +0 -0
  247. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_doctor.py +0 -0
  248. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_dogfood_cmd.py +0 -0
  249. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_fragments.py +0 -0
  250. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_friction_cmd.py +0 -0
  251. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_gitignore.py +0 -0
  252. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_handoff.py +0 -0
  253. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_handoff_cmd.py +0 -0
  254. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_ingest.py +0 -0
  255. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_install.py +0 -0
  256. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_localio.py +0 -0
  257. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_managed.py +0 -0
  258. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_mcp_adapters.py +0 -0
  259. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_mcp_cmd.py +0 -0
  260. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_mcp_integration.py +0 -0
  261. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_mcp_server.py +0 -0
  262. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_mcp_user_scope.py +0 -0
  263. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_memory_cmd.py +0 -0
  264. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_memory_search_mcp.py +0 -0
  265. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_neutrality.py +0 -0
  266. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_notifications_cmd.py +0 -0
  267. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_operator_checkup.py +0 -0
  268. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_operator_cmd.py +0 -0
  269. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_outcome.py +0 -0
  270. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_outcome_cmd.py +0 -0
  271. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_outcome_execute.py +0 -0
  272. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_pantry_cmd.py +0 -0
  273. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_parity_backlog.py +0 -0
  274. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase100_cmd.py +0 -0
  275. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase101_cmd.py +0 -0
  276. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase165_cmd.py +0 -0
  277. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase36_cmd.py +0 -0
  278. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase37_cmd.py +0 -0
  279. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase38_cmd.py +0 -0
  280. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase39_cmd.py +0 -0
  281. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase40_cmd.py +0 -0
  282. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase41_cmd.py +0 -0
  283. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase42_cmd.py +0 -0
  284. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase43_cmd.py +0 -0
  285. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase44_cmd.py +0 -0
  286. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase45_cmd.py +0 -0
  287. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase46_50_cmd.py +0 -0
  288. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase51_55_cmd.py +0 -0
  289. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase56_60_cmd.py +0 -0
  290. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase96_cmd.py +0 -0
  291. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase97_cmd.py +0 -0
  292. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase98_cmd.py +0 -0
  293. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_phase99_cmd.py +0 -0
  294. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_pre_push_hook.py +0 -0
  295. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_privacy_regression.py +0 -0
  296. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_proc.py +0 -0
  297. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_prompt.py +0 -0
  298. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_read_only_enforcement.py +0 -0
  299. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_reconfigure.py +0 -0
  300. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_registry.py +0 -0
  301. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_release_cmd.py +0 -0
  302. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_reportstore.py +0 -0
  303. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_repos_cmd.py +0 -0
  304. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_research_cli_sources.py +0 -0
  305. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_research_cmd.py +0 -0
  306. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_research_config.py +0 -0
  307. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_research_engine.py +0 -0
  308. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_research_extract.py +0 -0
  309. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_research_handoff.py +0 -0
  310. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_research_llm.py +0 -0
  311. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_research_local_sources.py +0 -0
  312. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_research_registry.py +0 -0
  313. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_research_report.py +0 -0
  314. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_research_types.py +0 -0
  315. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_research_web.py +0 -0
  316. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_roadmap_cmd.py +0 -0
  317. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_roster.py +0 -0
  318. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_roster_cmd.py +0 -0
  319. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_run_cli.py +0 -0
  320. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_runbook_cmd.py +0 -0
  321. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_runbook_import.py +0 -0
  322. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_runguard.py +0 -0
  323. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_runs_cmd.py +0 -0
  324. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_scrub.py +0 -0
  325. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_security_cmd.py +0 -0
  326. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_security_diff.py +0 -0
  327. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_selection.py +0 -0
  328. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_skills_cmd.py +0 -0
  329. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_station.py +0 -0
  330. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_status.py +0 -0
  331. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_subprocess_guards.py +0 -0
  332. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_toml_compat.py +0 -0
  333. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_untrusted.py +0 -0
  334. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_untrusted_cmd.py +0 -0
  335. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_work_cmd_backup.py +0 -0
  336. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_work_cmd_facade.py +0 -0
  337. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_work_cmd_imports.py +0 -0
  338. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_work_cmd_ledger.py +0 -0
  339. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_work_cmd_reviews.py +0 -0
  340. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_work_cmd_scanners.py +0 -0
  341. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_work_cmd_services.py +0 -0
  342. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_work_cmd_session.py +0 -0
  343. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_work_cmd_sweeps.py +0 -0
  344. {brigade_cli-0.13.0 → brigade_cli-0.14.0}/tests/test_work_cmd_verification.py +0 -0
@@ -1,17 +1,18 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: brigade-cli
3
- Version: 0.13.0
4
- Summary: AI agent memory, handoffs, and local guardrails for Codex, Claude Code, OpenCode, Hermes, and OpenClaw.
3
+ Version: 0.14.0
4
+ Summary: One local source for the MCP servers, tools, and memory your AI coding agents share (Codex, Claude Code, OpenCode, Hermes, OpenClaw), merged into each tool's native config with a review gate and a receipt for every change.
5
5
  Author-email: Solomon Neas <me@solomonneas.dev>
6
6
  License: MIT
7
7
  Project-URL: Homepage, https://brigade.tools
8
+ Project-URL: Documentation, https://brigade.tools/docs
8
9
  Project-URL: Repository, https://github.com/escoffier-labs/brigade
9
10
  Project-URL: Cookbook, https://github.com/escoffier-labs/solos-cookbook
10
11
  Project-URL: OpenClaw, https://github.com/solomonneas/openclaw
11
12
  Project-URL: ContentGuard, https://github.com/escoffier-labs/content-guard
12
13
  Project-URL: AgentPantry, https://github.com/escoffier-labs/agentpantry
13
14
  Project-URL: Issues, https://github.com/escoffier-labs/brigade/issues
14
- Keywords: agents,ai-agents,agent-memory,agent-handoffs,ai-memory,openclaw,claude-code,codex,opencode,memory,bootstrap,brigade,brigade-cli,operator,local-first,guardrails,agents-md
15
+ Keywords: agents,ai-agents,agent-memory,agent-handoffs,ai-memory,mcp,mcp-config,mcp-sync,model-context-protocol,openclaw,claude-code,codex,opencode,memory,bootstrap,brigade,brigade-cli,operator,local-first,guardrails,agents-md
15
16
  Classifier: Development Status :: 3 - Alpha
16
17
  Classifier: License :: OSI Approved :: MIT License
17
18
  Classifier: Programming Language :: Python :: 3
@@ -29,15 +30,19 @@ Requires-Dist: playwright>=1.40; extra == "research"
29
30
  Dynamic: license-file
30
31
 
31
32
  <p align="center">
32
- <img src="docs/assets/brigade-social-preview.jpg" alt="Brigade" width="900">
33
+ <img src="docs/assets/brigade-social-preview.jpg" alt="Brigade banner" width="900">
33
34
  </p>
34
35
 
35
- <h1 align="center">Brigade CLI</h1>
36
+ <h1 align="center">Brigade</h1>
36
37
 
37
38
  <p align="center">
38
39
  <strong>One canonical source for the MCP servers, tools, and memory your AI coding agents share, merged into each tool's native config with a review gate and a receipt for every change. Local files, no daemon, no lock-in.</strong>
39
40
  </p>
40
41
 
42
+ <p align="center">
43
+ <a href="https://brigade.tools">Website</a> &middot; <a href="https://brigade.tools/docs">Docs</a> &middot; <a href="#try-it-in-60-seconds">Quickstart</a>
44
+ </p>
45
+
41
46
  <p align="center">
42
47
  <img src="https://img.shields.io/github/actions/workflow/status/escoffier-labs/brigade/ci.yml?branch=main&style=for-the-badge&label=ci" alt="CI status">
43
48
  <img src="https://img.shields.io/pypi/v/brigade-cli?style=for-the-badge&label=pypi" alt="PyPI version">
@@ -47,10 +52,39 @@ Dynamic: license-file
47
52
 
48
53
  Your agents run loops. Brigade keeps the receipts.
49
54
 
55
+ <p align="center">
56
+ <img src="docs/assets/quickstart.svg" alt="Recording: brigade operator quickstart wires a repo and brigade operator doctor reports ready, in seconds" width="760">
57
+ </p>
58
+
59
+ <p align="center"><em><code>brigade operator quickstart</code> wires a repo and <code>operator doctor</code> reports ready, in seconds.</em></p>
60
+
50
61
  ## What it does
51
62
 
52
63
  You run more than one agent CLI. Each one keeps its MCP servers in its own config file, its memory in its own silo, and writes to both without review. Brigade is the local layer that fixes that. You keep one canonical source for your MCP servers, your tool and skill catalog, and your memory, and Brigade merges each into the tools you actually use: MCP servers into each tool's native config, tools and skills projected into each harness, and one shared memory owned in one place. A review gate sits in front of anything that gets written, and every consequential change lands a receipt you can grep, diff, and roll back. No daemon, no hosted service, no vendor lock-in: it writes plain files in your repo when you run a command, and that is all it does.
53
64
 
65
+ ## Install
66
+
67
+ `brigade operator quickstart` (in [Try it in 60 seconds](#try-it-in-60-seconds)) wires one code repo for one harness. For an OpenClaw or Hermes workspace instead:
68
+
69
+ ```bash
70
+ brigade operator quickstart --target ~/agent-workspace --depth workspace --harnesses openclaw,hermes --owner openclaw
71
+ ```
72
+
73
+ Use `--dry-run` first to preview the planned steps without writing anything. Pass more harnesses as a comma-separated list; quickstart only wires the harnesses you select and leaves the rest alone.
74
+
75
+ Write a handoff and check the wiring:
76
+
77
+ ```bash
78
+ brigade handoff draft --target ./my-repo --inbox codex \
79
+ --title "What changed" \
80
+ --summary "Short note future agents should know." \
81
+ --content "The durable note itself goes here."
82
+ brigade handoff lint --target ./my-repo
83
+ brigade handoff doctor --target ./my-repo
84
+ ```
85
+
86
+ New here? Start with [QUICKSTART.md](QUICKSTART.md) for the five-minute install, then [docs/first-10-minutes.md](docs/first-10-minutes.md) for the guided first session. Already have a homegrown setup with scripts, crons, and handoff folders? Brigade has an adoption path that inventories what you have before changing anything: start with `brigade operator adopt plan` and see the [technical guide](docs/technical-guide.md). Want an agent to set this up for you? Point it at this repo; [AGENTS.md](AGENTS.md) tells it exactly what to do and where to stop.
87
+
54
88
  ## Try it in 60 seconds
55
89
 
56
90
  ```bash
@@ -62,6 +96,17 @@ brigade operator doctor --target ./my-repo --profile local-operator # verify
62
96
 
63
97
  That installs the CLI, wires memory, handoffs, and local guardrails into one repo for a single harness, and prints a readiness check. Nothing leaves your machine and no daemon is started. Add `--dry-run` to preview the file-by-file plan before anything is written. More harnesses, workspace setups, and the homegrown-adoption path are under [Install](#install).
64
98
 
99
+ The run ends with a readiness verdict (the recording above shows the full report):
100
+
101
+ ```
102
+ operator doctor: ~/my-repo
103
+ profile: local-operator
104
+ ready: yes
105
+ blocking_issues: 0
106
+ next: brigade daily plan --target .
107
+ content_guard: installed hook=configured-hooks-path policy=public-repo
108
+ ```
109
+
65
110
  ## One MCP catalog, synced into every tool
66
111
 
67
112
  Every agent tool reads its MCP servers from a different file in a different shape. The same servers wired across Claude Code, Cursor, Codex, VS Code, OpenCode, and Antigravity means hand-editing six configs and keeping them in sync forever. Brigade keeps one canonical catalog and merges it into each tool's native config for you.
@@ -75,6 +120,22 @@ brigade mcp sync # dry-run: show the diff for every tool
75
120
  brigade mcp sync --write # merge into each tool's config
76
121
  ```
77
122
 
123
+ Run `brigade mcp sync` and you get the per-tool plan, server by server, before a single file changes. Two servers in the catalog, projected across the harnesses wired in this repo:
124
+
125
+ ```
126
+ brigade mcp sync (dry-run): ~/my-repo
127
+ claude github missing -> create
128
+ claude sentry missing -> create
129
+ cursor github missing -> create
130
+ cursor sentry missing -> create
131
+ codex github missing -> create
132
+ codex sentry missing -> create
133
+ vscode github missing -> create
134
+ vscode sentry missing -> create
135
+ opencode github missing -> create
136
+ opencode sentry missing -> create
137
+ ```
138
+
78
139
  One catalog (`.brigade/mcp.json`), six native targets:
79
140
 
80
141
  | Tool | File it writes |
@@ -192,12 +253,22 @@ The full tour of every station lives in [docs/overview.md](docs/overview.md).
192
253
 
193
254
  ## Why not something else?
194
255
 
195
- - **mem0, Letta, and friends** are memory layers for apps you are building, usually behind an API or a server. Brigade is for the agent CLIs you already run, and it is file-first: your memory is markdown in your repo, reviewable in git, readable without Brigade.
256
+ - **mem0, Letta, agentmemory, and friends** are memory layers for apps you are building, usually behind an API or a server. Brigade is for the agent CLIs you already run, and it is file-first: your memory is markdown in your repo, reviewable in git, readable without Brigade.
257
+ - **add-mcp, chezmoi, and config-sync scripts** move MCP or dotfiles around, but they sync one thing with no review gate and no receipt, and they do not touch memory or skills. Brigade keeps one canonical source for MCP servers, tools, skills, and memory together, shows the per-tool diff before any write, and leaves a receipt you can roll back.
196
258
  - **Native harness memory** (each tool's own auto-memory) is a per-tool silo. It does not cross harnesses, and it writes without review. Brigade gives every tool one shared format and one canonical owner, with a review gate in between.
197
259
  - **Already running Hermes, or any self-improving agent?** Keep it. Brigade is not a replacement, it is the verification layer on top. A built-in learning loop grades its own work and keeps what it learns inside one tool. Brigade promotes a skill only when a real signal confirms it, keeps every learned skill as portable markdown in your git, and runs one loop across your whole fleet.
198
260
  - **A plain CLAUDE.md / AGENTS.md** works great until it bloats past the context budget and goes stale. Brigade keeps bootstrap files slim, moves detail into indexed cards, and flags staleness instead of trusting last month's facts forever.
199
261
  - **A daemon or hosted service** would be simpler to demo and worse to trust. Brigade writes local files when you run a command, and that is all it does.
200
262
 
263
+ At a glance, against the tools people reach for first:
264
+
265
+ | | Across harnesses | MCP, tools, and memory in one source | Review gate + receipts | Local files, no daemon |
266
+ |---|:---:|:---:|:---:|:---:|
267
+ | **Brigade** | yes | yes | yes | yes |
268
+ | mem0 / Letta / agentmemory | per-SDK | memory only | no | usually hosted or a server |
269
+ | add-mcp / chezmoi / config-sync | partial | MCP or dotfiles only | no | yes |
270
+ | Native harness memory | no | memory only | no | yes |
271
+
201
272
  ## What Brigade is not
202
273
 
203
274
  Brigade is not a hosted memory service, a daemon, or an automatic release bot.
@@ -213,31 +284,14 @@ It does not:
213
284
 
214
285
  That pause is the point. Agent memory should be useful, not noisy.
215
286
 
216
- ## Install
217
-
218
- `brigade operator quickstart` (in [Try it in 60 seconds](#try-it-in-60-seconds)) wires one code repo for one harness. For an OpenClaw or Hermes workspace instead:
219
-
220
- ```bash
221
- brigade operator quickstart --target ~/agent-workspace --depth workspace --harnesses openclaw,hermes --owner openclaw
222
- ```
223
-
224
- Use `--dry-run` first to preview the planned steps without writing anything. Pass more harnesses as a comma-separated list; quickstart only wires the harnesses you select and leaves the rest alone.
225
-
226
- Write a handoff and check the wiring:
227
-
228
- ```bash
229
- brigade handoff draft --target ./my-repo --inbox codex \
230
- --title "What changed" \
231
- --summary "Short note future agents should know." \
232
- --content "The durable note itself goes here."
233
- brigade handoff lint --target ./my-repo
234
- brigade handoff doctor --target ./my-repo
235
- ```
236
-
237
- New here? Start with [QUICKSTART.md](QUICKSTART.md) for the five-minute install, then [docs/first-10-minutes.md](docs/first-10-minutes.md) for the guided first session. Already have a homegrown setup with scripts, crons, and handoff folders? Brigade has an adoption path that inventories what you have before changing anything: start with `brigade operator adopt plan` and see the [technical guide](docs/technical-guide.md). Want an agent to set this up for you? Point it at this repo; [AGENTS.md](AGENTS.md) tells it exactly what to do and where to stop.
287
+ And it is not the other projects that share the name. This Brigade is the AI-agent operator CLI, installed with `pipx install brigade-cli` from [`escoffier-labs/brigade`](https://github.com/escoffier-labs/brigade). It is not the CNCF/Microsoft **Brigade** for event-driven scripting on Kubernetes (archived in 2022), the Spinabot **Brigade** agent crew, or the 2017 `brigade` Python package that became Nornir. Same word, different tool.
238
288
 
239
289
  ## Why I built this
240
290
 
291
+ <p align="center">
292
+ <img src="docs/assets/brigade-kitchen-scene.jpg" alt="The brigade at the pass" width="900">
293
+ </p>
294
+
241
295
  I run an always-on OpenClaw agent next to daily Codex and Claude Code sessions. Every one of those tools wakes up empty, and whatever a session learned scattered across tool-specific folders and died there. Two incidents shaped the design: a "dreaming" job that promoted raw session fragments straight into memory bloated `MEMORY.md` past the bootstrap budget, so every session started truncated and nobody noticed for weeks; and 195 handoff notes that sat unread across 35 repos because an ingester had a hardcoded allowlist and nothing warned about the gap. Silence is the failure mode. Every part of Brigade that lints, warns, or writes a receipt exists because something once failed in silence. The full production stack, now 482 cards across daily multi-agent work, is documented in the [solos-cookbook](https://github.com/escoffier-labs/solos-cookbook).
242
296
 
243
297
  ## Docs
@@ -253,6 +307,10 @@ I run an always-on OpenClaw agent next to daily Codex and Claude Code sessions.
253
307
  - [Maintainers](MAINTAINERS.md), [Governance](GOVERNANCE.md), [Security](SECURITY.md), and [Contributing](CONTRIBUTING.md).
254
308
  - [Roadmap](ROADMAP.md) and [roadmap archive](docs/roadmap-archive.md).
255
309
 
310
+ ## License
311
+
312
+ MIT. See [LICENSE](LICENSE).
313
+
256
314
  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/), command `brigade`. The name comes from the kitchen: a *brigade de cuisine* runs the line, and *mise en place* means the station is prepped before service. Set up the rules, memory, tools, and receipts before the session gets expensive.
257
315
 
258
316
  It is early-stage and moving fast. If you hit a broken workflow, a confusing command, or a setup issue, [open an issue](https://github.com/escoffier-labs/brigade/issues) and I will get it fixed.
@@ -1,43 +1,17 @@
1
- Metadata-Version: 2.4
2
- Name: brigade-cli
3
- Version: 0.13.0
4
- Summary: AI agent memory, handoffs, and local guardrails for Codex, Claude Code, OpenCode, Hermes, and OpenClaw.
5
- Author-email: Solomon Neas <me@solomonneas.dev>
6
- License: MIT
7
- Project-URL: Homepage, https://brigade.tools
8
- Project-URL: Repository, https://github.com/escoffier-labs/brigade
9
- Project-URL: Cookbook, https://github.com/escoffier-labs/solos-cookbook
10
- Project-URL: OpenClaw, https://github.com/solomonneas/openclaw
11
- Project-URL: ContentGuard, https://github.com/escoffier-labs/content-guard
12
- Project-URL: AgentPantry, https://github.com/escoffier-labs/agentpantry
13
- Project-URL: Issues, https://github.com/escoffier-labs/brigade/issues
14
- Keywords: agents,ai-agents,agent-memory,agent-handoffs,ai-memory,openclaw,claude-code,codex,opencode,memory,bootstrap,brigade,brigade-cli,operator,local-first,guardrails,agents-md
15
- Classifier: Development Status :: 3 - Alpha
16
- Classifier: License :: OSI Approved :: MIT License
17
- Classifier: Programming Language :: Python :: 3
18
- Classifier: Programming Language :: Python :: 3.10
19
- Classifier: Programming Language :: Python :: 3.11
20
- Classifier: Programming Language :: Python :: 3.12
21
- Requires-Python: >=3.10
22
- Description-Content-Type: text/markdown
23
- License-File: LICENSE
24
- Provides-Extra: dev
25
- Requires-Dist: pytest>=7; extra == "dev"
26
- Requires-Dist: ruff>=0.15; extra == "dev"
27
- Provides-Extra: research
28
- Requires-Dist: playwright>=1.40; extra == "research"
29
- Dynamic: license-file
30
-
31
1
  <p align="center">
32
- <img src="docs/assets/brigade-social-preview.jpg" alt="Brigade" width="900">
2
+ <img src="docs/assets/brigade-social-preview.jpg" alt="Brigade banner" width="900">
33
3
  </p>
34
4
 
35
- <h1 align="center">Brigade CLI</h1>
5
+ <h1 align="center">Brigade</h1>
36
6
 
37
7
  <p align="center">
38
8
  <strong>One canonical source for the MCP servers, tools, and memory your AI coding agents share, merged into each tool's native config with a review gate and a receipt for every change. Local files, no daemon, no lock-in.</strong>
39
9
  </p>
40
10
 
11
+ <p align="center">
12
+ <a href="https://brigade.tools">Website</a> &middot; <a href="https://brigade.tools/docs">Docs</a> &middot; <a href="#try-it-in-60-seconds">Quickstart</a>
13
+ </p>
14
+
41
15
  <p align="center">
42
16
  <img src="https://img.shields.io/github/actions/workflow/status/escoffier-labs/brigade/ci.yml?branch=main&style=for-the-badge&label=ci" alt="CI status">
43
17
  <img src="https://img.shields.io/pypi/v/brigade-cli?style=for-the-badge&label=pypi" alt="PyPI version">
@@ -47,10 +21,39 @@ Dynamic: license-file
47
21
 
48
22
  Your agents run loops. Brigade keeps the receipts.
49
23
 
24
+ <p align="center">
25
+ <img src="docs/assets/quickstart.svg" alt="Recording: brigade operator quickstart wires a repo and brigade operator doctor reports ready, in seconds" width="760">
26
+ </p>
27
+
28
+ <p align="center"><em><code>brigade operator quickstart</code> wires a repo and <code>operator doctor</code> reports ready, in seconds.</em></p>
29
+
50
30
  ## What it does
51
31
 
52
32
  You run more than one agent CLI. Each one keeps its MCP servers in its own config file, its memory in its own silo, and writes to both without review. Brigade is the local layer that fixes that. You keep one canonical source for your MCP servers, your tool and skill catalog, and your memory, and Brigade merges each into the tools you actually use: MCP servers into each tool's native config, tools and skills projected into each harness, and one shared memory owned in one place. A review gate sits in front of anything that gets written, and every consequential change lands a receipt you can grep, diff, and roll back. No daemon, no hosted service, no vendor lock-in: it writes plain files in your repo when you run a command, and that is all it does.
53
33
 
34
+ ## Install
35
+
36
+ `brigade operator quickstart` (in [Try it in 60 seconds](#try-it-in-60-seconds)) wires one code repo for one harness. For an OpenClaw or Hermes workspace instead:
37
+
38
+ ```bash
39
+ brigade operator quickstart --target ~/agent-workspace --depth workspace --harnesses openclaw,hermes --owner openclaw
40
+ ```
41
+
42
+ Use `--dry-run` first to preview the planned steps without writing anything. Pass more harnesses as a comma-separated list; quickstart only wires the harnesses you select and leaves the rest alone.
43
+
44
+ Write a handoff and check the wiring:
45
+
46
+ ```bash
47
+ brigade handoff draft --target ./my-repo --inbox codex \
48
+ --title "What changed" \
49
+ --summary "Short note future agents should know." \
50
+ --content "The durable note itself goes here."
51
+ brigade handoff lint --target ./my-repo
52
+ brigade handoff doctor --target ./my-repo
53
+ ```
54
+
55
+ New here? Start with [QUICKSTART.md](QUICKSTART.md) for the five-minute install, then [docs/first-10-minutes.md](docs/first-10-minutes.md) for the guided first session. Already have a homegrown setup with scripts, crons, and handoff folders? Brigade has an adoption path that inventories what you have before changing anything: start with `brigade operator adopt plan` and see the [technical guide](docs/technical-guide.md). Want an agent to set this up for you? Point it at this repo; [AGENTS.md](AGENTS.md) tells it exactly what to do and where to stop.
56
+
54
57
  ## Try it in 60 seconds
55
58
 
56
59
  ```bash
@@ -62,6 +65,17 @@ brigade operator doctor --target ./my-repo --profile local-operator # verify
62
65
 
63
66
  That installs the CLI, wires memory, handoffs, and local guardrails into one repo for a single harness, and prints a readiness check. Nothing leaves your machine and no daemon is started. Add `--dry-run` to preview the file-by-file plan before anything is written. More harnesses, workspace setups, and the homegrown-adoption path are under [Install](#install).
64
67
 
68
+ The run ends with a readiness verdict (the recording above shows the full report):
69
+
70
+ ```
71
+ operator doctor: ~/my-repo
72
+ profile: local-operator
73
+ ready: yes
74
+ blocking_issues: 0
75
+ next: brigade daily plan --target .
76
+ content_guard: installed hook=configured-hooks-path policy=public-repo
77
+ ```
78
+
65
79
  ## One MCP catalog, synced into every tool
66
80
 
67
81
  Every agent tool reads its MCP servers from a different file in a different shape. The same servers wired across Claude Code, Cursor, Codex, VS Code, OpenCode, and Antigravity means hand-editing six configs and keeping them in sync forever. Brigade keeps one canonical catalog and merges it into each tool's native config for you.
@@ -75,6 +89,22 @@ brigade mcp sync # dry-run: show the diff for every tool
75
89
  brigade mcp sync --write # merge into each tool's config
76
90
  ```
77
91
 
92
+ Run `brigade mcp sync` and you get the per-tool plan, server by server, before a single file changes. Two servers in the catalog, projected across the harnesses wired in this repo:
93
+
94
+ ```
95
+ brigade mcp sync (dry-run): ~/my-repo
96
+ claude github missing -> create
97
+ claude sentry missing -> create
98
+ cursor github missing -> create
99
+ cursor sentry missing -> create
100
+ codex github missing -> create
101
+ codex sentry missing -> create
102
+ vscode github missing -> create
103
+ vscode sentry missing -> create
104
+ opencode github missing -> create
105
+ opencode sentry missing -> create
106
+ ```
107
+
78
108
  One catalog (`.brigade/mcp.json`), six native targets:
79
109
 
80
110
  | Tool | File it writes |
@@ -192,12 +222,22 @@ The full tour of every station lives in [docs/overview.md](docs/overview.md).
192
222
 
193
223
  ## Why not something else?
194
224
 
195
- - **mem0, Letta, and friends** are memory layers for apps you are building, usually behind an API or a server. Brigade is for the agent CLIs you already run, and it is file-first: your memory is markdown in your repo, reviewable in git, readable without Brigade.
225
+ - **mem0, Letta, agentmemory, and friends** are memory layers for apps you are building, usually behind an API or a server. Brigade is for the agent CLIs you already run, and it is file-first: your memory is markdown in your repo, reviewable in git, readable without Brigade.
226
+ - **add-mcp, chezmoi, and config-sync scripts** move MCP or dotfiles around, but they sync one thing with no review gate and no receipt, and they do not touch memory or skills. Brigade keeps one canonical source for MCP servers, tools, skills, and memory together, shows the per-tool diff before any write, and leaves a receipt you can roll back.
196
227
  - **Native harness memory** (each tool's own auto-memory) is a per-tool silo. It does not cross harnesses, and it writes without review. Brigade gives every tool one shared format and one canonical owner, with a review gate in between.
197
228
  - **Already running Hermes, or any self-improving agent?** Keep it. Brigade is not a replacement, it is the verification layer on top. A built-in learning loop grades its own work and keeps what it learns inside one tool. Brigade promotes a skill only when a real signal confirms it, keeps every learned skill as portable markdown in your git, and runs one loop across your whole fleet.
198
229
  - **A plain CLAUDE.md / AGENTS.md** works great until it bloats past the context budget and goes stale. Brigade keeps bootstrap files slim, moves detail into indexed cards, and flags staleness instead of trusting last month's facts forever.
199
230
  - **A daemon or hosted service** would be simpler to demo and worse to trust. Brigade writes local files when you run a command, and that is all it does.
200
231
 
232
+ At a glance, against the tools people reach for first:
233
+
234
+ | | Across harnesses | MCP, tools, and memory in one source | Review gate + receipts | Local files, no daemon |
235
+ |---|:---:|:---:|:---:|:---:|
236
+ | **Brigade** | yes | yes | yes | yes |
237
+ | mem0 / Letta / agentmemory | per-SDK | memory only | no | usually hosted or a server |
238
+ | add-mcp / chezmoi / config-sync | partial | MCP or dotfiles only | no | yes |
239
+ | Native harness memory | no | memory only | no | yes |
240
+
201
241
  ## What Brigade is not
202
242
 
203
243
  Brigade is not a hosted memory service, a daemon, or an automatic release bot.
@@ -213,31 +253,14 @@ It does not:
213
253
 
214
254
  That pause is the point. Agent memory should be useful, not noisy.
215
255
 
216
- ## Install
217
-
218
- `brigade operator quickstart` (in [Try it in 60 seconds](#try-it-in-60-seconds)) wires one code repo for one harness. For an OpenClaw or Hermes workspace instead:
219
-
220
- ```bash
221
- brigade operator quickstart --target ~/agent-workspace --depth workspace --harnesses openclaw,hermes --owner openclaw
222
- ```
223
-
224
- Use `--dry-run` first to preview the planned steps without writing anything. Pass more harnesses as a comma-separated list; quickstart only wires the harnesses you select and leaves the rest alone.
225
-
226
- Write a handoff and check the wiring:
227
-
228
- ```bash
229
- brigade handoff draft --target ./my-repo --inbox codex \
230
- --title "What changed" \
231
- --summary "Short note future agents should know." \
232
- --content "The durable note itself goes here."
233
- brigade handoff lint --target ./my-repo
234
- brigade handoff doctor --target ./my-repo
235
- ```
236
-
237
- New here? Start with [QUICKSTART.md](QUICKSTART.md) for the five-minute install, then [docs/first-10-minutes.md](docs/first-10-minutes.md) for the guided first session. Already have a homegrown setup with scripts, crons, and handoff folders? Brigade has an adoption path that inventories what you have before changing anything: start with `brigade operator adopt plan` and see the [technical guide](docs/technical-guide.md). Want an agent to set this up for you? Point it at this repo; [AGENTS.md](AGENTS.md) tells it exactly what to do and where to stop.
256
+ And it is not the other projects that share the name. This Brigade is the AI-agent operator CLI, installed with `pipx install brigade-cli` from [`escoffier-labs/brigade`](https://github.com/escoffier-labs/brigade). It is not the CNCF/Microsoft **Brigade** for event-driven scripting on Kubernetes (archived in 2022), the Spinabot **Brigade** agent crew, or the 2017 `brigade` Python package that became Nornir. Same word, different tool.
238
257
 
239
258
  ## Why I built this
240
259
 
260
+ <p align="center">
261
+ <img src="docs/assets/brigade-kitchen-scene.jpg" alt="The brigade at the pass" width="900">
262
+ </p>
263
+
241
264
  I run an always-on OpenClaw agent next to daily Codex and Claude Code sessions. Every one of those tools wakes up empty, and whatever a session learned scattered across tool-specific folders and died there. Two incidents shaped the design: a "dreaming" job that promoted raw session fragments straight into memory bloated `MEMORY.md` past the bootstrap budget, so every session started truncated and nobody noticed for weeks; and 195 handoff notes that sat unread across 35 repos because an ingester had a hardcoded allowlist and nothing warned about the gap. Silence is the failure mode. Every part of Brigade that lints, warns, or writes a receipt exists because something once failed in silence. The full production stack, now 482 cards across daily multi-agent work, is documented in the [solos-cookbook](https://github.com/escoffier-labs/solos-cookbook).
242
265
 
243
266
  ## Docs
@@ -253,6 +276,10 @@ I run an always-on OpenClaw agent next to daily Codex and Claude Code sessions.
253
276
  - [Maintainers](MAINTAINERS.md), [Governance](GOVERNANCE.md), [Security](SECURITY.md), and [Contributing](CONTRIBUTING.md).
254
277
  - [Roadmap](ROADMAP.md) and [roadmap archive](docs/roadmap-archive.md).
255
278
 
279
+ ## License
280
+
281
+ MIT. See [LICENSE](LICENSE).
282
+
256
283
  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/), command `brigade`. The name comes from the kitchen: a *brigade de cuisine* runs the line, and *mise en place* means the station is prepped before service. Set up the rules, memory, tools, and receipts before the session gets expensive.
257
284
 
258
285
  It is early-stage and moving fast. If you hit a broken workflow, a confusing command, or a setup issue, [open an issue](https://github.com/escoffier-labs/brigade/issues) and I will get it fixed.
@@ -4,13 +4,13 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "brigade-cli"
7
- version = "0.13.0"
8
- description = "AI agent memory, handoffs, and local guardrails for Codex, Claude Code, OpenCode, Hermes, and OpenClaw."
7
+ version = "0.14.0"
8
+ description = "One local source for the MCP servers, tools, and memory your AI coding agents share (Codex, Claude Code, OpenCode, Hermes, OpenClaw), merged into each tool's native config with a review gate and a receipt for every change."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
11
11
  license = { text = "MIT" }
12
12
  authors = [{ name = "Solomon Neas", email = "me@solomonneas.dev" }] # content-guard: allow email
13
- keywords = ["agents", "ai-agents", "agent-memory", "agent-handoffs", "ai-memory", "openclaw", "claude-code", "codex", "opencode", "memory", "bootstrap", "brigade", "brigade-cli", "operator", "local-first", "guardrails", "agents-md"]
13
+ keywords = ["agents", "ai-agents", "agent-memory", "agent-handoffs", "ai-memory", "mcp", "mcp-config", "mcp-sync", "model-context-protocol", "openclaw", "claude-code", "codex", "opencode", "memory", "bootstrap", "brigade", "brigade-cli", "operator", "local-first", "guardrails", "agents-md"]
14
14
  classifiers = [
15
15
  "Development Status :: 3 - Alpha",
16
16
  "License :: OSI Approved :: MIT License",
@@ -27,6 +27,7 @@ research = ["playwright>=1.40"]
27
27
 
28
28
  [project.urls]
29
29
  Homepage = "https://brigade.tools"
30
+ Documentation = "https://brigade.tools/docs"
30
31
  Repository = "https://github.com/escoffier-labs/brigade"
31
32
  Cookbook = "https://github.com/escoffier-labs/solos-cookbook"
32
33
  OpenClaw = "https://github.com/solomonneas/openclaw"
@@ -1,3 +1,3 @@
1
1
  """Brigade: local operator-system CLI for agent workspaces."""
2
2
 
3
- __version__ = "0.13.0"
3
+ __version__ = "0.14.0"
@@ -24,6 +24,14 @@ def register(sub: argparse._SubParsersAction) -> None:
24
24
  default=True,
25
25
  help="Do not create or update the target's .gitignore.",
26
26
  )
27
+ p_init.add_argument(
28
+ "--no-wire",
29
+ dest="wire_skills",
30
+ action="store_false",
31
+ default=True,
32
+ help="Do not install the brigade-work skill into harness skill dirs "
33
+ "(leaves Brigade installed but not wired into the agent's work loop).",
34
+ )
27
35
  p_init.add_argument(
28
36
  "--git-exclude",
29
37
  action="store_true",
@@ -89,6 +97,7 @@ def dispatch(args) -> int:
89
97
  allow_home=getattr(args, "allow_home", False),
90
98
  use_git_exclude=getattr(args, "git_exclude", False),
91
99
  update_gitignore=getattr(args, "update_gitignore", True),
100
+ wire_skills=getattr(args, "wire_skills", True),
92
101
  )
93
102
 
94
103
  # No selection flags: interactive prompt.
@@ -109,4 +118,5 @@ def dispatch(args) -> int:
109
118
  allow_home=getattr(args, "allow_home", False),
110
119
  use_git_exclude=getattr(args, "git_exclude", False),
111
120
  update_gitignore=getattr(args, "update_gitignore", True),
121
+ wire_skills=getattr(args, "wire_skills", True),
112
122
  )
@@ -275,6 +275,7 @@ def install_selection(
275
275
  allow_home: bool = False,
276
276
  use_git_exclude: bool = False,
277
277
  update_gitignore: bool = True,
278
+ wire_skills: bool = True,
278
279
  ) -> int:
279
280
  """Install a Selection into `target`. Returns process exit code."""
280
281
  selection.validate()
@@ -353,6 +354,28 @@ def install_selection(
353
354
  # Persist config.json.
354
355
  write_config(target, Config(version=1, selection=selection))
355
356
 
357
+ # Wire the brigade-work skill into each harness's skills directory so agents
358
+ # actually USE Brigade (run verifications through it, capture outcomes) instead
359
+ # of leaving it installed-but-dormant. Skipped with --no-wire.
360
+ wired_harnesses: list[str] = []
361
+ if wire_skills:
362
+ from .skills_cmd import HARNESS_ADAPTERS
363
+
364
+ skill_src = root / "skills" / "brigade-work" / "SKILL.md"
365
+ if skill_src.is_file():
366
+ for h in selection.harnesses:
367
+ adapter = HARNESS_ADAPTERS.get(h)
368
+ if not adapter:
369
+ continue
370
+ rel = str(adapter.get("install_path", "")).format(skill_id="brigade-work")
371
+ if not rel.startswith("."):
372
+ # user-scoped/absolute adapters (e.g. hermes): use `brigade skills install`.
373
+ continue
374
+ dst = target / rel / "SKILL.md"
375
+ dst.parent.mkdir(parents=True, exist_ok=True)
376
+ dst.write_text(skill_src.read_text())
377
+ wired_harnesses.append(h)
378
+
356
379
  if update_gitignore:
357
380
  result = apply_gitignore(target, selection, use_git_exclude=use_git_exclude)
358
381
  print(f"brigade: gitignore {result}")
@@ -364,6 +387,18 @@ def install_selection(
364
387
  f"brigade: installed depth={selection.depth} harnesses={','.join(selection.harnesses) or '(none)'} -> {target}"
365
388
  )
366
389
  print(f"brigade: memory owner -> {owner_label}")
390
+ if wired_harnesses:
391
+ print()
392
+ print(
393
+ f"brigade: wired the `brigade-work` skill into {', '.join(wired_harnesses)} "
394
+ "so your agent USES Brigade, not just installs it."
395
+ )
396
+ print("Agent: each work session, follow the `brigade-work` skill -")
397
+ print(" 1. `brigade work brief --target .` (see pending work)")
398
+ print(' 2. `brigade work verify run --target . --command "<test>"` (verify THROUGH brigade, not raw)')
399
+ print(" 3. `brigade outcome capture <skill-or-card-id> --run-id latest` (record the result)")
400
+ print(" 4. write a Memory Handoff at the end.")
401
+ print(' If `brigade outcome rank` ever says "ranking: none", work is not flowing through Brigade.')
367
402
  if "hermes" in selection.harnesses:
368
403
  print(
369
404
  "brigade: the hermes adapter is validated against a real Hermes install "
@@ -23,6 +23,7 @@
23
23
  {"src": "memory/memory-care.example.json", "dst": ".brigade/memory-care.example.json"},
24
24
  {"src": "memory/chat-memory-sweep.example.json", "dst": ".brigade/chat-memory-sweep.example.json"},
25
25
  {"src": "skills/note/SKILL.md", "dst": "skills/note/SKILL.md"},
26
+ {"src": "skills/brigade-work/SKILL.md", "dst": "skills/brigade-work/SKILL.md"},
26
27
  {"src": "scripts/backup-restic.sh", "dst": "scripts/backup-restic.sh", "mode": "0755"}
27
28
  ],
28
29
  "dirs": [
@@ -5,7 +5,7 @@
5
5
  "Describes the handoff inbox + routing targets that Hermes should treat",
6
6
  "as the canonical memory contract."
7
7
  ],
8
- "_brigade_version": "0.13.0",
8
+ "_brigade_version": "0.14.0",
9
9
  "_brigade_status": "validated",
10
10
  "memory_handoff": {
11
11
  "inbox_dir": ".hermes/memory-handoffs",
@@ -5,7 +5,7 @@
5
5
  "Suggested model lane names. Same shape as the OpenClaw alias map so",
6
6
  "knowledge cards and runbooks can talk about lanes without naming providers."
7
7
  ],
8
- "_brigade_version": "0.13.0",
8
+ "_brigade_version": "0.14.0",
9
9
  "_brigade_status": "validated",
10
10
  "model_lanes": {
11
11
  "main": "<provider/main-model-id>",
@@ -8,7 +8,7 @@
8
8
  "",
9
9
  "Replace <hermes-config-path> with your Hermes config location."
10
10
  ],
11
- "_brigade_version": "0.13.0",
11
+ "_brigade_version": "0.14.0",
12
12
  "_brigade_status": "validated",
13
13
  "workspace": {
14
14
  "root": "<workspace-root>",
@@ -1,5 +1,5 @@
1
1
  {
2
- "_brigade_version": "0.13.0",
2
+ "_brigade_version": "0.14.0",
3
3
  "_description": "Example output contract for a nightly chat/session memory sweep. Keep raw chat transcripts in crawler archives; this file contains summaries and local source locators only.",
4
4
  "generated_at": "2026-05-26T22:09:00-04:00",
5
5
  "window": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "_brigade_version": "0.13.0",
2
+ "_brigade_version": "0.14.0",
3
3
  "_description": "Example config for a local memory-care scanner. Brigade does not run this scanner for you; it validates the output with `brigade doctor`.",
4
4
  "cards_glob": "memory/cards/*.md",
5
5
  "decay_dir": ".brigade/memory-care/decay",
@@ -4,7 +4,7 @@
4
4
  "It blocks secrets and attribution trailers, while warning on personal or infrastructure-like context.",
5
5
  "Use via: brigade handoff lint --content-guard --guard-policy personal"
6
6
  ],
7
- "_brigade_version": "0.13.0",
7
+ "_brigade_version": "0.14.0",
8
8
  "categories": {
9
9
  "secret": "block",
10
10
  "private-network": "warn",
@@ -4,7 +4,7 @@
4
4
  "social drafts, and docs that will be published, not just pushed.",
5
5
  "Use via: brigade scrub --policy public-content"
6
6
  ],
7
- "_brigade_version": "0.13.0",
7
+ "_brigade_version": "0.14.0",
8
8
  "categories": {
9
9
  "secret": "block",
10
10
  "private-network": "block",
@@ -4,7 +4,7 @@
4
4
  "Used by brigade pre-push hook and `brigade scrub`.",
5
5
  "Override by pointing CONTENT_GUARD_POLICY at your own copy of this file."
6
6
  ],
7
- "_brigade_version": "0.13.0",
7
+ "_brigade_version": "0.14.0",
8
8
  "categories": {
9
9
  "secret": "block",
10
10
  "private-network": "block",