agentic-engineering-harness 0.4.16

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 (280) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +273 -0
  3. package/dist/agents/audit.d.ts +12 -0
  4. package/dist/agents/audit.js +14 -0
  5. package/dist/agents/audit.js.map +1 -0
  6. package/dist/agents/compiler.d.ts +8 -0
  7. package/dist/agents/compiler.js +103 -0
  8. package/dist/agents/compiler.js.map +1 -0
  9. package/dist/agents/config.d.ts +6 -0
  10. package/dist/agents/config.js +161 -0
  11. package/dist/agents/config.js.map +1 -0
  12. package/dist/agents/escalation.d.ts +9 -0
  13. package/dist/agents/escalation.js +75 -0
  14. package/dist/agents/escalation.js.map +1 -0
  15. package/dist/agents/exceptionDetection.d.ts +24 -0
  16. package/dist/agents/exceptionDetection.js +42 -0
  17. package/dist/agents/exceptionDetection.js.map +1 -0
  18. package/dist/agents/findings.d.ts +14 -0
  19. package/dist/agents/findings.js +40 -0
  20. package/dist/agents/findings.js.map +1 -0
  21. package/dist/agents/gitCheckpoint.d.ts +6 -0
  22. package/dist/agents/gitCheckpoint.js +61 -0
  23. package/dist/agents/gitCheckpoint.js.map +1 -0
  24. package/dist/agents/jsonc.d.ts +1 -0
  25. package/dist/agents/jsonc.js +42 -0
  26. package/dist/agents/jsonc.js.map +1 -0
  27. package/dist/agents/outputContracts.d.ts +161 -0
  28. package/dist/agents/outputContracts.js +16 -0
  29. package/dist/agents/outputContracts.js.map +1 -0
  30. package/dist/agents/parallelism.d.ts +14 -0
  31. package/dist/agents/parallelism.js +54 -0
  32. package/dist/agents/parallelism.js.map +1 -0
  33. package/dist/agents/permissions.d.ts +5 -0
  34. package/dist/agents/permissions.js +30 -0
  35. package/dist/agents/permissions.js.map +1 -0
  36. package/dist/agents/qualityConvergence.d.ts +44 -0
  37. package/dist/agents/qualityConvergence.js +77 -0
  38. package/dist/agents/qualityConvergence.js.map +1 -0
  39. package/dist/agents/recovery.d.ts +13 -0
  40. package/dist/agents/recovery.js +35 -0
  41. package/dist/agents/recovery.js.map +1 -0
  42. package/dist/agents/reviewLifecycle.d.ts +30 -0
  43. package/dist/agents/reviewLifecycle.js +233 -0
  44. package/dist/agents/reviewLifecycle.js.map +1 -0
  45. package/dist/agents/routing.d.ts +9 -0
  46. package/dist/agents/routing.js +37 -0
  47. package/dist/agents/routing.js.map +1 -0
  48. package/dist/agents/structuredOutput.d.ts +1 -0
  49. package/dist/agents/structuredOutput.js +54 -0
  50. package/dist/agents/structuredOutput.js.map +1 -0
  51. package/dist/agents/types.d.ts +207 -0
  52. package/dist/agents/types.js +2 -0
  53. package/dist/agents/types.js.map +1 -0
  54. package/dist/cli.d.ts +2 -0
  55. package/dist/cli.js +221 -0
  56. package/dist/cli.js.map +1 -0
  57. package/dist/core/config.d.ts +3 -0
  58. package/dist/core/config.js +59 -0
  59. package/dist/core/config.js.map +1 -0
  60. package/dist/core/doctor.d.ts +8 -0
  61. package/dist/core/doctor.js +59 -0
  62. package/dist/core/doctor.js.map +1 -0
  63. package/dist/core/git.d.ts +8 -0
  64. package/dist/core/git.js +47 -0
  65. package/dist/core/git.js.map +1 -0
  66. package/dist/core/init.d.ts +1 -0
  67. package/dist/core/init.js +52 -0
  68. package/dist/core/init.js.map +1 -0
  69. package/dist/core/quick.d.ts +20 -0
  70. package/dist/core/quick.js +49 -0
  71. package/dist/core/quick.js.map +1 -0
  72. package/dist/core/repair.d.ts +8 -0
  73. package/dist/core/repair.js +7 -0
  74. package/dist/core/repair.js.map +1 -0
  75. package/dist/core/run.d.ts +38 -0
  76. package/dist/core/run.js +165 -0
  77. package/dist/core/run.js.map +1 -0
  78. package/dist/core/sdd.d.ts +10 -0
  79. package/dist/core/sdd.js +88 -0
  80. package/dist/core/sdd.js.map +1 -0
  81. package/dist/core/seal.d.ts +3 -0
  82. package/dist/core/seal.js +74 -0
  83. package/dist/core/seal.js.map +1 -0
  84. package/dist/core/triage.d.ts +22 -0
  85. package/dist/core/triage.js +38 -0
  86. package/dist/core/triage.js.map +1 -0
  87. package/dist/core/types.d.ts +354 -0
  88. package/dist/core/types.js +2 -0
  89. package/dist/core/types.js.map +1 -0
  90. package/dist/core/verify.d.ts +6 -0
  91. package/dist/core/verify.js +51 -0
  92. package/dist/core/verify.js.map +1 -0
  93. package/dist/delivery/finalize.d.ts +17 -0
  94. package/dist/delivery/finalize.js +71 -0
  95. package/dist/delivery/finalize.js.map +1 -0
  96. package/dist/delivery/handoff.d.ts +39 -0
  97. package/dist/delivery/handoff.js +250 -0
  98. package/dist/delivery/handoff.js.map +1 -0
  99. package/dist/entry.d.ts +2 -0
  100. package/dist/entry.js +112 -0
  101. package/dist/entry.js.map +1 -0
  102. package/dist/evals/runner.d.ts +4 -0
  103. package/dist/evals/runner.js +112 -0
  104. package/dist/evals/runner.js.map +1 -0
  105. package/dist/evals/scoring.d.ts +3 -0
  106. package/dist/evals/scoring.js +41 -0
  107. package/dist/evals/scoring.js.map +1 -0
  108. package/dist/evals/types.d.ts +46 -0
  109. package/dist/evals/types.js +2 -0
  110. package/dist/evals/types.js.map +1 -0
  111. package/dist/issues/intake.d.ts +114 -0
  112. package/dist/issues/intake.js +213 -0
  113. package/dist/issues/intake.js.map +1 -0
  114. package/dist/memory/benchmark.d.ts +33 -0
  115. package/dist/memory/benchmark.js +69 -0
  116. package/dist/memory/benchmark.js.map +1 -0
  117. package/dist/metrics/runMetrics.d.ts +9 -0
  118. package/dist/metrics/runMetrics.js +34 -0
  119. package/dist/metrics/runMetrics.js.map +1 -0
  120. package/dist/metrics/usage.d.ts +3 -0
  121. package/dist/metrics/usage.js +53 -0
  122. package/dist/metrics/usage.js.map +1 -0
  123. package/dist/provenance/generate.d.ts +30 -0
  124. package/dist/provenance/generate.js +96 -0
  125. package/dist/provenance/generate.js.map +1 -0
  126. package/dist/providers/engram.d.ts +8 -0
  127. package/dist/providers/engram.js +14 -0
  128. package/dist/providers/engram.js.map +1 -0
  129. package/dist/providers/graphify.d.ts +9 -0
  130. package/dist/providers/graphify.js +28 -0
  131. package/dist/providers/graphify.js.map +1 -0
  132. package/dist/providers/paseo.d.ts +8 -0
  133. package/dist/providers/paseo.js +14 -0
  134. package/dist/providers/paseo.js.map +1 -0
  135. package/dist/providers/types.d.ts +41 -0
  136. package/dist/providers/types.js +2 -0
  137. package/dist/providers/types.js.map +1 -0
  138. package/dist/telemetry/events.d.ts +2 -0
  139. package/dist/telemetry/events.js +29 -0
  140. package/dist/telemetry/events.js.map +1 -0
  141. package/dist/telemetry/otlp.d.ts +3 -0
  142. package/dist/telemetry/otlp.js +57 -0
  143. package/dist/telemetry/otlp.js.map +1 -0
  144. package/dist/toolchain/config.d.ts +10 -0
  145. package/dist/toolchain/config.js +54 -0
  146. package/dist/toolchain/config.js.map +1 -0
  147. package/dist/toolchain/doctor.d.ts +8 -0
  148. package/dist/toolchain/doctor.js +56 -0
  149. package/dist/toolchain/doctor.js.map +1 -0
  150. package/dist/toolchain/mise.d.ts +10 -0
  151. package/dist/toolchain/mise.js +61 -0
  152. package/dist/toolchain/mise.js.map +1 -0
  153. package/dist/toolchain/resolve.d.ts +8 -0
  154. package/dist/toolchain/resolve.js +159 -0
  155. package/dist/toolchain/resolve.js.map +1 -0
  156. package/dist/toolchain/setup.d.ts +7 -0
  157. package/dist/toolchain/setup.js +141 -0
  158. package/dist/toolchain/setup.js.map +1 -0
  159. package/dist/toolchain/types.d.ts +95 -0
  160. package/dist/toolchain/types.js +2 -0
  161. package/dist/toolchain/types.js.map +1 -0
  162. package/dist/utils/process.d.ts +15 -0
  163. package/dist/utils/process.js +94 -0
  164. package/dist/utils/process.js.map +1 -0
  165. package/dist/validators/commands.d.ts +2 -0
  166. package/dist/validators/commands.js +28 -0
  167. package/dist/validators/commands.js.map +1 -0
  168. package/dist/validators/constraints.d.ts +6 -0
  169. package/dist/validators/constraints.js +30 -0
  170. package/dist/validators/constraints.js.map +1 -0
  171. package/dist/validators/diffScope.d.ts +2 -0
  172. package/dist/validators/diffScope.js +36 -0
  173. package/dist/validators/diffScope.js.map +1 -0
  174. package/dist/validators/evidence.d.ts +6 -0
  175. package/dist/validators/evidence.js +8 -0
  176. package/dist/validators/evidence.js.map +1 -0
  177. package/dist/validators/external.d.ts +3 -0
  178. package/dist/validators/external.js +22 -0
  179. package/dist/validators/external.js.map +1 -0
  180. package/dist/validators/gherkin.d.ts +3 -0
  181. package/dist/validators/gherkin.js +59 -0
  182. package/dist/validators/gherkin.js.map +1 -0
  183. package/dist/validators/graphify.d.ts +4 -0
  184. package/dist/validators/graphify.js +108 -0
  185. package/dist/validators/graphify.js.map +1 -0
  186. package/dist/validators/opa.d.ts +3 -0
  187. package/dist/validators/opa.js +43 -0
  188. package/dist/validators/opa.js.map +1 -0
  189. package/dist/validators/openapi.d.ts +25 -0
  190. package/dist/validators/openapi.js +98 -0
  191. package/dist/validators/openapi.js.map +1 -0
  192. package/dist/validators/registry.d.ts +2 -0
  193. package/dist/validators/registry.js +36 -0
  194. package/dist/validators/registry.js.map +1 -0
  195. package/dist/validators/toolCommand.d.ts +5 -0
  196. package/dist/validators/toolCommand.js +33 -0
  197. package/dist/validators/toolCommand.js.map +1 -0
  198. package/dist/validators/types.d.ts +13 -0
  199. package/dist/validators/types.js +2 -0
  200. package/dist/validators/types.js.map +1 -0
  201. package/dist/workers/agentPrompt.d.ts +3 -0
  202. package/dist/workers/agentPrompt.js +84 -0
  203. package/dist/workers/agentPrompt.js.map +1 -0
  204. package/dist/workers/direct.d.ts +13 -0
  205. package/dist/workers/direct.js +30 -0
  206. package/dist/workers/direct.js.map +1 -0
  207. package/dist/workers/factory.d.ts +4 -0
  208. package/dist/workers/factory.js +10 -0
  209. package/dist/workers/factory.js.map +1 -0
  210. package/dist/workers/paseo.d.ts +14 -0
  211. package/dist/workers/paseo.js +29 -0
  212. package/dist/workers/paseo.js.map +1 -0
  213. package/dist/workers/podman.d.ts +13 -0
  214. package/dist/workers/podman.js +22 -0
  215. package/dist/workers/podman.js.map +1 -0
  216. package/dist/workers/prompt.d.ts +4 -0
  217. package/dist/workers/prompt.js +4 -0
  218. package/dist/workers/prompt.js.map +1 -0
  219. package/dist/workers/types.d.ts +11 -0
  220. package/dist/workers/types.js +2 -0
  221. package/dist/workers/types.js.map +1 -0
  222. package/docs/ARCHITECTURE.md +47 -0
  223. package/docs/EVALS.md +28 -0
  224. package/docs/MEMORY.md +28 -0
  225. package/docs/OBSERVABILITY.md +18 -0
  226. package/docs/OSS_STACK.md +27 -0
  227. package/docs/PASEO.md +9 -0
  228. package/docs/PUBLISHING.md +110 -0
  229. package/docs/SDD.md +35 -0
  230. package/docs/SECURITY.md +21 -0
  231. package/docs/V0.2.md +42 -0
  232. package/docs/V0.3.md +40 -0
  233. package/docs/V0.4.11.md +30 -0
  234. package/docs/V0.4.12.md +88 -0
  235. package/docs/V0.4.13.md +203 -0
  236. package/docs/V0.4.14.md +209 -0
  237. package/docs/V0.4.15.md +365 -0
  238. package/docs/V0.4.16.md +229 -0
  239. package/docs/V0.4.md +28 -0
  240. package/docs/VALIDATION.md +23 -0
  241. package/package.json +18 -0
  242. package/policies/core/dependency-policy.rego +12 -0
  243. package/policies/core/schema-policy.rego +12 -0
  244. package/policies/core/trust-boundary.rego +17 -0
  245. package/presets/agents/default.jsonc +80 -0
  246. package/presets/docker.yaml +4 -0
  247. package/presets/dotnet.yaml +12 -0
  248. package/presets/expo.yaml +6 -0
  249. package/presets/generic.yaml +3 -0
  250. package/presets/nextjs.yaml +8 -0
  251. package/presets/node.yaml +6 -0
  252. package/presets/pnpm.yaml +6 -0
  253. package/presets/postgres.yaml +4 -0
  254. package/schemas/agent-output-planner.schema.json +1 -0
  255. package/schemas/agent-topology.schema.json +37 -0
  256. package/schemas/project.schema.json +36 -0
  257. package/schemas/quick-contract.schema.json +17 -0
  258. package/schemas/task-contract.schema.json +18 -0
  259. package/schemas/toolchain.schema.json +70 -0
  260. package/schemas/validation-report.schema.json +15 -0
  261. package/skills/acceptance-traceability/SKILL.md +13 -0
  262. package/skills/deterministic-validation/SKILL.md +15 -0
  263. package/skills/engineering-workflow/SKILL.md +108 -0
  264. package/skills/finding-dedup/SKILL.md +12 -0
  265. package/skills/github-delivery-lifecycle/SKILL.md +16 -0
  266. package/skills/implementation-worker/SKILL.md +17 -0
  267. package/skills/lead-engineer/SKILL.md +30 -0
  268. package/skills/memory-hygiene/SKILL.md +22 -0
  269. package/skills/prompt-drift-audit/SKILL.md +10 -0
  270. package/skills/recovery-classifier/SKILL.md +13 -0
  271. package/skills/routing-normalizer/SKILL.md +17 -0
  272. package/skills/sdd/SKILL.md +21 -0
  273. package/skills/simplify/SKILL.md +16 -0
  274. package/skills/verification-planning/SKILL.md +17 -0
  275. package/skills/worktree-lifecycle/SKILL.md +18 -0
  276. package/templates/AGENTS.md +37 -0
  277. package/templates/agents.source.jsonc +39 -0
  278. package/templates/otel-collector.yaml +21 -0
  279. package/templates/project.yaml +196 -0
  280. package/templates/toolchain.yaml +127 -0
