@cluesmith/codev 2.0.0-rc.3 → 2.0.0-rc.32

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 (307) hide show
  1. package/bin/porch.js +6 -35
  2. package/dashboard/dist/assets/index-CXwnJkPh.css +32 -0
  3. package/dashboard/dist/assets/index-D429K6qO.js +120 -0
  4. package/dashboard/dist/assets/index-D429K6qO.js.map +1 -0
  5. package/dashboard/dist/index.html +13 -0
  6. package/dist/agent-farm/cli.d.ts.map +1 -1
  7. package/dist/agent-farm/cli.js +74 -64
  8. package/dist/agent-farm/cli.js.map +1 -1
  9. package/dist/agent-farm/commands/architect.d.ts.map +1 -1
  10. package/dist/agent-farm/commands/architect.js +0 -2
  11. package/dist/agent-farm/commands/architect.js.map +1 -1
  12. package/dist/agent-farm/commands/attach.d.ts +13 -0
  13. package/dist/agent-farm/commands/attach.d.ts.map +1 -0
  14. package/dist/agent-farm/commands/attach.js +179 -0
  15. package/dist/agent-farm/commands/attach.js.map +1 -0
  16. package/dist/agent-farm/commands/cleanup.d.ts.map +1 -1
  17. package/dist/agent-farm/commands/cleanup.js +30 -3
  18. package/dist/agent-farm/commands/cleanup.js.map +1 -1
  19. package/dist/agent-farm/commands/consult.js +1 -1
  20. package/dist/agent-farm/commands/consult.js.map +1 -1
  21. package/dist/agent-farm/commands/index.d.ts +2 -2
  22. package/dist/agent-farm/commands/index.d.ts.map +1 -1
  23. package/dist/agent-farm/commands/index.js +2 -2
  24. package/dist/agent-farm/commands/index.js.map +1 -1
  25. package/dist/agent-farm/commands/{util.d.ts → shell.d.ts} +5 -5
  26. package/dist/agent-farm/commands/shell.d.ts.map +1 -0
  27. package/dist/agent-farm/commands/{util.js → shell.js} +23 -36
  28. package/dist/agent-farm/commands/shell.js.map +1 -0
  29. package/dist/agent-farm/commands/spawn.d.ts.map +1 -1
  30. package/dist/agent-farm/commands/spawn.js +455 -217
  31. package/dist/agent-farm/commands/spawn.js.map +1 -1
  32. package/dist/agent-farm/commands/start.d.ts.map +1 -1
  33. package/dist/agent-farm/commands/start.js +21 -74
  34. package/dist/agent-farm/commands/start.js.map +1 -1
  35. package/dist/agent-farm/commands/stop.d.ts.map +1 -1
  36. package/dist/agent-farm/commands/stop.js +79 -10
  37. package/dist/agent-farm/commands/stop.js.map +1 -1
  38. package/dist/agent-farm/commands/tower.d.ts.map +1 -1
  39. package/dist/agent-farm/commands/tower.js +2 -1
  40. package/dist/agent-farm/commands/tower.js.map +1 -1
  41. package/dist/agent-farm/db/index.d.ts.map +1 -1
  42. package/dist/agent-farm/db/index.js +15 -0
  43. package/dist/agent-farm/db/index.js.map +1 -1
  44. package/dist/agent-farm/db/schema.d.ts +1 -1
  45. package/dist/agent-farm/db/schema.d.ts.map +1 -1
  46. package/dist/agent-farm/db/schema.js +6 -3
  47. package/dist/agent-farm/db/schema.js.map +1 -1
  48. package/dist/agent-farm/db/types.d.ts +3 -0
  49. package/dist/agent-farm/db/types.d.ts.map +1 -1
  50. package/dist/agent-farm/db/types.js +3 -0
  51. package/dist/agent-farm/db/types.js.map +1 -1
  52. package/dist/agent-farm/hq-connector.d.ts +2 -2
  53. package/dist/agent-farm/hq-connector.js +2 -2
  54. package/dist/agent-farm/servers/dashboard-server.js +408 -127
  55. package/dist/agent-farm/servers/dashboard-server.js.map +1 -1
  56. package/dist/agent-farm/servers/tower-server.js +353 -16
  57. package/dist/agent-farm/servers/tower-server.js.map +1 -1
  58. package/dist/agent-farm/state.d.ts +4 -10
  59. package/dist/agent-farm/state.d.ts.map +1 -1
  60. package/dist/agent-farm/state.js +30 -31
  61. package/dist/agent-farm/state.js.map +1 -1
  62. package/dist/agent-farm/types.d.ts +48 -0
  63. package/dist/agent-farm/types.d.ts.map +1 -1
  64. package/dist/agent-farm/utils/config.d.ts.map +1 -1
  65. package/dist/agent-farm/utils/config.js +1 -0
  66. package/dist/agent-farm/utils/config.js.map +1 -1
  67. package/dist/agent-farm/utils/deps.d.ts.map +1 -1
  68. package/dist/agent-farm/utils/deps.js +0 -16
  69. package/dist/agent-farm/utils/deps.js.map +1 -1
  70. package/dist/agent-farm/utils/notifications.d.ts +30 -0
  71. package/dist/agent-farm/utils/notifications.d.ts.map +1 -0
  72. package/dist/agent-farm/utils/notifications.js +121 -0
  73. package/dist/agent-farm/utils/notifications.js.map +1 -0
  74. package/dist/agent-farm/utils/server-utils.d.ts +2 -1
  75. package/dist/agent-farm/utils/server-utils.d.ts.map +1 -1
  76. package/dist/agent-farm/utils/server-utils.js +11 -1
  77. package/dist/agent-farm/utils/server-utils.js.map +1 -1
  78. package/dist/agent-farm/utils/shell.d.ts +9 -22
  79. package/dist/agent-farm/utils/shell.d.ts.map +1 -1
  80. package/dist/agent-farm/utils/shell.js +34 -34
  81. package/dist/agent-farm/utils/shell.js.map +1 -1
  82. package/dist/agent-farm/utils/terminal-ports.d.ts +1 -1
  83. package/dist/agent-farm/utils/terminal-ports.js +1 -1
  84. package/dist/cli.d.ts.map +1 -1
  85. package/dist/cli.js +5 -54
  86. package/dist/cli.js.map +1 -1
  87. package/dist/commands/adopt.d.ts.map +1 -1
  88. package/dist/commands/adopt.js +20 -4
  89. package/dist/commands/adopt.js.map +1 -1
  90. package/dist/commands/consult/index.d.ts.map +1 -1
  91. package/dist/commands/consult/index.js +63 -3
  92. package/dist/commands/consult/index.js.map +1 -1
  93. package/dist/commands/doctor.d.ts.map +1 -1
  94. package/dist/commands/doctor.js +0 -15
  95. package/dist/commands/doctor.js.map +1 -1
  96. package/dist/commands/init.d.ts.map +1 -1
  97. package/dist/commands/init.js +18 -2
  98. package/dist/commands/init.js.map +1 -1
  99. package/dist/commands/porch/build-counter.d.ts +5 -0
  100. package/dist/commands/porch/build-counter.d.ts.map +1 -0
  101. package/dist/commands/porch/build-counter.js +5 -0
  102. package/dist/commands/porch/build-counter.js.map +1 -0
  103. package/dist/commands/porch/checks.d.ts +16 -29
  104. package/dist/commands/porch/checks.d.ts.map +1 -1
  105. package/dist/commands/porch/checks.js +90 -144
  106. package/dist/commands/porch/checks.js.map +1 -1
  107. package/dist/commands/porch/claude.d.ts +27 -0
  108. package/dist/commands/porch/claude.d.ts.map +1 -0
  109. package/dist/commands/porch/claude.js +107 -0
  110. package/dist/commands/porch/claude.js.map +1 -0
  111. package/dist/commands/porch/index.d.ts +21 -43
  112. package/dist/commands/porch/index.d.ts.map +1 -1
  113. package/dist/commands/porch/index.js +469 -753
  114. package/dist/commands/porch/index.js.map +1 -1
  115. package/dist/commands/porch/plan.d.ts +70 -0
  116. package/dist/commands/porch/plan.d.ts.map +1 -0
  117. package/dist/commands/porch/plan.js +190 -0
  118. package/dist/commands/porch/plan.js.map +1 -0
  119. package/dist/commands/porch/prompts.d.ts +19 -0
  120. package/dist/commands/porch/prompts.d.ts.map +1 -0
  121. package/dist/commands/porch/prompts.js +250 -0
  122. package/dist/commands/porch/prompts.js.map +1 -0
  123. package/dist/commands/porch/protocol.d.ts +59 -0
  124. package/dist/commands/porch/protocol.d.ts.map +1 -0
  125. package/dist/commands/porch/protocol.js +260 -0
  126. package/dist/commands/porch/protocol.js.map +1 -0
  127. package/dist/commands/porch/run.d.ts +40 -0
  128. package/dist/commands/porch/run.d.ts.map +1 -0
  129. package/dist/commands/porch/run.js +893 -0
  130. package/dist/commands/porch/run.js.map +1 -0
  131. package/dist/commands/porch/state.d.ts +23 -112
  132. package/dist/commands/porch/state.d.ts.map +1 -1
  133. package/dist/commands/porch/state.js +81 -685
  134. package/dist/commands/porch/state.js.map +1 -1
  135. package/dist/commands/porch/types.d.ts +72 -173
  136. package/dist/commands/porch/types.d.ts.map +1 -1
  137. package/dist/commands/porch/types.js +2 -1
  138. package/dist/commands/porch/types.js.map +1 -1
  139. package/dist/commands/update.d.ts.map +1 -1
  140. package/dist/commands/update.js +12 -0
  141. package/dist/commands/update.js.map +1 -1
  142. package/dist/lib/scaffold.d.ts +24 -0
  143. package/dist/lib/scaffold.d.ts.map +1 -1
  144. package/dist/lib/scaffold.js +78 -0
  145. package/dist/lib/scaffold.js.map +1 -1
  146. package/dist/terminal/index.d.ts +8 -0
  147. package/dist/terminal/index.d.ts.map +1 -0
  148. package/dist/terminal/index.js +5 -0
  149. package/dist/terminal/index.js.map +1 -0
  150. package/dist/terminal/pty-manager.d.ts +60 -0
  151. package/dist/terminal/pty-manager.d.ts.map +1 -0
  152. package/dist/terminal/pty-manager.js +334 -0
  153. package/dist/terminal/pty-manager.js.map +1 -0
  154. package/dist/terminal/pty-session.d.ts +79 -0
  155. package/dist/terminal/pty-session.d.ts.map +1 -0
  156. package/dist/terminal/pty-session.js +215 -0
  157. package/dist/terminal/pty-session.js.map +1 -0
  158. package/dist/terminal/ring-buffer.d.ts +27 -0
  159. package/dist/terminal/ring-buffer.d.ts.map +1 -0
  160. package/dist/terminal/ring-buffer.js +74 -0
  161. package/dist/terminal/ring-buffer.js.map +1 -0
  162. package/dist/terminal/ws-protocol.d.ts +27 -0
  163. package/dist/terminal/ws-protocol.d.ts.map +1 -0
  164. package/dist/terminal/ws-protocol.js +44 -0
  165. package/dist/terminal/ws-protocol.js.map +1 -0
  166. package/package.json +18 -3
  167. package/skeleton/DEPENDENCIES.md +3 -29
  168. package/skeleton/builders.md +1 -1
  169. package/skeleton/protocol-schema.json +282 -0
  170. package/skeleton/protocols/bugfix/builder-prompt.md +49 -0
  171. package/skeleton/protocols/bugfix/protocol.json +14 -2
  172. package/skeleton/protocols/experiment/builder-prompt.md +47 -0
  173. package/skeleton/protocols/experiment/protocol.json +101 -0
  174. package/skeleton/protocols/maintain/builder-prompt.md +41 -0
  175. package/skeleton/protocols/maintain/protocol.json +114 -0
  176. package/skeleton/protocols/protocol-schema.json +53 -0
  177. package/skeleton/protocols/spider/builder-prompt.md +53 -0
  178. package/skeleton/protocols/spider/prompts/implement.md +208 -0
  179. package/skeleton/protocols/spider/prompts/plan.md +214 -0
  180. package/skeleton/protocols/spider/prompts/review.md +217 -0
  181. package/skeleton/protocols/spider/prompts/specify.md +192 -0
  182. package/skeleton/protocols/spider/protocol.json +96 -148
  183. package/skeleton/protocols/spider/protocol.md +26 -16
  184. package/skeleton/protocols/spider/templates/plan.md +14 -0
  185. package/skeleton/protocols/tick/builder-prompt.md +51 -0
  186. package/skeleton/protocols/tick/protocol.json +7 -2
  187. package/skeleton/resources/commands/agent-farm.md +23 -41
  188. package/skeleton/resources/commands/overview.md +5 -5
  189. package/skeleton/resources/workflow-reference.md +2 -2
  190. package/skeleton/roles/architect.md +152 -315
  191. package/skeleton/roles/builder.md +109 -218
  192. package/skeleton/templates/cheatsheet.md +4 -2
  193. package/templates/dashboard/index.html +17 -43
  194. package/templates/dashboard/js/dialogs.js +7 -7
  195. package/templates/dashboard/js/files.js +2 -2
  196. package/templates/dashboard/js/main.js +3 -3
  197. package/templates/dashboard/js/projects.js +3 -3
  198. package/templates/dashboard/js/tabs.js +1 -1
  199. package/templates/dashboard/js/utils.js +22 -87
  200. package/templates/tower.html +474 -17
  201. package/dist/agent-farm/commands/kickoff.d.ts +0 -19
  202. package/dist/agent-farm/commands/kickoff.d.ts.map +0 -1
  203. package/dist/agent-farm/commands/kickoff.js +0 -323
  204. package/dist/agent-farm/commands/kickoff.js.map +0 -1
  205. package/dist/agent-farm/commands/rename.d.ts +0 -13
  206. package/dist/agent-farm/commands/rename.d.ts.map +0 -1
  207. package/dist/agent-farm/commands/rename.js +0 -33
  208. package/dist/agent-farm/commands/rename.js.map +0 -1
  209. package/dist/agent-farm/commands/tutorial.d.ts +0 -10
  210. package/dist/agent-farm/commands/tutorial.d.ts.map +0 -1
  211. package/dist/agent-farm/commands/tutorial.js +0 -49
  212. package/dist/agent-farm/commands/tutorial.js.map +0 -1
  213. package/dist/agent-farm/commands/util.d.ts.map +0 -1
  214. package/dist/agent-farm/commands/util.js.map +0 -1
  215. package/dist/agent-farm/tutorial/index.d.ts +0 -8
  216. package/dist/agent-farm/tutorial/index.d.ts.map +0 -1
  217. package/dist/agent-farm/tutorial/index.js +0 -8
  218. package/dist/agent-farm/tutorial/index.js.map +0 -1
  219. package/dist/agent-farm/tutorial/prompts.d.ts +0 -57
  220. package/dist/agent-farm/tutorial/prompts.d.ts.map +0 -1
  221. package/dist/agent-farm/tutorial/prompts.js +0 -147
  222. package/dist/agent-farm/tutorial/prompts.js.map +0 -1
  223. package/dist/agent-farm/tutorial/runner.d.ts +0 -52
  224. package/dist/agent-farm/tutorial/runner.d.ts.map +0 -1
  225. package/dist/agent-farm/tutorial/runner.js +0 -204
  226. package/dist/agent-farm/tutorial/runner.js.map +0 -1
  227. package/dist/agent-farm/tutorial/state.d.ts +0 -26
  228. package/dist/agent-farm/tutorial/state.d.ts.map +0 -1
  229. package/dist/agent-farm/tutorial/state.js +0 -89
  230. package/dist/agent-farm/tutorial/state.js.map +0 -1
  231. package/dist/agent-farm/tutorial/steps/first-spec.d.ts +0 -7
  232. package/dist/agent-farm/tutorial/steps/first-spec.d.ts.map +0 -1
  233. package/dist/agent-farm/tutorial/steps/first-spec.js +0 -136
  234. package/dist/agent-farm/tutorial/steps/first-spec.js.map +0 -1
  235. package/dist/agent-farm/tutorial/steps/implementation.d.ts +0 -7
  236. package/dist/agent-farm/tutorial/steps/implementation.d.ts.map +0 -1
  237. package/dist/agent-farm/tutorial/steps/implementation.js +0 -76
  238. package/dist/agent-farm/tutorial/steps/implementation.js.map +0 -1
  239. package/dist/agent-farm/tutorial/steps/index.d.ts +0 -10
  240. package/dist/agent-farm/tutorial/steps/index.d.ts.map +0 -1
  241. package/dist/agent-farm/tutorial/steps/index.js +0 -10
  242. package/dist/agent-farm/tutorial/steps/index.js.map +0 -1
  243. package/dist/agent-farm/tutorial/steps/planning.d.ts +0 -7
  244. package/dist/agent-farm/tutorial/steps/planning.d.ts.map +0 -1
  245. package/dist/agent-farm/tutorial/steps/planning.js +0 -143
  246. package/dist/agent-farm/tutorial/steps/planning.js.map +0 -1
  247. package/dist/agent-farm/tutorial/steps/review.d.ts +0 -7
  248. package/dist/agent-farm/tutorial/steps/review.d.ts.map +0 -1
  249. package/dist/agent-farm/tutorial/steps/review.js +0 -78
  250. package/dist/agent-farm/tutorial/steps/review.js.map +0 -1
  251. package/dist/agent-farm/tutorial/steps/setup.d.ts +0 -7
  252. package/dist/agent-farm/tutorial/steps/setup.d.ts.map +0 -1
  253. package/dist/agent-farm/tutorial/steps/setup.js +0 -126
  254. package/dist/agent-farm/tutorial/steps/setup.js.map +0 -1
  255. package/dist/agent-farm/tutorial/steps/welcome.d.ts +0 -7
  256. package/dist/agent-farm/tutorial/steps/welcome.d.ts.map +0 -1
  257. package/dist/agent-farm/tutorial/steps/welcome.js +0 -50
  258. package/dist/agent-farm/tutorial/steps/welcome.js.map +0 -1
  259. package/dist/commands/pcheck/cache.d.ts +0 -48
  260. package/dist/commands/pcheck/cache.d.ts.map +0 -1
  261. package/dist/commands/pcheck/cache.js +0 -170
  262. package/dist/commands/pcheck/cache.js.map +0 -1
  263. package/dist/commands/pcheck/evaluator.d.ts +0 -15
  264. package/dist/commands/pcheck/evaluator.d.ts.map +0 -1
  265. package/dist/commands/pcheck/evaluator.js +0 -246
  266. package/dist/commands/pcheck/evaluator.js.map +0 -1
  267. package/dist/commands/pcheck/index.d.ts +0 -12
  268. package/dist/commands/pcheck/index.d.ts.map +0 -1
  269. package/dist/commands/pcheck/index.js +0 -249
  270. package/dist/commands/pcheck/index.js.map +0 -1
  271. package/dist/commands/pcheck/parser.d.ts +0 -39
  272. package/dist/commands/pcheck/parser.d.ts.map +0 -1
  273. package/dist/commands/pcheck/parser.js +0 -155
  274. package/dist/commands/pcheck/parser.js.map +0 -1
  275. package/dist/commands/pcheck/types.d.ts +0 -82
  276. package/dist/commands/pcheck/types.d.ts.map +0 -1
  277. package/dist/commands/pcheck/types.js +0 -5
  278. package/dist/commands/pcheck/types.js.map +0 -1
  279. package/dist/commands/porch/consultation.d.ts +0 -56
  280. package/dist/commands/porch/consultation.d.ts.map +0 -1
  281. package/dist/commands/porch/consultation.js +0 -330
  282. package/dist/commands/porch/consultation.js.map +0 -1
  283. package/dist/commands/porch/notifications.d.ts +0 -99
  284. package/dist/commands/porch/notifications.d.ts.map +0 -1
  285. package/dist/commands/porch/notifications.js +0 -223
  286. package/dist/commands/porch/notifications.js.map +0 -1
  287. package/dist/commands/porch/plan-parser.d.ts +0 -38
  288. package/dist/commands/porch/plan-parser.d.ts.map +0 -1
  289. package/dist/commands/porch/plan-parser.js +0 -166
  290. package/dist/commands/porch/plan-parser.js.map +0 -1
  291. package/dist/commands/porch/protocol-loader.d.ts +0 -46
  292. package/dist/commands/porch/protocol-loader.d.ts.map +0 -1
  293. package/dist/commands/porch/protocol-loader.js +0 -249
  294. package/dist/commands/porch/protocol-loader.js.map +0 -1
  295. package/dist/commands/porch/signal-parser.d.ts +0 -88
  296. package/dist/commands/porch/signal-parser.d.ts.map +0 -1
  297. package/dist/commands/porch/signal-parser.js +0 -148
  298. package/dist/commands/porch/signal-parser.js.map +0 -1
  299. package/dist/commands/tower.d.ts +0 -16
  300. package/dist/commands/tower.d.ts.map +0 -1
  301. package/dist/commands/tower.js +0 -21
  302. package/dist/commands/tower.js.map +0 -1
  303. package/skeleton/porch/protocols/bugfix.json +0 -85
  304. package/skeleton/porch/protocols/spider.json +0 -135
  305. package/skeleton/porch/protocols/tick.json +0 -76
  306. package/templates/dashboard/css/activity.css +0 -151
  307. package/templates/dashboard/js/activity.js +0 -112
