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,16 @@
1
+ ---
2
+ name: github-delivery-lifecycle
3
+ description: Safe issue-linked GitHub delivery and Paseo worktree handoff.
4
+ license: Apache-2.0
5
+ ---
6
+ # GitHub Delivery Lifecycle
7
+
8
+ Use only when project delivery integration is enabled or explicitly requested.
9
+
10
+ - Treat the validated local SDD/TaskContract as normative; the GitHub issue is a delivery mirror unless project policy explicitly says otherwise.
11
+ - Read tokens from environment only; never write credentials into specs, logs or delivery state.
12
+ - Create at most one issue and one issue-linked branch per task; persist identifiers after each successful remote write.
13
+ - Base the branch on the originating branch captured when the spec was created.
14
+ - Never force-push, amend, rebase or rewrite shared history as recovery.
15
+ - Create/reuse one Paseo worktree workspace for implementation, review and repair.
16
+ - Report issue URL/number, branch, workspace id/path and partial-state failures.
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: implementation-worker
3
+ purpose: Constrain an implementation agent to a frozen task and deterministic acceptance gates.
4
+ ---
5
+
6
+ # Implementation Worker
7
+
8
+ Implement the frozen TaskContract. You do not own requirements or architecture.
9
+
10
+ Rules:
11
+
12
+ - Stay within allowed paths and scope.
13
+ - Never alter frozen contracts or frozen acceptance validators.
14
+ - Do not add dependencies, schema changes or breaking API changes unless explicitly authorized.
15
+ - Run the specified validation commands.
16
+ - Report blockers instead of silently expanding scope.
17
+ - At completion report changed files, tests run, failures, deviations and remaining risks.
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: lead-engineer
3
+ purpose: Keep the strongest agent as requirements/architecture owner while delegating implementation safely.
4
+ ---
5
+
6
+ # Lead Engineer
7
+
8
+ You are the semantic and architectural owner of the change.
9
+
10
+ ## Before implementation
11
+
12
+ 1. Inspect current code and structural graph.
13
+ 2. Recall historical memory only for context; verify it against Git.
14
+ 3. Complete SDD artifacts: explore/proposal/spec/design/acceptance/tasks.
15
+ 4. Ensure business acceptance is expressed in executable Gherkin where appropriate.
16
+ 5. Create the TaskContract and freeze it.
17
+ 6. Delegate routine implementation to an OpenCode workhorse through Paseo.
18
+
19
+ ## During implementation
20
+
21
+ - Remain the parent/owner of the task.
22
+ - For independent tasks, use parallel workers; avoid parallel edits to highly overlapping files.
23
+ - If a worker discovers a plan defect, evaluate it and update the authoritative design/contract yourself.
24
+
25
+ ## After implementation
26
+
27
+ - Run the deterministic harness.
28
+ - Inspect the actual diff, not only worker summaries.
29
+ - If deterministic gates fail, prefer targeted worker repair packets.
30
+ - Perform semantic/architectural review only after deterministic checks pass.
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: memory-hygiene
3
+ purpose: Prevent stale agent memory from becoming an authority source.
4
+ ---
5
+
6
+ # Memory Hygiene
7
+
8
+ Memory is advisory historical context.
9
+
10
+ Store:
11
+ - decisions and their rationale;
12
+ - bugs and discoveries;
13
+ - conventions;
14
+ - useful implementation summaries.
15
+
16
+ Do not treat memory as authoritative for:
17
+ - current requirements;
18
+ - current API/schema state;
19
+ - current acceptance criteria;
20
+ - current architecture when Git contradicts it.
21
+
22
+ When a decision changes, supersede or explicitly invalidate the old memory instead of storing contradictory facts without provenance.
@@ -0,0 +1,10 @@
1
+ ---
2
+ name: prompt-drift-audit
3
+ description: Detect drift among source topology, prompts, skills, routing and generated runtime artifacts.
4
+ license: Apache-2.0
5
+ ---
6
+ # Prompt and Configuration Drift Audit
7
+
8
+ Check source -> generated runtime consistency and all referenced prompt/skill paths. Verify agent role charters match routing ownership, skill/MCP names resolve, generated files are not hand-edited and duplicated policy text has not diverged across prompts.
9
+
10
+ Prefer `aeh agents check` and schema/reference checks for deterministic drift. Use semantic review only for role/policy contradictions that cannot be reduced to references or hashes.
@@ -0,0 +1,13 @@
1
+ ---
2
+ name: recovery-classifier
3
+ description: Classify agent/validation failures and select the smallest deterministic recovery path.
4
+ license: Apache-2.0
5
+ ---
6
+ # Recovery Classifier
7
+
8
+ Classify evidence into the Harness failure taxonomy before retrying:
9
+ PATCH_CONTEXT_MISMATCH, TOOL_FAILURE, MISSING_CONTEXT, WRONG_AGENT, VALIDATION_FAILURE, REVIEW_FAILURE, AMBIGUOUS_OUTPUT, CONFLICTING_RESULTS.
10
+
11
+ Use exact stderr/stdout, validator failures and routing evidence. Do not label a product/spec contradiction as an implementation failure.
12
+
13
+ Recovery preference: same agent with better context -> narrow reroute/quality remediation -> senior/oracle -> lead/human only for true exceptions. Preserve the failure packet and retry history.
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: routing-normalizer
3
+ description: Convert a plan into bounded, ownership-safe delegation tasks.
4
+ license: Apache-2.0
5
+ ---
6
+ # Routing Normalizer
7
+
8
+ Every delegated task must identify: id, summary, owning agent, scope, dependencies, acceptance evidence and risk.
9
+
10
+ Reject or repair plans when:
11
+ - two parallel writers overlap the same files without an ordering dependency;
12
+ - a dependency references a missing task;
13
+ - the selected agent does not own the stated domain;
14
+ - acceptance is vague or cannot be validated;
15
+ - the task silently expands sealed scope.
16
+
17
+ Prefer the narrowest capable agent and explicit dependency edges over broad generalists.
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: sdd
3
+ purpose: Drive a strict spec-driven change from exploration to archival.
4
+ ---
5
+
6
+ # Spec-Driven Development
7
+
8
+ Phases:
9
+
10
+ 1. Explore: understand current state without deciding prematurely.
11
+ 2. Proposal: state problem, desired outcome, scope and non-goals.
12
+ 3. Specification: define requirements/invariants without implementation detail.
13
+ 4. Design: define architecture, interfaces, data/API impact and trade-offs.
14
+ 5. Acceptance: encode observable business behavior in Gherkin where appropriate.
15
+ 6. Tasks: decompose design into implementation work.
16
+ 7. Contract: create and freeze a machine-readable TaskContract.
17
+ 8. Apply: delegate implementation to constrained workers.
18
+ 9. Verify: deterministic harness first, semantic review second.
19
+ 10. Archive: persist final artifacts and curated learnings to memory.
20
+
21
+ Do not let a later phase silently rewrite the intent of an earlier approved phase.
@@ -0,0 +1,16 @@
1
+ ---
2
+ name: simplify
3
+ description: Reduce unnecessary complexity without changing observable behavior or sealed contracts.
4
+ license: Apache-2.0
5
+ ---
6
+ # Simplify
7
+
8
+ Use after correctness is established or when complexity itself causes risk.
9
+
10
+ - Preserve behavior, public contracts and acceptance criteria.
11
+ - Remove accidental abstraction, duplication and confusing control flow only when evidence supports it.
12
+ - Prefer small local simplifications over broad rewrites.
13
+ - Keep changes within task scope and rerun the focused deterministic checks.
14
+ - Do not trade explicit invariants for cleverness.
15
+
16
+ Report what became simpler and the evidence that behavior remains unchanged.
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: verification-planning
3
+ description: Design deterministic evidence and validation gates before implementation.
4
+ license: Apache-2.0
5
+ ---
6
+ # Verification Planning
7
+
8
+ Use before non-trivial implementation.
9
+
10
+ 1. Map each requirement to observable evidence.
11
+ 2. Prefer an existing deterministic validator over LLM review.
12
+ 3. Separate fast focused checks from final integration checks.
13
+ 4. Identify environment, fixture and external-service prerequisites.
14
+ 5. Define failure signals that are unambiguous and machine-readable.
15
+ 6. Do not weaken acceptance criteria to fit the implementation.
16
+
17
+ Return: requirement -> validator -> command/evidence -> expected pass condition -> fallback if the validator cannot run.
@@ -0,0 +1,18 @@
1
+ ---
2
+ name: worktree-lifecycle
3
+ description: Manage isolated Git/Paseo workspaces without history rewriting or cross-task contamination.
4
+ license: Apache-2.0
5
+ ---
6
+ # Worktree Lifecycle
7
+
8
+ Use for branch/worktree-backed task execution.
9
+
10
+ - Capture the originating branch before creating task state.
11
+ - Prefer one issue/task branch per isolated workspace.
12
+ - Never reuse a dirty worktree for an unrelated task.
13
+ - Do not force-push, amend, rebase or reset shared history as recovery.
14
+ - Keep sealed contracts/spec artifacts available read-only to workers.
15
+ - Reuse the same Paseo workspace for implementation, review and repair of one task.
16
+ - Archive/remove the workspace only after delivery state is durable.
17
+
18
+ Report branch, base, workspace id/path and any lifecycle blocker.
@@ -0,0 +1,37 @@
1
+ # Engineering Agent Contract
2
+
3
+ ## Lead agent
4
+
5
+ The lead agent owns requirements interpretation, architecture, SDD artifacts, decomposition, review and final semantic acceptance. Prefer Codex for this role.
6
+
7
+ Before delegating implementation:
8
+
9
+ 1. Inspect current repository state and relevant structural context.
10
+ 2. Recover historical memory only as advisory context.
11
+ 3. Produce/update proposal, specification, design and executable acceptance criteria.
12
+ 4. Create a TaskContract with explicit scope, invariants and deterministic validators.
13
+ 5. Freeze the TaskContract before implementation begins.
14
+
15
+ After the worker finishes, inspect the actual diff and deterministic validation report. Never accept work solely from a worker summary.
16
+
17
+ ## Worker agent
18
+
19
+ The worker implements an assigned frozen task. Prefer OpenCode with the configured workhorse model.
20
+
21
+ The worker must not:
22
+
23
+ - redefine requirements;
24
+ - expand scope silently;
25
+ - modify frozen TaskContracts;
26
+ - weaken acceptance criteria or validators to make a task pass;
27
+ - introduce new dependencies, schema changes or breaking APIs unless the TaskContract permits them.
28
+
29
+ If the plan conflicts with reality, report the blocker to the lead agent instead of silently redesigning the system.
30
+
31
+ ## Source-of-truth order
32
+
33
+ 1. Current Git-versioned code and schemas.
34
+ 2. Frozen TaskContract and current SDD artifacts.
35
+ 3. ADRs and project policy.
36
+ 4. Executable acceptance criteria.
37
+ 5. Memory backend as historical/advisory context only.
@@ -0,0 +1,39 @@
1
+ {
2
+ "version": 1,
3
+ "extends": ["aeh:default"],
4
+ "activeProfile": "balanced",
5
+
6
+ // Override a built-in model alias once and every agent using it follows.
7
+ // "models": {
8
+ // "workhorse": { "provider": "opencode-go", "model": "deepseek-v4-flash" },
9
+ // "brain": { "provider": "openai", "model": "gpt-5.6-luna", "variant": "max" }
10
+ // },
11
+ "models": {},
12
+
13
+ // Add a new agent or partially override a built-in agent by name.
14
+ // "agents": {
15
+ // "backend-implementer": { "temperature": 0.05 },
16
+ // "domain-specialist": {
17
+ // "role": "implementer",
18
+ // "domains": ["my-domain"],
19
+ // "execution": { "model": "@workhorse" },
20
+ // "permissions": { "read": "allow", "write": "allow", "shell": "allow" },
21
+ // "outputContract": "implementer"
22
+ // }
23
+ // },
24
+ "agents": {},
25
+
26
+ // Rules with an existing id replace the built-in rule; new ids are appended.
27
+ "routing": [],
28
+
29
+ // Removal supports minimatch patterns and cascades agent references out of routing/recovery/councils.
30
+ // Example: remove every mobile agent from a non-mobile repository.
31
+ "remove": {
32
+ "agents": [],
33
+ "models": [],
34
+ "runtimes": [],
35
+ "profiles": [],
36
+ "routing": [],
37
+ "councils": []
38
+ }
39
+ }
@@ -0,0 +1,21 @@
1
+ receivers:
2
+ otlp:
3
+ protocols:
4
+ grpc:
5
+ endpoint: 0.0.0.0:4317
6
+ http:
7
+ endpoint: 0.0.0.0:4318
8
+
9
+ processors:
10
+ batch: {}
11
+
12
+ exporters:
13
+ debug:
14
+ verbosity: basic
15
+
16
+ service:
17
+ pipelines:
18
+ traces:
19
+ receivers: [otlp]
20
+ processors: [batch]
21
+ exporters: [debug]
@@ -0,0 +1,196 @@
1
+ version: 1
2
+
3
+ project:
4
+ name: change-me
5
+
6
+ agents:
7
+ configPath: .harness/agents.source.jsonc
8
+ generatedPath: .harness/generated/agents.json
9
+ activeProfile: balanced
10
+ required: true
11
+ findingsDir: .harness/findings
12
+
13
+ workflow:
14
+ quick:
15
+ maxFiles: 5
16
+ disallowedDomains:
17
+ - security
18
+ - authentication
19
+ - authorization
20
+ - architecture
21
+ - database
22
+ - schema
23
+ - migration
24
+ - api-contract
25
+ - multi-tenancy
26
+ issueIntake:
27
+ enabled: true
28
+ snapshotDir: .harness/issues
29
+ verifyDriftOnRun: true
30
+ requireOpen: true
31
+ plannerAgent: planner
32
+ autoHandoff: true
33
+ reviews:
34
+ enabled: true
35
+ reviewQuick: false
36
+ leadAcceptance: true
37
+ leadAcceptanceQuick: false
38
+ quality:
39
+ severityPoints:
40
+ critical: 300
41
+ high: 75
42
+ medium: 24
43
+ low: 3
44
+ note: 1
45
+ convergence:
46
+ minimumDebtPointImprovement: 3
47
+ stagnationWindow: 2
48
+ cycleDetection: true
49
+ regressionDetection: true
50
+ finalQualityGate:
51
+ maxBySeverity:
52
+ critical: 0
53
+ high: 0
54
+ medium: 0
55
+ low: 3
56
+ maxDebtPoints: 9
57
+ escalation:
58
+ criticalStartStage: 2
59
+ replanResumeStage: 2
60
+ stages:
61
+ - name: normal
62
+ action: remediate
63
+ - name: quality
64
+ action: remediate
65
+ agent: quality-implementer
66
+ - name: senior
67
+ action: remediate
68
+ agent: senior-implementer
69
+ model: "@brain"
70
+ - name: diagnosis
71
+ action: diagnose
72
+ agent: oracle
73
+ model: "@brain"
74
+ - name: replan
75
+ action: replan
76
+ agent: planner
77
+ model: "@brain"
78
+
79
+ orchestration:
80
+ provider: paseo
81
+ required: false
82
+ worker:
83
+ provider: opencode
84
+ maxRepairAttempts: 2
85
+
86
+ toolchain:
87
+ configPath: .harness/toolchain.yaml
88
+ lockPath: .harness/toolchain.lock.json
89
+ statePath: .harness/toolchain.state.json
90
+ generatedMisePath: .config/mise/conf.d/aeh.toml
91
+
92
+ mcp:
93
+ servers:
94
+ context7:
95
+ description: Current library/framework documentation lookup.
96
+ type: remote
97
+ url: https://mcp.context7.com/mcp
98
+ oauth: false
99
+ enabled: true
100
+ playwright:
101
+ description: Browser exploration and stateful UI validation; prefer deterministic Playwright tests when they are sufficient.
102
+ type: local
103
+ command: [npx, -y, "@playwright/mcp@0.0.78"]
104
+ enabled: true
105
+ timeoutMs: 30000
106
+ github:
107
+ description: Official GitHub MCP server in read-only mode for repository/issue/PR/action triage. Deterministic Harness delivery owns writes.
108
+ type: local
109
+ command: [podman, run, -i, --rm, -e, GITHUB_PERSONAL_ACCESS_TOKEN, -e, GITHUB_TOOLSETS, -e, GITHUB_READ_ONLY, ghcr.io/github/github-mcp-server]
110
+ environment:
111
+ GITHUB_PERSONAL_ACCESS_TOKEN: "{env:GITHUB_TOKEN}"
112
+ GITHUB_TOOLSETS: repos,issues,pull_requests,actions
113
+ GITHUB_READ_ONLY: "1"
114
+ enabled: true
115
+ timeoutMs: 30000
116
+ sentry:
117
+ description: Optional production-error and trace investigation via Sentry's remote MCP.
118
+ type: remote
119
+ url: https://mcp.sentry.dev/mcp
120
+ enabled: false
121
+ timeoutMs: 10000
122
+
123
+ delivery:
124
+ stateDir: .harness/delivery
125
+ github:
126
+ enabled: false
127
+ tokenEnv: GH_TOKEN
128
+ assignTokenOwner: true
129
+ labels: []
130
+ branchPattern: feature/gh-{issue}-{slug}
131
+ finalizeOnAcceptance: true
132
+ pullRequestDraft: true
133
+ paseo:
134
+ enabled: false
135
+ createWorkspace: true
136
+ autoUseWorkspace: true
137
+ worktreeSlugPattern: gh-{issue}-{slug}
138
+
139
+ memory:
140
+ provider: engram
141
+ required: false
142
+ benchmark:
143
+ casesDir: memory-benchmarks
144
+ resultsDir: .harness/memory-benchmarks
145
+ providers: []
146
+
147
+ codeIntelligence:
148
+ provider: graphify
149
+ required: false
150
+ graphPath: graphify-out/graph.json
151
+ snapshotDir: .harness/graphify
152
+
153
+ sdd:
154
+ specsDir: specs
155
+ contractsDir: .harness/contracts
156
+ reportsDir: .harness/reports
157
+ repairsDir: .harness/repairs
158
+ runsDir: .harness/runs
159
+
160
+ validation:
161
+ baseRef: main
162
+ requireSeal: true
163
+ frozenPaths:
164
+ - .harness/contracts/**
165
+ - .harness/seals/**
166
+ - tests/acceptance/frozen/**
167
+ commands: []
168
+ validators: []
169
+ opa:
170
+ enabled: false
171
+ policyDirs:
172
+ - .harness/policies/core
173
+
174
+ security:
175
+ sandbox:
176
+ provider: podman
177
+ required: false
178
+ tools:
179
+ - opengrep
180
+ - trivy
181
+
182
+ telemetry:
183
+ enabled: true
184
+ required: false
185
+ localEventsFile: .harness/telemetry/events.ndjson
186
+ exporter: none
187
+ serviceName: engineering-harness-consumer
188
+
189
+ evals:
190
+ corpusDir: evals/corpus
191
+ resultsDir: .harness/evals/results
192
+ workspacesDir: .harness/evals/workspaces
193
+
194
+ provenance:
195
+ outputDir: .harness/provenance
196
+ buildType: https://github.com/JamesMorales04/agentic-engineering-harness/v0.4
@@ -0,0 +1,127 @@
1
+ version: 1
2
+
3
+ manager:
4
+ provider: mise
5
+ generatedConfig: .config/mise/conf.d/aeh.toml
6
+ lockFile: .harness/toolchain.lock.json
7
+ stateFile: .harness/toolchain.state.json
8
+ minimumVersion: "2026.7.0"
9
+
10
+ strategy:
11
+ validators: local # local | prefer-container
12
+ containerEngine: podman
13
+
14
+ profiles:
15
+ core:
16
+ tools: [git, node]
17
+ agents:
18
+ extends: [core]
19
+ tools: [codex, opencode, paseo]
20
+ intelligence:
21
+ extends: [core]
22
+ tools: [uv, graphify]
23
+ validation:
24
+ extends: [core]
25
+ tools: [opa, opengrep, trivy]
26
+ full:
27
+ extends: [agents, intelligence, validation]
28
+ tools: [podman, dotnet, bun]
29
+
30
+ tools:
31
+ git:
32
+ kind: system
33
+ command: git
34
+ required: true
35
+ activateWhen: [always]
36
+
37
+ node:
38
+ kind: mise
39
+ command: node
40
+ source: node
41
+ version: "22"
42
+ required: true
43
+ activateWhen: [always, project:node, project:pnpm, project:yarn]
44
+
45
+ bun:
46
+ kind: mise
47
+ command: bun
48
+ source: bun
49
+ version: latest
50
+ activateWhen: [project:bun]
51
+
52
+ dotnet:
53
+ kind: mise
54
+ command: dotnet
55
+ source: dotnet
56
+ version: latest
57
+ activateWhen: [project:dotnet]
58
+
59
+ codex:
60
+ kind: mise
61
+ command: codex
62
+ source: "npm:@openai/codex"
63
+ version: latest
64
+ activateWhen: [runtime:codex]
65
+
66
+ opencode:
67
+ kind: mise
68
+ command: opencode
69
+ source: "aqua:anomalyco/opencode"
70
+ version: latest
71
+ activateWhen: [runtime:opencode]
72
+
73
+ paseo:
74
+ kind: mise
75
+ command: paseo
76
+ source: "npm:@getpaseo/cli"
77
+ version: latest
78
+ activateWhen: [orchestration:paseo, delivery:paseo]
79
+
80
+ uv:
81
+ kind: mise
82
+ command: uv
83
+ source: uv
84
+ version: latest
85
+ activateWhen: [code-intelligence:graphify, project:python]
86
+
87
+ graphify:
88
+ kind: mise
89
+ command: graphify
90
+ source: "pipx:graphifyy"
91
+ version: latest
92
+ dependsOn: [uv]
93
+ activateWhen: [code-intelligence:graphify]
94
+
95
+ opa:
96
+ kind: mise
97
+ command: opa
98
+ source: "aqua:open-policy-agent/opa"
99
+ version: latest
100
+ activateWhen: [validation:opa]
101
+ container:
102
+ image: docker.io/openpolicyagent/opa:latest-static
103
+
104
+ opengrep:
105
+ kind: mise
106
+ command: opengrep
107
+ source: "aqua:opengrep/opengrep"
108
+ version: latest
109
+ activateWhen: [security-tool:opengrep, validator:opengrep]
110
+
111
+ trivy:
112
+ kind: mise
113
+ command: trivy
114
+ source: "aqua:aquasecurity/trivy"
115
+ version: latest
116
+ activateWhen: [security-tool:trivy, validator:trivy]
117
+ container:
118
+ image: ghcr.io/aquasecurity/trivy:latest
119
+
120
+ podman:
121
+ kind: system
122
+ command: podman
123
+ activateWhen: [orchestration:podman, sandbox:podman]
124
+
125
+ projectDependencies:
126
+ autoDetect: true
127
+ commands: []