squadfoundry 0.1.0

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 (309) hide show
  1. package/AGENTS.md +76 -0
  2. package/PROJECT.md +79 -0
  3. package/README.md +255 -0
  4. package/dist/orchestrator/adapters/context/IContextAdapter.d.ts +65 -0
  5. package/dist/orchestrator/adapters/context/IContextAdapter.d.ts.map +1 -0
  6. package/dist/orchestrator/adapters/context/IContextAdapter.js +12 -0
  7. package/dist/orchestrator/adapters/context/IContextAdapter.js.map +1 -0
  8. package/dist/orchestrator/adapters/context/filesystem.context-adapter.d.ts +33 -0
  9. package/dist/orchestrator/adapters/context/filesystem.context-adapter.d.ts.map +1 -0
  10. package/dist/orchestrator/adapters/context/filesystem.context-adapter.js +179 -0
  11. package/dist/orchestrator/adapters/context/filesystem.context-adapter.js.map +1 -0
  12. package/dist/orchestrator/adapters/deploy/IDeployAdapter.d.ts +78 -0
  13. package/dist/orchestrator/adapters/deploy/IDeployAdapter.d.ts.map +1 -0
  14. package/dist/orchestrator/adapters/deploy/IDeployAdapter.js +14 -0
  15. package/dist/orchestrator/adapters/deploy/IDeployAdapter.js.map +1 -0
  16. package/dist/orchestrator/adapters/deploy/vercel.adapter.d.ts +31 -0
  17. package/dist/orchestrator/adapters/deploy/vercel.adapter.d.ts.map +1 -0
  18. package/dist/orchestrator/adapters/deploy/vercel.adapter.js +83 -0
  19. package/dist/orchestrator/adapters/deploy/vercel.adapter.js.map +1 -0
  20. package/dist/orchestrator/adapters/host/IHostAdapter.d.ts +89 -0
  21. package/dist/orchestrator/adapters/host/IHostAdapter.d.ts.map +1 -0
  22. package/dist/orchestrator/adapters/host/IHostAdapter.js +10 -0
  23. package/dist/orchestrator/adapters/host/IHostAdapter.js.map +1 -0
  24. package/dist/orchestrator/adapters/host/anthropic.adapter.d.ts +27 -0
  25. package/dist/orchestrator/adapters/host/anthropic.adapter.d.ts.map +1 -0
  26. package/dist/orchestrator/adapters/host/anthropic.adapter.js +118 -0
  27. package/dist/orchestrator/adapters/host/anthropic.adapter.js.map +1 -0
  28. package/dist/orchestrator/adapters/host/antigravity.adapter.d.ts +53 -0
  29. package/dist/orchestrator/adapters/host/antigravity.adapter.d.ts.map +1 -0
  30. package/dist/orchestrator/adapters/host/antigravity.adapter.js +148 -0
  31. package/dist/orchestrator/adapters/host/antigravity.adapter.js.map +1 -0
  32. package/dist/orchestrator/adapters/host/claude-code.adapter.d.ts +13 -0
  33. package/dist/orchestrator/adapters/host/claude-code.adapter.d.ts.map +1 -0
  34. package/dist/orchestrator/adapters/host/claude-code.adapter.js +27 -0
  35. package/dist/orchestrator/adapters/host/claude-code.adapter.js.map +1 -0
  36. package/dist/orchestrator/adapters/host/command-model-invoker.d.ts +8 -0
  37. package/dist/orchestrator/adapters/host/command-model-invoker.d.ts.map +1 -0
  38. package/dist/orchestrator/adapters/host/command-model-invoker.js +46 -0
  39. package/dist/orchestrator/adapters/host/command-model-invoker.js.map +1 -0
  40. package/dist/orchestrator/adapters/host/ide.adapter.d.ts +61 -0
  41. package/dist/orchestrator/adapters/host/ide.adapter.d.ts.map +1 -0
  42. package/dist/orchestrator/adapters/host/ide.adapter.js +173 -0
  43. package/dist/orchestrator/adapters/host/ide.adapter.js.map +1 -0
  44. package/dist/orchestrator/adapters/host/local.adapter.d.ts +26 -0
  45. package/dist/orchestrator/adapters/host/local.adapter.d.ts.map +1 -0
  46. package/dist/orchestrator/adapters/host/local.adapter.js +82 -0
  47. package/dist/orchestrator/adapters/host/local.adapter.js.map +1 -0
  48. package/dist/orchestrator/adapters/host/openai.adapter.d.ts +26 -0
  49. package/dist/orchestrator/adapters/host/openai.adapter.d.ts.map +1 -0
  50. package/dist/orchestrator/adapters/host/openai.adapter.js +77 -0
  51. package/dist/orchestrator/adapters/host/openai.adapter.js.map +1 -0
  52. package/dist/orchestrator/adapters/host/opencode.adapter.d.ts +13 -0
  53. package/dist/orchestrator/adapters/host/opencode.adapter.d.ts.map +1 -0
  54. package/dist/orchestrator/adapters/host/opencode.adapter.js +27 -0
  55. package/dist/orchestrator/adapters/host/opencode.adapter.js.map +1 -0
  56. package/dist/orchestrator/adapters/model/IModelAdapter.d.ts +68 -0
  57. package/dist/orchestrator/adapters/model/IModelAdapter.d.ts.map +1 -0
  58. package/dist/orchestrator/adapters/model/IModelAdapter.js +11 -0
  59. package/dist/orchestrator/adapters/model/IModelAdapter.js.map +1 -0
  60. package/dist/orchestrator/adapters/publishing/ISocialMediaAdapter.d.ts +93 -0
  61. package/dist/orchestrator/adapters/publishing/ISocialMediaAdapter.d.ts.map +1 -0
  62. package/dist/orchestrator/adapters/publishing/ISocialMediaAdapter.js +10 -0
  63. package/dist/orchestrator/adapters/publishing/ISocialMediaAdapter.js.map +1 -0
  64. package/dist/orchestrator/adapters/publishing/instagram.adapter.d.ts +34 -0
  65. package/dist/orchestrator/adapters/publishing/instagram.adapter.d.ts.map +1 -0
  66. package/dist/orchestrator/adapters/publishing/instagram.adapter.js +105 -0
  67. package/dist/orchestrator/adapters/publishing/instagram.adapter.js.map +1 -0
  68. package/dist/orchestrator/adapters/tools/IToolAdapter.d.ts +52 -0
  69. package/dist/orchestrator/adapters/tools/IToolAdapter.d.ts.map +1 -0
  70. package/dist/orchestrator/adapters/tools/IToolAdapter.js +10 -0
  71. package/dist/orchestrator/adapters/tools/IToolAdapter.js.map +1 -0
  72. package/dist/orchestrator/adapters/vcs/IVCSAdapter.d.ts +89 -0
  73. package/dist/orchestrator/adapters/vcs/IVCSAdapter.d.ts.map +1 -0
  74. package/dist/orchestrator/adapters/vcs/IVCSAdapter.js +11 -0
  75. package/dist/orchestrator/adapters/vcs/IVCSAdapter.js.map +1 -0
  76. package/dist/orchestrator/adapters/vcs/github.adapter.d.ts +36 -0
  77. package/dist/orchestrator/adapters/vcs/github.adapter.d.ts.map +1 -0
  78. package/dist/orchestrator/adapters/vcs/github.adapter.js +110 -0
  79. package/dist/orchestrator/adapters/vcs/github.adapter.js.map +1 -0
  80. package/dist/orchestrator/artifacts/artifact-store.d.ts +47 -0
  81. package/dist/orchestrator/artifacts/artifact-store.d.ts.map +1 -0
  82. package/dist/orchestrator/artifacts/artifact-store.js +135 -0
  83. package/dist/orchestrator/artifacts/artifact-store.js.map +1 -0
  84. package/dist/orchestrator/builder/domain-classifier.d.ts +24 -0
  85. package/dist/orchestrator/builder/domain-classifier.d.ts.map +1 -0
  86. package/dist/orchestrator/builder/domain-classifier.js +156 -0
  87. package/dist/orchestrator/builder/domain-classifier.js.map +1 -0
  88. package/dist/orchestrator/builder/interview-questions.d.ts +13 -0
  89. package/dist/orchestrator/builder/interview-questions.d.ts.map +1 -0
  90. package/dist/orchestrator/builder/interview-questions.js +127 -0
  91. package/dist/orchestrator/builder/interview-questions.js.map +1 -0
  92. package/dist/orchestrator/builder/squad-builder.d.ts +53 -0
  93. package/dist/orchestrator/builder/squad-builder.d.ts.map +1 -0
  94. package/dist/orchestrator/builder/squad-builder.js +107 -0
  95. package/dist/orchestrator/builder/squad-builder.js.map +1 -0
  96. package/dist/orchestrator/builder/squad-generator.d.ts +33 -0
  97. package/dist/orchestrator/builder/squad-generator.d.ts.map +1 -0
  98. package/dist/orchestrator/builder/squad-generator.js +360 -0
  99. package/dist/orchestrator/builder/squad-generator.js.map +1 -0
  100. package/dist/orchestrator/cli/index.d.ts +3 -0
  101. package/dist/orchestrator/cli/index.d.ts.map +1 -0
  102. package/dist/orchestrator/cli/index.js +8 -0
  103. package/dist/orchestrator/cli/index.js.map +1 -0
  104. package/dist/orchestrator/context/context-index.d.ts +48 -0
  105. package/dist/orchestrator/context/context-index.d.ts.map +1 -0
  106. package/dist/orchestrator/context/context-index.js +116 -0
  107. package/dist/orchestrator/context/context-index.js.map +1 -0
  108. package/dist/orchestrator/context/context-loader.d.ts +49 -0
  109. package/dist/orchestrator/context/context-loader.d.ts.map +1 -0
  110. package/dist/orchestrator/context/context-loader.js +111 -0
  111. package/dist/orchestrator/context/context-loader.js.map +1 -0
  112. package/dist/orchestrator/core/guardrails.d.ts +33 -0
  113. package/dist/orchestrator/core/guardrails.d.ts.map +1 -0
  114. package/dist/orchestrator/core/guardrails.js +272 -0
  115. package/dist/orchestrator/core/guardrails.js.map +1 -0
  116. package/dist/orchestrator/core/state-machine.d.ts +65 -0
  117. package/dist/orchestrator/core/state-machine.d.ts.map +1 -0
  118. package/dist/orchestrator/core/state-machine.js +227 -0
  119. package/dist/orchestrator/core/state-machine.js.map +1 -0
  120. package/dist/orchestrator/core/types.d.ts +364 -0
  121. package/dist/orchestrator/core/types.d.ts.map +1 -0
  122. package/dist/orchestrator/core/types.js +10 -0
  123. package/dist/orchestrator/core/types.js.map +1 -0
  124. package/dist/orchestrator/index.d.ts +75 -0
  125. package/dist/orchestrator/index.d.ts.map +1 -0
  126. package/dist/orchestrator/index.js +64 -0
  127. package/dist/orchestrator/index.js.map +1 -0
  128. package/dist/orchestrator/mcp/server.d.ts +35 -0
  129. package/dist/orchestrator/mcp/server.d.ts.map +1 -0
  130. package/dist/orchestrator/mcp/server.js +378 -0
  131. package/dist/orchestrator/mcp/server.js.map +1 -0
  132. package/dist/orchestrator/runtime/agent-dispatcher.d.ts +25 -0
  133. package/dist/orchestrator/runtime/agent-dispatcher.d.ts.map +1 -0
  134. package/dist/orchestrator/runtime/agent-dispatcher.js +82 -0
  135. package/dist/orchestrator/runtime/agent-dispatcher.js.map +1 -0
  136. package/dist/orchestrator/runtime/approval-gate.d.ts +55 -0
  137. package/dist/orchestrator/runtime/approval-gate.d.ts.map +1 -0
  138. package/dist/orchestrator/runtime/approval-gate.js +104 -0
  139. package/dist/orchestrator/runtime/approval-gate.js.map +1 -0
  140. package/dist/orchestrator/runtime/handoff-manager.d.ts +29 -0
  141. package/dist/orchestrator/runtime/handoff-manager.d.ts.map +1 -0
  142. package/dist/orchestrator/runtime/handoff-manager.js +80 -0
  143. package/dist/orchestrator/runtime/handoff-manager.js.map +1 -0
  144. package/dist/orchestrator/runtime/job-manager.d.ts +39 -0
  145. package/dist/orchestrator/runtime/job-manager.d.ts.map +1 -0
  146. package/dist/orchestrator/runtime/job-manager.js +132 -0
  147. package/dist/orchestrator/runtime/job-manager.js.map +1 -0
  148. package/dist/orchestrator/runtime/squad-runtime.d.ts +70 -0
  149. package/dist/orchestrator/runtime/squad-runtime.d.ts.map +1 -0
  150. package/dist/orchestrator/runtime/squad-runtime.js +249 -0
  151. package/dist/orchestrator/runtime/squad-runtime.js.map +1 -0
  152. package/dist/orchestrator/shell/cli.d.ts +4 -0
  153. package/dist/orchestrator/shell/cli.d.ts.map +1 -0
  154. package/dist/orchestrator/shell/cli.js +27 -0
  155. package/dist/orchestrator/shell/cli.js.map +1 -0
  156. package/dist/orchestrator/shell/commands/create.command.d.ts +3 -0
  157. package/dist/orchestrator/shell/commands/create.command.d.ts.map +1 -0
  158. package/dist/orchestrator/shell/commands/create.command.js +41 -0
  159. package/dist/orchestrator/shell/commands/create.command.js.map +1 -0
  160. package/dist/orchestrator/shell/commands/edit.command.d.ts +3 -0
  161. package/dist/orchestrator/shell/commands/edit.command.d.ts.map +1 -0
  162. package/dist/orchestrator/shell/commands/edit.command.js +49 -0
  163. package/dist/orchestrator/shell/commands/edit.command.js.map +1 -0
  164. package/dist/orchestrator/shell/commands/hosts.command.d.ts +3 -0
  165. package/dist/orchestrator/shell/commands/hosts.command.d.ts.map +1 -0
  166. package/dist/orchestrator/shell/commands/hosts.command.js +27 -0
  167. package/dist/orchestrator/shell/commands/hosts.command.js.map +1 -0
  168. package/dist/orchestrator/shell/commands/init.command.d.ts +3 -0
  169. package/dist/orchestrator/shell/commands/init.command.d.ts.map +1 -0
  170. package/dist/orchestrator/shell/commands/init.command.js +13 -0
  171. package/dist/orchestrator/shell/commands/init.command.js.map +1 -0
  172. package/dist/orchestrator/shell/commands/list.command.d.ts +3 -0
  173. package/dist/orchestrator/shell/commands/list.command.d.ts.map +1 -0
  174. package/dist/orchestrator/shell/commands/list.command.js +18 -0
  175. package/dist/orchestrator/shell/commands/list.command.js.map +1 -0
  176. package/dist/orchestrator/shell/commands/run.command.d.ts +3 -0
  177. package/dist/orchestrator/shell/commands/run.command.d.ts.map +1 -0
  178. package/dist/orchestrator/shell/commands/run.command.js +71 -0
  179. package/dist/orchestrator/shell/commands/run.command.js.map +1 -0
  180. package/dist/orchestrator/shell/commands/status.command.d.ts +3 -0
  181. package/dist/orchestrator/shell/commands/status.command.d.ts.map +1 -0
  182. package/dist/orchestrator/shell/commands/status.command.js +29 -0
  183. package/dist/orchestrator/shell/commands/status.command.js.map +1 -0
  184. package/dist/orchestrator/shell/services/active-host-detector.service.d.ts +25 -0
  185. package/dist/orchestrator/shell/services/active-host-detector.service.d.ts.map +1 -0
  186. package/dist/orchestrator/shell/services/active-host-detector.service.js +128 -0
  187. package/dist/orchestrator/shell/services/active-host-detector.service.js.map +1 -0
  188. package/dist/orchestrator/shell/services/host-resolution.service.d.ts +42 -0
  189. package/dist/orchestrator/shell/services/host-resolution.service.d.ts.map +1 -0
  190. package/dist/orchestrator/shell/services/host-resolution.service.js +108 -0
  191. package/dist/orchestrator/shell/services/host-resolution.service.js.map +1 -0
  192. package/dist/orchestrator/shell/services/host-runtime.service.d.ts +23 -0
  193. package/dist/orchestrator/shell/services/host-runtime.service.d.ts.map +1 -0
  194. package/dist/orchestrator/shell/services/host-runtime.service.js +167 -0
  195. package/dist/orchestrator/shell/services/host-runtime.service.js.map +1 -0
  196. package/dist/orchestrator/shell/services/interview-host-bridge.service.d.ts +14 -0
  197. package/dist/orchestrator/shell/services/interview-host-bridge.service.d.ts.map +1 -0
  198. package/dist/orchestrator/shell/services/interview-host-bridge.service.js +16 -0
  199. package/dist/orchestrator/shell/services/interview-host-bridge.service.js.map +1 -0
  200. package/dist/orchestrator/shell/services/job-execution.service.d.ts +22 -0
  201. package/dist/orchestrator/shell/services/job-execution.service.d.ts.map +1 -0
  202. package/dist/orchestrator/shell/services/job-execution.service.js +39 -0
  203. package/dist/orchestrator/shell/services/job-execution.service.js.map +1 -0
  204. package/dist/orchestrator/shell/services/project-bootstrap.service.d.ts +6 -0
  205. package/dist/orchestrator/shell/services/project-bootstrap.service.d.ts.map +1 -0
  206. package/dist/orchestrator/shell/services/project-bootstrap.service.js +111 -0
  207. package/dist/orchestrator/shell/services/project-bootstrap.service.js.map +1 -0
  208. package/dist/orchestrator/shell/services/squad-scaffold.service.d.ts +3 -0
  209. package/dist/orchestrator/shell/services/squad-scaffold.service.d.ts.map +1 -0
  210. package/dist/orchestrator/shell/services/squad-scaffold.service.js +30 -0
  211. package/dist/orchestrator/shell/services/squad-scaffold.service.js.map +1 -0
  212. package/dist/tests/integration/instagram-squad.test.d.ts +8 -0
  213. package/dist/tests/integration/instagram-squad.test.d.ts.map +1 -0
  214. package/dist/tests/integration/instagram-squad.test.js +187 -0
  215. package/dist/tests/integration/instagram-squad.test.js.map +1 -0
  216. package/dist/tests/integration/shell/cli-run-host-native.test.d.ts +2 -0
  217. package/dist/tests/integration/shell/cli-run-host-native.test.d.ts.map +1 -0
  218. package/dist/tests/integration/shell/cli-run-host-native.test.js +42 -0
  219. package/dist/tests/integration/shell/cli-run-host-native.test.js.map +1 -0
  220. package/dist/tests/integration/software-squad.test.d.ts +8 -0
  221. package/dist/tests/integration/software-squad.test.d.ts.map +1 -0
  222. package/dist/tests/integration/software-squad.test.js +207 -0
  223. package/dist/tests/integration/software-squad.test.js.map +1 -0
  224. package/dist/tests/unit/artifact-store.test.d.ts +2 -0
  225. package/dist/tests/unit/artifact-store.test.d.ts.map +1 -0
  226. package/dist/tests/unit/artifact-store.test.js +137 -0
  227. package/dist/tests/unit/artifact-store.test.js.map +1 -0
  228. package/dist/tests/unit/context-loader.test.d.ts +2 -0
  229. package/dist/tests/unit/context-loader.test.d.ts.map +1 -0
  230. package/dist/tests/unit/context-loader.test.js +109 -0
  231. package/dist/tests/unit/context-loader.test.js.map +1 -0
  232. package/dist/tests/unit/docs/host-native-docs.test.d.ts +2 -0
  233. package/dist/tests/unit/docs/host-native-docs.test.d.ts.map +1 -0
  234. package/dist/tests/unit/docs/host-native-docs.test.js +18 -0
  235. package/dist/tests/unit/docs/host-native-docs.test.js.map +1 -0
  236. package/dist/tests/unit/guardrails.test.d.ts +2 -0
  237. package/dist/tests/unit/guardrails.test.d.ts.map +1 -0
  238. package/dist/tests/unit/guardrails.test.js +202 -0
  239. package/dist/tests/unit/guardrails.test.js.map +1 -0
  240. package/dist/tests/unit/host/host-adapter-contract.test.d.ts +2 -0
  241. package/dist/tests/unit/host/host-adapter-contract.test.d.ts.map +1 -0
  242. package/dist/tests/unit/host/host-adapter-contract.test.js +53 -0
  243. package/dist/tests/unit/host/host-adapter-contract.test.js.map +1 -0
  244. package/dist/tests/unit/host/ide.adapter.test.d.ts +2 -0
  245. package/dist/tests/unit/host/ide.adapter.test.d.ts.map +1 -0
  246. package/dist/tests/unit/host/ide.adapter.test.js +17 -0
  247. package/dist/tests/unit/host/ide.adapter.test.js.map +1 -0
  248. package/dist/tests/unit/host/native-ide-adapters.test.d.ts +2 -0
  249. package/dist/tests/unit/host/native-ide-adapters.test.d.ts.map +1 -0
  250. package/dist/tests/unit/host/native-ide-adapters.test.js +26 -0
  251. package/dist/tests/unit/host/native-ide-adapters.test.js.map +1 -0
  252. package/dist/tests/unit/runtime/squad-runtime-host-metadata.test.d.ts +2 -0
  253. package/dist/tests/unit/runtime/squad-runtime-host-metadata.test.d.ts.map +1 -0
  254. package/dist/tests/unit/runtime/squad-runtime-host-metadata.test.js +128 -0
  255. package/dist/tests/unit/runtime/squad-runtime-host-metadata.test.js.map +1 -0
  256. package/dist/tests/unit/shell/active-host-detector.test.d.ts +2 -0
  257. package/dist/tests/unit/shell/active-host-detector.test.d.ts.map +1 -0
  258. package/dist/tests/unit/shell/active-host-detector.test.js +85 -0
  259. package/dist/tests/unit/shell/active-host-detector.test.js.map +1 -0
  260. package/dist/tests/unit/shell/host-resolution.service.test.d.ts +2 -0
  261. package/dist/tests/unit/shell/host-resolution.service.test.d.ts.map +1 -0
  262. package/dist/tests/unit/shell/host-resolution.service.test.js +252 -0
  263. package/dist/tests/unit/shell/host-resolution.service.test.js.map +1 -0
  264. package/dist/tests/unit/shell/interview-host-bridge.test.d.ts +2 -0
  265. package/dist/tests/unit/shell/interview-host-bridge.test.d.ts.map +1 -0
  266. package/dist/tests/unit/shell/interview-host-bridge.test.js +58 -0
  267. package/dist/tests/unit/shell/interview-host-bridge.test.js.map +1 -0
  268. package/dist/tests/unit/shell/project-bootstrap.service.test.d.ts +2 -0
  269. package/dist/tests/unit/shell/project-bootstrap.service.test.d.ts.map +1 -0
  270. package/dist/tests/unit/shell/project-bootstrap.service.test.js +58 -0
  271. package/dist/tests/unit/shell/project-bootstrap.service.test.js.map +1 -0
  272. package/dist/tests/unit/shell/squad-scaffold.service.test.d.ts +2 -0
  273. package/dist/tests/unit/shell/squad-scaffold.service.test.d.ts.map +1 -0
  274. package/dist/tests/unit/shell/squad-scaffold.service.test.js +40 -0
  275. package/dist/tests/unit/shell/squad-scaffold.service.test.js.map +1 -0
  276. package/dist/tests/unit/squad-builder.test.d.ts +2 -0
  277. package/dist/tests/unit/squad-builder.test.d.ts.map +1 -0
  278. package/dist/tests/unit/squad-builder.test.js +126 -0
  279. package/dist/tests/unit/squad-builder.test.js.map +1 -0
  280. package/dist/tests/unit/state-machine.test.d.ts +2 -0
  281. package/dist/tests/unit/state-machine.test.d.ts.map +1 -0
  282. package/dist/tests/unit/state-machine.test.js +133 -0
  283. package/dist/tests/unit/state-machine.test.js.map +1 -0
  284. package/docs/architecture/overview.md +115 -0
  285. package/docs/development/adding-agents.md +75 -0
  286. package/docs/development/adding-hosts.md +104 -0
  287. package/docs/development/adding-integrations.md +83 -0
  288. package/docs/development/host-detection-and-resolution.md +59 -0
  289. package/docs/squads/how-to-create.md +85 -0
  290. package/docs/squads/how-to-execute.md +139 -0
  291. package/docs/superpowers/plans/2026-04-01-host-native-cli-shell-implementation.md +617 -0
  292. package/docs/superpowers/specs/2026-04-01-host-native-cli-shell-design.md +253 -0
  293. package/package.json +103 -0
  294. package/squads/examples/instagram-content/AGENTS.md +63 -0
  295. package/squads/examples/instagram-content/POLICIES.md +45 -0
  296. package/squads/examples/instagram-content/SQUAD.md +63 -0
  297. package/squads/examples/instagram-content/WORKFLOW.md +58 -0
  298. package/squads/examples/instagram-content/config/squad.json +474 -0
  299. package/squads/examples/software-development/AGENTS.md +88 -0
  300. package/squads/examples/software-development/POLICIES.md +44 -0
  301. package/squads/examples/software-development/SQUAD.md +65 -0
  302. package/squads/examples/software-development/WORKFLOW.md +78 -0
  303. package/squads/examples/software-development/config/squad.json +442 -0
  304. package/templates/AGENTS.md +46 -0
  305. package/templates/POLICIES.md +24 -0
  306. package/templates/PROJECT.md +52 -0
  307. package/templates/SQUAD.md +52 -0
  308. package/templates/TASKS.md +31 -0
  309. package/templates/WORKFLOW.md +35 -0
