devrites 5.10.1 → 5.11.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 (296) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +24 -10
  3. package/bin/devrites.mjs +2 -0
  4. package/docs/cli.md +4 -1
  5. package/docs/command-map.md +7 -5
  6. package/docs/engine/commands.md +7 -5
  7. package/docs/orchestration.md +5 -2
  8. package/docs/skills.md +10 -4
  9. package/docs/usage.md +3 -1
  10. package/engine/commands.go +3 -0
  11. package/engine/help.go +190 -0
  12. package/engine/help_test.go +98 -0
  13. package/engine/internal/devritespaths/paths.go +2 -0
  14. package/engine/internal/hostpack/hostpack.go +39 -5
  15. package/engine/internal/hostpack/hostpack_test.go +27 -13
  16. package/engine/internal/install/apply.go +17 -4
  17. package/engine/internal/install/install.go +9 -2
  18. package/engine/internal/install/install_test.go +15 -2
  19. package/engine/internal/install/preflight.go +8 -2
  20. package/engine/internal/install/update.go +1 -1
  21. package/engine/internal/parallel/cli.go +90 -32
  22. package/engine/internal/parallel/cli_test.go +32 -0
  23. package/engine/main.go +15 -8
  24. package/engine/root_routing_test.go +4 -0
  25. package/install.sh +4 -1
  26. package/pack/.claude/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
  27. package/pack/.claude/skills/rite-autocomplete/SKILL.md +10 -5
  28. package/pack/.claude/skills/rite-autocomplete/reference/loop.md +12 -7
  29. package/pack/.claude/skills/rite-build/SKILL.md +3 -1
  30. package/pack/.claude/skills/rite-build/reference/afk-discipline.md +4 -3
  31. package/pack/.claude/skills/rite-build/reference/parallel-batch.md +3 -1
  32. package/pack/.claude/skills/rite-define/reference/plan-template.md +1 -1
  33. package/pack/generated/README.md +4 -2
  34. package/pack/generated/claude/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
  35. package/pack/generated/claude/skills/rite-autocomplete/SKILL.md +10 -5
  36. package/pack/generated/claude/skills/rite-autocomplete/reference/loop.md +12 -7
  37. package/pack/generated/claude/skills/rite-build/SKILL.md +3 -1
  38. package/pack/generated/claude/skills/rite-build/reference/afk-discipline.md +4 -3
  39. package/pack/generated/claude/skills/rite-build/reference/parallel-batch.md +3 -1
  40. package/pack/generated/claude/skills/rite-define/reference/plan-template.md +1 -1
  41. package/pack/generated/codex/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
  42. package/pack/generated/codex/skills/rite-autocomplete/SKILL.md +10 -5
  43. package/pack/generated/codex/skills/rite-autocomplete/reference/loop.md +12 -7
  44. package/pack/generated/codex/skills/rite-build/SKILL.md +3 -1
  45. package/pack/generated/codex/skills/rite-build/reference/afk-discipline.md +4 -3
  46. package/pack/generated/codex/skills/rite-build/reference/parallel-batch.md +3 -1
  47. package/pack/generated/codex/skills/rite-define/reference/plan-template.md +1 -1
  48. package/pack/generated/devin/AGENTS.md +23 -0
  49. package/pack/generated/devin/agents/devrites-code-reviewer.md +145 -0
  50. package/pack/generated/devin/agents/devrites-devex-reviewer.md +126 -0
  51. package/pack/generated/devin/agents/devrites-doubt-reviewer.md +91 -0
  52. package/pack/generated/devin/agents/devrites-evidence-scout.md +77 -0
  53. package/pack/generated/devin/agents/devrites-frontend-reviewer.md +119 -0
  54. package/pack/generated/devin/agents/devrites-performance-reviewer.md +117 -0
  55. package/pack/generated/devin/agents/devrites-plan-drafter.md +102 -0
  56. package/pack/generated/devin/agents/devrites-plan-reviewer.md +144 -0
  57. package/pack/generated/devin/agents/devrites-proof-runner.md +76 -0
  58. package/pack/generated/devin/agents/devrites-retrospector.md +64 -0
  59. package/pack/generated/devin/agents/devrites-security-auditor.md +112 -0
  60. package/pack/generated/devin/agents/devrites-simplifier-reviewer.md +97 -0
  61. package/pack/generated/devin/agents/devrites-slice-wright.md +219 -0
  62. package/pack/generated/devin/agents/devrites-spec-reviewer.md +99 -0
  63. package/pack/generated/devin/agents/devrites-strategy-reviewer.md +102 -0
  64. package/pack/generated/devin/agents/devrites-test-analyst.md +97 -0
  65. package/pack/generated/devin/agents/devrites-upgrade-planner.md +91 -0
  66. package/pack/generated/devin/skills/devrites-api-interface/SKILL.md +64 -0
  67. package/pack/generated/devin/skills/devrites-audit/SKILL.md +51 -0
  68. package/pack/generated/devin/skills/devrites-browser-proof/SKILL.md +77 -0
  69. package/pack/generated/devin/skills/devrites-browser-proof/reference/browser-performance.md +15 -0
  70. package/pack/generated/devin/skills/devrites-browser-proof/reference/visual-verdict.md +34 -0
  71. package/pack/generated/devin/skills/devrites-debug-recovery/SKILL.md +97 -0
  72. package/pack/generated/devin/skills/devrites-debug-recovery/reference/build-the-loop.md +58 -0
  73. package/pack/generated/devin/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +34 -0
  74. package/pack/generated/devin/skills/devrites-debug-recovery/reference/hypotheses.md +17 -0
  75. package/pack/generated/devin/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
  76. package/pack/generated/devin/skills/devrites-debug-recovery/reference/regression-test.md +30 -0
  77. package/pack/generated/devin/skills/devrites-debug-recovery/reference/trace.md +25 -0
  78. package/pack/generated/devin/skills/devrites-doubt/SKILL.md +80 -0
  79. package/pack/generated/devin/skills/devrites-frontend-craft/SKILL.md +87 -0
  80. package/pack/generated/devin/skills/devrites-frontend-craft/reference/craft.md +63 -0
  81. package/pack/generated/devin/skills/devrites-frontend-craft/reference/design-references.md +116 -0
  82. package/pack/generated/devin/skills/devrites-frontend-craft/reference/fullstack.md +46 -0
  83. package/pack/generated/devin/skills/devrites-frontend-craft/reference/quality-standards.md +294 -0
  84. package/pack/generated/devin/skills/devrites-frontend-craft/reference/reuse-first.md +53 -0
  85. package/pack/generated/devin/skills/devrites-frontend-craft/reference/shape.md +56 -0
  86. package/pack/generated/devin/skills/devrites-interview/SKILL.md +103 -0
  87. package/pack/generated/devin/skills/devrites-lib/SKILL.md +57 -0
  88. package/pack/generated/devin/skills/devrites-lib/reference/candidate-integrity.md +42 -0
  89. package/pack/generated/devin/skills/devrites-lib/reference/intent-map.md +64 -0
  90. package/pack/generated/devin/skills/devrites-lib/reference/orchestration-profiles.md +27 -0
  91. package/pack/generated/devin/skills/devrites-lib/reference/parallel-dispatch.md +73 -0
  92. package/pack/generated/devin/skills/devrites-lib/reference/reply-contract.md +88 -0
  93. package/pack/generated/devin/skills/devrites-lib/reference/standards/README.md +60 -0
  94. package/pack/generated/devin/skills/devrites-lib/reference/standards/acceptance-preserving-reslice.md +30 -0
  95. package/pack/generated/devin/skills/devrites-lib/reference/standards/afk-hitl.md +415 -0
  96. package/pack/generated/devin/skills/devrites-lib/reference/standards/agents.md +99 -0
  97. package/pack/generated/devin/skills/devrites-lib/reference/standards/anti-patterns.md +48 -0
  98. package/pack/generated/devin/skills/devrites-lib/reference/standards/browser-proof-checklist.md +24 -0
  99. package/pack/generated/devin/skills/devrites-lib/reference/standards/ci-cd.md +50 -0
  100. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-navigation.md +43 -0
  101. package/pack/generated/devin/skills/devrites-lib/reference/standards/code-review.md +108 -0
  102. package/pack/generated/devin/skills/devrites-lib/reference/standards/coding-style.md +48 -0
  103. package/pack/generated/devin/skills/devrites-lib/reference/standards/context-hygiene.md +109 -0
  104. package/pack/generated/devin/skills/devrites-lib/reference/standards/core.md +167 -0
  105. package/pack/generated/devin/skills/devrites-lib/reference/standards/data-integrity.md +118 -0
  106. package/pack/generated/devin/skills/devrites-lib/reference/standards/debug-recovery.md +28 -0
  107. package/pack/generated/devin/skills/devrites-lib/reference/standards/definition-of-done.md +19 -0
  108. package/pack/generated/devin/skills/devrites-lib/reference/standards/deprecation.md +31 -0
  109. package/pack/generated/devin/skills/devrites-lib/reference/standards/developer-experience.md +119 -0
  110. package/pack/generated/devin/skills/devrites-lib/reference/standards/development-workflow.md +29 -0
  111. package/pack/generated/devin/skills/devrites-lib/reference/standards/documentation.md +43 -0
  112. package/pack/generated/devin/skills/devrites-lib/reference/standards/edge-case-trace.md +92 -0
  113. package/pack/generated/devin/skills/devrites-lib/reference/standards/elicitation.md +85 -0
  114. package/pack/generated/devin/skills/devrites-lib/reference/standards/error-handling.md +47 -0
  115. package/pack/generated/devin/skills/devrites-lib/reference/standards/git-workflow.md +49 -0
  116. package/pack/generated/devin/skills/devrites-lib/reference/standards/hooks.md +25 -0
  117. package/pack/generated/devin/skills/devrites-lib/reference/standards/integration-reliability.md +102 -0
  118. package/pack/generated/devin/skills/devrites-lib/reference/standards/loop-operations.md +85 -0
  119. package/pack/generated/devin/skills/devrites-lib/reference/standards/observability.md +88 -0
  120. package/pack/generated/devin/skills/devrites-lib/reference/standards/one-shot-actions.md +97 -0
  121. package/pack/generated/devin/skills/devrites-lib/reference/standards/patterns.md +68 -0
  122. package/pack/generated/devin/skills/devrites-lib/reference/standards/performance.md +51 -0
  123. package/pack/generated/devin/skills/devrites-lib/reference/standards/principles.md +42 -0
  124. package/pack/generated/devin/skills/devrites-lib/reference/standards/prose-style.md +123 -0
  125. package/pack/generated/devin/skills/devrites-lib/reference/standards/release/ship-checklist.md +8 -0
  126. package/pack/generated/devin/skills/devrites-lib/reference/standards/repository-topology.md +80 -0
  127. package/pack/generated/devin/skills/devrites-lib/reference/standards/review-checklist.md +12 -0
  128. package/pack/generated/devin/skills/devrites-lib/reference/standards/security-checklist.md +25 -0
  129. package/pack/generated/devin/skills/devrites-lib/reference/standards/security.md +202 -0
  130. package/pack/generated/devin/skills/devrites-lib/reference/standards/skill-authoring.md +209 -0
  131. package/pack/generated/devin/skills/devrites-lib/reference/standards/spec-grammar.md +197 -0
  132. package/pack/generated/devin/skills/devrites-lib/reference/standards/test-proof-checklist.md +13 -0
  133. package/pack/generated/devin/skills/devrites-lib/reference/standards/testing.md +212 -0
  134. package/pack/generated/devin/skills/devrites-lib/reference/standards/tooling.md +92 -0
  135. package/pack/generated/devin/skills/devrites-lib/reference/standards/workflow-artifacts.md +427 -0
  136. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/code.md +44 -0
  137. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/comparison.md +42 -0
  138. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/diagram.md +51 -0
  139. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/index.md +66 -0
  140. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/input.md +46 -0
  141. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/outline-template.md +106 -0
  142. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/plan.md +48 -0
  143. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/slides.md +40 -0
  144. package/pack/generated/devin/skills/devrites-lib/reference/visual-playbooks/table.md +42 -0
  145. package/pack/generated/devin/skills/devrites-lib/reference/workspace-artifact-schema.md +267 -0
  146. package/pack/generated/devin/skills/devrites-prose-craft/SKILL.md +74 -0
  147. package/pack/generated/devin/skills/devrites-prose-craft/reference/banned-phrases.md +132 -0
  148. package/pack/generated/devin/skills/devrites-prose-craft/reference/examples.md +131 -0
  149. package/pack/generated/devin/skills/devrites-prose-craft/reference/structures.md +196 -0
  150. package/pack/generated/devin/skills/devrites-source-driven/SKILL.md +53 -0
  151. package/pack/generated/devin/skills/devrites-ux-shape/SKILL.md +135 -0
  152. package/pack/generated/devin/skills/devrites-ux-shape/reference/brief-template.md +108 -0
  153. package/pack/generated/devin/skills/devrites-ux-shape/reference/visual-direction-probe.md +48 -0
  154. package/pack/generated/devin/skills/rite/SKILL.md +148 -0
  155. package/pack/generated/devin/skills/rite/reference/menu.md +48 -0
  156. package/pack/generated/devin/skills/rite-adopt/SKILL.md +51 -0
  157. package/pack/generated/devin/skills/rite-adopt/reference/adoption.md +19 -0
  158. package/pack/generated/devin/skills/rite-adopt/reference/anti-patterns.md +19 -0
  159. package/pack/generated/devin/skills/rite-autocomplete/SKILL.md +142 -0
  160. package/pack/generated/devin/skills/rite-autocomplete/reference/decision-policy.md +43 -0
  161. package/pack/generated/devin/skills/rite-autocomplete/reference/loop.md +151 -0
  162. package/pack/generated/devin/skills/rite-autocomplete/reference/stop-conditions.md +97 -0
  163. package/pack/generated/devin/skills/rite-build/SKILL.md +102 -0
  164. package/pack/generated/devin/skills/rite-build/reference/afk-discipline.md +148 -0
  165. package/pack/generated/devin/skills/rite-build/reference/anti-patterns.md +27 -0
  166. package/pack/generated/devin/skills/rite-build/reference/checkpoint-protocol.md +120 -0
  167. package/pack/generated/devin/skills/rite-build/reference/checkpoint.md +56 -0
  168. package/pack/generated/devin/skills/rite-build/reference/frontend-trigger.md +39 -0
  169. package/pack/generated/devin/skills/rite-build/reference/one-slice-cycle.md +51 -0
  170. package/pack/generated/devin/skills/rite-build/reference/output.md +33 -0
  171. package/pack/generated/devin/skills/rite-build/reference/parallel-batch.md +214 -0
  172. package/pack/generated/devin/skills/rite-build/reference/phase-contract.md +89 -0
  173. package/pack/generated/devin/skills/rite-build/reference/spec-drift-guard.md +84 -0
  174. package/pack/generated/devin/skills/rite-build/reference/tdd.md +27 -0
  175. package/pack/generated/devin/skills/rite-build/reference/wright-dispatch.md +96 -0
  176. package/pack/generated/devin/skills/rite-clarify/SKILL.md +98 -0
  177. package/pack/generated/devin/skills/rite-clarify/reference/anti-patterns.md +24 -0
  178. package/pack/generated/devin/skills/rite-clarify/reference/decision-coverage.md +55 -0
  179. package/pack/generated/devin/skills/rite-converge/SKILL.md +144 -0
  180. package/pack/generated/devin/skills/rite-converge/reference/anti-patterns.md +35 -0
  181. package/pack/generated/devin/skills/rite-converge/reference/convergence-assessment.md +65 -0
  182. package/pack/generated/devin/skills/rite-customize/SKILL.md +60 -0
  183. package/pack/generated/devin/skills/rite-define/SKILL.md +168 -0
  184. package/pack/generated/devin/skills/rite-define/reference/anti-patterns.md +26 -0
  185. package/pack/generated/devin/skills/rite-define/reference/gates.md +159 -0
  186. package/pack/generated/devin/skills/rite-define/reference/plan-template.md +149 -0
  187. package/pack/generated/devin/skills/rite-doctor/SKILL.md +68 -0
  188. package/pack/generated/devin/skills/rite-dogfood/SKILL.md +55 -0
  189. package/pack/generated/devin/skills/rite-explain/SKILL.md +152 -0
  190. package/pack/generated/devin/skills/rite-explain/reference/intake.md +89 -0
  191. package/pack/generated/devin/skills/rite-frame/SKILL.md +114 -0
  192. package/pack/generated/devin/skills/rite-frame/reference/failure-modes.md +66 -0
  193. package/pack/generated/devin/skills/rite-handoff/SKILL.md +97 -0
  194. package/pack/generated/devin/skills/rite-handoff/reference/handoff-template.md +44 -0
  195. package/pack/generated/devin/skills/rite-learn/SKILL.md +72 -0
  196. package/pack/generated/devin/skills/rite-plan/SKILL.md +185 -0
  197. package/pack/generated/devin/skills/rite-plan/reference/anti-patterns.md +34 -0
  198. package/pack/generated/devin/skills/rite-plan/reference/dependency-graph.md +48 -0
  199. package/pack/generated/devin/skills/rite-plan/reference/replan-and-repair.md +105 -0
  200. package/pack/generated/devin/skills/rite-plan/reference/slicing.md +168 -0
  201. package/pack/generated/devin/skills/rite-plan/reference/task-breakdown.md +42 -0
  202. package/pack/generated/devin/skills/rite-polish/SKILL.md +105 -0
  203. package/pack/generated/devin/skills/rite-polish/reference/adr-promotion.md +11 -0
  204. package/pack/generated/devin/skills/rite-polish/reference/anti-ai-slop.md +187 -0
  205. package/pack/generated/devin/skills/rite-polish/reference/anti-patterns.md +30 -0
  206. package/pack/generated/devin/skills/rite-polish/reference/backend-polish.md +80 -0
  207. package/pack/generated/devin/skills/rite-polish/reference/browser-polish-evidence.md +33 -0
  208. package/pack/generated/devin/skills/rite-polish/reference/code.md +82 -0
  209. package/pack/generated/devin/skills/rite-polish/reference/design-memory.md +117 -0
  210. package/pack/generated/devin/skills/rite-polish/reference/design-system-discovery.md +8 -0
  211. package/pack/generated/devin/skills/rite-polish/reference/harden-checklist.md +109 -0
  212. package/pack/generated/devin/skills/rite-polish/reference/ledger.md +65 -0
  213. package/pack/generated/devin/skills/rite-polish/reference/ui.md +137 -0
  214. package/pack/generated/devin/skills/rite-pov/SKILL.md +57 -0
  215. package/pack/generated/devin/skills/rite-pr-feedback/SKILL.md +54 -0
  216. package/pack/generated/devin/skills/rite-pressure-test/SKILL.md +66 -0
  217. package/pack/generated/devin/skills/rite-prototype/SKILL.md +104 -0
  218. package/pack/generated/devin/skills/rite-prove/SKILL.md +122 -0
  219. package/pack/generated/devin/skills/rite-prove/reference/acceptance-proof.md +88 -0
  220. package/pack/generated/devin/skills/rite-prove/reference/anti-patterns.md +25 -0
  221. package/pack/generated/devin/skills/rite-prove/reference/browser-proof.md +51 -0
  222. package/pack/generated/devin/skills/rite-prove/reference/failure-triage.md +43 -0
  223. package/pack/generated/devin/skills/rite-prove/reference/proof-ladder.md +28 -0
  224. package/pack/generated/devin/skills/rite-prove/reference/test-command-discovery.md +30 -0
  225. package/pack/generated/devin/skills/rite-quick/SKILL.md +81 -0
  226. package/pack/generated/devin/skills/rite-resolve/SKILL.md +98 -0
  227. package/pack/generated/devin/skills/rite-resolve/reference/answer-protocol.md +118 -0
  228. package/pack/generated/devin/skills/rite-review/SKILL.md +171 -0
  229. package/pack/generated/devin/skills/rite-review/reference/anti-patterns.md +32 -0
  230. package/pack/generated/devin/skills/rite-review/reference/cognitive-load.md +90 -0
  231. package/pack/generated/devin/skills/rite-review/reference/feature-scoped-review.md +26 -0
  232. package/pack/generated/devin/skills/rite-review/reference/five-axis-review.md +66 -0
  233. package/pack/generated/devin/skills/rite-review/reference/nielsen-heuristics.md +126 -0
  234. package/pack/generated/devin/skills/rite-review/reference/performance-checklist.md +80 -0
  235. package/pack/generated/devin/skills/rite-review/reference/performance-review.md +14 -0
  236. package/pack/generated/devin/skills/rite-review/reference/security-review.md +42 -0
  237. package/pack/generated/devin/skills/rite-seal/SKILL.md +74 -0
  238. package/pack/generated/devin/skills/rite-seal/reference/anti-patterns.md +29 -0
  239. package/pack/generated/devin/skills/rite-seal/reference/final-evidence.md +41 -0
  240. package/pack/generated/devin/skills/rite-seal/reference/go-no-go.md +29 -0
  241. package/pack/generated/devin/skills/rite-seal/reference/output.md +5 -0
  242. package/pack/generated/devin/skills/rite-seal/reference/phase-contract.md +47 -0
  243. package/pack/generated/devin/skills/rite-seal/reference/risk-and-rollback.md +56 -0
  244. package/pack/generated/devin/skills/rite-seal/reference/seal-template.md +27 -0
  245. package/pack/generated/devin/skills/rite-ship/SKILL.md +87 -0
  246. package/pack/generated/devin/skills/rite-ship/reference/anti-patterns.md +28 -0
  247. package/pack/generated/devin/skills/rite-ship/reference/close-out.md +68 -0
  248. package/pack/generated/devin/skills/rite-ship/reference/git-ship.md +120 -0
  249. package/pack/generated/devin/skills/rite-ship/reference/rollout.md +62 -0
  250. package/pack/generated/devin/skills/rite-ship/reference/ship-template.md +39 -0
  251. package/pack/generated/devin/skills/rite-spec/SKILL.md +149 -0
  252. package/pack/generated/devin/skills/rite-spec/reference/acceptance-criteria.md +31 -0
  253. package/pack/generated/devin/skills/rite-spec/reference/ai-spec-template.md +40 -0
  254. package/pack/generated/devin/skills/rite-spec/reference/anti-patterns.md +27 -0
  255. package/pack/generated/devin/skills/rite-spec/reference/interview-patterns.md +56 -0
  256. package/pack/generated/devin/skills/rite-spec/reference/investigation.md +83 -0
  257. package/pack/generated/devin/skills/rite-spec/reference/question-protocol.md +36 -0
  258. package/pack/generated/devin/skills/rite-spec/reference/references-intake.md +62 -0
  259. package/pack/generated/devin/skills/rite-spec/reference/spec-checklists.md +89 -0
  260. package/pack/generated/devin/skills/rite-spec/reference/spec-template.md +154 -0
  261. package/pack/generated/devin/skills/rite-spec/reference/state-workspace.md +227 -0
  262. package/pack/generated/devin/skills/rite-status/SKILL.md +57 -0
  263. package/pack/generated/devin/skills/rite-temper/SKILL.md +129 -0
  264. package/pack/generated/devin/skills/rite-temper/reference/anti-patterns.md +30 -0
  265. package/pack/generated/devin/skills/rite-temper/reference/review-dimensions.md +66 -0
  266. package/pack/generated/devin/skills/rite-temper/reference/scope-modes.md +53 -0
  267. package/pack/generated/devin/skills/rite-temper/reference/significance.md +46 -0
  268. package/pack/generated/devin/skills/rite-temper/reference/strategy-template.md +90 -0
  269. package/pack/generated/devin/skills/rite-upgrade/SKILL.md +121 -0
  270. package/pack/generated/devin/skills/rite-vet/SKILL.md +192 -0
  271. package/pack/generated/devin/skills/rite-vet/reference/anti-patterns.md +43 -0
  272. package/pack/generated/devin/skills/rite-vet/reference/artifacts.md +202 -0
  273. package/pack/generated/devin/skills/rite-vet/reference/cross-model.md +19 -0
  274. package/pack/generated/devin/skills/rite-vet/reference/depth.md +59 -0
  275. package/pack/generated/devin/skills/rite-vet/reference/eng-lenses.md +48 -0
  276. package/pack/generated/devin/skills/rite-vet/reference/review-axes.md +201 -0
  277. package/pack/generated/devin/skills/rite-watch-pr/SKILL.md +84 -0
  278. package/pack/generated/devin/skills/rite-zoom-out/SKILL.md +69 -0
  279. package/pack/generated/omp/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
  280. package/pack/generated/omp/skills/rite-autocomplete/SKILL.md +10 -5
  281. package/pack/generated/omp/skills/rite-autocomplete/reference/loop.md +12 -7
  282. package/pack/generated/omp/skills/rite-build/SKILL.md +3 -1
  283. package/pack/generated/omp/skills/rite-build/reference/afk-discipline.md +4 -3
  284. package/pack/generated/omp/skills/rite-build/reference/parallel-batch.md +3 -1
  285. package/pack/generated/omp/skills/rite-define/reference/plan-template.md +1 -1
  286. package/pack/generated/pi/skills/devrites-lib/reference/standards/afk-hitl.md +15 -8
  287. package/pack/generated/pi/skills/rite-autocomplete/SKILL.md +10 -5
  288. package/pack/generated/pi/skills/rite-autocomplete/reference/loop.md +12 -7
  289. package/pack/generated/pi/skills/rite-build/SKILL.md +3 -1
  290. package/pack/generated/pi/skills/rite-build/reference/afk-discipline.md +4 -3
  291. package/pack/generated/pi/skills/rite-build/reference/parallel-batch.md +3 -1
  292. package/pack/generated/pi/skills/rite-define/reference/plan-template.md +1 -1
  293. package/package.json +4 -2
  294. package/scripts/build-host-artifacts.sh +48 -5
  295. package/scripts/devin-generate.sh +222 -0
  296. package/update.sh +2 -1
