@rryando/arcs 3.0.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 (370) hide show
  1. package/README.md +448 -0
  2. package/dist/cli/arcs-orchestrate-caveman.d.ts +16 -0
  3. package/dist/cli/arcs-orchestrate-caveman.d.ts.map +1 -0
  4. package/dist/cli/arcs-orchestrate-caveman.js +109 -0
  5. package/dist/cli/arcs-orchestrate-caveman.js.map +1 -0
  6. package/dist/cli/arcs-orchestrate.d.ts +2 -0
  7. package/dist/cli/arcs-orchestrate.d.ts.map +1 -0
  8. package/dist/cli/arcs-orchestrate.js +431 -0
  9. package/dist/cli/arcs-orchestrate.js.map +1 -0
  10. package/dist/cli/arg-parser.d.ts +20 -0
  11. package/dist/cli/arg-parser.d.ts.map +1 -0
  12. package/dist/cli/arg-parser.js +216 -0
  13. package/dist/cli/arg-parser.js.map +1 -0
  14. package/dist/cli/brief-renderer.d.ts +32 -0
  15. package/dist/cli/brief-renderer.d.ts.map +1 -0
  16. package/dist/cli/brief-renderer.js +67 -0
  17. package/dist/cli/brief-renderer.js.map +1 -0
  18. package/dist/cli/bundle-installer.d.ts +77 -0
  19. package/dist/cli/bundle-installer.d.ts.map +1 -0
  20. package/dist/cli/bundle-installer.js +328 -0
  21. package/dist/cli/bundle-installer.js.map +1 -0
  22. package/dist/cli/command-registry.d.ts +52 -0
  23. package/dist/cli/command-registry.d.ts.map +1 -0
  24. package/dist/cli/command-registry.js +68 -0
  25. package/dist/cli/command-registry.js.map +1 -0
  26. package/dist/cli/commands/batch.d.ts +2 -0
  27. package/dist/cli/commands/batch.d.ts.map +1 -0
  28. package/dist/cli/commands/batch.js +307 -0
  29. package/dist/cli/commands/batch.js.map +1 -0
  30. package/dist/cli/commands/brief.d.ts +2 -0
  31. package/dist/cli/commands/brief.d.ts.map +1 -0
  32. package/dist/cli/commands/brief.js +146 -0
  33. package/dist/cli/commands/brief.js.map +1 -0
  34. package/dist/cli/commands/bundle.d.ts +2 -0
  35. package/dist/cli/commands/bundle.d.ts.map +1 -0
  36. package/dist/cli/commands/bundle.js +90 -0
  37. package/dist/cli/commands/bundle.js.map +1 -0
  38. package/dist/cli/commands/dependency.d.ts +2 -0
  39. package/dist/cli/commands/dependency.d.ts.map +1 -0
  40. package/dist/cli/commands/dependency.js +260 -0
  41. package/dist/cli/commands/dependency.js.map +1 -0
  42. package/dist/cli/commands/diagnostics.d.ts +2 -0
  43. package/dist/cli/commands/diagnostics.d.ts.map +1 -0
  44. package/dist/cli/commands/diagnostics.js +91 -0
  45. package/dist/cli/commands/diagnostics.js.map +1 -0
  46. package/dist/cli/commands/diagram.d.ts +2 -0
  47. package/dist/cli/commands/diagram.d.ts.map +1 -0
  48. package/dist/cli/commands/diagram.js +305 -0
  49. package/dist/cli/commands/diagram.js.map +1 -0
  50. package/dist/cli/commands/done.d.ts +2 -0
  51. package/dist/cli/commands/done.d.ts.map +1 -0
  52. package/dist/cli/commands/done.js +140 -0
  53. package/dist/cli/commands/done.js.map +1 -0
  54. package/dist/cli/commands/graph.d.ts +2 -0
  55. package/dist/cli/commands/graph.d.ts.map +1 -0
  56. package/dist/cli/commands/graph.js +105 -0
  57. package/dist/cli/commands/graph.js.map +1 -0
  58. package/dist/cli/commands/index.d.ts +21 -0
  59. package/dist/cli/commands/index.d.ts.map +1 -0
  60. package/dist/cli/commands/index.js +22 -0
  61. package/dist/cli/commands/index.js.map +1 -0
  62. package/dist/cli/commands/knowledge-search.d.ts +2 -0
  63. package/dist/cli/commands/knowledge-search.d.ts.map +1 -0
  64. package/dist/cli/commands/knowledge-search.js +43 -0
  65. package/dist/cli/commands/knowledge-search.js.map +1 -0
  66. package/dist/cli/commands/knowledge.d.ts +2 -0
  67. package/dist/cli/commands/knowledge.d.ts.map +1 -0
  68. package/dist/cli/commands/knowledge.js +416 -0
  69. package/dist/cli/commands/knowledge.js.map +1 -0
  70. package/dist/cli/commands/loop.d.ts +2 -0
  71. package/dist/cli/commands/loop.d.ts.map +1 -0
  72. package/dist/cli/commands/loop.js +192 -0
  73. package/dist/cli/commands/loop.js.map +1 -0
  74. package/dist/cli/commands/maintenance.d.ts +2 -0
  75. package/dist/cli/commands/maintenance.d.ts.map +1 -0
  76. package/dist/cli/commands/maintenance.js +231 -0
  77. package/dist/cli/commands/maintenance.js.map +1 -0
  78. package/dist/cli/commands/next.d.ts +2 -0
  79. package/dist/cli/commands/next.d.ts.map +1 -0
  80. package/dist/cli/commands/next.js +116 -0
  81. package/dist/cli/commands/next.js.map +1 -0
  82. package/dist/cli/commands/plan.d.ts +2 -0
  83. package/dist/cli/commands/plan.d.ts.map +1 -0
  84. package/dist/cli/commands/plan.js +340 -0
  85. package/dist/cli/commands/plan.js.map +1 -0
  86. package/dist/cli/commands/project-updates.d.ts +2 -0
  87. package/dist/cli/commands/project-updates.d.ts.map +1 -0
  88. package/dist/cli/commands/project-updates.js +243 -0
  89. package/dist/cli/commands/project-updates.js.map +1 -0
  90. package/dist/cli/commands/project.d.ts +2 -0
  91. package/dist/cli/commands/project.d.ts.map +1 -0
  92. package/dist/cli/commands/project.js +362 -0
  93. package/dist/cli/commands/project.js.map +1 -0
  94. package/dist/cli/commands/remember.d.ts +2 -0
  95. package/dist/cli/commands/remember.d.ts.map +1 -0
  96. package/dist/cli/commands/remember.js +70 -0
  97. package/dist/cli/commands/remember.js.map +1 -0
  98. package/dist/cli/commands/status.d.ts +2 -0
  99. package/dist/cli/commands/status.d.ts.map +1 -0
  100. package/dist/cli/commands/status.js +104 -0
  101. package/dist/cli/commands/status.js.map +1 -0
  102. package/dist/cli/commands/task.d.ts +6 -0
  103. package/dist/cli/commands/task.d.ts.map +1 -0
  104. package/dist/cli/commands/task.js +361 -0
  105. package/dist/cli/commands/task.js.map +1 -0
  106. package/dist/cli/commands/utility.d.ts +9 -0
  107. package/dist/cli/commands/utility.d.ts.map +1 -0
  108. package/dist/cli/commands/utility.js +302 -0
  109. package/dist/cli/commands/utility.js.map +1 -0
  110. package/dist/cli/config.d.ts +42 -0
  111. package/dist/cli/config.d.ts.map +1 -0
  112. package/dist/cli/config.js +134 -0
  113. package/dist/cli/config.js.map +1 -0
  114. package/dist/cli/dag-commands.d.ts +7 -0
  115. package/dist/cli/dag-commands.d.ts.map +1 -0
  116. package/dist/cli/dag-commands.js +152 -0
  117. package/dist/cli/dag-commands.js.map +1 -0
  118. package/dist/cli/diagram-renderer.d.ts +26 -0
  119. package/dist/cli/diagram-renderer.d.ts.map +1 -0
  120. package/dist/cli/diagram-renderer.js +118 -0
  121. package/dist/cli/diagram-renderer.js.map +1 -0
  122. package/dist/cli/help-generator.d.ts +21 -0
  123. package/dist/cli/help-generator.d.ts.map +1 -0
  124. package/dist/cli/help-generator.js +100 -0
  125. package/dist/cli/help-generator.js.map +1 -0
  126. package/dist/cli/index.d.ts +8 -0
  127. package/dist/cli/index.d.ts.map +1 -0
  128. package/dist/cli/index.js +95 -0
  129. package/dist/cli/index.js.map +1 -0
  130. package/dist/cli/instructions.d.ts +53 -0
  131. package/dist/cli/instructions.d.ts.map +1 -0
  132. package/dist/cli/instructions.js +219 -0
  133. package/dist/cli/instructions.js.map +1 -0
  134. package/dist/cli/lean-output.d.ts +15 -0
  135. package/dist/cli/lean-output.d.ts.map +1 -0
  136. package/dist/cli/lean-output.js +66 -0
  137. package/dist/cli/lean-output.js.map +1 -0
  138. package/dist/cli/md-renderer.d.ts +6 -0
  139. package/dist/cli/md-renderer.d.ts.map +1 -0
  140. package/dist/cli/md-renderer.js +396 -0
  141. package/dist/cli/md-renderer.js.map +1 -0
  142. package/dist/cli/output-envelope.d.ts +15 -0
  143. package/dist/cli/output-envelope.d.ts.map +1 -0
  144. package/dist/cli/output-envelope.js +61 -0
  145. package/dist/cli/output-envelope.js.map +1 -0
  146. package/dist/cli/setup.d.ts +11 -0
  147. package/dist/cli/setup.d.ts.map +1 -0
  148. package/dist/cli/setup.js +415 -0
  149. package/dist/cli/setup.js.map +1 -0
  150. package/dist/cli/status-dashboard.d.ts +5 -0
  151. package/dist/cli/status-dashboard.d.ts.map +1 -0
  152. package/dist/cli/status-dashboard.js +248 -0
  153. package/dist/cli/status-dashboard.js.map +1 -0
  154. package/dist/index.d.ts +3 -0
  155. package/dist/index.d.ts.map +1 -0
  156. package/dist/index.js +25 -0
  157. package/dist/index.js.map +1 -0
  158. package/dist/retrieval/bm25.d.ts +23 -0
  159. package/dist/retrieval/bm25.d.ts.map +1 -0
  160. package/dist/retrieval/bm25.js +92 -0
  161. package/dist/retrieval/bm25.js.map +1 -0
  162. package/dist/retrieval/cross-project-search.d.ts +30 -0
  163. package/dist/retrieval/cross-project-search.d.ts.map +1 -0
  164. package/dist/retrieval/cross-project-search.js +109 -0
  165. package/dist/retrieval/cross-project-search.js.map +1 -0
  166. package/dist/retrieval/graph-builder.d.ts +6 -0
  167. package/dist/retrieval/graph-builder.d.ts.map +1 -0
  168. package/dist/retrieval/graph-builder.js +196 -0
  169. package/dist/retrieval/graph-builder.js.map +1 -0
  170. package/dist/retrieval/graph-cache.d.ts +15 -0
  171. package/dist/retrieval/graph-cache.d.ts.map +1 -0
  172. package/dist/retrieval/graph-cache.js +66 -0
  173. package/dist/retrieval/graph-cache.js.map +1 -0
  174. package/dist/retrieval/graph-invalidate.d.ts +18 -0
  175. package/dist/retrieval/graph-invalidate.d.ts.map +1 -0
  176. package/dist/retrieval/graph-invalidate.js +23 -0
  177. package/dist/retrieval/graph-invalidate.js.map +1 -0
  178. package/dist/retrieval/graph-retrieval.d.ts +24 -0
  179. package/dist/retrieval/graph-retrieval.d.ts.map +1 -0
  180. package/dist/retrieval/graph-retrieval.js +165 -0
  181. package/dist/retrieval/graph-retrieval.js.map +1 -0
  182. package/dist/retrieval/graph-traverse.d.ts +3 -0
  183. package/dist/retrieval/graph-traverse.d.ts.map +1 -0
  184. package/dist/retrieval/graph-traverse.js +53 -0
  185. package/dist/retrieval/graph-traverse.js.map +1 -0
  186. package/dist/retrieval/graph-types.d.ts +37 -0
  187. package/dist/retrieval/graph-types.d.ts.map +1 -0
  188. package/dist/retrieval/graph-types.js +12 -0
  189. package/dist/retrieval/graph-types.js.map +1 -0
  190. package/dist/retrieval/index-builder.d.ts +21 -0
  191. package/dist/retrieval/index-builder.d.ts.map +1 -0
  192. package/dist/retrieval/index-builder.js +94 -0
  193. package/dist/retrieval/index-builder.js.map +1 -0
  194. package/dist/retrieval/knowledge-selection.d.ts +7 -0
  195. package/dist/retrieval/knowledge-selection.d.ts.map +1 -0
  196. package/dist/retrieval/knowledge-selection.js +80 -0
  197. package/dist/retrieval/knowledge-selection.js.map +1 -0
  198. package/dist/retrieval/task-scoped.d.ts +23 -0
  199. package/dist/retrieval/task-scoped.d.ts.map +1 -0
  200. package/dist/retrieval/task-scoped.js +51 -0
  201. package/dist/retrieval/task-scoped.js.map +1 -0
  202. package/dist/utils/content-assembly.d.ts +44 -0
  203. package/dist/utils/content-assembly.d.ts.map +1 -0
  204. package/dist/utils/content-assembly.js +101 -0
  205. package/dist/utils/content-assembly.js.map +1 -0
  206. package/dist/utils/dag.d.ts +28 -0
  207. package/dist/utils/dag.d.ts.map +1 -0
  208. package/dist/utils/dag.js +68 -0
  209. package/dist/utils/dag.js.map +1 -0
  210. package/dist/utils/diagram-generator.d.ts +17 -0
  211. package/dist/utils/diagram-generator.d.ts.map +1 -0
  212. package/dist/utils/diagram-generator.js +38 -0
  213. package/dist/utils/diagram-generator.js.map +1 -0
  214. package/dist/utils/errors.d.ts +40 -0
  215. package/dist/utils/errors.d.ts.map +1 -0
  216. package/dist/utils/errors.js +83 -0
  217. package/dist/utils/errors.js.map +1 -0
  218. package/dist/utils/file-lock.d.ts +13 -0
  219. package/dist/utils/file-lock.d.ts.map +1 -0
  220. package/dist/utils/file-lock.js +80 -0
  221. package/dist/utils/file-lock.js.map +1 -0
  222. package/dist/utils/git.d.ts +14 -0
  223. package/dist/utils/git.d.ts.map +1 -0
  224. package/dist/utils/git.js +56 -0
  225. package/dist/utils/git.js.map +1 -0
  226. package/dist/utils/graphify-knowledge.d.ts +6 -0
  227. package/dist/utils/graphify-knowledge.d.ts.map +1 -0
  228. package/dist/utils/graphify-knowledge.js +60 -0
  229. package/dist/utils/graphify-knowledge.js.map +1 -0
  230. package/dist/utils/graphify.d.ts +49 -0
  231. package/dist/utils/graphify.d.ts.map +1 -0
  232. package/dist/utils/graphify.js +306 -0
  233. package/dist/utils/graphify.js.map +1 -0
  234. package/dist/utils/json-schemas.d.ts +723 -0
  235. package/dist/utils/json-schemas.d.ts.map +1 -0
  236. package/dist/utils/json-schemas.js +147 -0
  237. package/dist/utils/json-schemas.js.map +1 -0
  238. package/dist/utils/json.d.ts +15 -0
  239. package/dist/utils/json.d.ts.map +1 -0
  240. package/dist/utils/json.js +39 -0
  241. package/dist/utils/json.js.map +1 -0
  242. package/dist/utils/knowledge-store.d.ts +49 -0
  243. package/dist/utils/knowledge-store.d.ts.map +1 -0
  244. package/dist/utils/knowledge-store.js +191 -0
  245. package/dist/utils/knowledge-store.js.map +1 -0
  246. package/dist/utils/loop-state.d.ts +51 -0
  247. package/dist/utils/loop-state.d.ts.map +1 -0
  248. package/dist/utils/loop-state.js +123 -0
  249. package/dist/utils/loop-state.js.map +1 -0
  250. package/dist/utils/paths.d.ts +16 -0
  251. package/dist/utils/paths.d.ts.map +1 -0
  252. package/dist/utils/paths.js +66 -0
  253. package/dist/utils/paths.js.map +1 -0
  254. package/dist/utils/plan-store.d.ts +46 -0
  255. package/dist/utils/plan-store.d.ts.map +1 -0
  256. package/dist/utils/plan-store.js +184 -0
  257. package/dist/utils/plan-store.js.map +1 -0
  258. package/dist/utils/project-documents.d.ts +20 -0
  259. package/dist/utils/project-documents.d.ts.map +1 -0
  260. package/dist/utils/project-documents.js +10 -0
  261. package/dist/utils/project-documents.js.map +1 -0
  262. package/dist/utils/project-memory.d.ts +16 -0
  263. package/dist/utils/project-memory.d.ts.map +1 -0
  264. package/dist/utils/project-memory.js +16 -0
  265. package/dist/utils/project-memory.js.map +1 -0
  266. package/dist/utils/project-resolver.d.ts +28 -0
  267. package/dist/utils/project-resolver.d.ts.map +1 -0
  268. package/dist/utils/project-resolver.js +119 -0
  269. package/dist/utils/project-resolver.js.map +1 -0
  270. package/dist/utils/quick-scan.d.ts +13 -0
  271. package/dist/utils/quick-scan.d.ts.map +1 -0
  272. package/dist/utils/quick-scan.js +156 -0
  273. package/dist/utils/quick-scan.js.map +1 -0
  274. package/dist/utils/schemas.d.ts +13 -0
  275. package/dist/utils/schemas.d.ts.map +1 -0
  276. package/dist/utils/schemas.js +6 -0
  277. package/dist/utils/schemas.js.map +1 -0
  278. package/dist/utils/slug.d.ts +10 -0
  279. package/dist/utils/slug.d.ts.map +1 -0
  280. package/dist/utils/slug.js +18 -0
  281. package/dist/utils/slug.js.map +1 -0
  282. package/dist/utils/stdin.d.ts +6 -0
  283. package/dist/utils/stdin.d.ts.map +1 -0
  284. package/dist/utils/stdin.js +25 -0
  285. package/dist/utils/stdin.js.map +1 -0
  286. package/dist/utils/storage-utils.d.ts +48 -0
  287. package/dist/utils/storage-utils.d.ts.map +1 -0
  288. package/dist/utils/storage-utils.js +175 -0
  289. package/dist/utils/storage-utils.js.map +1 -0
  290. package/dist/utils/task-store.d.ts +49 -0
  291. package/dist/utils/task-store.d.ts.map +1 -0
  292. package/dist/utils/task-store.js +178 -0
  293. package/dist/utils/task-store.js.map +1 -0
  294. package/dist/utils/template.d.ts +15 -0
  295. package/dist/utils/template.d.ts.map +1 -0
  296. package/dist/utils/template.js +27 -0
  297. package/dist/utils/template.js.map +1 -0
  298. package/dist/utils/tool-response.d.ts +37 -0
  299. package/dist/utils/tool-response.d.ts.map +1 -0
  300. package/dist/utils/tool-response.js +44 -0
  301. package/dist/utils/tool-response.js.map +1 -0
  302. package/dist/utils/workflow-policy.d.ts +50 -0
  303. package/dist/utils/workflow-policy.d.ts.map +1 -0
  304. package/dist/utils/workflow-policy.js +111 -0
  305. package/dist/utils/workflow-policy.js.map +1 -0
  306. package/dist/utils/workspace-match.d.ts +35 -0
  307. package/dist/utils/workspace-match.d.ts.map +1 -0
  308. package/dist/utils/workspace-match.js +58 -0
  309. package/dist/utils/workspace-match.js.map +1 -0
  310. package/opencode/arcs/.opencode/plugins/arcs.js +348 -0
  311. package/opencode/arcs/bundle-runtime.json +68 -0
  312. package/opencode/arcs/manifest.json +279 -0
  313. package/opencode/arcs/prompts/arcs-docs.txt +124 -0
  314. package/opencode/arcs/prompts/arcs-orchestrate-caveman.txt +529 -0
  315. package/opencode/arcs/prompts/arcs-orchestrate.txt +437 -0
  316. package/opencode/arcs/prompts/code-reviewer.txt +55 -0
  317. package/opencode/arcs/prompts/devil-advocate.txt +121 -0
  318. package/opencode/arcs/prompts/docs-researcher.txt +54 -0
  319. package/opencode/arcs/prompts/oncall-ops.txt +54 -0
  320. package/opencode/arcs/prompts/qa-analyst.txt +54 -0
  321. package/opencode/arcs/prompts/software-engineer.txt +48 -0
  322. package/opencode/arcs/prompts/system-architect.txt +60 -0
  323. package/opencode/arcs/prompts/tech-architect.txt +54 -0
  324. package/opencode/arcs/skills/brainstorming/SKILL.md +144 -0
  325. package/opencode/arcs/skills/brainstorming/scripts/frame-template.html +214 -0
  326. package/opencode/arcs/skills/brainstorming/scripts/helper.js +88 -0
  327. package/opencode/arcs/skills/brainstorming/scripts/server.js +338 -0
  328. package/opencode/arcs/skills/brainstorming/scripts/start-server.sh +137 -0
  329. package/opencode/arcs/skills/brainstorming/scripts/stop-server.sh +31 -0
  330. package/opencode/arcs/skills/brainstorming/spec-document-reviewer-prompt.md +50 -0
  331. package/opencode/arcs/skills/brainstorming/visual-companion.md +277 -0
  332. package/opencode/arcs/skills/caveman-commit/SKILL.md +51 -0
  333. package/opencode/arcs/skills/code-agent/SKILL.md +58 -0
  334. package/opencode/arcs/skills/deep-pr-review/SKILL.md +191 -0
  335. package/opencode/arcs/skills/deep-pr-review/graphify-diff.md +102 -0
  336. package/opencode/arcs/skills/deep-pr-review/review-template.md +69 -0
  337. package/opencode/arcs/skills/executing-plans/SKILL.md +91 -0
  338. package/opencode/arcs/skills/init-project/SKILL.md +150 -0
  339. package/opencode/arcs/skills/quick-dev/SKILL.md +47 -0
  340. package/opencode/arcs/skills/requesting-code-review/SKILL.md +47 -0
  341. package/opencode/arcs/skills/requesting-code-review/code-reviewer.md +179 -0
  342. package/opencode/arcs/skills/subagent-driven-development/SKILL.md +162 -0
  343. package/opencode/arcs/skills/subagent-driven-development/code-quality-reviewer-prompt.md +53 -0
  344. package/opencode/arcs/skills/subagent-driven-development/implementer-prompt.md +148 -0
  345. package/opencode/arcs/skills/subagent-driven-development/spec-reviewer-prompt.md +85 -0
  346. package/opencode/arcs/skills/systematic-debugging/SKILL.md +174 -0
  347. package/opencode/arcs/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
  348. package/opencode/arcs/skills/systematic-debugging/condition-based-waiting.md +115 -0
  349. package/opencode/arcs/skills/systematic-debugging/defense-in-depth.md +122 -0
  350. package/opencode/arcs/skills/systematic-debugging/find-polluter.sh +63 -0
  351. package/opencode/arcs/skills/systematic-debugging/phases-reference.md +168 -0
  352. package/opencode/arcs/skills/systematic-debugging/root-cause-tracing.md +169 -0
  353. package/opencode/arcs/skills/test-driven-development/SKILL.md +72 -0
  354. package/opencode/arcs/skills/test-driven-development/tdd-rationalizations-and-examples.md +157 -0
  355. package/opencode/arcs/skills/test-driven-development/testing-anti-patterns.md +299 -0
  356. package/opencode/arcs/skills/to-diagram/SKILL.md +235 -0
  357. package/opencode/arcs/skills/to-diagram/scripts/manage-diagram.mjs +963 -0
  358. package/opencode/arcs/skills/writing-plans/SKILL.md +179 -0
  359. package/opencode/arcs/skills/writing-plans/plan-document-reviewer-prompt.md +52 -0
  360. package/package.json +60 -0
  361. package/scripts/arcs-cli.mjs +45 -0
  362. package/skills/explore-dag.md +57 -0
  363. package/skills/init-project.md +105 -0
  364. package/skills/orchestrate.md +94 -0
  365. package/skills/update-docs.md +72 -0
  366. package/templates/dependency.md.tmpl +9 -0
  367. package/templates/knowledge.md.tmpl +15 -0
  368. package/templates/project-meta.json.tmpl +13 -0
  369. package/templates/project.md.tmpl +11 -0
  370. package/templates/task.md.tmpl +9 -0