@@ -0,0 +1,203 @@
1
+ # v0.4.13 — Built-in Default Agent Pack
2
+
3
+ v0.4.13 makes agent topology reusable even when a target repository has never had a `.harness/` directory. The package now ships a built-in `aeh:default` topology and `aeh init` creates a small project overlay that extends it instead of copying the entire agent catalog.
4
+
5
+ ## Why a built-in pack
6
+
7
+ A project should not have to maintain a large agent JSON file merely to obtain sensible engineering roles. At the same time, defaults must not become immutable framework magic. The topology therefore uses explicit layer composition:
8
+
9
+ ```jsonc
10
+ {
11
+ "version": 1,
12
+ "extends": ["aeh:default"],
13
+ "agents": {},
14
+ "routing": [],
15
+ "remove": { "agents": [] }
16
+ }
17
+ ```
18
+
19
+ The effective topology is deterministic and inspectable through `aeh agents compile`, `aeh agents check`, `aeh agents list`, `aeh agents show`, and `aeh agents route`.
20
+
21
+ ## Default agents
22
+
23
+ The built-in pack deliberately includes cross-project engineering roles rather than copying every project-specific Pawra role.
24
+
25
+ ### Control and discovery
26
+
27
+ - `lead` — orchestration, intent ownership and final semantic acceptance (`@brain`).
28
+ - `planner` — read-only decomposition and dependency planning (`@brain`).
29
+ - `oracle` — read-only diagnosis and exception classification (`@brain`).
30
+ - `explorer` — cheap repository discovery (`@workhorse`).
31
+ - `librarian` — authoritative documentation/research support (`@workhorse`).
32
+
33
+ ### Implementers
34
+
35
+ - `implementation-worker` — generic fallback.
36
+ - `backend-implementer`
37
+ - `frontend-implementer`
38
+ - `data-implementer`
39
+ - `mobile-implementer`
40
+ - `test-implementer`
41
+ - `docs-implementer`
42
+ - `ops-implementer`
43
+ - `quality-implementer` — focused review-debt remediation.
44
+ - `senior-implementer` — stronger `@brain` remediation.
45
+
46
+ ### Reviewers
47
+
48
+ - `code-quality-reviewer`
49
+ - `requirements-reviewer`
50
+ - `architecture-reviewer`
51
+ - `security-reviewer`
52
+ - `api-reviewer`
53
+ - `backend-reviewer`
54
+ - `frontend-reviewer`
55
+ - `data-reviewer`
56
+ - `mobile-reviewer`
57
+ - `test-reviewer`
58
+ - `docs-reviewer`
59
+ - `ops-reviewer`
60
+
61
+ ### Validation
62
+
63
+ - `validator`
64
+ - `integration-validator`
65
+ - `e2e-validator`
66
+
67
+ Agents that are tightly coupled to one external workflow are intentionally not universal defaults. In particular, `openspec-manager` is redundant with the Harness SDD/QuickContract normative layer, while `github-manager` would make generic engineering execution depend on a GitHub-specific write surface. Projects may add either as ordinary local agents when appropriate.
68
+
69
+ ## Model defaults
70
+
71
+ The pack preserves the brain/workhorse hierarchy:
72
+
73
+ ```jsonc
74
+ "models": {
75
+ "brain": {
76
+ "runtime": "codex",
77
+ "provider": "openai",
78
+ "model": "gpt-5.6-luna",
79
+ "variant": "max"
80
+ },
81
+ "workhorse": {
82
+ "runtime": "opencode",
83
+ "provider": "opencode-go",
84
+ "model": "deepseek-v4-flash"
85
+ }
86
+ }
87
+ ```
88
+
89
+ Changing an alias once changes every inherited agent that uses it.
90
+
91
+ ## Four composition operations
92
+
93
+ ### 1. Use the defaults unchanged
94
+
95
+ ```jsonc
96
+ {
97
+ "version": 1,
98
+ "extends": ["aeh:default"]
99
+ }
100
+ ```
101
+
102
+ ### 2. Add an agent
103
+
104
+ ```jsonc
105
+ {
106
+ "version": 1,
107
+ "extends": ["aeh:default"],
108
+ "agents": {
109
+ "payments-implementer": {
110
+ "role": "implementer",
111
+ "domains": ["payments"],
112
+ "execution": { "model": "@workhorse" },
113
+ "permissions": {
114
+ "read": "allow",
115
+ "write": "allow",
116
+ "shell": "allow"
117
+ },
118
+ "outputContract": "implementer"
119
+ }
120
+ },
121
+ "routing": [
122
+ {
123
+ "id": "payments",
124
+ "priority": 90,
125
+ "when": { "intent": "implement", "domains": ["payments"] },
126
+ "use": "payments-implementer"
127
+ }
128
+ ]
129
+ }
130
+ ```
131
+
132
+ ### 3. Partially override a default agent/model
133
+
134
+ Local definitions merge onto inherited definitions, so the project only specifies what changes:
135
+
136
+ ```jsonc
137
+ {
138
+ "version": 1,
139
+ "extends": ["aeh:default"],
140
+ "models": {
141
+ "workhorse": { "model": "another-model" }
142
+ },
143
+ "agents": {
144
+ "backend-implementer": {
145
+ "temperature": 0.05,
146
+ "description": "Project-specific backend charter"
147
+ }
148
+ }
149
+ }
150
+ ```
151
+
152
+ Nested `execution`, `permissions`, runtime `capabilities`, and model `options` are merged rather than replacing the entire parent object. A routing rule with an existing `id` replaces that inherited rule.
153
+
154
+ ### 4. Remove defaults
155
+
156
+ `remove` accepts minimatch patterns:
157
+
158
+ ```jsonc
159
+ {
160
+ "version": 1,
161
+ "extends": ["aeh:default"],
162
+ "remove": {
163
+ "agents": ["mobile-*", "ops-reviewer"],
164
+ "routing": ["mobile"]
165
+ }
166
+ }
167
+ ```
168
+
169
+ Removing an agent also removes references to it from inherited routing/recovery/council membership. The effective topology is validated after composition, so remaining references to removed models/runtimes or incomplete newly-added definitions still fail deterministically.
170
+
171
+ ## Multiple layers
172
+
173
+ `extends` is ordered. Later bases override earlier bases, then the current project layer is applied:
174
+
175
+ ```jsonc
176
+ {
177
+ "version": 1,
178
+ "extends": [
179
+ "aeh:default",
180
+ "../company/agents.jsonc"
181
+ ]
182
+ }
183
+ ```
184
+
185
+ Relative extension paths are resolved relative to the file declaring them. Circular extension chains are rejected.
186
+
187
+ ## Agent charters are executable context
188
+
189
+ The `description` field is now propagated into `AgentExecutionSelection` and prepended to routed agent prompts. It is therefore a concise role charter rather than decorative metadata. Permissions and deterministic output contracts remain the enforcement boundary; the charter explains the specialist's engineering responsibility inside that boundary.
190
+
191
+ ## Self-hosting / dogfooding
192
+
193
+ The Harness repository itself now contains:
194
+
195
+ ```text
196
+ .harness/
197
+ ├── project.yaml
198
+ └── agents.source.jsonc
199
+ ```
200
+
201
+ Its topology extends `aeh:default` and adds a repository-specific `harness-reviewer`. Runtime artifacts such as generated topology, runs, reports, findings, seals and provenance remain ignored by Git.
202
+
203
+ This makes the Harness its own reference project without duplicating the built-in catalog.
@@ -0,0 +1,209 @@
1
+ # v0.4.14 — Selective MCPs, Skills and Issue/Worktree Delivery
2
+
3
+ v0.4.14 extends the built-in agent pack with a least-privilege MCP catalog, reusable engineering skills, two additional OMO-derived generic roles, and an opt-in deterministic delivery bridge from sealed SDD to GitHub and Paseo.
4
+
5
+ ## Design rules
6
+
7
+ 1. MCPs are capabilities, not authorities. Deterministic validators and sealed normative artifacts still outrank agent/tool output.
8
+ 2. MCPs are granted per logical agent. A configured server is not automatically exposed to every agent.
9
+ 3. GitHub writes for the SDD delivery lifecycle are performed by deterministic Harness code, not by an LLM with a broad GitHub MCP token.
10
+ 4. The local sealed SDD + TaskContract remain normative. The GitHub issue is a delivery mirror by default.
11
+ 5. One task maps to one resumable delivery record and, when enabled, one issue-linked branch/worktree workspace.
12
+
13
+ ## OMO Slim built-in agent mapping
14
+
15
+ The default pack was reviewed against the generic OMO Slim agents rather than only Pawra's custom roles.
16
+
17
+ | OMO capability | Harness decision | Reason |
18
+ | --- | --- | --- |
19
+ | orchestrator | `lead` | Already the Harness control-plane role. |
20
+ | oracle | `oracle` | Same escalation/root-cause niche. |
21
+ | librarian | `librarian` | Useful cross-project documentation/research role. |
22
+ | explorer | `explorer` | Useful low-cost repository discovery role. |
23
+ | designer | `designer` | Added as a read-only UI/UX reviewer with selective browser/docs MCP access. |
24
+ | fixer | `quality-implementer` | No duplicate agent; quality remediation already covers the bounded fixer niche. |
25
+ | observer | optional overlay | Not default until a project explicitly configures a multimodal/vision model and input contract. |
26
+ | council | Harness `councils` abstraction | Kept as topology data rather than duplicating it as a normal logical agent. |
27
+
28
+ The Pawra-specific `openspec-manager` remains excluded because the Harness owns SDD/QuickContract. `github-manager` is now included, but only as a **read-only coordination/triage agent**; deterministic delivery code performs issue/branch writes.
29
+
30
+ ## MCP inventory and decisions
31
+
32
+ ### Default catalog
33
+
34
+ The initialized project template defines four servers. Tool schemas are injected only for agents that request the corresponding MCP name.
35
+
36
+ ### `context7` — enabled, selective
37
+
38
+ Use for current library/framework documentation. Assigned to `librarian` and selected implementers/reviewers where external API/version knowledge is useful.
39
+
40
+ Why default: high reuse across stacks and a narrower purpose than generic web search.
41
+
42
+ ### `playwright` — enabled, selective
43
+
44
+ Use for exploratory/stateful browser inspection by `designer` and `e2e-validator`.
45
+
46
+ The deterministic Playwright validator remains the acceptance authority. MCP browser interaction does not turn manual exploratory output into a gate.
47
+
48
+ ### `github` — enabled server, read-only agent surface
49
+
50
+ Uses the official GitHub MCP server with scoped toolsets and `GITHUB_READ_ONLY=1`. Only `github-manager` receives the MCP by default.
51
+
52
+ The server token comes from environment expansion; no GitHub token is stored in topology, generated runtime or delivery state.
53
+
54
+ ### `sentry` — catalogued but disabled
55
+
56
+ Useful for production-error/trace investigation in projects that use Sentry. It is not universal and should be enabled only when a project has an operational Sentry dependency.
57
+
58
+ ## MCPs deliberately not defaulted
59
+
60
+ ### grep.app / external code search
61
+
62
+ Pawra uses `grep_app` heavily and OMO Slim often grants it to `librarian`. It remains worth supporting as a project overlay, but the generic Harness does not assume one external code-search service or server implementation.
63
+
64
+ ### codegraph / codemap MCPs
65
+
66
+ Not a default because Graphify already supplies the Harness structural code graph. A second structural graph would create competing structural truth unless a project deliberately chooses it as an adapter.
67
+
68
+ ### filesystem MCP
69
+
70
+ Not useful as a generic default: runtimes already have repository/file tools and the Harness has explicit read/write permissions. Adding another filesystem surface increases capability without adding a distinct evidence source.
71
+
72
+ ### security-scanning MCPs
73
+
74
+ OpenGrep and Trivy already run as deterministic validators. Security MCP wrappers can be useful for exploration, but they should not replace the CLI evidence used by gates.
75
+
76
+ ### database/Kubernetes/cloud-provider MCPs
77
+
78
+ Potentially valuable project overlays, but too privileged and stack-specific for the universal pack. Prefer read-only modes and narrow toolsets where supported.
79
+
80
+ ## Future MCP experiments
81
+
82
+ Good candidates for targeted evals rather than immediate defaults:
83
+
84
+ - production observability: Sentry plus OpenTelemetry-aware investigation;
85
+ - issue/project systems: GitLab, Jira/Linear when a repository actually uses them;
86
+ - self-hosted web/document retrieval for organizations that require data locality;
87
+ - read-only database schema/query MCPs for data-heavy systems;
88
+ - Kubernetes/cloud inventory MCPs in read-only mode for ops repositories;
89
+ - dependency-source lookup analogous to OMO `clonedeps`, measured against ordinary package/source checkout workflows.
90
+
91
+ Any candidate should be evaluated on task success, token/context overhead, latency, stale-data risk and permission surface before promotion to the default pack.
92
+
93
+ ## Skills added to the Harness
94
+
95
+ These are Harness-native, general-purpose policies rather than copies of Pawra/OMO prompt text:
96
+
97
+ - `verification-planning` — requirement -> deterministic evidence planning.
98
+ - `worktree-lifecycle` — isolated task/worktree discipline.
99
+ - `routing-normalizer` — bounded delegation-task normalization.
100
+ - `recovery-classifier` — canonical failure taxonomy and recovery selection.
101
+ - `acceptance-traceability` — criterion -> implementation -> executable evidence.
102
+ - `finding-dedup` — normalize/consolidate reviewer findings.
103
+ - `prompt-drift-audit` — topology/prompt/skill/generated-runtime consistency.
104
+ - `simplify` — reduce accidental complexity without changing observable behavior.
105
+ - `github-delivery-lifecycle` — safe issue-linked branch/worktree delivery rules.
106
+
107
+ ### OMO skills not duplicated directly
108
+
109
+ - `worktrees` maps to `worktree-lifecycle`.
110
+ - `verification-planning` maps directly to the Harness-native version.
111
+ - `simplify` maps directly to the Harness-native version.
112
+ - `codemap` is largely covered by Graphify.
113
+ - `clonedeps` remains an experiment candidate rather than a default requirement.
114
+ - `deepwork` is not a core policy because the Harness already owns planning/waves/convergence and should not stack a second orchestration doctrine.
115
+ - reflection-style skills overlap the eval/review/convergence loop; add only if eval evidence shows a gap.
116
+
117
+ Framework-specific Pawra skills (EF Core, Expo, Storybook, etc.) remain project overlays.
118
+
119
+ ## Per-agent MCP projection
120
+
121
+ `AgentDefinition.mcps` now affects runtime configuration. For OpenCode direct/Podman execution the Harness builds an `OPENCODE_CONFIG_CONTENT` that:
122
+
123
+ - includes only MCP server definitions selected by the logical agent;
124
+ - explicitly disables configured-but-unselected MCP tool namespaces;
125
+ - keeps existing file/shell/network/skill permissions;
126
+ - allows project/host-supplied MCP names when the topology assigns a name not present in the Harness catalog.
127
+
128
+ This prevents a large GitHub/browser MCP schema from entering every worker context.
129
+
130
+ ## SDD -> GitHub -> Paseo delivery
131
+
132
+ Delivery is disabled by default.
133
+
134
+ ```yaml
135
+ delivery:
136
+ stateDir: .harness/delivery
137
+ github:
138
+ enabled: true
139
+ tokenEnv: GH_TOKEN
140
+ assignTokenOwner: true
141
+ labels: []
142
+ branchPattern: feature/gh-{issue}-{slug}
143
+ paseo:
144
+ enabled: true
145
+ createWorkspace: true
146
+ autoUseWorkspace: true
147
+ worktreeSlugPattern: gh-{issue}-{slug}
148
+ ```
149
+
150
+ ### Lifecycle
151
+
152
+ 1. `aeh sdd new CHANGE-123 --title "..."`
153
+ - captures the current Git branch into `TaskContract.git.originatingBranch` when available;
154
+ - creates only local SDD/TaskContract artifacts; no remote writes.
155
+ 2. complete the proposal/spec/design/tasks/Gherkin and TaskContract;
156
+ 3. `aeh sdd validate CHANGE-123`;
157
+ 4. `aeh seal CHANGE-123`;
158
+ 5. `aeh sdd handoff CHANGE-123`;
159
+ - rejects incomplete traceability;
160
+ - rejects unresolved template `TODO` markers;
161
+ - verifies the seal when `validation.requireSeal` is enabled;
162
+ - reads the GitHub token from environment only;
163
+ - creates one GitHub issue and persists its ID immediately;
164
+ - creates `feature/gh-<issue>-<slug>` from the captured originating branch;
165
+ - creates a Paseo `worktree` workspace using `checkout-branch`;
166
+ - persists `.harness/delivery/<task>.json` after each successful phase.
167
+ 6. `aeh run CHANGE-123`
168
+ - when `delivery.paseo.autoUseWorkspace` is enabled, all Paseo implementation/review/repair sessions use `--workspace <id>` for that delivery record.
169
+
170
+ ## Resumability
171
+
172
+ The delivery record is a small state machine:
173
+
174
+ ```text
175
+ initialized
176
+ -> issue-created
177
+ -> branch-created
178
+ -> workspace-created
179
+ -> ready
180
+ ```
181
+
182
+ Remote writes are checkpointed. If a later step fails, rerunning `aeh sdd handoff` reuses recorded issue/branch state instead of intentionally creating duplicates.
183
+
184
+ No credential is serialized into this record.
185
+
186
+ ## Source-of-truth rule
187
+
188
+ Unlike Pawra's current OpenSpec workflow, v0.4.14 does **not** promote the GitHub issue to normative truth. The issue body explicitly says it is a delivery mirror. This preserves the Harness trust hierarchy:
189
+
190
+ ```text
191
+ sealed local SDD/TaskContract > issue mirror > agent memory/summaries
192
+ ```
193
+
194
+ A project that wants issue-canonical semantics should implement that as an explicit project/organization policy rather than silently changing the generic default.
195
+
196
+ ## Paseo workspace semantics
197
+
198
+ For an issue-backed branch the Harness uses Paseo's worktree workspace mode and checkout-existing-branch flow. The resulting workspace ID is persisted and reused by worker and routed-agent Paseo launches.
199
+
200
+ This keeps one task isolated from the request-time checkout and prevents implementation/review/repair from drifting across unrelated working trees.
201
+
202
+ ## Security notes
203
+
204
+ - GitHub delivery token: environment only; never written to config/state/generated topology.
205
+ - GitHub MCP: read-only by default and assigned only to `github-manager`.
206
+ - GitHub delivery writes: deterministic REST code, not LLM MCP calls.
207
+ - branch base: captured originating branch; never guessed from a later checkout when available.
208
+ - no force-push/rebase/amend is part of delivery recovery.
209
+ - MCPs remain optional capabilities and do not bypass deterministic acceptance gates.