@@ -9,6 +9,7 @@ Opt-in only. Default `/rite-build` stays [`one-slice-cycle.md`](one-slice-cycle.
9
9
  | omitted / `--parallel 1` | Serial one-slice |
10
10
  | `--parallel N` (**2≤N≤10**) | N is a **cap**, not a quota: run the largest eligible set ≤ N |
11
11
  | non-integer / `N≤0` / `N>10` | Hard refuse (no silent clamp) |
12
+ | Autocomplete `--parallel N` | N is the cap for this run; leftover sentinel `max_parallel` is ignored, then `/rite-autocomplete` writes or replaces only `max_parallel: N` |
12
13
  | Autocomplete, no flag | Same path, cap from sentinel `max_parallel` else 10; serial only when ineligible |
13
14
 
14
15
  AFK caps `N`. Charge green siblings once after integrate; abort /
@@ -21,7 +22,8 @@ Size each batch by what is runnable **now**, never by the requested number:
21
22
 
22
23
  ```text
23
24
  N_eff = min(
24
- cap -- --parallel N | sentinel max_parallel | 10 (autocomplete default)
25
+ cap -- this invocation's --parallel N (wins over leftover sentinel max_parallel)
26
+ | else sentinel max_parallel | else 10 (autocomplete default)
25
27
  eligible set -- dependency-satisfied pending slices, pairwise path-disjoint
26
28
  AFK headroom -- remaining max_slices, max_agents, max_minutes, review queue
27
29
  host capacity -- concurrent worktree writers + the runtime isolation table
@@ -14,7 +14,7 @@ Spec: ./spec.md Decision coverage: ./decision-coverage.md Date: <date>
14
14
  - Language/runtime/version: <...>
15
15
  - Frameworks/libraries: <...>
16
16
  - Storage/data: <...>
17
- - Test commands: <discovered runner commands; discovery contract: rite-prove/reference/test-command-discovery.md>
17
+ - Test commands: <discovered runner commands; discovery contract: .omp/skills/rite-prove/reference/test-command-discovery.md>
18
18
  - Target/platform/constraints: <...>
19
19
  - Approach-affecting product/constraint unknowns route to `/rite-clarify`;
20
20
  `[NEEDS CLARIFICATION]` blocks approval.
@@ -56,14 +56,14 @@ max_minutes: 120 # wall-clock minutes in one host activation
56
56
  max_review_queue: 8 # unresolved review/gate items admitted before fan-out stops
57
57
  # max_tokens: 200000 # optional stricter host-observed token cap
58
58
  # max_cost_usd: 10 # optional stricter host-observed cost cap
59
- notify: "ntfy.sh/my-topic" # shell command; examples: rite-build/reference/afk-discipline.md
59
+ notify: "ntfy.sh/my-topic" # shell command; examples: .pi/skills/rite-build/reference/afk-discipline.md
60
60
  allow_gates: [advisory, validating] # gate severities AFK auto-handles (auto-picks the recommended option)
61
61
  continue_sequence: true # after Seal GO, open the next recorded continuation
62
62
  max_workspaces: 5 # workspaces one armed sequence may open
63
- max_parallel: 10 # cap on eligible path-disjoint Build batches (1 = serial)
63
+ max_parallel: 10 # unattended default cap; `--parallel N` on this invocation wins and may rewrite only this field
64
64
  ```
65
65
 
66
- The file is **read-only config**: never rewritten in place. `max_slices` is the initial
66
+ The file is **read-only config**: never rewritten in place, except `/rite-autocomplete --parallel N` writes or replaces only `max_parallel: N`. `max_slices` is the initial
67
67
  budget; the mutable remaining count is the `state.md` cursor
68
68
  `afk_slices_remaining` (`AFK slices remaining: <n>` in the released bullet
69
69
  form), owned by the controlling root. Recognize either spelling and preserve
@@ -119,11 +119,18 @@ candidate manifest to cover the whole recorded chain — run
119
119
  - Every human-owned, safety, access, exhaustion, and `NO-GO` condition still stops the
120
120
  run exactly as without this field.
121
121
 
122
- `max_parallel` caps a Build batch for unattended runs; `1` forces the serial cycle.
123
- Unattended runs take the largest eligible set cap and recompute after every completed
124
- round (serial slice or parallel integrate)
125
- ([parallel-batch.md § Dynamic selection and re-batching](../../../rite-build/reference/parallel-batch.md#dynamic-selection-and-re-batching));
126
- an explicit `/rite-build --parallel N` cap wins for that invocation.
122
+ `max_parallel` is the unattended default batch cap only when this invocation does
123
+ not contain `--parallel N`; `1` forces the serial cycle only in that default
124
+ case. An exact `--parallel N` on `/rite-autocomplete` or `/rite-build` is the
125
+ batch cap for this run: do not consult leftover sentinel `max_parallel`, and do
126
+ not treat `max_parallel: 1` as serial. `/rite-autocomplete --parallel N` writes
127
+ or replaces only that field so later ticks keep the cap; `/rite-build --parallel N`
128
+ wins for that invocation without rewriting the sentinel. Never write `max_slices`
129
+ from `--max-slices`. **Failing case:** `/rite-autocomplete --parallel 5` honors a
130
+ leftover `max_parallel: 1` and stays serial.
131
+ Unattended runs take the largest eligible set ≤ that cap and recompute after
132
+ every completed round (serial slice or parallel integrate)
133
+ ([parallel-batch.md § Dynamic selection and re-batching](../../../rite-build/reference/parallel-batch.md#dynamic-selection-and-re-batching)).
127
134
 
128
135
  ## Unattended resource envelope
129
136
 
@@ -87,18 +87,23 @@ executable controller/harness/bundle bytes or a missing writer, read
87
87
  3. **Arm AFK once.** Apply the loop's
88
88
  [one-write AFK contract](reference/loop.md#arm-afk-once): preserve valid
89
89
  existing bytes or create the sentinel once (`allow_gates: [advisory, validating]`); never
90
- rewrite it after Vet. Preserve an existing sentinel byte-for-byte.
90
+ rewrite it after Vet except to write or replace only `max_parallel: N` when
91
+ this invocation contains `--parallel N`. Preserve an existing sentinel
92
+ byte-for-byte otherwise. **Failing case:** leftover `max_parallel: 1` keeps
93
+ the run serial after `--parallel 5`.
91
94
  **Completion:** a valid read-only AFK sentinel exists.
92
95
  4. **Drive phases.** Follow [the loop](reference/loop.md): `/rite-spec` →
93
96
  `/rite-clarify` → `/rite-temper` → `/rite-define` → `/rite-vet` →
94
97
  `/rite-build` batch loop → `/rite-prove` → `/rite-polish` →
95
98
  `/rite-review` → `/rite-seal`. Read and execute each skill; durable files, not
96
99
  chat, carry state. Apply the mutable post-vet budget before first Build.
97
- Build runs the largest eligible path-disjoint batch (cap: `--parallel N`, else
98
- sentinel `max_parallel`, else 10) and recomputes after every completed round until no
99
- pending slice remains; a one-slice round is serial for that round only, then
100
+ Build runs the largest eligible path-disjoint batch (cap: this invocation's
101
+ `--parallel N`, else sentinel `max_parallel`, else 10) and recomputes after
102
+ every completed round until no pending slice remains; a one-slice round is serial for that round only, then
100
103
  selection runs again (host isolation still forces serial when concurrent writers
101
- cannot be separated).
104
+ cannot be separated). When `--parallel N`
105
+ is present, pass it into `/rite-build` and do not consult leftover sentinel
106
+ `max_parallel`.
102
107
  **Completion:** loop reaches Seal GO or persists a valid stop before any later phase.
103
108
  5. **Apply stops.** At every gate use
104
109
  [stop-conditions.md](reference/stop-conditions.md). A `blocked` label alone is not a stop condition:
@@ -17,18 +17,21 @@ allow_gates: [advisory, validating]
17
17
  # max_slices / max_agents / max_minutes / max_review_queue omitted: unlimited
18
18
  # continue_sequence: true # opt-in: chain recorded continuations after Seal GO
19
19
  # max_workspaces: 5 # sequence budget when chaining
20
- # max_parallel: 10 # Build batch cap; 1 = serial (default: eligible, cap 10)
20
+ # max_parallel: 10 # default cap when this invocation omits `--parallel N`; `--parallel N` wins and rewrites only this field
21
21
  # max_tokens: <N>
22
22
  # max_cost_usd: <amount>
23
23
  # notify: "<cmd>"
24
24
  ```
25
25
 
26
- Read an existing sentinel first. Preserve it byte-for-byte when valid; stop if
26
+ Read an existing sentinel first. Preserve it byte-for-byte when valid, except
27
+ when this invocation contains `--parallel N`: then write or replace only
28
+ `max_parallel: N` and leave every other key unchanged. Stop if the sentinel is
27
29
  malformed. Do not stop because it names `max_slices` / `max_agents` /
28
30
  `max_minutes` / `max_review_queue` or only `[advisory]`. If absent, write it
29
- once after clarity. Never write `max_slices` from `--max-slices`.
30
- It is read-only: never rewrite it after Vet or reset it on resume. Leftover
31
- `expires_at` is ignored and never rewritten.
31
+ once after clarity, and include `max_parallel: N` when that flag is present.
32
+ Never write `max_slices` from `--max-slices`. It is otherwise read-only: never rewrite it after Vet or reset it on resume. Leftover `expires_at` is ignored
33
+ and never rewritten. **Failing case:** leftover `max_parallel: 1` keeps the run
34
+ serial after `--parallel 5`.
32
35
 
33
36
  ### Derive the mutable post-vet budget
34
37
 
@@ -44,7 +47,9 @@ readiness check first; reject overlap. Do not stop on `max_agents`,
44
47
  gets fresh activation-local counters but retains durable slice/recovery state.
45
48
 
46
49
  When driving `/rite-build`, ignore afk-discipline remaining-0, `--max-slices`,
47
- and parallel AFK headroom. Close validating questions and blocking questions
50
+ and parallel AFK headroom as stop conditions. Pass this invocation's
51
+ `--parallel N` into `/rite-build` when present; leftover sentinel
52
+ `max_parallel` is then not the cap. Close validating questions and blocking questions
48
53
  that already name a ranked recommended option (recommended pick via
49
54
  `devrites-engine state resolve`) instead of queuing them or handing
50
55
  `/rite-resolve` to the user. Escalating, irreversible-risk, access, and
@@ -61,7 +66,7 @@ Workspace files carry state; chat does not. Read and execute each phase skill:
61
66
  | 3 | `/rite-temper` | harden, reduce, or expand; irreversible risk still pauses |
62
67
  | 4 | `/rite-define` | approved plan/tasks/traceability |
63
68
  | 5 | `/rite-vet` | every plan; derive mutable budget after READY |
64
- | 6 | `/rite-build` batch loop | largest eligible path-disjoint set (cap 10; one-slice round when <2 eligible); recompute after each round; charge once per green built slice |
69
+ | 6 | `/rite-build` batch loop | largest eligible path-disjoint set (cap: this invocation's `--parallel N`, else sentinel `max_parallel`, else 10; one-slice round when <2 eligible); recompute after each round; charge once per green built slice |
65
70
  | 7 | `/rite-prove` | all slices built; approved proof; recovery on red |
66
71
  | 8 | `/rite-polish` | re-prove after code edits |
67
72
  | 9 | `/rite-review` | in-scope correction then fresh proof |
@@ -64,7 +64,9 @@ filled, and recomputes after every completed round (serial slice or parallel
64
64
  integrate) until no pending slice remains
65
65
  ([`parallel-batch.md` § Dynamic selection](reference/parallel-batch.md#dynamic-selection-and-re-batching)).
66
66
  Unattended runs (`/rite-autocomplete`, `.devrites/AFK` `max_parallel`) repeat batches
67
- inside the same run; HITL stops after each batch. Non-integer/`N≤0`/`N>10` hard refuse.
67
+ inside the same run; HITL stops after each batch. This invocation's `--parallel N`
68
+ is the cap: leftover sentinel `max_parallel` is not consulted. Autocomplete with
69
+ that flag also writes or replaces only `max_parallel: N`. Non-integer/`N≤0`/`N>10` hard refuse.
68
70
  All-green (independent review + proof) then integrate as one local `WIP(<slug>):`
69
71
  commit per sibling onto the current control branch (never pushed). Do not
70
72
  integrate a sibling because the wright returned. A red/gap sibling gets a bounded repair
@@ -16,9 +16,10 @@ control; irreversible work (destructive/auth/public API) always pauses.
16
16
  The controlling root owns the cap:
17
17
 
18
18
  1. **Before every dispatch**, re-read `.devrites/AFK`, `state.md`, and the
19
- selected slice. When `--parallel N` or sentinel `max_parallel` is greater than
20
- 1, recompute `N_eff` via `parallel select` before the next dispatch — a prior
21
- one-slice round does not keep the run serial. A configured `max_slices` and any existing
19
+ selected slice. This invocation's `--parallel N` is the cap when present;
20
+ leftover sentinel `max_parallel` is not consulted in that case. When that
21
+ flag or sentinel `max_parallel` is greater than 1, recompute `N_eff` via
22
+ `parallel select` before the next dispatch — a prior one-slice round does not keep the run serial. A configured `max_slices` and any existing
22
23
  `afk_slices_remaining` value, including its released bullet form, must each
23
24
  be a decimal nonnegative integer. A missing
24
25
  `state.md` or malformed configured value fails closed; an omitted cap is the
@@ -9,6 +9,7 @@ Opt-in only. Default `/rite-build` stays [`one-slice-cycle.md`](one-slice-cycle.
9
9
  | omitted / `--parallel 1` | Serial one-slice |
10
10
  | `--parallel N` (**2≤N≤10**) | N is a **cap**, not a quota: run the largest eligible set ≤ N |
11
11
  | non-integer / `N≤0` / `N>10` | Hard refuse (no silent clamp) |
12
+ | Autocomplete `--parallel N` | N is the cap for this run; leftover sentinel `max_parallel` is ignored, then `/rite-autocomplete` writes or replaces only `max_parallel: N` |
12
13
  | Autocomplete, no flag | Same path, cap from sentinel `max_parallel` else 10; serial only when ineligible |
13
14
 
14
15
  AFK caps `N`. Charge green siblings once after integrate; abort /
@@ -21,7 +22,8 @@ Size each batch by what is runnable **now**, never by the requested number:
21
22
 
22
23
  ```text
23
24
  N_eff = min(
24
- cap -- --parallel N | sentinel max_parallel | 10 (autocomplete default)
25
+ cap -- this invocation's --parallel N (wins over leftover sentinel max_parallel)
26
+ | else sentinel max_parallel | else 10 (autocomplete default)
25
27
  eligible set -- dependency-satisfied pending slices, pairwise path-disjoint
26
28
  AFK headroom -- remaining max_slices, max_agents, max_minutes, review queue
27
29
  host capacity -- concurrent worktree writers + the runtime isolation table
@@ -14,7 +14,7 @@ Spec: ./spec.md Decision coverage: ./decision-coverage.md Date: <date>
14
14
  - Language/runtime/version: <...>
15
15
  - Frameworks/libraries: <...>
16
16
  - Storage/data: <...>
17
- - Test commands: <discovered runner commands; discovery contract: rite-prove/reference/test-command-discovery.md>
17
+ - Test commands: <discovered runner commands; discovery contract: .pi/skills/rite-prove/reference/test-command-discovery.md>
18
18
  - Target/platform/constraints: <...>
19
19
  - Approach-affecting product/constraint unknowns route to `/rite-clarify`;
20
20
  `[NEEDS CLARIFICATION]` blocks approval.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "devrites",
3
- "version": "5.10.1",
4
- "description": "DevRites: a disciplined senior-engineer workflow pack for Claude Code, Codex, omp, and pi",
3
+ "version": "5.11.0",
4
+ "description": "DevRites: a disciplined senior-engineer workflow pack for Claude Code, Codex, omp, pi, and Devin CLI",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "homepage": "https://github.com/ViktorsBaikers/DevRites#readme",
7
7
  "repository": {
@@ -14,6 +14,7 @@
14
14
  "keywords": [
15
15
  "claude-code",
16
16
  "codex",
17
+ "devin-cli",
17
18
  "skills",
18
19
  "agent-skills",
19
20
  "workflow",
@@ -37,6 +38,7 @@
37
38
  "scripts/codex-generate.sh",
38
39
  "scripts/omp-generate.sh",
39
40
  "scripts/pi-generate.sh",
41
+ "scripts/devin-generate.sh",
40
42
  "scripts/install-lib.sh",
41
43
  "install.sh",
42
44
  "uninstall.sh",
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bash
2
- # build-host-artifacts.sh: render host-native Claude, Codex, omp, and pi
3
- # artifacts from the canonical pack.
2
+ # build-host-artifacts.sh: render host-native Claude, Codex, omp, pi, and
3
+ # Devin artifacts from the canonical pack.
4
4
  #
5
5
  # Default output is pack/generated/ so npm pack can ship prebuilt surfaces.
6
6
  # Tests may set DEVRITES_HOST_ARTIFACT_DIR to a temporary directory.
@@ -33,6 +33,8 @@ trap cleanup EXIT
33
33
  . "$ROOT/scripts/omp-generate.sh"
34
34
  # shellcheck source=pi-generate.sh
35
35
  . "$ROOT/scripts/pi-generate.sh"
36
+ # shellcheck source=devin-generate.sh
37
+ . "$ROOT/scripts/devin-generate.sh"
36
38
 
37
39
  copy_tree() {
38
40
  _src="$1"
@@ -116,8 +118,30 @@ render_pi_skill_tree() {
116
118
  done < <(find "$_sd" -type f)
117
119
  }
118
120
 
121
+ render_devin_skill_tree() {
122
+ _sd="$1"
123
+ _dest="$2"
124
+ mkdir -p "$_dest"
125
+ while IFS= read -r f; do
126
+ _r="${f#$_sd/}"
127
+ _out="$_dest/$_r"
128
+ mkdir -p "$(dirname "$_out")"
129
+ case "$_r" in
130
+ SKILL.md)
131
+ gen_devin_skill_file "$f" "$_out"
132
+ ;;
133
+ *.md)
134
+ gen_devin_markdown_file "$f" "$_out"
135
+ ;;
136
+ *)
137
+ cp "$f" "$_out"
138
+ ;;
139
+ esac
140
+ done < <(find "$_sd" -type f)
141
+ }
142
+
119
143
  rm -rf "$OUT_ROOT"
120
- mkdir -p "$OUT_ROOT/claude" "$OUT_ROOT/codex" "$OUT_ROOT/omp" "$OUT_ROOT/pi"
144
+ mkdir -p "$OUT_ROOT/claude" "$OUT_ROOT/codex" "$OUT_ROOT/omp" "$OUT_ROOT/pi" "$OUT_ROOT/devin"
121
145
 
122
146
  # Claude artifacts are host-native copies of the canonical pack.
123
147
  copy_tree "$PACK_SRC/skills" "$OUT_ROOT/claude/skills"
@@ -181,6 +205,23 @@ done < <(find "$PACK_SRC/agents" -maxdepth 1 -type f -name '*.md')
181
205
 
182
206
  gen_pi_agents_bridge "$OUT_ROOT/pi/AGENTS.md"
183
207
 
208
+ # Devin artifacts are generated host-native mirrors: skills under
209
+ # .devin/skills and custom subagent profiles under .devin/agents, plus an
210
+ # AGENTS.md bridge block (Devin reads project AGENTS.md as always-on rules).
211
+ mkdir -p "$OUT_ROOT/devin/skills" "$OUT_ROOT/devin/agents"
212
+ while IFS= read -r d; do
213
+ name="$(basename "$d")"
214
+ [ "$name" = ".impeccable" ] && continue
215
+ render_devin_skill_tree "$d" "$OUT_ROOT/devin/skills/$name"
216
+ done < <(find "$PACK_SRC/skills" -mindepth 1 -maxdepth 1 -type d)
217
+
218
+ while IFS= read -r f; do
219
+ name="$(basename "$f" .md)"
220
+ gen_devin_agent "$f" "$OUT_ROOT/devin/agents/$name.md"
221
+ done < <(find "$PACK_SRC/agents" -maxdepth 1 -type f -name '*.md')
222
+
223
+ gen_devin_agents_bridge "$OUT_ROOT/devin/AGENTS.md"
224
+
184
225
  cat >"$OUT_ROOT/README.md" <<'EOF'
185
226
  # Generated DevRites Host Artifacts
186
227
 
@@ -194,10 +235,12 @@ This directory is generated by `scripts/build-host-artifacts.sh`.
194
235
  - `pi/` contains pi-native skill mirrors, pi-subagents Markdown agents,
195
236
  prompt templates preserving the `/rite*` commands, and an `AGENTS.md`
196
237
  bridge block.
238
+ - `devin/` contains Devin CLI skill mirrors, custom subagent profiles with
239
+ `allowed-tools` allowlists, and an `AGENTS.md` bridge block.
197
240
 
198
241
  Do not edit these files by hand. Edit `pack/.claude/`,
199
- `scripts/codex-generate.sh`, `scripts/omp-generate.sh`, or
200
- `scripts/pi-generate.sh`, then rebuild.
242
+ `scripts/codex-generate.sh`, `scripts/omp-generate.sh`,
243
+ `scripts/pi-generate.sh`, or `scripts/devin-generate.sh`, then rebuild.
201
244
  EOF
202
245
 
203
246
  echo "build-host-artifacts: wrote $OUT_ROOT"
@@ -0,0 +1,222 @@
1
+ #!/usr/bin/env bash
2
+ # devin-generate.sh: shared Claude-to-Devin surface generators.
3
+ #
4
+ # This file is a shell library, not a standalone installer. Callers provide
5
+ # TMP_GEN_DIR and then invoke the gen_* helpers below.
6
+
7
+ # Rewrite canonical Claude (and leftover Codex/omp/pi) paths to installed
8
+ # Devin paths. Slash /rite invocations stay slash-form: Devin discovers
9
+ # .devin/skills/<name>/SKILL.md as /name. Dispatch wording uses the
10
+ # `run_subagent` tool with `profile`, matching Devin CLI custom subagents.
11
+ gen_devin_markdown_file() {
12
+ local _src="$1" _out="$2"
13
+ mkdir -p "$(dirname "$_out")"
14
+ sed -E \
15
+ -e 's#Try post-install path first, fall back to pre-install:#Resolve the installed skill path:#g' \
16
+ -e '/^\[ -f "\$F" \] \|\| F=[^ ].*SKILL\.md$/d' \
17
+ -e 's#(pack/)?\.claude/agents/devrites-\{security-auditor,performance-reviewer,simplifier-reviewer\}\.md#.devin/agents/devrites-security-auditor.md`, `.devin/agents/devrites-performance-reviewer.md`, or `.devin/agents/devrites-simplifier-reviewer.md#g' \
18
+ -e 's#(\.\./)+agents/devrites-\{security-auditor,performance-reviewer,simplifier-reviewer\}\.md#.devin/agents/devrites-security-auditor.md`, `.devin/agents/devrites-performance-reviewer.md`, or `.devin/agents/devrites-simplifier-reviewer.md#g' \
19
+ -e 's#pack/\.claude/skills/devrites-lib/scripts/#.devin/skills/devrites-lib/scripts/#g' \
20
+ -e 's#pack/\.claude/skills/#.devin/skills/#g' \
21
+ -e 's#pack/\.claude/agents/([A-Za-z0-9_-]+)\.md#.devin/agents/\1.md#g' \
22
+ -e 's#pack/\.claude/agents/#.devin/agents/#g' \
23
+ -e 's#\.claude/skills/devrites-lib/scripts/#.devin/skills/devrites-lib/scripts/#g' \
24
+ -e 's#\.claude/skills/#.devin/skills/#g' \
25
+ -e 's#\.claude/agents/([A-Za-z0-9_-]+)\.md#.devin/agents/\1.md#g' \
26
+ -e 's#\.claude/agents/#.devin/agents/#g' \
27
+ -e 's#(\.\./)+agents/([A-Za-z0-9_-]+)\.md#.devin/agents/\2.md#g' \
28
+ -e 's#\.agents/skills/devrites-lib/scripts/#.devin/skills/devrites-lib/scripts/#g' \
29
+ -e 's#\.agents/skills/#.devin/skills/#g' \
30
+ -e 's#\.codex/skills/devrites-lib/scripts/#.devin/skills/devrites-lib/scripts/#g' \
31
+ -e 's#\.codex/skills/#.devin/skills/#g' \
32
+ -e 's#\.codex/agents/([A-Za-z0-9_-]+)\.toml#.devin/agents/\1.md#g' \
33
+ -e 's#\.codex/agents/([A-Za-z0-9_-]+)\.md#.devin/agents/\1.md#g' \
34
+ -e 's#\.codex/agents/#.devin/agents/#g' \
35
+ -e 's#\.omp/skills/#.devin/skills/#g' \
36
+ -e 's#\.omp/agents/([A-Za-z0-9_-]+)\.md#.devin/agents/\1.md#g' \
37
+ -e 's#\.omp/agents/#.devin/agents/#g' \
38
+ -e 's#\.pi/skills/#.devin/skills/#g' \
39
+ -e 's#\.pi/agents/([A-Za-z0-9_-]+)\.md#.devin/agents/\1.md#g' \
40
+ -e 's#\.pi/agents/#.devin/agents/#g' \
41
+ -e '/^\(use the `[^`]*` mirror on Codex\)\.$/d' \
42
+ -e '/^\(`[^`]+` mirror on Codex\)\.$/d' \
43
+ -e 's# \(use the `[^`]*` mirror on Codex\)##g' \
44
+ -e 's# \(`[^`]+` mirror on Codex\)##g' \
45
+ -e 's#\(`[^`]+` mirror on Codex\); ##g' \
46
+ -e 's#\(`[^`]+` mirror on Codex\)##g' \
47
+ -e 's#^seeded verdicts#Seeded verdicts#' \
48
+ -e '/Rules in scope/{N;s#;\n[[:space:]]*`[^`]+` mirror on Codex##;}' \
49
+ -e '/On Codex, use the/{N;s# On Codex, use the mirrors under\n`[^`]+`\.##;s# On Codex, use the\nmirrors under `[^`]+`\.##;s# On Codex, use the\nmirror under `[^`]+`\.##;}' \
50
+ -e 's#Host mapping: Claude Code uses `Agent` \(`Task` is its legacy alias\); Codex uses#Host mapping: Devin fresh-context dispatch uses `run_subagent` with `profile`; hosts use#g' \
51
+ -e 's#`Agent` call#`run_subagent` call#g' \
52
+ -e 's#`spawn_agent` call#`run_subagent` call#g' \
53
+ -e 's#Claude: N concurrent Task wrights#Devin: N concurrent `run_subagent` wrights#g' \
54
+ -e 's#Task breakdown#Work-item breakdown#g' \
55
+ -e 's#dispatch `devrites-source-driven`#invoke `devrites-source-driven`#g' \
56
+ -e 's#Dispatch `devrites-source-driven`#Invoke `devrites-source-driven`#g' \
57
+ -e 's#pass-through dispatch to the matching `rite-<verb>` skill#pass-through invocation of the matching `rite-<verb>` skill#g' \
58
+ -e 's#verb dispatches to the matching `rite-<verb>` skill#verb invokes the matching `rite-<verb>` skill#g' \
59
+ -e 's#the dispatch map only#the invocation map only#g' \
60
+ -e 's#→ dispatch per the table above#→ invoke the matching skill per the table above#g' \
61
+ "$_src" >"$_out"
62
+ }
63
+
64
+ # Translate the Claude skill invocation flags into Devin's `triggers` list:
65
+ # user-invocable maps to the `user` trigger and model invocation maps to the
66
+ # `model` trigger. Both flags restrictive yields `triggers: []` (never
67
+ # auto- or slash-invoked); neither restrictive omits the field so Devin's
68
+ # default (user + model) applies.
69
+ gen_devin_skill_file() {
70
+ local _src="$1" _out="$2"
71
+ local _ui _dmi _tmp="$TMP_GEN_DIR/devin-skill-$(basename "$(dirname "$_src")")-$(basename "$_src")"
72
+ _ui="$(awk 'NR==1&&$0=="---"{fm=1;next} fm&&$0=="---"{exit} fm&&/^user-invocable:[[:space:]]*/{sub(/^user-invocable:[[:space:]]*/,""); gsub(/[[:space:]]/,""); print; exit}' "$_src")"
73
+ _dmi="$(awk 'NR==1&&$0=="---"{fm=1;next} fm&&$0=="---"{exit} fm&&/^disable-model-invocation:[[:space:]]*/{sub(/^disable-model-invocation:[[:space:]]*/,""); gsub(/[[:space:]]/,""); print; exit}' "$_src")"
74
+ gen_devin_markdown_file "$_src" "$_tmp"
75
+ mkdir -p "$(dirname "$_out")"
76
+ awk -v ui="$_ui" -v dmi="$_dmi" '
77
+ NR==1 && $0=="---" { fm=1; print; next }
78
+ fm==1 && $0=="---" {
79
+ u = (ui != "false")
80
+ m = (dmi != "true")
81
+ if (!u && !m) {
82
+ print "triggers: []"
83
+ } else if (!u || !m) {
84
+ print "triggers:"
85
+ if (u) print " - user"
86
+ if (m) print " - model"
87
+ }
88
+ fm=0; print; next
89
+ }
90
+ fm==1 && (/^user-invocable:[[:space:]]/ || /^disable-model-invocation:[[:space:]]/) { next }
91
+ { print }
92
+ ' "$_tmp" >"$_out"
93
+ }
94
+
95
+ devin_yaml_escape() {
96
+ printf '%s' "$1" | sed 's/\\/\\\\/g; s/"/\\"/g'
97
+ }
98
+
99
+ # Map Claude Code tool names onto Devin tool names. Devin's allowed-tools
100
+ # field takes its builtin names: read, edit, write, exec, grep, glob,
101
+ # webfetch, web_search, and skill. Unmapped Claude tools are dropped.
102
+ _devin_map_tools() {
103
+ local _raw="$1" _name="$2"
104
+ local _tok _mapped _out="" _sep=""
105
+ if [ -z "$_raw" ]; then
106
+ if [ "$_name" = "devrites-slice-wright" ]; then
107
+ printf '%s' "read, edit, write, exec, grep, glob, skill"
108
+ else
109
+ printf '%s' "read, grep, glob, exec"
110
+ fi
111
+ return
112
+ fi
113
+ while IFS= read -r _tok; do
114
+ _tok="${_tok#"${_tok%%[![:space:]]*}"}"
115
+ _tok="${_tok%"${_tok##*[![:space:]]}"}"
116
+ [ -z "$_tok" ] && continue
117
+ case "$_tok" in
118
+ Read | read) _mapped="read" ;;
119
+ Edit | edit) _mapped="edit" ;;
120
+ Write | write) _mapped="write" ;;
121
+ Bash | bash | exec) _mapped="exec" ;;
122
+ Glob | glob) _mapped="glob" ;;
123
+ Grep | grep) _mapped="grep" ;;
124
+ Skill | skill) _mapped="skill" ;;
125
+ WebFetch | webfetch) _mapped="webfetch" ;;
126
+ WebSearch | web_search | websearch) _mapped="web_search" ;;
127
+ *) continue ;;
128
+ esac
129
+ _out="${_out}${_sep}${_mapped}"
130
+ _sep=", "
131
+ done < <(printf '%s\n' "$_raw" | tr ',' '\n')
132
+ if [ -z "$_out" ]; then
133
+ if [ "$_name" = "devrites-slice-wright" ]; then
134
+ _out="read, edit, write, exec, grep, glob, skill"
135
+ else
136
+ _out="read, grep, glob, exec"
137
+ fi
138
+ fi
139
+ printf '%s' "$_out"
140
+ }
141
+
142
+ _devin_csv_has() {
143
+ case ", ${1}, " in
144
+ *", ${2}, "*) return 0 ;;
145
+ *) return 1 ;;
146
+ esac
147
+ }
148
+
149
+ # Generate a Devin custom subagent profile from a Claude Code markdown agent.
150
+ # Devin loads project profiles from .devin/agents/*.md (YAML frontmatter +
151
+ # body). The allowed-tools allowlist carries the Claude permission boundary:
152
+ # only devrites-slice-wright gets write/edit; reviewers stay read-only.
153
+ # Claude's permissionMode has no Devin equivalent and is dropped. A canonical
154
+ # `skills:` block grants the agent the `skill` tool so it can invoke that
155
+ # skill inline (Devin has no agent-level skills preload field).
156
+ gen_devin_agent() {
157
+ local _src="$1" _out="$2"
158
+ local _name _desc _tools_raw _tools _skills _desc_tmp _desc_devin _body_tmp _body_devin _tok
159
+ _name="$(awk 'NR==1 && $0=="---"{fm=1; next} fm && $0=="---"{exit} fm && /^name:[[:space:]]*/{sub(/^name:[[:space:]]*/, ""); print; exit}' "$_src")"
160
+ _desc="$(awk 'NR==1 && $0=="---"{fm=1; next} fm && $0=="---"{exit} fm && /^description:[[:space:]]*/{sub(/^description:[[:space:]]*/, ""); print; exit}' "$_src")"
161
+ _tools_raw="$(awk 'NR==1 && $0=="---"{fm=1; next} fm && $0=="---"{exit} fm && /^tools:[[:space:]]*/{sub(/^tools:[[:space:]]*/, ""); print; exit}' "$_src")"
162
+ _skills="$(awk 'NR==1 && $0=="---"{fm=1; next} fm && $0=="---"{exit} fm && /^skills:[[:space:]]*$/{list=1; next} list && /^[[:space:]]*-[[:space:]]*/{found=1; exit} list{exit} END{if(found) print "yes"}' "$_src")"
163
+ [ -n "$_name" ] || _name="$(basename "$_src" .md)"
164
+ [ -n "$_desc" ] || _desc="DevRites custom agent."
165
+ _tools="$(_devin_map_tools "$_tools_raw" "$_name")"
166
+ if [ -n "$_skills" ] && ! _devin_csv_has "$_tools" "skill"; then
167
+ _tools="$_tools, skill"
168
+ fi
169
+ _desc_tmp="$TMP_GEN_DIR/devin-agent-desc-$(basename "$_src").txt"
170
+ _desc_devin="$TMP_GEN_DIR/devin-agent-desc-$(basename "$_src").devin.txt"
171
+ printf '%s' "$_desc" >"$_desc_tmp"
172
+ gen_devin_markdown_file "$_desc_tmp" "$_desc_devin"
173
+ _desc="$(cat "$_desc_devin")"
174
+ [ -n "$_desc" ] || _desc="DevRites custom agent."
175
+ mkdir -p "$(dirname "$_out")"
176
+ {
177
+ printf '%s\n' "---"
178
+ printf 'name: %s\n' "$_name"
179
+ printf 'description: "%s"\n' "$(devin_yaml_escape "$_desc")"
180
+ printf 'allowed-tools:\n'
181
+ printf '%s\n' "$_tools" | tr ',' '\n' | while IFS= read -r _tok; do
182
+ _tok="${_tok#"${_tok%%[![:space:]]*}"}"
183
+ _tok="${_tok%"${_tok##*[![:space:]]}"}"
184
+ [ -n "$_tok" ] && printf ' - %s\n' "$_tok"
185
+ done
186
+ printf '%s\n' "---"
187
+ _body_tmp="$TMP_GEN_DIR/devin-agent-body-$(basename "$_src").md"
188
+ _body_devin="$TMP_GEN_DIR/devin-agent-body-$(basename "$_src").devin.md"
189
+ awk 'NR==1 && $0=="---"{fm=1; next} fm && $0=="---"{fm=0; body=1; next} body{print}' "$_src" >"$_body_tmp"
190
+ gen_devin_markdown_file "$_body_tmp" "$_body_devin"
191
+ cat "$_body_devin"
192
+ } >"$_out"
193
+ }
194
+
195
+ gen_devin_agents_bridge() {
196
+ _out="$1"
197
+ cat >"$_out" <<'EOF'
198
+ <!-- BEGIN DEVRITES DEVIN -->
199
+ ## DevRites For Devin
200
+
201
+ This project has DevRites installed for Devin CLI.
202
+
203
+ ## Devin usage
204
+
205
+ - DevRites workflow skills live in `.devin/skills`. Run them as `/rite`, `/rite-spec`, and the other `/rite-*` slash commands.
206
+ - Before using any DevRites workflow skill, read `.devin/skills/devrites-lib/reference/standards/core.md`. Load other `.devin/skills/devrites-lib/reference/standards/*.md` files when the skill or rule index asks for them.
207
+ - DevRites specialist agents live in `.devin/agents` as custom subagent profiles offered to `run_subagent`. If a required `devrites-<role>` profile is not among the offered profiles, stop for HITL - never skip the role, never substitute `subagent_general`, `subagent_explore`, or another generic profile, never inline the specialist prompt, and never execute the specialist role in the root context.
208
+ - In DevRites guidance, **invoke** means run a skill inline in the current context; **dispatch** means start a fresh agent with `run_subagent` using the exact `profile` name, wait for it with `read_subagent`, and reconcile its result.
209
+ - Only `devrites-slice-wright` may edit source or tests; every other specialist is read-only by `allowed-tools`. Exact paths are instruction-enforced: put the project-relative paths in the task, wait for the wright, compare its file list and `git diff --name-only` with that contract, and reject any extra path.
210
+ - Custom profiles do not inherit interactive tool grants, and background subagents auto-deny unapproved tools. Dispatch the write-capable wright in the foreground, or make sure its `edit`, `write`, and `exec` tools are approved first. Specialists cannot use `ask_user_question`; the root relays user questions and answers through the task text and returned result.
211
+ - DevRites runtime helpers run through the installed `devrites-engine` binary.
212
+ - Skills and agent profiles are loaded when a session starts. If they were installed while this session was open, restart the session or reopen the project before relying on them.
213
+ - A seal GO, AFK mode, or autocomplete flag never authorizes an irreversible action. Disclose the exact commit/push/tag/PR plan and obtain fresh explicit user approval for that attempt; any changed or retried plan needs fresh approval.
214
+
215
+ ## Workflow contract
216
+
217
+ - Keep all feature state in `.devrites/work/<slug>/` and preserve `.devrites/ACTIVE`.
218
+ - Follow the DevRites lifecycle: frame -> spec -> clarify -> temper -> define -> plan -> vet -> build -> converge -> prove -> polish -> review -> seal -> ship -> done.
219
+ - Claims of completion need recorded evidence in the feature workspace, not confidence alone.
220
+ <!-- END DEVRITES DEVIN -->
221
+ EOF
222
+ }
package/update.sh CHANGED
@@ -37,7 +37,8 @@ trap 'exit 1' HUP INT TERM
37
37
  dr_acquire_engine "$SELF_DIR" update "$DEVRITES_REPO" || { echo "error: could not acquire a version-compatible devrites-engine${DR_ACQUIRE_FAILURE:+ ($DR_ACQUIRE_FAILURE)}." >&2; exit 1; }
38
38
  ENGINE="$DR_ENGINE_PATH"
39
39
  PAYLOAD="${DEVRITES_HOST_ARTIFACT_DIR:-$SELF_DIR/pack/generated}"
40
- if [ ! -d "$PAYLOAD/claude/skills" ] || [ ! -d "$PAYLOAD/codex/skills" ] || [ ! -f "$PAYLOAD/codex/config.toml" ]; then
40
+ if [ ! -d "$PAYLOAD/claude/skills" ] || [ ! -d "$PAYLOAD/codex/skills" ] || [ ! -f "$PAYLOAD/codex/config.toml" ] ||
41
+ [ ! -d "$PAYLOAD/devin/skills" ] || [ ! -d "$PAYLOAD/devin/agents" ] || [ ! -f "$PAYLOAD/devin/AGENTS.md" ]; then
41
42
  BUILDER="$SELF_DIR/scripts/build-host-artifacts.sh"
42
43
  [ -f "$BUILDER" ] || { echo "error: generated update payload missing at $PAYLOAD and builder missing at $BUILDER" >&2; exit 1; }
43
44
  DEVRITES_HOST_ARTIFACT_DIR="$PAYLOAD" bash "$BUILDER" >/dev/null || { echo "error: could not generate update payload at $PAYLOAD" >&2; exit 1; }