@@ -0,0 +1,348 @@
1
+ /**
2
+ * ARCS plugin for OpenCode.ai
3
+ *
4
+ * Injects ARCS bootstrap context via system prompt transform.
5
+ * Drives loop continuation via CLI delegation (no direct file I/O on DAG).
6
+ * Skills are discovered via OpenCode's native skill tool from symlinked directory.
7
+ */
8
+
9
+ import path from "path";
10
+ import fs from "fs";
11
+ import os from "os";
12
+ import { execFile } from "child_process";
13
+ import { fileURLToPath } from "url";
14
+
15
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
16
+
17
+ // Simple frontmatter extraction (avoid dependency on skills-core for bootstrap)
18
+ const extractAndStripFrontmatter = (content) => {
19
+ const match = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
20
+ if (!match) return { frontmatter: {}, content };
21
+
22
+ const frontmatterStr = match[1];
23
+ const body = match[2];
24
+ const frontmatter = {};
25
+
26
+ for (const line of frontmatterStr.split("\n")) {
27
+ const colonIdx = line.indexOf(":");
28
+ if (colonIdx > 0) {
29
+ const key = line.slice(0, colonIdx).trim();
30
+ const value = line
31
+ .slice(colonIdx + 1)
32
+ .trim()
33
+ .replace(/^["']|["']$/g, "");
34
+ frontmatter[key] = value;
35
+ }
36
+ }
37
+
38
+ return { frontmatter, content: body };
39
+ };
40
+
41
+ // Normalize a path: trim whitespace, expand ~, resolve to absolute
42
+ const normalizePath = (p, homeDir) => {
43
+ if (!p || typeof p !== "string") return null;
44
+ let normalized = p.trim();
45
+ if (!normalized) return null;
46
+ if (normalized.startsWith("~/")) {
47
+ normalized = path.join(homeDir, normalized.slice(2));
48
+ } else if (normalized === "~") {
49
+ normalized = homeDir;
50
+ }
51
+ return path.resolve(normalized);
52
+ };
53
+
54
+ // ---------------------------------------------------------------------------
55
+ // CLI delegation — single writer pattern (no direct DAG file I/O)
56
+ // ---------------------------------------------------------------------------
57
+
58
+ const arcsExec = (args) =>
59
+ new Promise((resolve) => {
60
+ execFile("arcs", args, { timeout: 5000 }, (err, stdout) => {
61
+ if (err) return resolve(null);
62
+ try {
63
+ const result = JSON.parse(stdout);
64
+ return resolve(result?.ok ? result.data : null);
65
+ } catch {
66
+ return resolve(null);
67
+ }
68
+ });
69
+ });
70
+
71
+ const loopStatus = () => arcsExec(["loop", "status", "--json"]);
72
+ const loopTick = (slug, session) =>
73
+ arcsExec(["loop", "tick", slug, `--session=${session}`, "--json"]);
74
+ const loopCancel = (slug, session) =>
75
+ arcsExec(["loop", "cancel", slug, `--session=${session}`, "--json"]);
76
+
77
+ // ---------------------------------------------------------------------------
78
+ // Continuation prompt builder
79
+ // ---------------------------------------------------------------------------
80
+
81
+ const buildContinuationPrompt = (state) => {
82
+ const maxLabel =
83
+ typeof state.maxIterations === "number" ? String(state.maxIterations) : "unbounded";
84
+
85
+ if (state.strategy === "reset") {
86
+ return `[SYSTEM DIRECTIVE - ARCS LOOP ITERATION ${state.iteration}/${maxLabel}]
87
+
88
+ Start fresh on the following task. Previous attempts did not complete successfully.
89
+
90
+ IMPORTANT:
91
+ - Do NOT rely on previous context or partial work
92
+ - Approach the task from scratch with a clean perspective
93
+ - When FULLY complete, output: <promise>${state.completionPromise}</promise>
94
+ - Do not stop until the task is truly done
95
+
96
+ Task:
97
+ ${state.prompt}`;
98
+ }
99
+
100
+ return `[SYSTEM DIRECTIVE - ARCS LOOP ITERATION ${state.iteration}/${maxLabel}]
101
+
102
+ Your previous attempt did not output the completion promise. Continue working on the task.
103
+
104
+ IMPORTANT:
105
+ - Review your progress so far
106
+ - Continue from where you left off
107
+ - When FULLY complete, output: <promise>${state.completionPromise}</promise>
108
+ - Do not stop until the task is truly done
109
+
110
+ Original task:
111
+ ${state.prompt}`;
112
+ };
113
+
114
+ // ---------------------------------------------------------------------------
115
+ // Plugin entry
116
+ // ---------------------------------------------------------------------------
117
+
118
+ export const ArcsPlugin = async ({ client, directory }) => {
119
+ const inFlightSessions = new Set();
120
+ const homeDir = os.homedir();
121
+ const arcsSkillsDir = path.resolve(__dirname, "../skills/arcs");
122
+ const envConfigDir = normalizePath(process.env.OPENCODE_CONFIG_DIR, homeDir);
123
+ const configDir = envConfigDir || path.join(homeDir, ".config/opencode");
124
+
125
+ // Cache bootstrap content at plugin load (file doesn't change during session)
126
+ const cachedBootstrap = (() => {
127
+ const skillPath = path.join(arcsSkillsDir, "using-superpowers", "SKILL.md");
128
+ if (!fs.existsSync(skillPath)) return null;
129
+
130
+ const fullContent = fs.readFileSync(skillPath, "utf8");
131
+ const { content } = extractAndStripFrontmatter(fullContent);
132
+
133
+ const toolMapping = `**Tool Mapping for OpenCode:**
134
+ When skills reference tools you don't have, substitute OpenCode equivalents:
135
+ - \`TodoWrite\` → \`todowrite\`
136
+ - \`Task\` tool with subagents → Use OpenCode's subagent system (@mention)
137
+ - \`Skill\` tool → OpenCode's native \`skill\` tool
138
+ - \`Read\`, \`Write\`, \`Edit\`, \`Bash\` → Your native tools
139
+
140
+ **Skills location:**
141
+ ARCS skills are in \`${configDir}/skills/arcs/\`
142
+ Use OpenCode's native \`skill\` tool to list and load skills.`;
143
+
144
+ return `<EXTREMELY_IMPORTANT>
145
+ You have ARCS skills loaded.
146
+
147
+ **IMPORTANT: The using-superpowers skill content is included below. It is ALREADY LOADED - you are currently following it. Do NOT use the skill tool to load "using-superpowers" again - that would be redundant.**
148
+
149
+ ${content}
150
+
151
+ ${toolMapping}
152
+ </EXTREMELY_IMPORTANT>`;
153
+ })();
154
+
155
+ // Cache T0 brief at plugin load — gives every session the operating context
156
+ // without requiring agents to run `arcs brief` manually.
157
+ // NOTE: Stale after long sessions (hours). Agents can call `arcs brief --lean --json`
158
+ // for fresh data when needed. Stale T0 > no T0 for session start orientation.
159
+ const cachedBrief = await (async () => {
160
+ const data = await arcsExec(["brief", "--lean", "--json"]);
161
+ if (!data) return null;
162
+ return `<arcs_context>\n${JSON.stringify(data, null, 2)}\n</arcs_context>`;
163
+ })();
164
+
165
+ return {
166
+ // Use system prompt transform to inject bootstrap (fixes #226 agent reset bug)
167
+ "experimental.chat.system.transform": async (_input, output) => {
168
+ if (cachedBootstrap) {
169
+ (output.system ||= []).push(cachedBootstrap);
170
+ }
171
+
172
+ // Inject T0 operating context so agents start with current focus + next action
173
+ if (cachedBrief) {
174
+ (output.system ||= []).push(cachedBrief);
175
+ }
176
+
177
+ // Inject the workspace directory so ARCS and other agents always know
178
+ // which project directory OpenCode was opened in. This is the reliable
179
+ // source of truth — process.cwd() of MCP servers may differ.
180
+ if (directory) {
181
+ (output.system ||= []).push(`<env>\n Working directory: ${directory}\n</env>`);
182
+ }
183
+ },
184
+
185
+ event: async ({ event, client }) => {
186
+ const props = event.properties;
187
+
188
+ if (event.type === "session.idle") {
189
+ const sessionID = props?.sessionID;
190
+ if (!sessionID) return;
191
+ if (inFlightSessions.has(sessionID)) return;
192
+
193
+ inFlightSessions.add(sessionID);
194
+ try {
195
+ const status = await loopStatus();
196
+ if (!status?.state?.active) return;
197
+
198
+ const { state } = status;
199
+ const slug = status.slug;
200
+
201
+ // Only handle the loop's session
202
+ if (state.sessionId && state.sessionId !== sessionID) return;
203
+
204
+ // Detect completion in session messages
205
+ let completionDetected = false;
206
+ try {
207
+ const response = await client.session.messages({
208
+ path: { id: sessionID },
209
+ query: { directory },
210
+ });
211
+
212
+ const messages = Array.isArray(response)
213
+ ? response
214
+ : response?.data && Array.isArray(response.data)
215
+ ? response.data
216
+ : [];
217
+
218
+ const scopedMessages =
219
+ typeof state.messageCountAtStart === "number"
220
+ ? messages.slice(state.messageCountAtStart)
221
+ : messages;
222
+
223
+ const assistantMsgs = scopedMessages.filter((m) => m.info?.role === "assistant");
224
+ const pattern = new RegExp(
225
+ `<promise>\\s*${state.completionPromise.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\s*</promise>`,
226
+ "is",
227
+ );
228
+
229
+ for (let i = assistantMsgs.length - 1; i >= 0; i--) {
230
+ const parts = assistantMsgs[i].parts || [];
231
+ for (const part of parts) {
232
+ if (part.type === "text" && part.text && pattern.test(part.text)) {
233
+ completionDetected = true;
234
+ break;
235
+ }
236
+ }
237
+ if (completionDetected) break;
238
+ }
239
+ } catch {}
240
+
241
+ if (completionDetected) {
242
+ await loopCancel(slug, sessionID);
243
+ await client.tui
244
+ ?.showToast?.({
245
+ body: {
246
+ title: "ARCS Loop Complete!",
247
+ message: `Task completed after ${state.iteration} iteration(s)`,
248
+ variant: "success",
249
+ duration: 5000,
250
+ },
251
+ })
252
+ .catch(() => {});
253
+ return;
254
+ }
255
+
256
+ // Tick — CLI handles max-iteration check and state mutation atomically
257
+ const tickResult = await loopTick(slug, sessionID);
258
+ if (!tickResult) return; // CLI unreachable or session mismatch
259
+
260
+ if (tickResult.maxReached) {
261
+ await client.tui
262
+ ?.showToast?.({
263
+ body: {
264
+ title: "ARCS Loop Stopped",
265
+ message: `Max iterations (${state.maxIterations}) reached without completion`,
266
+ variant: "warning",
267
+ duration: 5000,
268
+ },
269
+ })
270
+ .catch(() => {});
271
+ return;
272
+ }
273
+
274
+ const updatedState = tickResult.state;
275
+
276
+ // Show toast
277
+ await client.tui
278
+ ?.showToast?.({
279
+ body: {
280
+ title: "ARCS Loop",
281
+ message: `Iteration ${updatedState.iteration}/${typeof updatedState.maxIterations === "number" ? updatedState.maxIterations : "unbounded"}`,
282
+ variant: "info",
283
+ duration: 2000,
284
+ },
285
+ })
286
+ .catch(() => {});
287
+
288
+ // Inject continuation prompt
289
+ const continuationPrompt = buildContinuationPrompt(updatedState);
290
+
291
+ // Inherit agent/model from last message
292
+ let agent, model, tools;
293
+ try {
294
+ const msgs = await client.session.messages({ path: { id: sessionID } });
295
+ const messageList = Array.isArray(msgs) ? msgs : msgs?.data || [];
296
+ for (let i = messageList.length - 1; i >= 0; i--) {
297
+ const info = messageList[i]?.info;
298
+ if (info?.agent || info?.model || (info?.modelID && info?.providerID)) {
299
+ agent = info.agent;
300
+ model =
301
+ info.model ??
302
+ (info.providerID && info.modelID
303
+ ? { providerID: info.providerID, modelID: info.modelID }
304
+ : undefined);
305
+ tools = info.tools;
306
+ break;
307
+ }
308
+ }
309
+ } catch {}
310
+
311
+ await client.session.promptAsync({
312
+ path: { id: sessionID },
313
+ body: {
314
+ ...(agent !== undefined ? { agent } : {}),
315
+ ...(model ? { model: { providerID: model.providerID, modelID: model.modelID } } : {}),
316
+ ...(model?.variant ? { variant: model.variant } : {}),
317
+ ...(tools ? { tools } : {}),
318
+ parts: [{ type: "text", text: continuationPrompt }],
319
+ },
320
+ query: { directory },
321
+ });
322
+ } finally {
323
+ inFlightSessions.delete(sessionID);
324
+ }
325
+ }
326
+
327
+ // Handle session deletion — clear loop if it's the loop session
328
+ if (event.type === "session.deleted") {
329
+ const sessionID = props?.sessionID;
330
+ if (!sessionID) return;
331
+ const status = await loopStatus();
332
+ if (status?.state?.active && status.state.sessionId === sessionID) {
333
+ await loopCancel(status.slug, sessionID);
334
+ }
335
+ }
336
+
337
+ // Handle session error — clear loop
338
+ if (event.type === "session.error") {
339
+ const sessionID = props?.sessionID;
340
+ if (!sessionID) return;
341
+ const status = await loopStatus();
342
+ if (status?.state?.active && status.state.sessionId === sessionID) {
343
+ await loopCancel(status.slug, sessionID);
344
+ }
345
+ }
346
+ },
347
+ };
348
+ };
@@ -0,0 +1,68 @@
1
+ {
2
+ "skills": {
3
+ "brainstorming": [
4
+ "SKILL.md",
5
+ "spec-document-reviewer-prompt.md",
6
+ "visual-companion.md",
7
+ "scripts/frame-template.html",
8
+ "scripts/helper.js",
9
+ "scripts/server.js",
10
+ "scripts/start-server.sh",
11
+ "scripts/stop-server.sh"
12
+ ],
13
+ "code-agent": [
14
+ "SKILL.md"
15
+ ],
16
+ "deep-pr-review": [
17
+ "SKILL.md",
18
+ "review-template.md",
19
+ "graphify-diff.md"
20
+ ],
21
+ "executing-plans": [
22
+ "SKILL.md"
23
+ ],
24
+ "quick-dev": [
25
+ "SKILL.md"
26
+ ],
27
+ "requesting-code-review": [
28
+ "SKILL.md",
29
+ "code-reviewer.md"
30
+ ],
31
+ "subagent-driven-development": [
32
+ "SKILL.md",
33
+ "code-quality-reviewer-prompt.md",
34
+ "implementer-prompt.md",
35
+ "spec-reviewer-prompt.md"
36
+ ],
37
+ "systematic-debugging": [
38
+ "SKILL.md",
39
+ "condition-based-waiting.md",
40
+ "condition-based-waiting-example.ts",
41
+ "defense-in-depth.md",
42
+ "find-polluter.sh",
43
+ "phases-reference.md",
44
+ "root-cause-tracing.md"
45
+ ],
46
+ "test-driven-development": [
47
+ "SKILL.md",
48
+ "tdd-rationalizations-and-examples.md",
49
+ "testing-anti-patterns.md"
50
+ ],
51
+ "to-diagram": [
52
+ "SKILL.md",
53
+ "scripts/manage-diagram.mjs"
54
+ ],
55
+ "writing-plans": [
56
+ "SKILL.md",
57
+ "plan-document-reviewer-prompt.md"
58
+ ]
59
+ },
60
+ "agents": [],
61
+ "plugin": [],
62
+ "excludePatterns": [
63
+ "**/references/**",
64
+ "**/examples/**",
65
+ "**/CREATION-LOG.md",
66
+ "**/test-pressure-*.md"
67
+ ]
68
+ }
@@ -0,0 +1,279 @@
1
+ {
2
+ "bundleId": "arcs-opencode-bundle",
3
+ "installMode": "opencode-arcs",
4
+ "bundleVersionSource": "package.json",
5
+ "sourceRoot": "opencode/arcs",
6
+ "skills": {
7
+ "source": "skills",
8
+ "destination": "skills/arcs"
9
+ },
10
+ "agents": [
11
+ { "source": "prompts/software-engineer.txt", "destination": "prompts/software-engineer.txt" },
12
+ { "source": "prompts/tech-architect.txt", "destination": "prompts/tech-architect.txt" },
13
+ { "source": "prompts/qa-analyst.txt", "destination": "prompts/qa-analyst.txt" },
14
+ { "source": "prompts/oncall-ops.txt", "destination": "prompts/oncall-ops.txt" },
15
+ { "source": "prompts/arcs-docs.txt", "destination": "prompts/arcs-docs.txt" },
16
+ { "source": "prompts/system-architect.txt", "destination": "prompts/system-architect.txt" },
17
+ { "source": "prompts/code-reviewer.txt", "destination": "prompts/code-reviewer.txt" },
18
+ { "source": "prompts/docs-researcher.txt", "destination": "prompts/docs-researcher.txt" },
19
+ { "source": "prompts/devil-advocate.txt", "destination": "prompts/devil-advocate.txt" }
20
+ ],
21
+ "ownedPaths": [
22
+ "skills/arcs",
23
+ "plugins/arcs.js"
24
+ ],
25
+ "plugin": {
26
+ "required": true,
27
+ "source": ".opencode/plugins/arcs.js",
28
+ "destination": "plugins/arcs.js"
29
+ },
30
+ "config": {
31
+ "requiredMerges": [
32
+ {
33
+ "path": [
34
+ "permission"
35
+ ],
36
+ "value": {
37
+ "external_directory": {
38
+ "/tmp": "allow",
39
+ "~/.arcs": "allow",
40
+ "~/.config/opencode": "allow"
41
+ }
42
+ }
43
+ },
44
+ {
45
+ "path": [
46
+ "model"
47
+ ],
48
+ "value": "github-copilot/claude-sonnet-4.6"
49
+ },
50
+ {
51
+ "path": [
52
+ "agent",
53
+ "build",
54
+ "model"
55
+ ],
56
+ "value": "github-copilot/claude-sonnet-4.6"
57
+ },
58
+ {
59
+ "path": [
60
+ "agent",
61
+ "plan",
62
+ "model"
63
+ ],
64
+ "value": "github-copilot/claude-opus-4.6"
65
+ },
66
+ {
67
+ "path": [
68
+ "agent",
69
+ "general",
70
+ "model"
71
+ ],
72
+ "value": "github-copilot/claude-opus-4.6"
73
+ },
74
+ {
75
+ "path": [
76
+ "agent",
77
+ "explore",
78
+ "model"
79
+ ],
80
+ "value": "github-copilot/claude-haiku-4.5"
81
+ },
82
+ {
83
+ "path": [
84
+ "agent",
85
+ "code-reviewer"
86
+ ],
87
+ "value": {
88
+ "description": "Reviews code changes for production readiness and catches correctness, maintainability, and testing issues.",
89
+ "mode": "subagent",
90
+ "model": "github-copilot/claude-haiku-4.5",
91
+ "prompt": "{file:./prompts/code-reviewer.txt}",
92
+ "permission": {
93
+ "edit": "deny",
94
+ "bash": "allow",
95
+ "webfetch": "deny"
96
+ }
97
+ }
98
+ },
99
+ {
100
+ "path": [
101
+ "agent",
102
+ "docs-researcher"
103
+ ],
104
+ "value": {
105
+ "description": "Handles documentation writing, research synthesis, OCR-adjacent extraction, and document-heavy analysis tasks.",
106
+ "mode": "subagent",
107
+ "model": "github-copilot/claude-opus-4.6",
108
+ "permission": {
109
+ "edit": "ask",
110
+ "bash": "ask",
111
+ "webfetch": "allow",
112
+ "external_directory": {
113
+ "/tmp": "allow",
114
+ "~/.arcs": "allow"
115
+ }
116
+ },
117
+ "prompt": "{file:./prompts/docs-researcher.txt}"
118
+ }
119
+ },
120
+ {
121
+ "path": [
122
+ "agent",
123
+ "tech-architect"
124
+ ],
125
+ "value": {
126
+ "description": "Architecture and analysis specialist. Deep structural reasoning, refactor guidance, trade-off evaluation, and root cause analysis without making hasty edits.",
127
+ "mode": "subagent",
128
+ "model": "github-copilot/claude-haiku-4.5",
129
+ "permission": {
130
+ "edit": "ask",
131
+ "bash": "ask",
132
+ "webfetch": "deny",
133
+ "external_directory": {
134
+ "~/.arcs": "allow"
135
+ }
136
+ },
137
+ "prompt": "{file:./prompts/tech-architect.txt}"
138
+ }
139
+ },
140
+ {
141
+ "path": [
142
+ "agent",
143
+ "software-engineer"
144
+ ],
145
+ "value": {
146
+ "description": "Implementation specialist. Writes code, runs tests, ships features. Loads quick-dev, code-agent, test-driven-development, executing-plans, finishing-a-development-branch, and aesthetic skills as needed.",
147
+ "mode": "subagent",
148
+ "model": "github-copilot/claude-opus-4.6",
149
+ "permission": {
150
+ "edit": "allow",
151
+ "bash": "allow",
152
+ "webfetch": "deny",
153
+ "mcp": "allow",
154
+ "external_directory": {
155
+ "/tmp": "allow",
156
+ "~/.arcs": "allow"
157
+ }
158
+ },
159
+ "prompt": "{file:./prompts/software-engineer.txt}"
160
+ }
161
+ },
162
+ {
163
+ "path": [
164
+ "agent",
165
+ "arcs-docs"
166
+ ],
167
+ "value": {
168
+ "description": "ARCS documentation specialist. Manages plans, knowledge entries, diagrams, and DAG health. Knows ARCS structure intimately.",
169
+ "mode": "subagent",
170
+ "model": "github-copilot/claude-opus-4.6",
171
+ "permission": {
172
+ "edit": "allow",
173
+ "bash": "allow",
174
+ "webfetch": "deny",
175
+ "mcp": "allow",
176
+ "external_directory": {
177
+ "/tmp": "allow",
178
+ "~/.arcs": "allow",
179
+ "~/.config/opencode": "allow"
180
+ }
181
+ },
182
+ "prompt": "{file:./prompts/arcs-docs.txt}"
183
+ }
184
+ },
185
+ {
186
+ "path": [
187
+ "agent",
188
+ "qa-analyst"
189
+ ],
190
+ "value": {
191
+ "description": "Quality enforcement specialist. Proactive code audits, review dispatch, convention compliance.",
192
+ "mode": "subagent",
193
+ "model": "github-copilot/claude-haiku-4.5",
194
+ "permission": {
195
+ "edit": "deny",
196
+ "bash": "allow",
197
+ "webfetch": "deny",
198
+ "mcp": "allow",
199
+ "external_directory": {
200
+ "~/.arcs": "allow"
201
+ }
202
+ },
203
+ "prompt": "{file:./prompts/qa-analyst.txt}"
204
+ }
205
+ },
206
+ {
207
+ "path": [
208
+ "agent",
209
+ "devil-advocate"
210
+ ],
211
+ "value": {
212
+ "description": "Adversarial phase-gate agent. Checks work at phase boundaries using KISS/YAGNI/DRY principles. Runs tests, reads diffs, delivers pass/block verdicts. Cannot edit code.",
213
+ "mode": "subagent",
214
+ "model": "github-copilot/claude-sonnet-4.6",
215
+ "permission": {
216
+ "edit": "deny",
217
+ "bash": "allow",
218
+ "webfetch": "deny",
219
+ "mcp": "allow",
220
+ "external_directory": {
221
+ "/tmp": "allow",
222
+ "~/.arcs": "allow"
223
+ }
224
+ },
225
+ "prompt": "{file:./prompts/devil-advocate.txt}"
226
+ }
227
+ },
228
+ {
229
+ "path": [
230
+ "agent",
231
+ "oncall-ops"
232
+ ],
233
+ "value": {
234
+ "description": "Debugging and diagnosis specialist. Finds root causes through systematic investigation, log triage, bisect, and performance profiling.",
235
+ "mode": "subagent",
236
+ "model": "github-copilot/claude-opus-4.6",
237
+ "permission": {
238
+ "edit": "ask",
239
+ "bash": "allow",
240
+ "webfetch": "deny",
241
+ "mcp": "allow",
242
+ "external_directory": {
243
+ "/tmp": "allow",
244
+ "~/.arcs": "allow"
245
+ }
246
+ },
247
+ "prompt": "{file:./prompts/oncall-ops.txt}"
248
+ }
249
+ },
250
+ {
251
+ "path": [
252
+ "agent",
253
+ "system-architect"
254
+ ],
255
+ "value": {
256
+ "description": "Architecture and design specialist. Module boundaries, dependency graphs, migration strategies, and cross-project design decisions.",
257
+ "mode": "subagent",
258
+ "model": "github-copilot/claude-opus-4.6",
259
+ "permission": {
260
+ "edit": "deny",
261
+ "bash": "allow",
262
+ "webfetch": "allow",
263
+ "mcp": "allow",
264
+ "external_directory": {
265
+ "~/.arcs": "allow"
266
+ }
267
+ },
268
+ "prompt": "{file:./prompts/system-architect.txt}"
269
+ }
270
+ },
271
+ {
272
+ "path": [
273
+ "small_model"
274
+ ],
275
+ "value": "github-copilot/claude-haiku-4.5"
276
+ }
277
+ ]
278
+ }
279
+ }