@@ -1,147 +1,96 @@
1
1
  {
2
2
  "$schema": "../../protocol-schema.json",
3
3
  "name": "spider",
4
- "version": "1.0.0",
5
- "description": "Specification-driven development with multi-agent consultation",
4
+ "alias": "spir",
5
+ "version": "2.2.0",
6
+ "description": "SPIR: Specify → Plan → Implement → Review with build-verify cycles",
7
+ "input": {
8
+ "type": "spec",
9
+ "required": false,
10
+ "default_for": ["--project", "-p"]
11
+ },
6
12
  "phases": [
7
13
  {
8
14
  "id": "specify",
9
15
  "name": "Specify",
10
- "description": "Collaborative design exploration and specification",
11
- "type": "once",
12
- "steps": [
13
- "clarifying_questions",
14
- "problem_analysis",
15
- "solution_exploration",
16
- "open_questions",
17
- "success_criteria",
18
- "spec_draft",
19
- "consultation_1",
20
- "human_review",
21
- "consultation_2",
22
- "spec_final"
23
- ],
24
- "consultation": {
25
- "on": "review",
26
- "models": ["gemini", "codex", "claude"],
16
+ "description": "Write specification with 3-way review",
17
+ "type": "build_verify",
18
+ "build": {
19
+ "prompt": "specify.md",
20
+ "artifact": "codev/specs/${PROJECT_ID}-*.md"
21
+ },
22
+ "verify": {
27
23
  "type": "spec-review",
28
- "parallel": true,
29
- "max_rounds": 3
24
+ "models": ["gemini", "codex", "claude"],
25
+ "parallel": true
30
26
  },
31
- "gate": {
32
- "name": "spec-approval",
33
- "description": "Human approves specification before planning",
34
- "requires": ["spec_final", "consultation_2"],
35
- "next": "plan"
36
- }
27
+ "max_iterations": 7,
28
+ "on_complete": {
29
+ "commit": true,
30
+ "push": true
31
+ },
32
+ "gate": "spec-approval",
33
+ "next": "plan"
37
34
  },
38
35
  {
39
36
  "id": "plan",
40
37
  "name": "Plan",
41
- "description": "Implementation planning with phased breakdown",
42
- "type": "once",
43
- "steps": [
44
- "analyze_spec",
45
- "identify_phases",
46
- "define_steps",
47
- "plan_draft",
48
- "consultation",
49
- "human_review",
50
- "plan_final"
51
- ],
52
- "consultation": {
53
- "on": "review",
54
- "models": ["gemini", "codex", "claude"],
38
+ "description": "Write implementation plan with 3-way review",
39
+ "type": "build_verify",
40
+ "build": {
41
+ "prompt": "plan.md",
42
+ "artifact": "codev/plans/${PROJECT_ID}-*.md"
43
+ },
44
+ "verify": {
55
45
  "type": "plan-review",
56
- "parallel": true,
57
- "max_rounds": 2
46
+ "models": ["gemini", "codex", "claude"],
47
+ "parallel": true
58
48
  },
59
- "gate": {
60
- "name": "plan-approval",
61
- "description": "Human approves plan before implementation",
62
- "requires": ["plan_final", "consultation"],
63
- "next": "implement"
64
- }
49
+ "max_iterations": 7,
50
+ "on_complete": {
51
+ "commit": true,
52
+ "push": true
53
+ },
54
+ "checks": {
55
+ "plan_exists": "test -f codev/plans/${PROJECT_ID}-*.md",
56
+ "has_phases_json": "grep -q '\"phases\":' codev/plans/${PROJECT_ID}-*.md",
57
+ "min_two_phases": "grep -o '\"id\": *\"[^\"]*\"' codev/plans/${PROJECT_ID}-*.md | wc -l | awk '$1 >= 2 {exit 0} {exit 1}'"
58
+ },
59
+ "gate": "plan-approval",
60
+ "next": "implement"
65
61
  },
66
62
  {
67
63
  "id": "implement",
68
64
  "name": "Implement",
69
- "description": "Code implementation following the plan",
65
+ "description": "Implement code with 3-way review per plan phase",
70
66
  "type": "per_plan_phase",
71
- "steps": [
72
- "read_phase",
73
- "implement_code",
74
- "self_review",
75
- "commit"
76
- ],
67
+ "build": {
68
+ "prompt": "implement.md",
69
+ "artifact": "src/**/*.{ts,tsx,js,jsx}"
70
+ },
71
+ "verify": {
72
+ "type": "impl-review",
73
+ "models": ["gemini", "codex", "claude"],
74
+ "parallel": true
75
+ },
76
+ "max_iterations": 7,
77
+ "on_complete": {
78
+ "commit": true,
79
+ "push": true
80
+ },
77
81
  "checks": {
78
82
  "build": {
79
83
  "command": "npm run build",
80
84
  "on_fail": "retry",
81
85
  "max_retries": 2
82
86
  },
83
- "typecheck": {
84
- "command": "npm run typecheck",
85
- "on_fail": "retry",
86
- "max_retries": 2
87
- }
88
- },
89
- "transition": {
90
- "on_complete": "defend",
91
- "on_fail": "implement"
92
- }
93
- },
94
- {
95
- "id": "defend",
96
- "name": "Defend",
97
- "description": "Testing and verification",
98
- "type": "per_plan_phase",
99
- "steps": [
100
- "write_tests",
101
- "run_tests",
102
- "fix_failures",
103
- "commit"
104
- ],
105
- "checks": {
106
87
  "tests": {
107
- "command": "npm test",
108
- "on_fail": "implement",
109
- "max_retries": 1
110
- },
111
- "lint": {
112
- "command": "npm run lint",
88
+ "command": "npm test -- --exclude='**/e2e/**'",
89
+ "description": "Unit tests only - e2e tests run in review phase",
113
90
  "on_fail": "retry",
114
- "max_retries": 1
91
+ "max_retries": 2
115
92
  }
116
93
  },
117
- "consultation": {
118
- "on": "complete",
119
- "models": ["gemini", "codex", "claude"],
120
- "type": "impl-review",
121
- "parallel": true,
122
- "max_rounds": 2
123
- },
124
- "transition": {
125
- "on_complete": "evaluate",
126
- "on_fail": "implement"
127
- }
128
- },
129
- {
130
- "id": "evaluate",
131
- "name": "Evaluate",
132
- "description": "Verify implementation against spec",
133
- "type": "per_plan_phase",
134
- "steps": [
135
- "check_spec_compliance",
136
- "check_success_criteria",
137
- "document_deviations"
138
- ],
139
- "gate": {
140
- "name": "phase-complete",
141
- "description": "Plan phase implementation is verified",
142
- "requires": ["all_checks_pass", "spec_compliance"],
143
- "next": "implement"
144
- },
145
94
  "transition": {
146
95
  "on_complete": "implement",
147
96
  "on_all_phases_complete": "review"
@@ -150,55 +99,54 @@
150
99
  {
151
100
  "id": "review",
152
101
  "name": "Review",
153
- "description": "Final review and lessons learned",
154
- "type": "once",
155
- "steps": [
156
- "create_review_document",
157
- "document_lessons",
158
- "final_consultation",
159
- "create_pr"
160
- ],
161
- "consultation": {
162
- "on": "review",
163
- "models": ["gemini", "codex", "claude"],
102
+ "description": "Final review and PR with 3-way review",
103
+ "type": "build_verify",
104
+ "build": {
105
+ "prompt": "review.md",
106
+ "artifact": "codev/reviews/${PROJECT_ID}-*.md"
107
+ },
108
+ "verify": {
164
109
  "type": "pr-ready",
165
- "parallel": true,
166
- "max_rounds": 1
110
+ "models": ["gemini", "codex", "claude"],
111
+ "parallel": true
167
112
  },
168
- "gate": {
169
- "name": "pr-ready",
170
- "description": "Implementation ready for PR",
171
- "requires": ["review_complete", "all_tests_pass", "consultation"],
172
- "next": null
173
- }
113
+ "max_iterations": 7,
114
+ "on_complete": {
115
+ "commit": true,
116
+ "push": true
117
+ },
118
+ "checks": {
119
+ "e2e_tests": {
120
+ "command": "npm run test:e2e 2>&1 || echo 'e2e tests skipped (not configured)'",
121
+ "description": "Full e2e test suite - only runs in review phase",
122
+ "optional": true
123
+ }
124
+ },
125
+ "gate": "pr-ready",
126
+ "next": null
174
127
  }
175
128
  ],
176
129
  "signals": {
177
130
  "PHASE_COMPLETE": {
178
- "description": "Signal current phase is complete",
179
- "transitions_to": "next_phase"
131
+ "description": "Signal current build phase is complete",
132
+ "transitions_to": "verify"
180
133
  },
181
134
  "BLOCKED": {
182
135
  "description": "Signal implementation is blocked",
183
136
  "requires": "reason"
184
- },
185
- "REVISION_NEEDED": {
186
- "description": "Signal changes requested",
187
- "transitions_to": "current_phase"
188
- },
189
- "APPROVED": {
190
- "description": "Signal gate approval received"
191
137
  }
192
138
  },
139
+ "phase_completion": {
140
+ "build_succeeds": "npm run build 2>&1",
141
+ "tests_pass": "npm test 2>&1",
142
+ "commit_has_code": "git log -1 --name-only --pretty=format: | grep -qE '\\.(ts|tsx|js|jsx|py|go|rs)$'"
143
+ },
193
144
  "defaults": {
194
- "consultation": {
195
- "enabled": true,
145
+ "mode": "strict",
146
+ "max_iterations": 7,
147
+ "verify": {
196
148
  "models": ["gemini", "codex", "claude"],
197
149
  "parallel": true
198
- },
199
- "checks": {
200
- "build": "npm run build",
201
- "test": "npm test"
202
150
  }
203
151
  }
204
152
  }
@@ -1,4 +1,10 @@
1
- # SPIDER Protocol
1
+ # SPIR Protocol (formerly SPIDER)
2
+
3
+ > **Also known as**: SPIDER (legacy name)
4
+ >
5
+ > **SPIR** = **S**pecify → **P**lan → **I**mplement → **R**eview
6
+ >
7
+ > Each phase has one build-verify cycle with 3-way consultation.
2
8
 
3
9
  > **Quick Reference**: See `codev/resources/workflow-reference.md` for stage diagrams and common commands.
4
10
 
@@ -40,13 +46,21 @@ The user can specify different agents by saying: "use SPIDER with consultation f
40
46
  - **Review**: After review document
41
47
 
42
48
  ## Overview
43
- SPIDER is a structured development protocol that emphasizes specification-driven development with iterative implementation and continuous review. It builds upon the DAPPER methodology with a focus on context-first development and multi-agent collaboration.
49
+ SPIR is a structured development protocol that emphasizes specification-driven development with iterative implementation and continuous review. It builds upon the DAPPER methodology with a focus on context-first development and multi-agent collaboration.
50
+
51
+ **The SPIR Model**:
52
+ - **S - Specify**: Write specification with 3-way review → Gate: `spec-approval`
53
+ - **P - Plan**: Write implementation plan with 3-way review → Gate: `plan-approval`
54
+ - **I - Implement**: Execute each plan phase with build-verify cycle (one cycle per phase)
55
+ - **R - Review**: Final review and PR preparation with 3-way review
56
+
57
+ Each phase follows a build-verify loop: build the artifact, then verify with 3-way consultation (Gemini, Codex, Claude).
44
58
 
45
59
  **Core Principle**: Each feature is tracked through exactly THREE documents - a specification, a plan, and a review with lessons learned - all sharing the same filename and sequential identifier.
46
60
 
47
- ## When to Use SPIDER
61
+ ## When to Use SPIR
48
62
 
49
- ### Use SPIDER for:
63
+ ### Use SPIR for:
50
64
  - New feature development
51
65
  - Architecture changes
52
66
  - Complex refactoring
@@ -54,7 +68,7 @@ SPIDER is a structured development protocol that emphasizes specification-driven
54
68
  - API design and implementation
55
69
  - Performance optimization initiatives
56
70
 
57
- ### Skip SPIDER for:
71
+ ### Skip SPIR for:
58
72
  - Simple bug fixes (< 10 lines)
59
73
  - Documentation updates
60
74
  - Configuration changes
@@ -224,25 +238,21 @@ Each phase should be:
224
238
  **Template**: `templates/plan.md`
225
239
  **Review Required**: Yes - Technical lead approval AFTER consultations
226
240
 
227
- ### (IDE) - Implementation Loop
228
-
229
- Execute for each phase in the plan. This is a strict cycle that must be completed in order.
241
+ ### I - Implement (Per Plan Phase)
230
242
 
231
- **⚠️ MANDATORY**: The I-D-E cycle MUST be completed for EACH PHASE, not just at the end of all phases. Skipping D (Defend) or E (Evaluate) for any phase is a PROTOCOL VIOLATION.
243
+ Execute for each phase in the plan. Each phase follows a build-verify cycle.
232
244
 
233
245
  **CRITICAL PRECONDITION**: Before starting any phase, verify the previous phase was committed to git. No phase can begin without the prior phase's commit.
234
246
 
235
- **Phase Completion Process**:
236
- 1. **Implement** - Build the code for this phase
237
- 2. **Defend** - Write comprehensive tests that guard functionality
238
- 3. **Evaluate** - Assess and discuss with user
247
+ **Build-Verify Cycle Per Phase**:
248
+ 1. **Build** - Implement code and tests for this phase
249
+ 2. **Verify** - 3-way consultation (Gemini, Codex, Claude)
250
+ 3. **Iterate** - Address feedback until verification passes
239
251
  4. **Commit** - Single atomic commit for the phase (MANDATORY before next phase)
240
252
  5. **Proceed** - Move to next phase only after commit
241
253
 
242
254
  **Handling Failures**:
243
- - If **Defend** phase reveals gaps → return to **Implement** to fix
244
- - If **Evaluation** reveals unmet criteria → return to **Implement**
245
- - If user requests changes → return to **Implement**
255
+ - If verification reveals gaps → iterate and fix
246
256
  - If fundamental plan flaws found → mark phase as `blocked` and revise plan
247
257
 
248
258
  **Commit Requirements**:
@@ -17,6 +17,20 @@
17
17
  - [ ] Zero critical security issues
18
18
  - [ ] Documentation complete
19
19
 
20
+ ## Phases (Machine Readable)
21
+
22
+ <!-- REQUIRED: porch uses this JSON to track phase progress. Update this when adding/removing phases. -->
23
+
24
+ ```json
25
+ {
26
+ "phases": [
27
+ {"id": "phase_1", "title": "Phase 1 Title Here"},
28
+ {"id": "phase_2", "title": "Phase 2 Title Here"},
29
+ {"id": "phase_3", "title": "Phase 3 Title Here"}
30
+ ]
31
+ }
32
+ ```
33
+
20
34
  ## Phase Breakdown
21
35
 
22
36
  ### Phase 1: [Descriptive Name]
@@ -0,0 +1,51 @@
1
+ # {{protocol_name}} Builder ({{mode}} mode)
2
+
3
+ You are implementing {{input_description}}.
4
+
5
+ {{#if mode_soft}}
6
+ ## Mode: SOFT
7
+ You are running in SOFT mode. This means:
8
+ - You follow the TICK protocol yourself (no porch orchestration)
9
+ - The architect monitors your work and verifies you're adhering to the protocol
10
+ - Run consultations manually when the protocol calls for them
11
+ - You have flexibility in execution, but must stay compliant with the protocol
12
+ {{/if}}
13
+
14
+ {{#if mode_strict}}
15
+ ## Mode: STRICT
16
+ You are running in STRICT mode. This means:
17
+ - Porch orchestrates your work
18
+ - Run: `porch run {{project_id}}`
19
+ - Follow porch signals and gate approvals
20
+ {{/if}}
21
+
22
+ ## Protocol
23
+ Follow the TICK protocol: `codev/protocols/tick/protocol.md`
24
+
25
+ TICK is for amendments to existing SPIDER specifications. You will:
26
+ 1. Identify the target spec to amend
27
+ 2. Update the spec with the amendment
28
+ 3. Update the plan
29
+ 4. Implement the changes
30
+ 5. Defend with tests
31
+ 6. Create review
32
+
33
+ {{#if spec}}
34
+ ## Target Spec
35
+ The spec to amend is at: `{{spec.path}}`
36
+ {{/if}}
37
+
38
+ {{#if plan}}
39
+ ## Target Plan
40
+ The plan to amend is at: `{{plan.path}}`
41
+ {{/if}}
42
+
43
+ {{#if task}}
44
+ ## Amendment Description
45
+ {{task_text}}
46
+ {{/if}}
47
+
48
+ ## Getting Started
49
+ 1. Read the TICK protocol thoroughly
50
+ 2. Identify what needs to change in the existing spec
51
+ 3. Follow the amendment workflow
@@ -1,8 +1,12 @@
1
1
  {
2
2
  "$schema": "../../protocol-schema.json",
3
3
  "name": "tick",
4
- "version": "1.0.0",
5
- "description": "Amendment workflow for existing SPIDER specifications",
4
+ "version": "1.1.0",
5
+ "description": "Amendment workflow for existing SPIR specifications",
6
+ "input": {
7
+ "type": "spec",
8
+ "required": false
9
+ },
6
10
  "phases": [
7
11
  {
8
12
  "id": "identify",
@@ -138,6 +142,7 @@
138
142
  }
139
143
  },
140
144
  "defaults": {
145
+ "mode": "soft",
141
146
  "consultation": {
142
147
  "enabled": true,
143
148
  "models": ["gemini", "codex"],
@@ -18,12 +18,16 @@ af <command> [options]
18
18
 
19
19
  ## Commands
20
20
 
21
- ### af start
21
+ ### af dash
22
+
23
+ Project dashboard commands - start/stop the architect dashboard for this project.
24
+
25
+ #### af dash start
22
26
 
23
27
  Start the architect dashboard.
24
28
 
25
29
  ```bash
26
- af start [options]
30
+ af dash start [options]
27
31
  ```
28
32
 
29
33
  **Options:**
@@ -47,16 +51,16 @@ The dashboard is accessible via browser at `http://localhost:<port>`.
47
51
 
48
52
  ```bash
49
53
  # Start with defaults
50
- af start
54
+ af dash start
51
55
 
52
56
  # Start with custom port
53
- af start -p 4300
57
+ af dash start -p 4300
54
58
 
55
59
  # Start with specific command
56
- af start -c "claude --model opus"
60
+ af dash start -c "claude --model opus"
57
61
 
58
62
  # Start on remote machine
59
- af start --remote user@host
63
+ af dash start --remote user@host
60
64
  ```
61
65
 
62
66
  #### Remote Access
@@ -65,13 +69,13 @@ Start Agent Farm on a remote machine and access it from your local workstation w
65
69
 
66
70
  ```bash
67
71
  # On your local machine - one command does everything:
68
- af start --remote user@remote-host
72
+ af dash start --remote user@remote-host
69
73
 
70
74
  # Or with explicit project path:
71
- af start --remote user@remote-host:/path/to/project
75
+ af dash start --remote user@remote-host:/path/to/project
72
76
 
73
77
  # With custom port:
74
- af start --remote user@remote-host --port 4300
78
+ af dash start --remote user@remote-host --port 4300
75
79
  ```
76
80
 
77
81
  This single command:
@@ -112,19 +116,17 @@ export PATH="$HOME/.local/bin:$PATH"
112
116
 
113
117
  ```bash
114
118
  # DEPRECATED: Exposes dashboard without authentication
115
- af start --allow-insecure-remote
119
+ af dash start --allow-insecure-remote
116
120
  ```
117
121
 
118
122
  The `--allow-insecure-remote` flag binds to `0.0.0.0` with no authentication. Use `--remote` instead for secure access via SSH.
119
123
 
120
- ---
124
+ #### af dash stop
121
125
 
122
- ### af stop
123
-
124
- Stop all agent farm processes.
126
+ Stop all agent farm processes for this project.
125
127
 
126
128
  ```bash
127
- af stop
129
+ af dash stop
128
130
  ```
129
131
 
130
132
  **Description:**
@@ -306,16 +308,14 @@ af open src/auth/login.ts
306
308
 
307
309
  ---
308
310
 
309
- ### af util
311
+ ### af shell
310
312
 
311
313
  Spawn a utility shell terminal.
312
314
 
313
315
  ```bash
314
- af util [options]
316
+ af shell [options]
315
317
  ```
316
318
 
317
- **Aliases:** `af shell`
318
-
319
319
  **Options:**
320
320
  - `-n, --name <name>` - Name for the shell terminal
321
321
 
@@ -330,10 +330,10 @@ Opens a general-purpose shell terminal in the dashboard. Useful for:
330
330
 
331
331
  ```bash
332
332
  # Open utility shell
333
- af util
333
+ af shell
334
334
 
335
335
  # Open with custom name
336
- af util -n "test-runner"
336
+ af shell -n "test-runner"
337
337
  ```
338
338
 
339
339
  ---
@@ -358,25 +358,6 @@ af rename 0042 "auth-rework"
358
358
 
359
359
  ---
360
360
 
361
- ### af tutorial
362
-
363
- Interactive tutorial for new users.
364
-
365
- ```bash
366
- af tutorial [options]
367
- ```
368
-
369
- **Options:**
370
- - `--reset` - Start tutorial fresh
371
- - `--skip` - Skip current step
372
- - `--status` - Show tutorial progress
373
-
374
- **Description:**
375
-
376
- Walks through the basics of using agent-farm with guided steps.
377
-
378
- ---
379
-
380
361
  ### af ports
381
362
 
382
363
  Manage global port registry.
@@ -410,7 +391,7 @@ Removes entries for projects that no longer exist.
410
391
 
411
392
  ### af tower
412
393
 
413
- Manage the tower dashboard.
394
+ Manage the cross-project tower dashboard. Tower shows all agent-farm instances across projects.
414
395
 
415
396
  #### af tower start
416
397
 
@@ -422,6 +403,7 @@ af tower start [options]
422
403
 
423
404
  **Options:**
424
405
  - `-p, --port <port>` - Port to run on (default: 4100)
406
+ - `-w, --web` - Enable web access mode (requires CODEV_WEB_KEY)
425
407
 
426
408
  #### af tower stop
427
409
 
@@ -21,7 +21,7 @@ codev adopt
21
21
  codev doctor
22
22
 
23
23
  # Start the architect dashboard
24
- af start
24
+ af dash start
25
25
 
26
26
  # Consult an AI model about a spec
27
27
  consult -m gemini spec 42
@@ -46,7 +46,6 @@ This installs all three commands globally: `codev`, `af`, and `consult`.
46
46
  | `codev doctor` | Check system dependencies |
47
47
  | `codev update` | Update codev templates and protocols |
48
48
  | `codev import <source>` | AI-assisted protocol import from other projects |
49
- | `codev tower` | Cross-project dashboard |
50
49
 
51
50
  See [codev.md](codev.md) for full documentation.
52
51
 
@@ -54,14 +53,15 @@ See [codev.md](codev.md) for full documentation.
54
53
 
55
54
  | Command | Description |
56
55
  |---------|-------------|
57
- | `af start` | Start the architect dashboard |
58
- | `af stop` | Stop all agent farm processes |
56
+ | `af dash start` | Start the architect dashboard |
57
+ | `af dash stop` | Stop all agent farm processes |
59
58
  | `af spawn` | Spawn a new builder |
60
59
  | `af status` | Show status of all agents |
61
60
  | `af cleanup` | Clean up a builder worktree |
62
61
  | `af send` | Send instructions to a builder |
63
62
  | `af open` | Open file annotation viewer |
64
- | `af util` | Spawn a utility shell |
63
+ | `af shell` | Spawn a utility shell |
64
+ | `af tower` | Cross-project dashboard |
65
65
 
66
66
  See [agent-farm.md](agent-farm.md) for full documentation.
67
67
 
@@ -77,7 +77,7 @@ AI agents must stop and wait for human action at these gates.
77
77
 
78
78
  ```bash
79
79
  # Start the dashboard
80
- af start
80
+ af dash start
81
81
 
82
82
  # Spawn a builder for a project
83
83
  af spawn -p 0044
@@ -95,7 +95,7 @@ af open codev/specs/0044-name.md
95
95
  af cleanup -p 0044
96
96
 
97
97
  # Stop everything
98
- af stop
98
+ af dash stop
99
99
  ```
100
100
 
101
101
  ### Builder Commands