devrites 7.1.2 → 7.2.1

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 (297) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +9 -4
  3. package/docs/dsh.md +85 -0
  4. package/engine/internal/devritespaths/paths.go +2 -0
  5. package/engine/internal/hostpack/hostpack.go +29 -5
  6. package/engine/internal/install/apply.go +14 -2
  7. package/engine/internal/install/install.go +7 -3
  8. package/engine/internal/install/merge.go +1 -0
  9. package/engine/internal/install/preflight.go +9 -2
  10. package/engine/internal/install/update.go +1 -1
  11. package/engine/internal/lib/dispatch_packet.go +1 -1
  12. package/pack/generated/README.md +3 -1
  13. package/pack/generated/dsh/AGENTS.md +27 -0
  14. package/pack/generated/dsh/agents/devrites-code-reviewer.md +180 -0
  15. package/pack/generated/dsh/agents/devrites-devex-reviewer.md +137 -0
  16. package/pack/generated/dsh/agents/devrites-doubt-reviewer.md +100 -0
  17. package/pack/generated/dsh/agents/devrites-evidence-scout.md +93 -0
  18. package/pack/generated/dsh/agents/devrites-frontend-reviewer.md +139 -0
  19. package/pack/generated/dsh/agents/devrites-performance-reviewer.md +142 -0
  20. package/pack/generated/dsh/agents/devrites-plan-drafter.md +113 -0
  21. package/pack/generated/dsh/agents/devrites-plan-reviewer.md +167 -0
  22. package/pack/generated/dsh/agents/devrites-proof-runner.md +101 -0
  23. package/pack/generated/dsh/agents/devrites-retrospector.md +82 -0
  24. package/pack/generated/dsh/agents/devrites-security-auditor.md +146 -0
  25. package/pack/generated/dsh/agents/devrites-simplifier-reviewer.md +113 -0
  26. package/pack/generated/dsh/agents/devrites-slice-wright.md +240 -0
  27. package/pack/generated/dsh/agents/devrites-spec-reviewer.md +105 -0
  28. package/pack/generated/dsh/agents/devrites-strategy-reviewer.md +109 -0
  29. package/pack/generated/dsh/agents/devrites-test-analyst.md +110 -0
  30. package/pack/generated/dsh/agents/devrites-upgrade-planner.md +107 -0
  31. package/pack/generated/dsh/agents/fast-builder.md +92 -0
  32. package/pack/generated/dsh/agents/fast-checker.md +61 -0
  33. package/pack/generated/dsh/agents/fast-critic.md +71 -0
  34. package/pack/generated/dsh/agents/fast-planner.md +95 -0
  35. package/pack/generated/dsh/agents/overhaul-backend-engineer.md +70 -0
  36. package/pack/generated/dsh/agents/overhaul-boundary.md +64 -0
  37. package/pack/generated/dsh/agents/overhaul-craft.md +85 -0
  38. package/pack/generated/dsh/agents/overhaul-frontend-engineer.md +73 -0
  39. package/pack/generated/dsh/agents/overhaul-implementer.md +72 -0
  40. package/pack/generated/dsh/agents/overhaul-recon.md +77 -0
  41. package/pack/generated/dsh/agents/overhaul-specialist.md +67 -0
  42. package/pack/generated/dsh/agents/overhaul-verifier.md +73 -0
  43. package/pack/generated/dsh/runtime/codebase-memory.patch.yml +16 -0
  44. package/pack/generated/dsh/runtime/cordis.patch.yml +1762 -0
  45. package/pack/generated/dsh/runtime/specialist.mjs +85 -0
  46. package/pack/generated/dsh/skills/devrites-api-interface/SKILL.md +65 -0
  47. package/pack/generated/dsh/skills/devrites-audit/SKILL.md +60 -0
  48. package/pack/generated/dsh/skills/devrites-browser-proof/SKILL.md +109 -0
  49. package/pack/generated/dsh/skills/devrites-browser-proof/reference/browser-performance.md +19 -0
  50. package/pack/generated/dsh/skills/devrites-browser-proof/reference/visual-verdict.md +38 -0
  51. package/pack/generated/dsh/skills/devrites-debug-recovery/SKILL.md +119 -0
  52. package/pack/generated/dsh/skills/devrites-debug-recovery/reference/build-the-loop.md +58 -0
  53. package/pack/generated/dsh/skills/devrites-debug-recovery/reference/cleanup-and-classify.md +41 -0
  54. package/pack/generated/dsh/skills/devrites-debug-recovery/reference/hypotheses.md +23 -0
  55. package/pack/generated/dsh/skills/devrites-debug-recovery/reference/instrumentation.md +21 -0
  56. package/pack/generated/dsh/skills/devrites-debug-recovery/reference/regression-test.md +33 -0
  57. package/pack/generated/dsh/skills/devrites-debug-recovery/reference/trace.md +25 -0
  58. package/pack/generated/dsh/skills/devrites-doubt/SKILL.md +83 -0
  59. package/pack/generated/dsh/skills/devrites-frontend-craft/SKILL.md +89 -0
  60. package/pack/generated/dsh/skills/devrites-frontend-craft/reference/craft.md +63 -0
  61. package/pack/generated/dsh/skills/devrites-frontend-craft/reference/design-references.md +120 -0
  62. package/pack/generated/dsh/skills/devrites-frontend-craft/reference/fullstack.md +46 -0
  63. package/pack/generated/dsh/skills/devrites-frontend-craft/reference/quality-standards.md +286 -0
  64. package/pack/generated/dsh/skills/devrites-frontend-craft/reference/reuse-first.md +53 -0
  65. package/pack/generated/dsh/skills/devrites-frontend-craft/reference/shape.md +61 -0
  66. package/pack/generated/dsh/skills/devrites-interview/SKILL.md +107 -0
  67. package/pack/generated/dsh/skills/devrites-lib/SKILL.md +98 -0
  68. package/pack/generated/dsh/skills/devrites-lib/reference/candidate-integrity.md +59 -0
  69. package/pack/generated/dsh/skills/devrites-lib/reference/intent-map.md +86 -0
  70. package/pack/generated/dsh/skills/devrites-lib/reference/orchestration-profiles.md +48 -0
  71. package/pack/generated/dsh/skills/devrites-lib/reference/parallel-dispatch.md +184 -0
  72. package/pack/generated/dsh/skills/devrites-lib/reference/reply-contract.md +123 -0
  73. package/pack/generated/dsh/skills/devrites-lib/reference/standards/README.md +70 -0
  74. package/pack/generated/dsh/skills/devrites-lib/reference/standards/acceptance-preserving-reslice.md +32 -0
  75. package/pack/generated/dsh/skills/devrites-lib/reference/standards/afk-hitl.md +467 -0
  76. package/pack/generated/dsh/skills/devrites-lib/reference/standards/agents.md +231 -0
  77. package/pack/generated/dsh/skills/devrites-lib/reference/standards/anti-patterns.md +50 -0
  78. package/pack/generated/dsh/skills/devrites-lib/reference/standards/architecture-health.md +64 -0
  79. package/pack/generated/dsh/skills/devrites-lib/reference/standards/assumption-checkpoints.md +42 -0
  80. package/pack/generated/dsh/skills/devrites-lib/reference/standards/audit-coverage.md +107 -0
  81. package/pack/generated/dsh/skills/devrites-lib/reference/standards/browser-proof-checklist.md +37 -0
  82. package/pack/generated/dsh/skills/devrites-lib/reference/standards/ci-cd.md +62 -0
  83. package/pack/generated/dsh/skills/devrites-lib/reference/standards/code-index.md +111 -0
  84. package/pack/generated/dsh/skills/devrites-lib/reference/standards/code-navigation.md +69 -0
  85. package/pack/generated/dsh/skills/devrites-lib/reference/standards/code-review.md +178 -0
  86. package/pack/generated/dsh/skills/devrites-lib/reference/standards/coding-style.md +53 -0
  87. package/pack/generated/dsh/skills/devrites-lib/reference/standards/context-hygiene.md +136 -0
  88. package/pack/generated/dsh/skills/devrites-lib/reference/standards/core.md +202 -0
  89. package/pack/generated/dsh/skills/devrites-lib/reference/standards/data-integrity.md +144 -0
  90. package/pack/generated/dsh/skills/devrites-lib/reference/standards/debug-recovery.md +42 -0
  91. package/pack/generated/dsh/skills/devrites-lib/reference/standards/definition-of-done.md +25 -0
  92. package/pack/generated/dsh/skills/devrites-lib/reference/standards/deprecation.md +49 -0
  93. package/pack/generated/dsh/skills/devrites-lib/reference/standards/developer-experience.md +128 -0
  94. package/pack/generated/dsh/skills/devrites-lib/reference/standards/development-workflow.md +31 -0
  95. package/pack/generated/dsh/skills/devrites-lib/reference/standards/documentation.md +55 -0
  96. package/pack/generated/dsh/skills/devrites-lib/reference/standards/duplicate-code.md +129 -0
  97. package/pack/generated/dsh/skills/devrites-lib/reference/standards/edge-case-trace.md +94 -0
  98. package/pack/generated/dsh/skills/devrites-lib/reference/standards/elicitation.md +114 -0
  99. package/pack/generated/dsh/skills/devrites-lib/reference/standards/error-handling.md +49 -0
  100. package/pack/generated/dsh/skills/devrites-lib/reference/standards/gates.md +159 -0
  101. package/pack/generated/dsh/skills/devrites-lib/reference/standards/git-workflow.md +51 -0
  102. package/pack/generated/dsh/skills/devrites-lib/reference/standards/glossary.md +40 -0
  103. package/pack/generated/dsh/skills/devrites-lib/reference/standards/hooks.md +41 -0
  104. package/pack/generated/dsh/skills/devrites-lib/reference/standards/integration-reliability.md +121 -0
  105. package/pack/generated/dsh/skills/devrites-lib/reference/standards/loop-operations.md +123 -0
  106. package/pack/generated/dsh/skills/devrites-lib/reference/standards/observability.md +90 -0
  107. package/pack/generated/dsh/skills/devrites-lib/reference/standards/one-shot-actions.md +105 -0
  108. package/pack/generated/dsh/skills/devrites-lib/reference/standards/patterns.md +70 -0
  109. package/pack/generated/dsh/skills/devrites-lib/reference/standards/performance.md +88 -0
  110. package/pack/generated/dsh/skills/devrites-lib/reference/standards/principles.md +56 -0
  111. package/pack/generated/dsh/skills/devrites-lib/reference/standards/prose-style.md +127 -0
  112. package/pack/generated/dsh/skills/devrites-lib/reference/standards/release/ship-checklist.md +12 -0
  113. package/pack/generated/dsh/skills/devrites-lib/reference/standards/repository-topology.md +82 -0
  114. package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/README.md +28 -0
  115. package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/ci-workflows.md +50 -0
  116. package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/default.md +42 -0
  117. package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/go.md +47 -0
  118. package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/python.md +46 -0
  119. package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/react.md +55 -0
  120. package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/shell.md +40 -0
  121. package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/stack-profile.md +155 -0
  122. package/pack/generated/dsh/skills/devrites-lib/reference/standards/review/ts-js.md +74 -0
  123. package/pack/generated/dsh/skills/devrites-lib/reference/standards/review-checklist.md +14 -0
  124. package/pack/generated/dsh/skills/devrites-lib/reference/standards/security-checklist.md +30 -0
  125. package/pack/generated/dsh/skills/devrites-lib/reference/standards/security.md +283 -0
  126. package/pack/generated/dsh/skills/devrites-lib/reference/standards/skill-authoring.md +269 -0
  127. package/pack/generated/dsh/skills/devrites-lib/reference/standards/spec-grammar.md +214 -0
  128. package/pack/generated/dsh/skills/devrites-lib/reference/standards/test-proof-checklist.md +18 -0
  129. package/pack/generated/dsh/skills/devrites-lib/reference/standards/testing.md +295 -0
  130. package/pack/generated/dsh/skills/devrites-lib/reference/standards/tooling.md +125 -0
  131. package/pack/generated/dsh/skills/devrites-lib/reference/standards/verification-methods.md +143 -0
  132. package/pack/generated/dsh/skills/devrites-lib/reference/standards/windows.md +60 -0
  133. package/pack/generated/dsh/skills/devrites-lib/reference/standards/workflow-artifacts.md +435 -0
  134. package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/code.md +44 -0
  135. package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/comparison.md +42 -0
  136. package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/diagram.md +51 -0
  137. package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/index.md +66 -0
  138. package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/input.md +46 -0
  139. package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/outline-template.md +106 -0
  140. package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/plan.md +48 -0
  141. package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/slides.md +40 -0
  142. package/pack/generated/dsh/skills/devrites-lib/reference/visual-playbooks/table.md +42 -0
  143. package/pack/generated/dsh/skills/devrites-lib/reference/workspace-artifact-schema.md +312 -0
  144. package/pack/generated/dsh/skills/devrites-prose-craft/SKILL.md +81 -0
  145. package/pack/generated/dsh/skills/devrites-prose-craft/reference/banned-phrases.md +132 -0
  146. package/pack/generated/dsh/skills/devrites-prose-craft/reference/examples.md +136 -0
  147. package/pack/generated/dsh/skills/devrites-prose-craft/reference/structures.md +196 -0
  148. package/pack/generated/dsh/skills/devrites-source-driven/SKILL.md +54 -0
  149. package/pack/generated/dsh/skills/devrites-ux-shape/SKILL.md +135 -0
  150. package/pack/generated/dsh/skills/devrites-ux-shape/reference/brief-template.md +108 -0
  151. package/pack/generated/dsh/skills/devrites-ux-shape/reference/visual-direction-probe.md +50 -0
  152. package/pack/generated/dsh/skills/overhaul/SKILL.md +221 -0
  153. package/pack/generated/dsh/skills/overhaul/references/audit-domains.md +390 -0
  154. package/pack/generated/dsh/skills/overhaul/references/lifecycle.md +314 -0
  155. package/pack/generated/dsh/skills/overhaul/references/orchestration.md +291 -0
  156. package/pack/generated/dsh/skills/overhaul/references/records.md +203 -0
  157. package/pack/generated/dsh/skills/overhaul/references/repair-and-measurement.md +310 -0
  158. package/pack/generated/dsh/skills/overhaul/references/review-and-report.md +139 -0
  159. package/pack/generated/dsh/skills/overhaul/references/scope-and-safety.md +233 -0
  160. package/pack/generated/dsh/skills/overhaul/references/scoring.md +261 -0
  161. package/pack/generated/dsh/skills/overhaul/references/stack-profiles.md +316 -0
  162. package/pack/generated/dsh/skills/rite/SKILL.md +157 -0
  163. package/pack/generated/dsh/skills/rite/reference/menu.md +49 -0
  164. package/pack/generated/dsh/skills/rite-adopt/SKILL.md +64 -0
  165. package/pack/generated/dsh/skills/rite-adopt/reference/adoption.md +25 -0
  166. package/pack/generated/dsh/skills/rite-adopt/reference/anti-patterns.md +19 -0
  167. package/pack/generated/dsh/skills/rite-autocomplete/SKILL.md +167 -0
  168. package/pack/generated/dsh/skills/rite-autocomplete/reference/decision-policy.md +44 -0
  169. package/pack/generated/dsh/skills/rite-autocomplete/reference/lookahead.md +50 -0
  170. package/pack/generated/dsh/skills/rite-autocomplete/reference/loop.md +164 -0
  171. package/pack/generated/dsh/skills/rite-autocomplete/reference/stop-conditions.md +118 -0
  172. package/pack/generated/dsh/skills/rite-build/SKILL.md +126 -0
  173. package/pack/generated/dsh/skills/rite-build/reference/afk-discipline.md +153 -0
  174. package/pack/generated/dsh/skills/rite-build/reference/anti-patterns.md +27 -0
  175. package/pack/generated/dsh/skills/rite-build/reference/checkpoint-protocol.md +115 -0
  176. package/pack/generated/dsh/skills/rite-build/reference/checkpoint.md +79 -0
  177. package/pack/generated/dsh/skills/rite-build/reference/frontend-trigger.md +39 -0
  178. package/pack/generated/dsh/skills/rite-build/reference/one-slice-cycle.md +57 -0
  179. package/pack/generated/dsh/skills/rite-build/reference/output.md +29 -0
  180. package/pack/generated/dsh/skills/rite-build/reference/parallel-batch.md +260 -0
  181. package/pack/generated/dsh/skills/rite-build/reference/phase-contract.md +130 -0
  182. package/pack/generated/dsh/skills/rite-build/reference/spec-drift-guard.md +91 -0
  183. package/pack/generated/dsh/skills/rite-build/reference/tdd.md +27 -0
  184. package/pack/generated/dsh/skills/rite-build/reference/wright-dispatch.md +198 -0
  185. package/pack/generated/dsh/skills/rite-clarify/SKILL.md +104 -0
  186. package/pack/generated/dsh/skills/rite-clarify/reference/anti-patterns.md +24 -0
  187. package/pack/generated/dsh/skills/rite-clarify/reference/decision-coverage.md +56 -0
  188. package/pack/generated/dsh/skills/rite-converge/SKILL.md +167 -0
  189. package/pack/generated/dsh/skills/rite-converge/reference/anti-patterns.md +35 -0
  190. package/pack/generated/dsh/skills/rite-converge/reference/convergence-assessment.md +70 -0
  191. package/pack/generated/dsh/skills/rite-customize/SKILL.md +64 -0
  192. package/pack/generated/dsh/skills/rite-define/SKILL.md +203 -0
  193. package/pack/generated/dsh/skills/rite-define/reference/anti-patterns.md +26 -0
  194. package/pack/generated/dsh/skills/rite-define/reference/gates.md +160 -0
  195. package/pack/generated/dsh/skills/rite-define/reference/plan-template.md +153 -0
  196. package/pack/generated/dsh/skills/rite-doctor/SKILL.md +107 -0
  197. package/pack/generated/dsh/skills/rite-dogfood/SKILL.md +57 -0
  198. package/pack/generated/dsh/skills/rite-explain/SKILL.md +154 -0
  199. package/pack/generated/dsh/skills/rite-explain/reference/intake.md +89 -0
  200. package/pack/generated/dsh/skills/rite-fast/SKILL.md +185 -0
  201. package/pack/generated/dsh/skills/rite-fast/reference/artifacts.md +107 -0
  202. package/pack/generated/dsh/skills/rite-fast/reference/check-and-triage.md +51 -0
  203. package/pack/generated/dsh/skills/rite-frame/SKILL.md +119 -0
  204. package/pack/generated/dsh/skills/rite-frame/reference/failure-modes.md +66 -0
  205. package/pack/generated/dsh/skills/rite-handoff/SKILL.md +117 -0
  206. package/pack/generated/dsh/skills/rite-handoff/reference/handoff-template.md +56 -0
  207. package/pack/generated/dsh/skills/rite-harness/SKILL.md +76 -0
  208. package/pack/generated/dsh/skills/rite-harness/reference/feature-map.md +60 -0
  209. package/pack/generated/dsh/skills/rite-learn/SKILL.md +107 -0
  210. package/pack/generated/dsh/skills/rite-plan/SKILL.md +215 -0
  211. package/pack/generated/dsh/skills/rite-plan/reference/anti-patterns.md +34 -0
  212. package/pack/generated/dsh/skills/rite-plan/reference/dependency-graph.md +48 -0
  213. package/pack/generated/dsh/skills/rite-plan/reference/replan-and-repair.md +114 -0
  214. package/pack/generated/dsh/skills/rite-plan/reference/slicing.md +187 -0
  215. package/pack/generated/dsh/skills/rite-plan/reference/task-breakdown.md +50 -0
  216. package/pack/generated/dsh/skills/rite-polish/SKILL.md +128 -0
  217. package/pack/generated/dsh/skills/rite-polish/reference/adr-promotion.md +11 -0
  218. package/pack/generated/dsh/skills/rite-polish/reference/anti-ai-slop.md +210 -0
  219. package/pack/generated/dsh/skills/rite-polish/reference/anti-patterns.md +30 -0
  220. package/pack/generated/dsh/skills/rite-polish/reference/backend-polish.md +80 -0
  221. package/pack/generated/dsh/skills/rite-polish/reference/browser-polish-evidence.md +33 -0
  222. package/pack/generated/dsh/skills/rite-polish/reference/code.md +87 -0
  223. package/pack/generated/dsh/skills/rite-polish/reference/design-memory.md +117 -0
  224. package/pack/generated/dsh/skills/rite-polish/reference/design-system-discovery.md +8 -0
  225. package/pack/generated/dsh/skills/rite-polish/reference/harden-checklist.md +110 -0
  226. package/pack/generated/dsh/skills/rite-polish/reference/ledger.md +67 -0
  227. package/pack/generated/dsh/skills/rite-polish/reference/ui.md +146 -0
  228. package/pack/generated/dsh/skills/rite-pov/SKILL.md +71 -0
  229. package/pack/generated/dsh/skills/rite-pr-feedback/SKILL.md +61 -0
  230. package/pack/generated/dsh/skills/rite-pressure-test/SKILL.md +76 -0
  231. package/pack/generated/dsh/skills/rite-prototype/SKILL.md +106 -0
  232. package/pack/generated/dsh/skills/rite-prove/SKILL.md +151 -0
  233. package/pack/generated/dsh/skills/rite-prove/reference/acceptance-proof.md +88 -0
  234. package/pack/generated/dsh/skills/rite-prove/reference/anti-patterns.md +25 -0
  235. package/pack/generated/dsh/skills/rite-prove/reference/browser-proof.md +51 -0
  236. package/pack/generated/dsh/skills/rite-prove/reference/failure-triage.md +53 -0
  237. package/pack/generated/dsh/skills/rite-prove/reference/proof-ladder.md +39 -0
  238. package/pack/generated/dsh/skills/rite-prove/reference/test-command-discovery.md +36 -0
  239. package/pack/generated/dsh/skills/rite-quick/SKILL.md +97 -0
  240. package/pack/generated/dsh/skills/rite-resolve/SKILL.md +113 -0
  241. package/pack/generated/dsh/skills/rite-resolve/reference/answer-protocol.md +129 -0
  242. package/pack/generated/dsh/skills/rite-review/SKILL.md +190 -0
  243. package/pack/generated/dsh/skills/rite-review/reference/anti-patterns.md +32 -0
  244. package/pack/generated/dsh/skills/rite-review/reference/cognitive-load.md +90 -0
  245. package/pack/generated/dsh/skills/rite-review/reference/feature-scoped-review.md +26 -0
  246. package/pack/generated/dsh/skills/rite-review/reference/five-axis-review.md +66 -0
  247. package/pack/generated/dsh/skills/rite-review/reference/nielsen-heuristics.md +126 -0
  248. package/pack/generated/dsh/skills/rite-review/reference/performance-checklist.md +99 -0
  249. package/pack/generated/dsh/skills/rite-review/reference/performance-review.md +14 -0
  250. package/pack/generated/dsh/skills/rite-review/reference/security-review.md +44 -0
  251. package/pack/generated/dsh/skills/rite-seal/SKILL.md +99 -0
  252. package/pack/generated/dsh/skills/rite-seal/reference/anti-patterns.md +29 -0
  253. package/pack/generated/dsh/skills/rite-seal/reference/final-evidence.md +41 -0
  254. package/pack/generated/dsh/skills/rite-seal/reference/go-no-go.md +32 -0
  255. package/pack/generated/dsh/skills/rite-seal/reference/output.md +5 -0
  256. package/pack/generated/dsh/skills/rite-seal/reference/phase-contract.md +56 -0
  257. package/pack/generated/dsh/skills/rite-seal/reference/risk-and-rollback.md +56 -0
  258. package/pack/generated/dsh/skills/rite-seal/reference/seal-template.md +32 -0
  259. package/pack/generated/dsh/skills/rite-ship/SKILL.md +101 -0
  260. package/pack/generated/dsh/skills/rite-ship/reference/anti-patterns.md +28 -0
  261. package/pack/generated/dsh/skills/rite-ship/reference/close-out.md +69 -0
  262. package/pack/generated/dsh/skills/rite-ship/reference/git-ship.md +128 -0
  263. package/pack/generated/dsh/skills/rite-ship/reference/rollout.md +62 -0
  264. package/pack/generated/dsh/skills/rite-ship/reference/ship-template.md +40 -0
  265. package/pack/generated/dsh/skills/rite-spec/SKILL.md +169 -0
  266. package/pack/generated/dsh/skills/rite-spec/reference/acceptance-criteria.md +31 -0
  267. package/pack/generated/dsh/skills/rite-spec/reference/ai-spec-template.md +40 -0
  268. package/pack/generated/dsh/skills/rite-spec/reference/anti-patterns.md +27 -0
  269. package/pack/generated/dsh/skills/rite-spec/reference/interview-patterns.md +56 -0
  270. package/pack/generated/dsh/skills/rite-spec/reference/investigation.md +83 -0
  271. package/pack/generated/dsh/skills/rite-spec/reference/question-protocol.md +36 -0
  272. package/pack/generated/dsh/skills/rite-spec/reference/references-intake.md +62 -0
  273. package/pack/generated/dsh/skills/rite-spec/reference/spec-checklists.md +89 -0
  274. package/pack/generated/dsh/skills/rite-spec/reference/spec-template.md +160 -0
  275. package/pack/generated/dsh/skills/rite-spec/reference/state-workspace.md +240 -0
  276. package/pack/generated/dsh/skills/rite-status/SKILL.md +74 -0
  277. package/pack/generated/dsh/skills/rite-temper/SKILL.md +137 -0
  278. package/pack/generated/dsh/skills/rite-temper/reference/anti-patterns.md +30 -0
  279. package/pack/generated/dsh/skills/rite-temper/reference/review-dimensions.md +66 -0
  280. package/pack/generated/dsh/skills/rite-temper/reference/scope-modes.md +52 -0
  281. package/pack/generated/dsh/skills/rite-temper/reference/significance.md +55 -0
  282. package/pack/generated/dsh/skills/rite-temper/reference/strategy-template.md +101 -0
  283. package/pack/generated/dsh/skills/rite-upgrade/SKILL.md +142 -0
  284. package/pack/generated/dsh/skills/rite-vet/SKILL.md +242 -0
  285. package/pack/generated/dsh/skills/rite-vet/reference/anti-patterns.md +43 -0
  286. package/pack/generated/dsh/skills/rite-vet/reference/artifacts.md +248 -0
  287. package/pack/generated/dsh/skills/rite-vet/reference/cross-model.md +19 -0
  288. package/pack/generated/dsh/skills/rite-vet/reference/depth.md +59 -0
  289. package/pack/generated/dsh/skills/rite-vet/reference/eng-lenses.md +48 -0
  290. package/pack/generated/dsh/skills/rite-vet/reference/review-axes.md +210 -0
  291. package/pack/generated/dsh/skills/rite-watch-pr/SKILL.md +87 -0
  292. package/pack/generated/dsh/skills/rite-zoom-out/SKILL.md +76 -0
  293. package/package.json +3 -1
  294. package/scripts/build-host-artifacts.sh +6 -2
  295. package/scripts/dsh-generate.py +165 -0
  296. package/scripts/dsh-specialist.mjs +85 -0
  297. package/scripts/install-lib.sh +3 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,18 @@