@@ -0,0 +1,474 @@
1
+ {
2
+ "id": "instagram-content",
3
+ "name": "Instagram Content Squad",
4
+ "domain": "social-media",
5
+ "objective": "Create, review, approve, and publish high-quality Instagram content from concept to post",
6
+ "description": "A full-cycle Instagram content squad that handles strategy, research, copywriting, creative review, brand compliance, human approval, and publishing — with analytics follow-up.",
7
+ "context": "This squad operates for brand accounts on Instagram. All publishing actions require explicit human approval. Brand guidelines must be respected at all times.",
8
+ "agents": [
9
+ {
10
+ "id": "strategy-agent",
11
+ "name": "Strategy Agent",
12
+ "role": "Content Strategist",
13
+ "domain": "social-media",
14
+ "objective": "Define the content strategy and brief for each post or campaign",
15
+ "instructions": "You are the Strategy Agent. Given a campaign brief or topic request, produce a content strategy: target audience, tone of voice, content pillars, post objective, and success metrics. Output a concise strategy brief.",
16
+ "inputs": [
17
+ { "name": "campaign_brief", "description": "Campaign or post request", "required": true }
18
+ ],
19
+ "outputs": [
20
+ { "name": "strategy_brief", "description": "Content strategy brief", "required": true, "format": "markdown" }
21
+ ],
22
+ "allowedTools": ["context", "filesystem"],
23
+ "constraints": [
24
+ "Do not write captions",
25
+ "Stay aligned with brand guidelines",
26
+ "Always define a clear call-to-action"
27
+ ],
28
+ "successCriteria": ["Strategy brief produced", "Audience and objective defined"],
29
+ "failureCriteria": ["Cannot understand campaign goal"],
30
+ "allowedStates": ["READY_FOR_EXECUTION", "RUNNING_STEP"],
31
+ "blockingConditions": [],
32
+ "handoffRules": [
33
+ {
34
+ "condition": "strategy_complete",
35
+ "targetAgentId": "research-agent",
36
+ "description": "Pass strategy to Research Agent",
37
+ "requiresApproval": false
38
+ }
39
+ ],
40
+ "responseFormat": "markdown"
41
+ },
42
+ {
43
+ "id": "research-agent",
44
+ "name": "Research Agent",
45
+ "role": "Content Researcher",
46
+ "domain": "social-media",
47
+ "objective": "Research trending topics, hashtags, and competitor content relevant to the strategy",
48
+ "instructions": "You are the Research Agent. Given a strategy brief, research: trending hashtags, relevant topics, competitor content, and audience insights. Output a research summary with top hashtag suggestions and content opportunities.",
49
+ "inputs": [
50
+ { "name": "strategy_brief", "description": "Content strategy brief", "required": true }
51
+ ],
52
+ "outputs": [
53
+ { "name": "research_summary", "description": "Hashtags, trends, and content insights", "required": true, "format": "markdown" }
54
+ ],
55
+ "allowedTools": ["web-search", "context"],
56
+ "constraints": [
57
+ "Do not fabricate statistics",
58
+ "Always cite sources when possible",
59
+ "Respect platform hashtag limits (max 30)"
60
+ ],
61
+ "successCriteria": ["Research completed", "Hashtag list produced"],
62
+ "failureCriteria": ["Cannot access research tools"],
63
+ "allowedStates": ["READY_FOR_EXECUTION", "RUNNING_STEP"],
64
+ "blockingConditions": [],
65
+ "handoffRules": [
66
+ {
67
+ "condition": "research_complete",
68
+ "targetAgentId": "copy-agent",
69
+ "description": "Pass research to Copy Agent",
70
+ "requiresApproval": false
71
+ }
72
+ ],
73
+ "responseFormat": "markdown"
74
+ },
75
+ {
76
+ "id": "copy-agent",
77
+ "name": "Copy Agent",
78
+ "role": "Copywriter",
79
+ "domain": "social-media",
80
+ "objective": "Write the Instagram caption, hashtags, and call-to-action",
81
+ "instructions": "You are the Copy Agent. Given a strategy brief and research summary, write an engaging Instagram caption. Follow the brand voice guidelines. Include: hook, body, CTA, and hashtags. Keep within Instagram limits (2200 chars, max 30 hashtags). Output the full caption.",
82
+ "inputs": [
83
+ { "name": "strategy_brief", "description": "Content strategy", "required": true },
84
+ { "name": "research_summary", "description": "Research and hashtags", "required": true }
85
+ ],
86
+ "outputs": [
87
+ { "name": "caption_draft", "description": "Instagram caption draft", "required": true, "format": "markdown" }
88
+ ],
89
+ "allowedTools": ["context", "filesystem"],
90
+ "constraints": [
91
+ "Max 2200 characters",
92
+ "Max 30 hashtags",
93
+ "Must include a clear CTA",
94
+ "Follow brand voice guidelines",
95
+ "No profanity or off-brand language"
96
+ ],
97
+ "successCriteria": ["Caption written", "Within character limits", "CTA included"],
98
+ "failureCriteria": ["Cannot write compliant caption"],
99
+ "allowedStates": ["READY_FOR_EXECUTION", "RUNNING_STEP"],
100
+ "blockingConditions": [],
101
+ "handoffRules": [
102
+ {
103
+ "condition": "caption_drafted",
104
+ "targetAgentId": "creative-review-agent",
105
+ "description": "Pass caption to Creative Review Agent",
106
+ "requiresApproval": false
107
+ }
108
+ ],
109
+ "responseFormat": "markdown"
110
+ },
111
+ {
112
+ "id": "creative-review-agent",
113
+ "name": "Creative Review Agent",
114
+ "role": "Creative Director",
115
+ "domain": "social-media",
116
+ "objective": "Review caption for creativity, engagement, and tone",
117
+ "instructions": "You are the Creative Review Agent. Review the caption draft for: creativity, engagement potential, tone consistency, and CTA effectiveness. Output PASS or REVISE with specific feedback. If REVISE, send back to Copy Agent with clear instructions.",
118
+ "inputs": [
119
+ { "name": "caption_draft", "description": "Caption to review", "required": true },
120
+ { "name": "strategy_brief", "description": "Original strategy for reference", "required": true }
121
+ ],
122
+ "outputs": [
123
+ { "name": "creative_review", "description": "Creative review verdict and feedback", "required": true, "format": "markdown" }
124
+ ],
125
+ "allowedTools": ["context"],
126
+ "constraints": [
127
+ "Do not rewrite the caption — provide feedback only",
128
+ "Be specific in feedback",
129
+ "Always output PASS or REVISE clearly"
130
+ ],
131
+ "successCriteria": ["Review completed", "Verdict issued"],
132
+ "failureCriteria": ["Cannot evaluate caption"],
133
+ "allowedStates": ["READY_FOR_EXECUTION", "RUNNING_STEP"],
134
+ "blockingConditions": [],
135
+ "handoffRules": [
136
+ {
137
+ "condition": "creative_review_passed",
138
+ "targetAgentId": "brand-agent",
139
+ "description": "Pass to Brand/Compliance Agent",
140
+ "requiresApproval": false
141
+ },
142
+ {
143
+ "condition": "creative_review_failed",
144
+ "targetAgentId": "copy-agent",
145
+ "description": "Return to Copy Agent for revision",
146
+ "requiresApproval": false
147
+ }
148
+ ],
149
+ "responseFormat": "structured",
150
+ "allowsLoop": true
151
+ },
152
+ {
153
+ "id": "brand-agent",
154
+ "name": "Brand/Compliance Agent",
155
+ "role": "Brand Guardian",
156
+ "domain": "social-media",
157
+ "objective": "Verify the caption against brand guidelines and compliance requirements",
158
+ "instructions": "You are the Brand/Compliance Agent. Review the caption against the brand guidelines (read from brand/** context files). Check: brand voice, prohibited words/topics, legal compliance, and hashtag policy. Output PASS or FAIL with specific violations noted.",
159
+ "inputs": [
160
+ { "name": "caption_draft", "description": "Caption to validate", "required": true },
161
+ { "name": "creative_review", "description": "Creative review for context", "required": false }
162
+ ],
163
+ "outputs": [
164
+ { "name": "compliance_review", "description": "Brand and compliance review result", "required": true, "format": "markdown" }
165
+ ],
166
+ "allowedTools": ["context", "filesystem"],
167
+ "constraints": [
168
+ "Do not rewrite content",
169
+ "Check against brand guidelines document if available",
170
+ "Flag any legal or compliance risks"
171
+ ],
172
+ "successCriteria": ["Compliance review completed", "Brand guidelines checked"],
173
+ "failureCriteria": ["Brand guidelines not found", "Cannot evaluate compliance"],
174
+ "allowedStates": ["READY_FOR_EXECUTION", "RUNNING_STEP"],
175
+ "blockingConditions": [],
176
+ "handoffRules": [
177
+ {
178
+ "condition": "compliance_passed",
179
+ "targetAgentId": "approval-agent",
180
+ "description": "Pass to Approval Agent for human sign-off",
181
+ "requiresApproval": false
182
+ },
183
+ {
184
+ "condition": "compliance_failed",
185
+ "targetAgentId": "copy-agent",
186
+ "description": "Return to Copy Agent for compliance fix",
187
+ "requiresApproval": false
188
+ }
189
+ ],
190
+ "responseFormat": "structured"
191
+ },
192
+ {
193
+ "id": "approval-agent",
194
+ "name": "Approval Agent",
195
+ "role": "Human Approval Coordinator",
196
+ "domain": "social-media",
197
+ "objective": "Present the content package to the human for final approval before publishing",
198
+ "instructions": "You are the Approval Agent. Present the complete content package (caption, hashtags, strategy brief, review results) to the human for final approval. Clearly display the full caption. Ask the human: APPROVE or REJECT? If rejected, collect feedback and return to Copy Agent. NEVER proceed to publish without explicit human approval.",
199
+ "inputs": [
200
+ { "name": "caption_draft", "description": "Final caption draft", "required": true },
201
+ { "name": "compliance_review", "description": "Compliance review result", "required": true }
202
+ ],
203
+ "outputs": [
204
+ { "name": "approval_decision", "description": "Human approval decision", "required": true, "format": "json" }
205
+ ],
206
+ "allowedTools": [],
207
+ "constraints": [
208
+ "NEVER approve automatically",
209
+ "ALWAYS show the full caption to the human",
210
+ "ALWAYS wait for explicit human response before proceeding",
211
+ "Record the approval with timestamp and approver"
212
+ ],
213
+ "successCriteria": ["Human presented with content", "Explicit decision received"],
214
+ "failureCriteria": ["Cannot present content to human"],
215
+ "allowedStates": ["READY_FOR_EXECUTION", "RUNNING_STEP", "WAITING_APPROVAL"],
216
+ "blockingConditions": [],
217
+ "handoffRules": [
218
+ {
219
+ "condition": "approved",
220
+ "targetAgentId": "publisher-agent",
221
+ "description": "Pass to Publisher Agent after approval",
222
+ "requiresApproval": true
223
+ },
224
+ {
225
+ "condition": "rejected",
226
+ "targetAgentId": "copy-agent",
227
+ "description": "Return to Copy Agent with human feedback",
228
+ "requiresApproval": false
229
+ }
230
+ ],
231
+ "responseFormat": "structured"
232
+ },
233
+ {
234
+ "id": "publisher-agent",
235
+ "name": "Publisher Agent",
236
+ "role": "Content Publisher",
237
+ "domain": "social-media",
238
+ "objective": "Publish the approved content to Instagram",
239
+ "instructions": "You are the Publisher Agent. ONLY publish content that has been explicitly approved by the human via the Approval Agent. Post the caption and media to Instagram. Record the post URL and ID. Output the published post metadata.",
240
+ "inputs": [
241
+ { "name": "caption_draft", "description": "Approved caption", "required": true },
242
+ { "name": "approval_decision", "description": "Human approval record", "required": true }
243
+ ],
244
+ "outputs": [
245
+ { "name": "published_post", "description": "Published post metadata and URL", "required": true, "format": "json" }
246
+ ],
247
+ "allowedTools": ["social-media"],
248
+ "constraints": [
249
+ "NEVER publish without human approval record",
250
+ "NEVER publish if approval_decision is missing or shows rejection",
251
+ "Always record the post URL",
252
+ "Report publish errors clearly"
253
+ ],
254
+ "successCriteria": ["Post published", "Post URL recorded"],
255
+ "failureCriteria": ["Publishing failed", "No approval record found"],
256
+ "allowedStates": ["READY_FOR_EXECUTION", "RUNNING_STEP", "WAITING_APPROVAL"],
257
+ "blockingConditions": ["no_approval"],
258
+ "handoffRules": [
259
+ {
260
+ "condition": "post_published",
261
+ "targetAgentId": "analytics-agent",
262
+ "description": "Pass to Analytics Agent for tracking",
263
+ "requiresApproval": false
264
+ }
265
+ ],
266
+ "responseFormat": "structured"
267
+ },
268
+ {
269
+ "id": "analytics-agent",
270
+ "name": "Analytics Agent",
271
+ "role": "Performance Analyst",
272
+ "domain": "social-media",
273
+ "objective": "Track post performance and generate an analytics report",
274
+ "instructions": "You are the Analytics Agent. Given a published post URL and ID, retrieve available analytics data (reach, impressions, engagement, likes, comments). Generate a performance report. Identify top-performing elements and provide recommendations for future posts.",
275
+ "inputs": [
276
+ { "name": "published_post", "description": "Published post metadata", "required": true }
277
+ ],
278
+ "outputs": [
279
+ { "name": "analytics_report", "description": "Post performance report with recommendations", "required": true, "format": "markdown" }
280
+ ],
281
+ "allowedTools": ["social-media", "context"],
282
+ "constraints": [
283
+ "Do not fabricate metrics",
284
+ "Report 'not yet available' if analytics are not ready",
285
+ "Always include recommendations"
286
+ ],
287
+ "successCriteria": ["Analytics report generated", "Recommendations included"],
288
+ "failureCriteria": ["Cannot access analytics API"],
289
+ "allowedStates": ["READY_FOR_EXECUTION", "RUNNING_STEP"],
290
+ "blockingConditions": [],
291
+ "handoffRules": [],
292
+ "responseFormat": "markdown"
293
+ }
294
+ ],
295
+ "workflow": {
296
+ "id": "workflow-instagram-content",
297
+ "name": "Instagram Content Pipeline",
298
+ "description": "End-to-end content workflow: strategy → research → copy → review → compliance → approval → publish → analytics",
299
+ "entryStepId": "step-strategy",
300
+ "steps": [
301
+ {
302
+ "id": "step-strategy",
303
+ "name": "Content Strategy",
304
+ "agentId": "strategy-agent",
305
+ "description": "Define content strategy and brief",
306
+ "dependsOn": [],
307
+ "guardrails": ["grail-min-context"],
308
+ "requiresApprovalBefore": false,
309
+ "requiresApprovalAfter": false,
310
+ "requiredArtifacts": [],
311
+ "producedArtifacts": ["strategy_brief"],
312
+ "nextStepId": "step-research"
313
+ },
314
+ {
315
+ "id": "step-research",
316
+ "name": "Research",
317
+ "agentId": "research-agent",
318
+ "description": "Research trends, hashtags, and audience insights",
319
+ "dependsOn": ["step-strategy"],
320
+ "guardrails": [],
321
+ "requiresApprovalBefore": false,
322
+ "requiresApprovalAfter": false,
323
+ "requiredArtifacts": ["strategy_brief"],
324
+ "producedArtifacts": ["research_summary"],
325
+ "nextStepId": "step-copy"
326
+ },
327
+ {
328
+ "id": "step-copy",
329
+ "name": "Copywriting",
330
+ "agentId": "copy-agent",
331
+ "description": "Write Instagram caption",
332
+ "dependsOn": ["step-research"],
333
+ "guardrails": [],
334
+ "requiresApprovalBefore": false,
335
+ "requiresApprovalAfter": false,
336
+ "requiredArtifacts": ["strategy_brief", "research_summary"],
337
+ "producedArtifacts": ["caption_draft"],
338
+ "allowsLoop": true,
339
+ "nextStepId": "step-creative-review"
340
+ },
341
+ {
342
+ "id": "step-creative-review",
343
+ "name": "Creative Review",
344
+ "agentId": "creative-review-agent",
345
+ "description": "Review for creativity and engagement",
346
+ "dependsOn": ["step-copy"],
347
+ "guardrails": [],
348
+ "requiresApprovalBefore": false,
349
+ "requiresApprovalAfter": false,
350
+ "requiredArtifacts": ["caption_draft"],
351
+ "producedArtifacts": ["creative_review"],
352
+ "allowsLoop": true,
353
+ "nextStepId": "step-brand"
354
+ },
355
+ {
356
+ "id": "step-brand",
357
+ "name": "Brand & Compliance Review",
358
+ "agentId": "brand-agent",
359
+ "description": "Check brand guidelines and compliance",
360
+ "dependsOn": ["step-creative-review"],
361
+ "guardrails": [],
362
+ "requiresApprovalBefore": false,
363
+ "requiresApprovalAfter": false,
364
+ "requiredArtifacts": ["caption_draft"],
365
+ "producedArtifacts": ["compliance_review"],
366
+ "nextStepId": "step-approval"
367
+ },
368
+ {
369
+ "id": "step-approval",
370
+ "name": "Human Approval",
371
+ "agentId": "approval-agent",
372
+ "description": "Present to human for final approval",
373
+ "dependsOn": ["step-brand"],
374
+ "guardrails": ["grail-approval-publish"],
375
+ "requiresApprovalBefore": true,
376
+ "requiresApprovalAfter": false,
377
+ "requiredArtifacts": ["caption_draft", "compliance_review"],
378
+ "producedArtifacts": ["approval_decision"],
379
+ "nextStepId": "step-publish"
380
+ },
381
+ {
382
+ "id": "step-publish",
383
+ "name": "Publishing",
384
+ "agentId": "publisher-agent",
385
+ "description": "Publish approved content to Instagram",
386
+ "dependsOn": ["step-approval"],
387
+ "guardrails": ["grail-approval-publish"],
388
+ "requiresApprovalBefore": true,
389
+ "requiresApprovalAfter": false,
390
+ "requiredArtifacts": ["caption_draft", "approval_decision"],
391
+ "producedArtifacts": ["published_post"],
392
+ "nextStepId": "step-analytics"
393
+ },
394
+ {
395
+ "id": "step-analytics",
396
+ "name": "Analytics",
397
+ "agentId": "analytics-agent",
398
+ "description": "Track and report post performance",
399
+ "dependsOn": ["step-publish"],
400
+ "guardrails": [],
401
+ "requiresApprovalBefore": false,
402
+ "requiresApprovalAfter": false,
403
+ "requiredArtifacts": ["published_post"],
404
+ "producedArtifacts": ["analytics_report"]
405
+ }
406
+ ]
407
+ },
408
+ "policy": {
409
+ "id": "policy-instagram-content",
410
+ "name": "Instagram Content Policies",
411
+ "description": "Policies for safe, brand-compliant Instagram content creation and publishing",
412
+ "guardrails": [
413
+ {
414
+ "id": "grail-min-context",
415
+ "name": "Require Minimum Context",
416
+ "description": "Brand guidelines should be available",
417
+ "severity": "warn",
418
+ "ruleKey": "require_minimum_context",
419
+ "params": { "requiredFields": ["projectMd"] }
420
+ },
421
+ {
422
+ "id": "grail-approval-publish",
423
+ "name": "Require Approval Before Publish",
424
+ "description": "All publishing requires human approval",
425
+ "severity": "block",
426
+ "ruleKey": "require_approval_before_publish"
427
+ }
428
+ ],
429
+ "prohibitedActions": [
430
+ "Auto-publish without human approval",
431
+ "Post content that fails brand compliance check",
432
+ "Use more than 30 hashtags",
433
+ "Publish content rejected by the Creative Review Agent",
434
+ "Delete published posts automatically"
435
+ ],
436
+ "requiredApprovals": [
437
+ {
438
+ "action": "publish",
439
+ "description": "A human must explicitly approve the caption before publishing to Instagram"
440
+ }
441
+ ]
442
+ },
443
+ "expectedArtifacts": [
444
+ { "id": "artifact-strategy", "name": "Strategy Brief", "description": "Content strategy", "path": "outputs/strategy_brief.md", "required": true, "format": "markdown" },
445
+ { "id": "artifact-caption", "name": "Caption Draft", "description": "Instagram caption", "path": "outputs/caption_draft.md", "required": true, "format": "markdown" },
446
+ { "id": "artifact-review", "name": "Creative Review", "description": "Creative director review", "path": "outputs/creative_review.md", "required": true, "format": "markdown" },
447
+ { "id": "artifact-compliance", "name": "Compliance Review", "description": "Brand/compliance review", "path": "outputs/compliance_review.md", "required": true, "format": "markdown" },
448
+ { "id": "artifact-approval", "name": "Approval Decision", "description": "Human approval record", "path": "outputs/approval_decision.json", "required": true, "format": "json" },
449
+ { "id": "artifact-post", "name": "Published Post", "description": "Published post metadata", "path": "outputs/published_post.json", "required": true, "format": "json" },
450
+ { "id": "artifact-analytics", "name": "Analytics Report", "description": "Post performance report", "path": "outputs/analytics_report.md", "required": false, "format": "markdown" }
451
+ ],
452
+ "allowedIntegrations": [
453
+ { "id": "instagram", "type": "social-media", "name": "Instagram Graph API", "required": true, "status": "stub" }
454
+ ],
455
+ "templates": ["brand-brief-template", "caption-template"],
456
+ "successCriteria": [
457
+ "Content created and passes brand review",
458
+ "Human explicitly approves content",
459
+ "Post published successfully",
460
+ "Analytics report generated"
461
+ ],
462
+ "failureCriteria": [
463
+ "Content fails brand compliance after 3 revision cycles",
464
+ "Human rejects content",
465
+ "Publishing fails"
466
+ ],
467
+ "metadata": {
468
+ "version": "1.0.0",
469
+ "createdAt": "2026-04-01T00:00:00.000Z",
470
+ "updatedAt": "2026-04-01T00:00:00.000Z",
471
+ "tags": ["social-media", "instagram", "content", "brand", "publishing"],
472
+ "hostCompatibility": ["claude-code", "opencode", "cursor", "codex", "zed", "any"]
473
+ }
474
+ }
@@ -0,0 +1,88 @@
1
+ # Agents — Software Development Squad
2
+
3
+ ## Product Agent
4
+
5
+ **ID:** `product-agent` | **Role:** Product Manager / Requirements Author
6
+
7
+ Transforms task input into PRD and SDD. Does not write code. Always defines acceptance criteria.
8
+
9
+ **Inputs:** task_input
10
+ **Outputs:** prd.md, sdd.md
11
+ **Tools:** filesystem, context
12
+
13
+ ---
14
+
15
+ ## Code Agent
16
+
17
+ **ID:** `code-agent` | **Role:** Software Engineer / Implementor
18
+
19
+ Implements features according to PRD + SDD. Follows project conventions (reads PROJECT.md). Does not deploy, merge, or make architectural decisions without flagging them.
20
+
21
+ **Inputs:** prd, sdd
22
+ **Outputs:** implementation files
23
+ **Tools:** filesystem, git, context
24
+ **Blocked by:** missing PRD or SDD
25
+
26
+ ---
27
+
28
+ ## Reviewer Agent
29
+
30
+ **ID:** `reviewer-agent` | **Role:** Code Reviewer
31
+
32
+ Reviews code for correctness, security, style, and test coverage. Issues a PASS or FAIL verdict with structured findings. Does not write code. Loops back to Code Agent on FAIL.
33
+
34
+ **Inputs:** implementation, prd
35
+ **Outputs:** review_findings.md
36
+ **Tools:** filesystem, context
37
+ **Loop:** Yes — FAIL → Code Agent
38
+
39
+ ---
40
+
41
+ ## Test Agent
42
+
43
+ **ID:** `test-agent` | **Role:** QA Engineer / Test Runner
44
+
45
+ Writes and executes tests. Reports results honestly. Does not modify production code. Returns to Code Agent if tests fail.
46
+
47
+ **Inputs:** implementation, review_findings
48
+ **Outputs:** test_results.md
49
+ **Tools:** filesystem, test-runner
50
+ **Loop:** Yes — test failure → Code Agent
51
+
52
+ ---
53
+
54
+ ## Commit Agent
55
+
56
+ **ID:** `commit-agent` | **Role:** VCS / Branch Manager
57
+
58
+ Creates feature branch. Stages files. Writes conventional commit message. Does not push to main/master. Does not force-push.
59
+
60
+ **Inputs:** implementation, test_results
61
+ **Outputs:** commit_info (branch + SHA)
62
+ **Tools:** git, filesystem
63
+
64
+ ---
65
+
66
+ ## PR Agent
67
+
68
+ **ID:** `pr-agent` | **Role:** Pull Request Manager
69
+
70
+ Creates PR with full description including: summary, test evidence, review findings, related issues. Does NOT auto-merge. Does NOT approve own PRs.
71
+
72
+ **Inputs:** commit_info, review_findings, test_results
73
+ **Outputs:** pr_info (URL + number)
74
+ **Tools:** git, github
75
+ **Guardrail:** requires review + test artifacts
76
+
77
+ ---
78
+
79
+ ## Deploy Agent
80
+
81
+ **ID:** `deploy-agent` | **Role:** Deployment Manager
82
+
83
+ **ALWAYS** asks for environment (staging/production) and branch before deploying. Never deploys to production without explicit human confirmation. Reports deploy URL and status.
84
+
85
+ **Inputs:** pr_info
86
+ **Outputs:** deploy_result
87
+ **Tools:** deploy, github
88
+ **Guardrail:** `require_human_before_deploy` — ALWAYS blocks without approval
@@ -0,0 +1,44 @@
1
+ # Policies — Software Development Squad
2
+
3
+ ## Guardrails
4
+
5
+ ### 1. Require Minimum Context (`grail-min-context`)
6
+ - **Severity:** warn
7
+ - **Rule:** `require_minimum_context`
8
+ - **Description:** PROJECT.md should be present to inform coding conventions
9
+
10
+ ### 2. Require PRD Before Code (`grail-artifact-prd`)
11
+ - **Severity:** block
12
+ - **Rule:** `require_artifact_before_step`
13
+ - **Description:** Code Agent cannot run without a PRD artifact
14
+
15
+ ### 3. Require Implementation Before Review (`grail-artifact-impl`)
16
+ - **Severity:** block
17
+ - **Rule:** `require_artifact_before_step`
18
+ - **Description:** Reviewer Agent cannot run without implementation
19
+
20
+ ### 4. PR Criteria (`grail-pr-criteria`)
21
+ - **Severity:** block
22
+ - **Rule:** `require_pr_criteria`
23
+ - **Description:** PR cannot be created without review findings and test results
24
+
25
+ ### 5. Human Before Deploy (`grail-human-deploy`)
26
+ - **Severity:** block
27
+ - **Rule:** `require_human_before_deploy`
28
+ - **Description:** All deployments require explicit human approval — no exceptions
29
+
30
+ ## Prohibited Actions
31
+
32
+ - Auto-merge pull requests
33
+ - Deploy to production without human confirmation
34
+ - Push directly to `main` or `master`
35
+ - Approve your own pull requests
36
+ - Force-push to any branch
37
+ - Skip code review
38
+ - Skip tests
39
+
40
+ ## Required Approvals
41
+
42
+ | Action | Requirement |
43
+ |--------|-------------|
44
+ | deploy | Human must confirm environment and branch |
@@ -0,0 +1,65 @@
1
+ # Software Development Squad
2
+
3
+ **ID:** `software-development`
4
+ **Domain:** software-development
5
+ **Version:** 1.0.0
6
+
7
+ ## Objective
8
+
9
+ Implement software features from requirements through to deployed code with full review, testing, and traceability.
10
+
11
+ ## Agents
12
+
13
+ | Agent | Role | Responsibility |
14
+ |-------|------|---------------|
15
+ | Product Agent | Product Manager | PRD + SDD generation |
16
+ | Code Agent | Engineer | Feature implementation |
17
+ | Reviewer Agent | Code Reviewer | Structured code review with PASS/FAIL |
18
+ | Test Agent | QA Engineer | Test writing and execution |
19
+ | Commit Agent | VCS Manager | Branch creation and committing |
20
+ | PR Agent | PR Manager | Pull request creation and documentation |
21
+ | Deploy Agent | Deployment Manager | Deploy to staging/production (requires human approval) |
22
+
23
+ ## Workflow
24
+
25
+ ```
26
+ Task Input
27
+
28
+ Product Agent → PRD + SDD
29
+
30
+ Code Agent → Implementation
31
+
32
+ Reviewer Agent → Review Findings (loops back to Code Agent if FAIL)
33
+
34
+ Test Agent → Test Results (loops back to Code Agent if tests fail)
35
+
36
+ Commit Agent → Branch + Commit
37
+
38
+ PR Agent → Pull Request
39
+
40
+ [HUMAN APPROVAL REQUIRED]
41
+
42
+ Deploy Agent → Deployment
43
+ ```
44
+
45
+ ## Key Policies
46
+
47
+ - **No auto-merge**: PRs are never merged automatically
48
+ - **No auto-deploy to production**: Always requires human confirmation
49
+ - **No direct push to main/master**: Always work on feature branches
50
+ - **Review loop**: Code Agent ↔ Reviewer Agent until PASS verdict
51
+ - **Test gate**: Tests must pass before PR is created
52
+
53
+ ## Guardrails
54
+
55
+ - `require_minimum_context` — PROJECT.md should be present
56
+ - `require_artifact_before_step` — Code cannot run without PRD
57
+ - `require_pr_criteria` — PR requires review + test artifacts
58
+ - `require_human_before_deploy` — Deploy always needs human approval
59
+
60
+ ## Integrations
61
+
62
+ | Integration | Status |
63
+ |-------------|--------|
64
+ | GitHub (VCS, PR) | stub |
65
+ | Vercel (Deploy) | stub |