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
|
@@ -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: []
|