2
2
 
3
3
  All notable changes to DevRites are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and DevRites adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Releases are generated automatically by [semantic-release](https://semantic-release.gitbook.io/) from Conventional Commits on `main`.
4
4
 
5
+ ## [7.2.1](https://github.com/ViktorsBaikers/DevRites/compare/v7.2.0...v7.2.1) (2026-10-29)
6
+
7
+ ### Fixed
8
+
9
+ * **agents:** restore DSH code intelligence and skill discovery ([#185](https://github.com/ViktorsBaikers/DevRites/issues/185)) ([ab67651](https://github.com/ViktorsBaikers/DevRites/commit/ab67651aa3a9555fdf68e40859f3451ab20f42e7))
10
+
11
+ ## [7.2.0](https://github.com/ViktorsBaikers/DevRites/compare/v7.1.2...v7.2.0) (2026-10-28)
12
+
13
+ ### Added
14
+
15
+ * **installer:** add DSH specialist integration ([#184](https://github.com/ViktorsBaikers/DevRites/issues/184)) ([0fe9f07](https://github.com/ViktorsBaikers/DevRites/commit/0fe9f07be170eef1c581b9401b565a8688dc64b4))
16
+
5
17
  ## [7.1.2](https://github.com/ViktorsBaikers/DevRites/compare/v7.1.1...v7.1.2) (2026-10-28)
6
18
 
7
19
  ### Fixed
package/README.md CHANGED
@@ -24,14 +24,14 @@
24
24
  DevRites is a repository-local workflow for AI coding agents. It turns a
25
25
  feature request into a spec, a sliced plan, working code, recorded proof, a
26
26
  release decision, and an explicit ship step. It runs inside Claude Code, Codex,
27
- omp, pi, and Devin CLI.
27
+ omp, pi, Devin CLI, and DSH.
28
28
 
29
29
  DevRites keeps that work in `.devrites/` inside your repository, where chat
30
30
  history can't lose it. After you clear the conversation, switch hosts, or hand
31
31
  the feature to another engineer, the next session reads the same plan,
32
32
  decisions, and evidence before it continues.
33
33
 
34
- **Status:** [`v7.1.2`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v7.1.2): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
34
+ **Status:** [`v7.2.1`](https://github.com/ViktorsBaikers/DevRites/releases/tag/v7.2.1): see [`CHANGELOG.md`](CHANGELOG.md) for release notes.
35
35
 
36
36
  This is the latest published release; `main` may contain unreleased work.
37
37
 
@@ -64,8 +64,7 @@ root, then run /rite-doctor ($rite-doctor in Codex) and report any FAIL line
64
64
  with its fix.
65
65
  ```
66
66
 
67
- The installer adds project-local support for Claude Code, Codex, omp, pi, and
68
- Devin CLI. It does not write skills, agents, or hooks to `~/.claude`,
67
+ The installer adds project-local support for Claude Code, Codex, omp, pi, Devin CLI, and DSH. It does not write skills, agents, or hooks to `~/.claude`,
69
68
  `~/.codex`, `~/.pi`, or `~/.config/devin`.
70
69
 
71
70
  **2. Pick the smallest route** that still protects the work.
@@ -306,6 +305,7 @@ Run `npx devrites@latest --help` for common flags and
306
305
  | `--no-omp` | Skip `.omp` skills, agents, and command stubs. |
307
306
  | `--no-pi` | Skip `.pi` skills, agents, prompt commands, and the pi `AGENTS.md` block. |
308
307
  | `--no-devin` | Skip `.devin` skills, agents, and the Devin `AGENTS.md` block. |
308
+ | `--no-dsh` | Skip `.dsh` skills, named presets, permission guard, and the DSH `AGENTS.md` block. |
309
309
  | `--no-agents` | Skip hook-free native specialist profiles. |
310
310
  | `--no-skills` | Skip skills and their bundled standards. |
311
311
  | `--no-binary` | Do not keep the shared `devrites-engine` binary in a user or system bin directory. On `uninstall`, keep the existing binary. |
@@ -424,6 +424,10 @@ that the intended publishing step produced it. See
424
424
 
425
425
  ## Hosts
426
426
 
427
+ For DSH, launch `npx @deepseek-ai/dsh web --patch .dsh/cordis.patch.yml`
428
+ and select the **DevRites** agent preset before starting a workflow. See the
429
+ [DSH integration guide](docs/dsh.md) for permissions, dispatch, and result collection.
430
+
427
431
  | Host | Skills | Agents | Also installs | Invoke |
428
432
  | --- | --- | --- | --- | --- |
429
433
  | **Claude Code** | `.claude/skills/` | `.claude/agents/` | Native root permissions merged into `.claude/settings.json` | `/rite-spec` |
@@ -431,6 +435,7 @@ that the intended publishing step produced it. See
431
435
  | **omp** | `.omp/skills/` | `.omp/agents/` | Command stubs in `.omp/commands/`; `.omp/config.yml` hiding duplicate DevRites skills (only if absent) | `/rite-spec` or `/skill:rite-spec` |
432
436
  | **pi** | `.pi/skills/` | `.pi/agents/` | Prompt commands in `.pi/prompts/`, marked block in `AGENTS.md`; with Codex, `.pi/settings.json` skipping the `.agents/skills` copies (only if absent) | `/rite-spec` or `/skill:rite-spec` |
433
437
  | **Devin CLI** | `.devin/skills/` | `.devin/agents/` | Marked block in `AGENTS.md` | `/rite-spec` |
438
+ | **DSH** | `.dsh/skills/` | Named native agent presets; profiles in `.dsh/agents/` | `.dsh/cordis.patch.yml`, role permission guard, marked block in `AGENTS.md` | `/rite-spec` in the DevRites preset |
434
439
 
435
440
  On every host, among the lifecycle `devrites-*` specialists only
436
441
  `devrites-slice-wright` is writable and the rest are read-only and hook-free;
package/docs/dsh.md ADDED
@@ -0,0 +1,85 @@
1
+ # DSH integration
2
+
3
+ The standard DevRites installer ships project-local DSH skills and named native
4
+ agent presets. To launch from the installed project's root:
5
+
6
+ ```sh
7
+ npx @deepseek-ai/dsh web --patch .dsh/cordis.patch.yml
8
+ ```
9
+
10
+ Choose **DevRites** (`devrites-orchestrator`) in the agent preset selector for a
11
+ new conversation, then use `/rite` or `/rite-spec`. The overlay loads alongside
12
+ your DSH profile; the installer does not edit your global DSH configuration.
13
+ Use `--no-dsh` with DevRites install/update to omit this host. Updates and
14
+ uninstall manage the same files through the existing hashed manifest.
15
+
16
+ Skills live under `.dsh/skills`, with native invocation flags preserved. Presets
17
+ with skill access mount DSH's filesystem skill provider before the skill tool
18
+ so installed skills are discovered in that preset's scope. The
19
+ `.dsh/agents` files retain the expanded canonical specialist instructions.
20
+ `.dsh/cordis.patch.yml` and `.dsh/specialist.mjs` register those exact identities
21
+ as native DSH presets and enforce their tool and permission boundaries.
22
+
23
+ The orchestrator calls `subagent` with an exact `agent_preset`, a self-contained
24
+ `prompt`, and a short `description`. Its configured backend is `spawn`, which creates a fresh
25
+ Session without the parent conversation. An omitted or unknown role is denied;
26
+ generic dispatch and fork are not substitutes. Specialists cannot delegate.
27
+ The root may use `list_agents`, `send_message`, and `interrupt_agent` to manage
28
+ its native children.
29
+
30
+ DSH delivers each child's final text and terminal status to the parent in a
31
+ settlement notice. A returned child id means dispatch was admitted; `inactive`
32
+ activity alone does not prove successful completion. The orchestrator collects
33
+ and reconciles every terminal result, including failures, before dependent work.
34
+
35
+ Read-only roles retain only their mapped tools and run shell commands under the
36
+ read-only sandbox. Shell-capable roles also receive native job tools to collect
37
+ background command output and stop their jobs. Writers have a workspace-write ceiling. The guard narrows
38
+ DSH's inherited parent override before each allowed call, preserves an existing
39
+ read-only parent boundary, and denies explicit sandbox escalation. Confining
40
+ shell and filesystem providers are required; an unconfined composition fails
41
+ closed. Tool access derives from canonical agent frontmatter; unsupported
42
+ Claude-specific tools are omitted. The writer's exact file list
43
+ remains a task contract checked by the orchestrator, as on the other hosts.
44
+
45
+ Codebase Memory MCP is optional. Install `codebase-memory-mcp` separately and
46
+ make the binary available on `PATH`, then load the supplied connection overlay:
47
+
48
+ ```sh
49
+ dsh web --patch .dsh/codebase-memory.patch.yml --patch .dsh/cordis.patch.yml
50
+ ```
51
+
52
+ The optional overlay registers one global `@deepseek-ai/dsh-mcp-client` stdio
53
+ connection named `codebase-memory-mcp`. If your DSH configuration already provides
54
+ that global connection, use only `.dsh/cordis.patch.yml`. Installation does not
55
+ install the MCP binary, start a server, or change global configuration. Without
56
+ the overlay or a configured connection, grep/glob/read remain available.
57
+
58
+ For a browser served on a local interface, keep launcher flags before app flags:
59
+
60
+ ```sh
61
+ dsh web --patch .dsh/codebase-memory.patch.yml --patch .dsh/cordis.patch.yml --no-open --host <local-interface-ip> --port 3080
62
+ ```
63
+
64
+ Canonical `mcp__codebase-memory-mcp__*` grants expand to a finite set of query
65
+ tools: index status, projects, schema, architecture, graph and code search, call
66
+ paths, snippets, file outlines, graph queries, change detection, coverage, and
67
+ graph comparisons. Individual supported query grants are also preserved. Roles
68
+ without a canonical grant receive none. Other MCP namespaces, unknown tools,
69
+ `delete_project`, `manage_adr`, and `ingest_traces` are denied. Only the root
70
+ orchestrator may use `index_repository`, with `persistence` omitted or `false`
71
+ for cache-only indexing; all specialists, including writers, cannot index.
72
+
73
+ Use graph queries first for structural questions, checking index status,
74
+ freshness, and coverage and verifying material findings in source. Use
75
+ grep/glob for literal searches. An unavailable server or missing index falls
76
+ back to grep/glob/read; a specialist may hand indexing to the parent. The tool
77
+ catalog refreshes when DSH registers or removes tools, including later successful
78
+ connections. DSH may retain registrations during a temporary connection loss.
79
+ MCP calls use the external server's permissions, outside DSH's shell/filesystem
80
+ sandbox. LSP integration is outside this adapter's scope.
81
+
82
+ The adapter targets the published DSH `0.2.1-rc.2` plugin interfaces, checked
83
+ against [DeepSeek Harness source](https://github.com/deepseek-ai/deepseek-harness)
84
+ at `f3803c96974ad4a94195fb97e5c637e9c2a3afe3`. DSH is a developer preview;
85
+ changes to its preset, tools, or sandbox interfaces require revalidation.
@@ -18,12 +18,14 @@ const (
18
18
  OmpSkillsTarget = ".omp/skills"
19
19
  PiSkillsTarget = ".pi/skills"
20
20
  DevinSkillsTarget = ".devin/skills"
21
+ DshSkillsTarget = ".dsh/skills"
21
22
  ClaudeAgentsTarget = ".claude/agents"
22
23
  CodexAgentsTarget = ".codex/agents"
23
24
  OmpAgentsTarget = ".omp/agents"
24
25
  OmpCommandsTarget = ".omp/commands"
25
26
  PiAgentsTarget = ".pi/agents"
26
27
  DevinAgentsTarget = ".devin/agents"
28
+ DshAgentsTarget = ".dsh/agents"
27
29
  PiPromptsTarget = ".pi/prompts"
28
30
  ClaudeWorkflowsTarget = ".claude/workflows"
29
31
 
@@ -19,12 +19,14 @@ const (
19
19
  OmpSkillsTarget = devritespaths.OmpSkillsTarget
20
20
  PiSkillsTarget = devritespaths.PiSkillsTarget
21
21
  DevinSkillsTarget = devritespaths.DevinSkillsTarget
22
+ DshSkillsTarget = devritespaths.DshSkillsTarget
22
23
  ClaudeAgentsTarget = devritespaths.ClaudeAgentsTarget
23
24
  CodexAgentsTarget = devritespaths.CodexAgentsTarget
24
25
  OmpAgentsTarget = devritespaths.OmpAgentsTarget
25
26
  OmpCommandsTarget = devritespaths.OmpCommandsTarget
26
27
  PiAgentsTarget = devritespaths.PiAgentsTarget
27
28
  DevinAgentsTarget = devritespaths.DevinAgentsTarget
29
+ DshAgentsTarget = devritespaths.DshAgentsTarget
28
30
  PiPromptsTarget = devritespaths.PiPromptsTarget
29
31
  ClaudeWorkflowsTarget = devritespaths.ClaudeWorkflowsTarget
30
32
  )
@@ -111,6 +113,15 @@ var DevinAgentsMerge = MarkerMerge{
111
113
  MarkerText: "AGENTS.md contains a DevRites managed block between BEGIN/END DEVRITES DEVIN markers.",
112
114
  }
113
115
 
116
+ var DshAgentsMerge = MarkerMerge{
117
+ TargetRel: "AGENTS.md",
118
+ PayloadRel: "dsh/AGENTS.md",
119
+ Begin: "<!-- BEGIN DEVRITES DSH -->",
120
+ End: "<!-- END DEVRITES DSH -->",
121
+ MarkerRel: ".claude/devrites.dsh-agents-merge",
122
+ MarkerText: "AGENTS.md contains a DevRites managed block between BEGIN/END DEVRITES DSH markers.\n",
123
+ }
124
+
114
125
  var CodexConfigMerge = MarkerMerge{
115
126
  TargetRel: ".codex/config.toml",
116
127
  PayloadRel: "codex/config.toml",
@@ -166,6 +177,7 @@ var LegacyCodexHooksMerge = ManagedMerge{
166
177
  }
167
178
 
168
179
  var managedMerges = []ManagedMerge{
180
+ {MarkerRel: DshAgentsMerge.MarkerRel, TargetRel: DshAgentsMerge.TargetRel, Begin: DshAgentsMerge.Begin, End: DshAgentsMerge.End, DryRun: "AGENTS.md DevRites DSH block"},
169
181
  {
170
182
  MarkerRel: CodexAgentsMerge.MarkerRel,
171
183
  TargetRel: CodexAgentsMerge.TargetRel,
@@ -202,7 +214,7 @@ var managedMerges = []ManagedMerge{
202
214
  LegacyCodexHooksMerge,
203
215
  }
204
216
 
205
- func RequiredPayload(withCodex, withOmp, withPi, withDevin bool) []string {
217
+ func RequiredPayload(withCodex, withOmp, withPi, withDevin, withDsh bool) []string {
206
218
  required := []string{
207
219
  "claude/skills",
208
220
  "claude/agents",
@@ -240,11 +252,14 @@ func RequiredPayload(withCodex, withOmp, withPi, withDevin bool) []string {
240
252
  "devin/AGENTS.md",
241
253
  )
242
254
  }
255
+ if withDsh {
256
+ required = append(required, "dsh/skills", "dsh/agents", "dsh/runtime/cordis.patch.yml", "dsh/runtime/specialist.mjs", "dsh/AGENTS.md")
257
+ }
243
258
  return required
244
259
  }
245
260
 
246
- func ValidatePayload(payload fs.FS, withCodex, withOmp, withPi, withDevin bool) error {
247
- for _, rel := range RequiredPayload(withCodex, withOmp, withPi, withDevin) {
261
+ func ValidatePayload(payload fs.FS, withCodex, withOmp, withPi, withDevin, withDsh bool) error {
262
+ for _, rel := range RequiredPayload(withCodex, withOmp, withPi, withDevin, withDsh) {
248
263
  if _, err := fs.Stat(payload, rel); err != nil {
249
264
  return fmt.Errorf("missing %s", rel)
250
265
  }
@@ -252,7 +267,7 @@ func ValidatePayload(payload fs.FS, withCodex, withOmp, withPi, withDevin bool)
252
267
  return nil
253
268
  }
254
269
 
255
- func InstallTrees(withSkills, withAgents, withCodex, withOmp, withPi, withDevin bool) []Tree {
270
+ func InstallTrees(withSkills, withAgents, withCodex, withOmp, withPi, withDevin, withDsh bool) []Tree {
256
271
  var trees []Tree
257
272
  if withSkills {
258
273
  trees = append(trees, Tree{PayloadPrefix: "claude/skills", TargetPrefix: ClaudeSkillsTarget})
@@ -274,6 +289,9 @@ func InstallTrees(withSkills, withAgents, withCodex, withOmp, withPi, withDevin
274
289
  if withDevin {
275
290
  trees = append(trees, Tree{PayloadPrefix: "devin/skills", TargetPrefix: DevinSkillsTarget})
276
291
  }
292
+ if withDsh {
293
+ trees = append(trees, Tree{PayloadPrefix: "dsh/skills", TargetPrefix: DshSkillsTarget})
294
+ }
277
295
  }
278
296
  if withAgents {
279
297
  trees = append(trees, Tree{PayloadPrefix: "claude/agents", TargetPrefix: ClaudeAgentsTarget})
@@ -290,13 +308,16 @@ func InstallTrees(withSkills, withAgents, withCodex, withOmp, withPi, withDevin
290
308
  trees = append(trees, Tree{PayloadPrefix: "devin/agents", TargetPrefix: DevinAgentsTarget})
291
309
  }
292
310
  }
311
+ if withAgents && withDsh {
312
+ trees = append(trees, Tree{PayloadPrefix: "dsh/agents", TargetPrefix: DshAgentsTarget}, Tree{PayloadPrefix: "dsh/runtime", TargetPrefix: ".dsh"})
313
+ }
293
314
  if withSkills && withAgents {
294
315
  trees = append(trees, Tree{PayloadPrefix: "claude/workflows", TargetPrefix: ClaudeWorkflowsTarget})
295
316
  }
296
317
  return trees
297
318
  }
298
319
 
299
- func AliasTargets(alias Alias, withCodex, withOmp, withPi, withDevin bool) []string {
320
+ func AliasTargets(alias Alias, withCodex, withOmp, withPi, withDevin, withDsh bool) []string {
300
321
  targets := []string{filepath.ToSlash(filepath.Join(ClaudeSkillsTarget, alias.Name, "SKILL.md"))}
301
322
  if withCodex {
302
323
  targets = append(targets, filepath.ToSlash(filepath.Join(CodexSkillsTarget, alias.Name, "SKILL.md")))
@@ -310,6 +331,9 @@ func AliasTargets(alias Alias, withCodex, withOmp, withPi, withDevin bool) []str
310
331
  if withDevin {
311
332
  targets = append(targets, filepath.ToSlash(filepath.Join(DevinSkillsTarget, alias.Name, "SKILL.md")))
312
333
  }
334
+ if withDsh {
335
+ targets = append(targets, filepath.ToSlash(filepath.Join(DshSkillsTarget, alias.Name, "SKILL.md")))
336
+ }
313
337
  return targets
314
338
  }
315
339
 
@@ -26,6 +26,7 @@ func (r *runner) install() error {
26
26
  fmt.Fprintf(r.opts.Stdout, " omp : %s\n", yesno(r.opts.WithOmp))
27
27
  fmt.Fprintf(r.opts.Stdout, " pi : %s\n", yesno(r.opts.WithPi))
28
28
  fmt.Fprintf(r.opts.Stdout, " devin : %s\n", yesno(r.opts.WithDevin))
29
+ fmt.Fprintf(r.opts.Stdout, " dsh : %s\n", yesno(r.opts.WithDsh))
29
30
  fmt.Fprintf(r.opts.Stdout, " aliases: %s\n", r.opts.AliasMode)
30
31
  if r.opts.DryRun {
31
32
  fmt.Fprintln(r.opts.Stdout, " (dry run - no changes will be made)")
@@ -43,7 +44,7 @@ func (r *runner) install() error {
43
44
  return err
44
45
  }
45
46
 
46
- for _, tree := range hostpack.InstallTrees(r.opts.WithSkills, r.opts.WithAgents, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin) {
47
+ for _, tree := range hostpack.InstallTrees(r.opts.WithSkills, r.opts.WithAgents, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin, r.opts.WithDsh) {
47
48
  if err := r.installTree(tree.PayloadPrefix, tree.TargetPrefix); err != nil {
48
49
  return fmt.Errorf("install tree %s: %w", tree.TargetPrefix, err)
49
50
  }
@@ -54,7 +55,7 @@ func (r *runner) install() error {
54
55
  if err != nil {
55
56
  return fmt.Errorf("render alias skill %s: %w", alias.Name, err)
56
57
  }
57
- for _, rel := range hostpack.AliasTargets(alias, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin) {
58
+ for _, rel := range hostpack.AliasTargets(alias, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin, r.opts.WithDsh) {
58
59
  if err := r.installData(data, rel); err != nil {
59
60
  return fmt.Errorf("install alias: %w", err)
60
61
  }
@@ -79,6 +80,11 @@ func (r *runner) install() error {
79
80
  return fmt.Errorf("merge %s: %w", hostpack.DevinAgentsMerge.TargetRel, err)
80
81
  }
81
82
  }
83
+ if r.opts.WithSkills && r.opts.WithDsh {
84
+ if err := r.mergeMarkerFile(hostpack.DshAgentsMerge); err != nil {
85
+ return fmt.Errorf("merge %s: %w", hostpack.DshAgentsMerge.TargetRel, err)
86
+ }
87
+ }
82
88
  if r.opts.WithSkills {
83
89
  if err := r.seedClaudeSettings(); err != nil {
84
90
  return fmt.Errorf("seed claude settings: %w", err)
@@ -112,6 +118,9 @@ func (r *runner) install() error {
112
118
  }
113
119
  fmt.Fprintf(r.opts.Stdout, " installed: %d overwritten: %d skipped(conflict): %d pruned: %d\n", r.stats.installed, r.stats.overwrote, r.stats.skipped, r.stats.pruned)
114
120
  if !r.opts.DryRun && r.opts.WithSkills {
121
+ if r.opts.WithDsh && r.opts.WithAgents {
122
+ fmt.Fprintln(r.opts.Stdout, "DSH: run npx @deepseek-ai/dsh web --patch .dsh/cordis.patch.yml, then select the DevRites preset.")
123
+ }
115
124
  claudeHosts := "Claude"
116
125
  if r.opts.WithDevin {
117
126
  claudeHosts = "Claude/Devin"
@@ -445,6 +454,9 @@ func (r *runner) flagsString() string {
445
454
  if !r.opts.WithDevin {
446
455
  flags = append(flags, "--no-devin")
447
456
  }
457
+ if !r.opts.WithDsh {
458
+ flags = append(flags, "--no-dsh")
459
+ }
448
460
  if !r.opts.WithBinary {
449
461
  flags = append(flags, "--no-binary")
450
462
  }
@@ -37,6 +37,7 @@ type Options struct {
37
37
  WithOmp bool
38
38
  WithPi bool
39
39
  WithDevin bool
40
+ WithDsh bool
40
41
  WithBinary bool
41
42
  KeepBinary bool
42
43
  AliasMode string
@@ -91,6 +92,7 @@ func DefaultOptions(mode Mode) Options {
91
92
  WithOmp: true,
92
93
  WithPi: true,
93
94
  WithDevin: true,
95
+ WithDsh: true,
94
96
  WithBinary: true,
95
97
  AliasMode: "safe",
96
98
  Stdout: io.Discard,
@@ -145,6 +147,7 @@ func parseArgs(args []string, opts *Options) error {
145
147
  noOmp := flags.Bool("no-omp", !opts.WithOmp, "")
146
148
  noPi := flags.Bool("no-pi", !opts.WithPi, "")
147
149
  noDevin := flags.Bool("no-devin", !opts.WithDevin, "")
150
+ noDsh := flags.Bool("no-dsh", !opts.WithDsh, "")
148
151
  noAgents := flags.Bool("no-agents", !opts.WithAgents, "")
149
152
  noSkills := flags.Bool("no-skills", !opts.WithSkills, "")
150
153
  noBinary := flags.Bool("no-binary", !opts.WithBinary, "")
@@ -174,6 +177,7 @@ func parseArgs(args []string, opts *Options) error {
174
177
  opts.WithOmp = !*noOmp
175
178
  opts.WithPi = !*noPi
176
179
  opts.WithDevin = !*noDevin
180
+ opts.WithDsh = !*noDsh
177
181
  opts.WithAgents = !*noAgents
178
182
  opts.WithSkills = !*noSkills
179
183
  opts.WithBinary = !*noBinary
@@ -220,7 +224,7 @@ func usage(mode Mode) string {
220
224
  case ModeUpdate:
221
225
  return "usage: devrites-engine update [--target DIR] [--dry-run] [--force] [--check] [install flags] [--source-dir DIR --payload-dir DIR]\n"
222
226
  default:
223
- return "usage: devrites-engine install [--target DIR] [--dry-run] [--force] [--no-codex] [--no-omp] [--no-pi] [--no-devin] [--no-agents] [--no-skills] [--no-binary] [--short-aliases=all]\n"
227
+ return "usage: devrites-engine install [--target DIR] [--dry-run] [--force] [--no-codex] [--no-omp] [--no-pi] [--no-devin] [--no-dsh] [--no-agents] [--no-skills] [--no-binary] [--short-aliases=all]\n"
224
228
  }
225
229
  }
226
230
 
@@ -351,7 +355,7 @@ func (r *runner) validatePayload() error {
351
355
  if r.payload == "" {
352
356
  return fmt.Errorf("generated install payload not found; pass --payload-dir or run scripts/build-host-artifacts.sh")
353
357
  }
354
- if err := hostpack.ValidatePayload(r.payloadFS, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin); err != nil {
358
+ if err := hostpack.ValidatePayload(r.payloadFS, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin, r.opts.WithDsh); err != nil {
355
359
  return fmt.Errorf("generated install payload under %s: %w", r.payload, err)
356
360
  }
357
361
  return nil
@@ -370,7 +374,7 @@ func isGlobalTarget(target string) bool {
370
374
  if target == h {
371
375
  return true
372
376
  }
373
- for _, rel := range []string{".claude", ".codex", ".omp", ".pi", ".devin", filepath.Join(".config", "devin"), ".agents"} {
377
+ for _, rel := range []string{".claude", ".codex", ".omp", ".pi", ".devin", ".dsh", filepath.Join(".config", "devin"), ".agents"} {
374
378
  global := filepath.Join(h, rel)
375
379
  globals := []string{global}
376
380
  if resolved, err := filepath.EvalSymlinks(global); err == nil {
@@ -176,6 +176,7 @@ func (r *runner) sharedMarkerMerges(merge hostpack.MarkerMerge) []hostpack.Marke
176
176
  {r.opts.WithCodex, hostpack.CodexAgentsMerge},
177
177
  {r.opts.WithPi, hostpack.PiAgentsMerge},
178
178
  {r.opts.WithDevin, hostpack.DevinAgentsMerge},
179
+ {r.opts.WithDsh, hostpack.DshAgentsMerge},
179
180
  } {
180
181
  if other.enabled && other.merge.TargetRel == merge.TargetRel && other.merge.Begin != merge.Begin {
181
182
  merges = append(merges, other.merge)
@@ -90,6 +90,7 @@ func (r *runner) preflightMerges() error {
90
90
  {r.opts.WithCodex, hostpack.CodexAgentsMerge},
91
91
  {r.opts.WithPi, hostpack.PiAgentsMerge},
92
92
  {r.opts.WithDevin, hostpack.DevinAgentsMerge},
93
+ {r.opts.WithDsh, hostpack.DshAgentsMerge},
93
94
  } {
94
95
  if !m.enabled {
95
96
  continue
@@ -160,7 +161,7 @@ func (r *runner) isPinnedAlias(rel string) bool {
160
161
 
161
162
  func (r *runner) desiredInstallPaths() (map[string]bool, error) {
162
163
  out := map[string]bool{".devrites/README.md": true}
163
- for _, tree := range hostpack.InstallTrees(r.opts.WithSkills, r.opts.WithAgents, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin) {
164
+ for _, tree := range hostpack.InstallTrees(r.opts.WithSkills, r.opts.WithAgents, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin, r.opts.WithDsh) {
164
165
  err := fs.WalkDir(r.payloadFS, tree.PayloadPrefix, func(path string, d fs.DirEntry, err error) error {
165
166
  if err != nil {
166
167
  return err
@@ -181,7 +182,7 @@ func (r *runner) desiredInstallPaths() (map[string]bool, error) {
181
182
  }
182
183
  if r.opts.WithSkills && r.opts.AliasMode == "all" {
183
184
  for _, alias := range hostpack.Aliases {
184
- for _, rel := range hostpack.AliasTargets(alias, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin) {
185
+ for _, rel := range hostpack.AliasTargets(alias, r.opts.WithCodex, r.opts.WithOmp, r.opts.WithPi, r.opts.WithDevin, r.opts.WithDsh) {
185
186
  out[rel] = true
186
187
  }
187
188
  }
@@ -196,6 +197,9 @@ func (r *runner) desiredInstallPaths() (map[string]bool, error) {
196
197
  if r.opts.WithSkills && r.opts.WithDevin {
197
198
  out[hostpack.DevinAgentsMerge.MarkerRel] = true
198
199
  }
200
+ if r.opts.WithSkills && r.opts.WithDsh {
201
+ out[hostpack.DshAgentsMerge.MarkerRel] = true
202
+ }
199
203
  if r.opts.WithSkills {
200
204
  out[hostpack.ClaudeSettingsMerge.MarkerRel] = true
201
205
  }
@@ -218,6 +222,9 @@ func (r *runner) installMergeTargets() []string {
218
222
  if r.opts.WithDevin {
219
223
  out = append(out, hostpack.DevinAgentsMerge.TargetRel)
220
224
  }
225
+ if r.opts.WithDsh {
226
+ out = append(out, hostpack.DshAgentsMerge.TargetRel)
227
+ }
221
228
  }
222
229
  return out
223
230
  }
@@ -65,7 +65,7 @@ func runUpdate(opts Options) error {
65
65
  if err != nil {
66
66
  return fmt.Errorf("resolve payload %s: %w", opts.PayloadDir, err)
67
67
  }
68
- if err := hostpack.ValidatePayload(os.DirFS(payload), true, true, true, true); err != nil {
68
+ if err := hostpack.ValidatePayload(os.DirFS(payload), true, true, true, true, true); err != nil {
69
69
  return fmt.Errorf("local update payload under %s is invalid: %w", payload, err)
70
70
  }
71
71
  installFlags := manifestHeader(mf, "devrites-flags")
@@ -68,7 +68,7 @@ func lintKnownRoles(root, phase string, roles []string) error {
68
68
  skillsRoots = append(skillsRoots, dir)
69
69
  }
70
70
  }
71
- for _, rel := range []string{".omp/skills", ".agents/skills", ".pi/skills", ".devin/skills"} {
71
+ for _, rel := range []string{".omp/skills", ".agents/skills", ".pi/skills", ".devin/skills", ".dsh/skills"} {
72
72
  dir := filepath.Join(project, filepath.FromSlash(rel))
73
73
  if info, err := os.Stat(filepath.Join(dir, "devrites-lib")); err == nil && info.IsDir() {
74
74
  skillsRoots = append(skillsRoots, dir)
@@ -13,6 +13,8 @@ This directory is generated by `scripts/build-host-artifacts.sh`.
13
13
  - `devin/` contains Devin CLI skill mirrors, custom subagent profiles with
14
14
  `allowed-tools` allowlists, and an `AGENTS.md` bridge block.
15
15
 
16
+ - `dsh/` contains DSH skills, canonical role profiles, a native preset overlay, and a permission guard.
17
+
16
18
  Do not edit these files by hand. Edit `pack/.claude/`,
17
19
  `scripts/codex-generate.sh`, `scripts/omp-generate.sh`,
18
- `scripts/pi-generate.sh`, or `scripts/devin-generate.sh`, then rebuild.
20
+ `scripts/pi-generate.sh`, `scripts/devin-generate.sh`, or `scripts/dsh-generate.py`, then rebuild.
@@ -0,0 +1,27 @@
1
+ <!-- BEGIN DEVRITES DSH -->
2
+ # DevRites for DSH
3
+
4
+ Use the installed skills under `.dsh/skills` and invoke `/rite` or `/rite-<verb>`.
5
+ Read `.dsh/skills/devrites-lib/reference/standards/core.md` before a workflow.
6
+ Dispatch means call `subagent` with `agent_preset` set to the exact named specialist,
7
+ a self-contained `prompt`, and a short `description`. Every dispatch uses the native
8
+ `spawn` provider, a fresh Session with zero parent conversation. Never use a generic
9
+ agent, inherit the orchestrator preset, or use `subagent_fork` as a substitute.
10
+ Include the exact project-relative allowed paths and required evidence in the prompt.
11
+ The child id returned by `subagent` is an admission receipt, not a completed result.
12
+ Collect the native parent settlement notice for each id, including final text and
13
+ terminal status. `list_agents` activity `inactive` does not prove success. Reconcile
14
+ every result and compare returned paths with the contract before continuing.
15
+ Missing preset, failed activation, interrupted execution, or missing result blocks
16
+ the dependent work. Report the failure; never impersonate the specialist inline.
17
+ The orchestrator writes workspace bookkeeping; only the named writer writes source
18
+ and tests within its path contract. No skill or result authorizes commits, pushes,
19
+ publishing, deployment, or other irreversible actions without explicit approval.
20
+ Use configured Codebase Memory MCP queries first for structural code questions.
21
+ Check index status, freshness, and coverage before relying on graph results; verify
22
+ material findings in source. Only the orchestrator may index, using cache-only
23
+ `index_repository` with persistence omitted or false. Children never index: hand
24
+ missing or stale coverage to the parent, or use grep/glob/read for source fallback.
25
+ If the MCP server or index is unavailable, continue with grep/glob/read. Keep
26
+ grep/glob for literal searches. MCP permissions are separate from the file sandbox.
27
+ <!-- END DEVRITES DSH -->