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.
- package/LICENSE +201 -0
- package/README.md +273 -0
- package/dist/agents/audit.d.ts +12 -0
- package/dist/agents/audit.js +14 -0
- package/dist/agents/audit.js.map +1 -0
- package/dist/agents/compiler.d.ts +8 -0
- package/dist/agents/compiler.js +103 -0
- package/dist/agents/compiler.js.map +1 -0
- package/dist/agents/config.d.ts +6 -0
- package/dist/agents/config.js +161 -0
- package/dist/agents/config.js.map +1 -0
- package/dist/agents/escalation.d.ts +9 -0
- package/dist/agents/escalation.js +75 -0
- package/dist/agents/escalation.js.map +1 -0
- package/dist/agents/exceptionDetection.d.ts +24 -0
- package/dist/agents/exceptionDetection.js +42 -0
- package/dist/agents/exceptionDetection.js.map +1 -0
- package/dist/agents/findings.d.ts +14 -0
- package/dist/agents/findings.js +40 -0
- package/dist/agents/findings.js.map +1 -0
- package/dist/agents/gitCheckpoint.d.ts +6 -0
- package/dist/agents/gitCheckpoint.js +61 -0
- package/dist/agents/gitCheckpoint.js.map +1 -0
- package/dist/agents/jsonc.d.ts +1 -0
- package/dist/agents/jsonc.js +42 -0
- package/dist/agents/jsonc.js.map +1 -0
- package/dist/agents/outputContracts.d.ts +161 -0
- package/dist/agents/outputContracts.js +16 -0
- package/dist/agents/outputContracts.js.map +1 -0
- package/dist/agents/parallelism.d.ts +14 -0
- package/dist/agents/parallelism.js +54 -0
- package/dist/agents/parallelism.js.map +1 -0
- package/dist/agents/permissions.d.ts +5 -0
- package/dist/agents/permissions.js +30 -0
- package/dist/agents/permissions.js.map +1 -0
- package/dist/agents/qualityConvergence.d.ts +44 -0
- package/dist/agents/qualityConvergence.js +77 -0
- package/dist/agents/qualityConvergence.js.map +1 -0
- package/dist/agents/recovery.d.ts +13 -0
- package/dist/agents/recovery.js +35 -0
- package/dist/agents/recovery.js.map +1 -0
- package/dist/agents/reviewLifecycle.d.ts +30 -0
- package/dist/agents/reviewLifecycle.js +233 -0
- package/dist/agents/reviewLifecycle.js.map +1 -0
- package/dist/agents/routing.d.ts +9 -0
- package/dist/agents/routing.js +37 -0
- package/dist/agents/routing.js.map +1 -0
- package/dist/agents/structuredOutput.d.ts +1 -0
- package/dist/agents/structuredOutput.js +54 -0
- package/dist/agents/structuredOutput.js.map +1 -0
- package/dist/agents/types.d.ts +207 -0
- package/dist/agents/types.js +2 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +221 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/config.d.ts +3 -0
- package/dist/core/config.js +59 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/doctor.d.ts +8 -0
- package/dist/core/doctor.js +59 -0
- package/dist/core/doctor.js.map +1 -0
- package/dist/core/git.d.ts +8 -0
- package/dist/core/git.js +47 -0
- package/dist/core/git.js.map +1 -0
- package/dist/core/init.d.ts +1 -0
- package/dist/core/init.js +52 -0
- package/dist/core/init.js.map +1 -0
- package/dist/core/quick.d.ts +20 -0
- package/dist/core/quick.js +49 -0
- package/dist/core/quick.js.map +1 -0
- package/dist/core/repair.d.ts +8 -0
- package/dist/core/repair.js +7 -0
- package/dist/core/repair.js.map +1 -0
- package/dist/core/run.d.ts +38 -0
- package/dist/core/run.js +165 -0
- package/dist/core/run.js.map +1 -0
- package/dist/core/sdd.d.ts +10 -0
- package/dist/core/sdd.js +88 -0
- package/dist/core/sdd.js.map +1 -0
- package/dist/core/seal.d.ts +3 -0
- package/dist/core/seal.js +74 -0
- package/dist/core/seal.js.map +1 -0
- package/dist/core/triage.d.ts +22 -0
- package/dist/core/triage.js +38 -0
- package/dist/core/triage.js.map +1 -0
- package/dist/core/types.d.ts +354 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/verify.d.ts +6 -0
- package/dist/core/verify.js +51 -0
- package/dist/core/verify.js.map +1 -0
- package/dist/delivery/finalize.d.ts +17 -0
- package/dist/delivery/finalize.js +71 -0
- package/dist/delivery/finalize.js.map +1 -0
- package/dist/delivery/handoff.d.ts +39 -0
- package/dist/delivery/handoff.js +250 -0
- package/dist/delivery/handoff.js.map +1 -0
- package/dist/entry.d.ts +2 -0
- package/dist/entry.js +112 -0
- package/dist/entry.js.map +1 -0
- package/dist/evals/runner.d.ts +4 -0
- package/dist/evals/runner.js +112 -0
- package/dist/evals/runner.js.map +1 -0
- package/dist/evals/scoring.d.ts +3 -0
- package/dist/evals/scoring.js +41 -0
- package/dist/evals/scoring.js.map +1 -0
- package/dist/evals/types.d.ts +46 -0
- package/dist/evals/types.js +2 -0
- package/dist/evals/types.js.map +1 -0
- package/dist/issues/intake.d.ts +114 -0
- package/dist/issues/intake.js +213 -0
- package/dist/issues/intake.js.map +1 -0
- package/dist/memory/benchmark.d.ts +33 -0
- package/dist/memory/benchmark.js +69 -0
- package/dist/memory/benchmark.js.map +1 -0
- package/dist/metrics/runMetrics.d.ts +9 -0
- package/dist/metrics/runMetrics.js +34 -0
- package/dist/metrics/runMetrics.js.map +1 -0
- package/dist/metrics/usage.d.ts +3 -0
- package/dist/metrics/usage.js +53 -0
- package/dist/metrics/usage.js.map +1 -0
- package/dist/provenance/generate.d.ts +30 -0
- package/dist/provenance/generate.js +96 -0
- package/dist/provenance/generate.js.map +1 -0
- package/dist/providers/engram.d.ts +8 -0
- package/dist/providers/engram.js +14 -0
- package/dist/providers/engram.js.map +1 -0
- package/dist/providers/graphify.d.ts +9 -0
- package/dist/providers/graphify.js +28 -0
- package/dist/providers/graphify.js.map +1 -0
- package/dist/providers/paseo.d.ts +8 -0
- package/dist/providers/paseo.js +14 -0
- package/dist/providers/paseo.js.map +1 -0
- package/dist/providers/types.d.ts +41 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/telemetry/events.d.ts +2 -0
- package/dist/telemetry/events.js +29 -0
- package/dist/telemetry/events.js.map +1 -0
- package/dist/telemetry/otlp.d.ts +3 -0
- package/dist/telemetry/otlp.js +57 -0
- package/dist/telemetry/otlp.js.map +1 -0
- package/dist/toolchain/config.d.ts +10 -0
- package/dist/toolchain/config.js +54 -0
- package/dist/toolchain/config.js.map +1 -0
- package/dist/toolchain/doctor.d.ts +8 -0
- package/dist/toolchain/doctor.js +56 -0
- package/dist/toolchain/doctor.js.map +1 -0
- package/dist/toolchain/mise.d.ts +10 -0
- package/dist/toolchain/mise.js +61 -0
- package/dist/toolchain/mise.js.map +1 -0
- package/dist/toolchain/resolve.d.ts +8 -0
- package/dist/toolchain/resolve.js +159 -0
- package/dist/toolchain/resolve.js.map +1 -0
- package/dist/toolchain/setup.d.ts +7 -0
- package/dist/toolchain/setup.js +141 -0
- package/dist/toolchain/setup.js.map +1 -0
- package/dist/toolchain/types.d.ts +95 -0
- package/dist/toolchain/types.js +2 -0
- package/dist/toolchain/types.js.map +1 -0
- package/dist/utils/process.d.ts +15 -0
- package/dist/utils/process.js +94 -0
- package/dist/utils/process.js.map +1 -0
- package/dist/validators/commands.d.ts +2 -0
- package/dist/validators/commands.js +28 -0
- package/dist/validators/commands.js.map +1 -0
- package/dist/validators/constraints.d.ts +6 -0
- package/dist/validators/constraints.js +30 -0
- package/dist/validators/constraints.js.map +1 -0
- package/dist/validators/diffScope.d.ts +2 -0
- package/dist/validators/diffScope.js +36 -0
- package/dist/validators/diffScope.js.map +1 -0
- package/dist/validators/evidence.d.ts +6 -0
- package/dist/validators/evidence.js +8 -0
- package/dist/validators/evidence.js.map +1 -0
- package/dist/validators/external.d.ts +3 -0
- package/dist/validators/external.js +22 -0
- package/dist/validators/external.js.map +1 -0
- package/dist/validators/gherkin.d.ts +3 -0
- package/dist/validators/gherkin.js +59 -0
- package/dist/validators/gherkin.js.map +1 -0
- package/dist/validators/graphify.d.ts +4 -0
- package/dist/validators/graphify.js +108 -0
- package/dist/validators/graphify.js.map +1 -0
- package/dist/validators/opa.d.ts +3 -0
- package/dist/validators/opa.js +43 -0
- package/dist/validators/opa.js.map +1 -0
- package/dist/validators/openapi.d.ts +25 -0
- package/dist/validators/openapi.js +98 -0
- package/dist/validators/openapi.js.map +1 -0
- package/dist/validators/registry.d.ts +2 -0
- package/dist/validators/registry.js +36 -0
- package/dist/validators/registry.js.map +1 -0
- package/dist/validators/toolCommand.d.ts +5 -0
- package/dist/validators/toolCommand.js +33 -0
- package/dist/validators/toolCommand.js.map +1 -0
- package/dist/validators/types.d.ts +13 -0
- package/dist/validators/types.js +2 -0
- package/dist/validators/types.js.map +1 -0
- package/dist/workers/agentPrompt.d.ts +3 -0
- package/dist/workers/agentPrompt.js +84 -0
- package/dist/workers/agentPrompt.js.map +1 -0
- package/dist/workers/direct.d.ts +13 -0
- package/dist/workers/direct.js +30 -0
- package/dist/workers/direct.js.map +1 -0
- package/dist/workers/factory.d.ts +4 -0
- package/dist/workers/factory.js +10 -0
- package/dist/workers/factory.js.map +1 -0
- package/dist/workers/paseo.d.ts +14 -0
- package/dist/workers/paseo.js +29 -0
- package/dist/workers/paseo.js.map +1 -0
- package/dist/workers/podman.d.ts +13 -0
- package/dist/workers/podman.js +22 -0
- package/dist/workers/podman.js.map +1 -0
- package/dist/workers/prompt.d.ts +4 -0
- package/dist/workers/prompt.js +4 -0
- package/dist/workers/prompt.js.map +1 -0
- package/dist/workers/types.d.ts +11 -0
- package/dist/workers/types.js +2 -0
- package/dist/workers/types.js.map +1 -0
- package/docs/ARCHITECTURE.md +47 -0
- package/docs/EVALS.md +28 -0
- package/docs/MEMORY.md +28 -0
- package/docs/OBSERVABILITY.md +18 -0
- package/docs/OSS_STACK.md +27 -0
- package/docs/PASEO.md +9 -0
- package/docs/PUBLISHING.md +110 -0
- package/docs/SDD.md +35 -0
- package/docs/SECURITY.md +21 -0
- package/docs/V0.2.md +42 -0
- package/docs/V0.3.md +40 -0
- package/docs/V0.4.11.md +30 -0
- package/docs/V0.4.12.md +88 -0
- package/docs/V0.4.13.md +203 -0
- package/docs/V0.4.14.md +209 -0
- package/docs/V0.4.15.md +365 -0
- package/docs/V0.4.16.md +229 -0
- package/docs/V0.4.md +28 -0
- package/docs/VALIDATION.md +23 -0
- package/package.json +18 -0
- package/policies/core/dependency-policy.rego +12 -0
- package/policies/core/schema-policy.rego +12 -0
- package/policies/core/trust-boundary.rego +17 -0
- package/presets/agents/default.jsonc +80 -0
- package/presets/docker.yaml +4 -0
- package/presets/dotnet.yaml +12 -0
- package/presets/expo.yaml +6 -0
- package/presets/generic.yaml +3 -0
- package/presets/nextjs.yaml +8 -0
- package/presets/node.yaml +6 -0
- package/presets/pnpm.yaml +6 -0
- package/presets/postgres.yaml +4 -0
- package/schemas/agent-output-planner.schema.json +1 -0
- package/schemas/agent-topology.schema.json +37 -0
- package/schemas/project.schema.json +36 -0
- package/schemas/quick-contract.schema.json +17 -0
- package/schemas/task-contract.schema.json +18 -0
- package/schemas/toolchain.schema.json +70 -0
- package/schemas/validation-report.schema.json +15 -0
- package/skills/acceptance-traceability/SKILL.md +13 -0
- package/skills/deterministic-validation/SKILL.md +15 -0
- package/skills/engineering-workflow/SKILL.md +108 -0
- package/skills/finding-dedup/SKILL.md +12 -0
- package/skills/github-delivery-lifecycle/SKILL.md +16 -0
- package/skills/implementation-worker/SKILL.md +17 -0
- package/skills/lead-engineer/SKILL.md +30 -0
- package/skills/memory-hygiene/SKILL.md +22 -0
- package/skills/prompt-drift-audit/SKILL.md +10 -0
- package/skills/recovery-classifier/SKILL.md +13 -0
- package/skills/routing-normalizer/SKILL.md +17 -0
- package/skills/sdd/SKILL.md +21 -0
- package/skills/simplify/SKILL.md +16 -0
- package/skills/verification-planning/SKILL.md +17 -0
- package/skills/worktree-lifecycle/SKILL.md +18 -0
- package/templates/AGENTS.md +37 -0
- package/templates/agents.source.jsonc +39 -0
- package/templates/otel-collector.yaml +21 -0
- package/templates/project.yaml +196 -0
- package/templates/toolchain.yaml +127 -0
package/docs/V0.4.13.md
ADDED
|
@@ -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.
|
package/docs/V0.4.14.md
ADDED
|
@@ -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.
|