Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .github/workflows/build-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ jobs:
STACK_NAME: ${{ env.STACK_NAME }}
STACK_DIR: ${{ env.STACK_DIR }}
IMAGE_NAME: ${{ env.IMAGE_NAME }}
TEST_IMAGE_NAME: ${{ env.TEST_IMAGE_NAME }}
IMAGE_TAG: ${{ github.sha }}
GIT_AUTH_TOKEN: ${{ secrets.GIT_AUTH_TOKEN }}
KOMODO_API_KEY: ${{ secrets.KOMODO_API_KEY }}
Expand All @@ -94,4 +95,15 @@ jobs:
-H "Authorization: token ${{ secrets.FORGEJO_TOKEN }}" \
"https://repo.indexarr.net/api/v1/repos/indexarr/ops/raw/scripts/komodo-deploy.sh" \
-o komodo-deploy.sh

# The acceptance image first, then the runtime image.
#
# Both are pinned to this commit's sha, and that is not tidiness. The
# acceptance service used to pin `:latest`, and `docker compose run`
# does not re-pull a tag it already holds -- so the Stage 2 live suite
# silently executed a STALE image and reproduced a defect that had
# already been fixed and deployed. Evidence from an image nobody can
# name is not evidence. The script only rewrites `image: $IMAGE_NAME:*`
# lines, so each call touches exactly its own service.
IMAGE_NAME="${TEST_IMAGE_NAME}" bash komodo-deploy.sh
bash komodo-deploy.sh
4 changes: 3 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,14 +64,16 @@ trade and it is rejected.

| Thing | Location |
|---|---|
| **Minimum generic product target and plan template** | `minimal.md` — local-only lifecycle and its acceptance contract |
| **Exploration-complete implementation backlog** | `BACKLOG.md` — dependencies, decisions, tests, and evidence for every target gap |
| How to use it | `docs/USAGE.md` — worked example, real output |
| **Starting a project from nothing** | `docs/USAGE.md` §0 — the four routes in, and which to pick |
| **Taking on a project already in flight** | `agent-harness adopt`; `src/agent_harness/adoption.py`. **A proposal is never a decision** — nothing is dropped unless a human names it |
| The first run, needing no credentials | `agent-harness init --demo`; `src/agent_harness/demo.py` |
| What is configured and what is missing | `agent-harness doctor`; `src/agent_harness/doctor.py` — reports, spends nothing |
| How to deploy it | `docs/DEPLOYMENT.md` — the two serve modes, and a non-destructive smoke test |
| Sample plan | `examples/PLAN.md` |
| The original plan | `docs/HARNESS-PLAN.md` (superseded in part) |
| The original plan | `docs/HARNESS-PLAN.md` (historical and superseded) |
| Issue tracker | GitHub, per D1. The only place an issue's *state* lives. |
| The manifest that seeded those issues | `docs/backlog-seed-2026-08-02.json` — historical, carries no state, not kept in sync |
| What a route is made of, and how a vendor is added | `src/agent_harness/protocols.py` |
Expand Down
2,050 changes: 2,050 additions & 0 deletions BACKLOG.md

Large diffs are not rendered by default.

13 changes: 11 additions & 2 deletions GUI_PLAN.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
# Agent Harness GUI Implementation Plan

**Status:** Imported into the current core tree on 2026-08-06; implementation remains
incomplete. `docs/STATUS.md` is the authority for current and remaining work.
> **Target alignment — 2026-08-09:** This is no longer a current product
> sequence. The generic local-only target is [`minimal.md`](minimal.md), and
> current state is [`docs/STATUS.md`](docs/STATUS.md). Remote Git, hosted CI/CD,
> publication, organisation-wide RBAC, and session-host expansion below are
> outside the minimum target. The implemented same-origin GUI remains part of
> the product and should expose local admission, integration, and delivery
> evidence as those capabilities land.

**Status:** Historical implementation plan. Imported into the current core tree
on 2026-08-06; `minimal.md` and `docs/STATUS.md` now define the target and
remaining work.
**Plan date:** 2026-08-05
**Product boundary:** The GUI is built, packaged, served, tested, and documented entirely
inside `agent-harness`.
Expand Down
73 changes: 47 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,22 @@
# agent-harness

Turns a plan you wrote in markdown into work that coding agents actually do, and tells you
honestly what happened.
Turns a plan you wrote in Markdown into locally integrated, locally accepted
work that coding agents actually do, and tells you honestly what happened.

```
PLAN.md ──▶ GitHub issues ──▶ claim ──▶ agent in a terminal ──▶ checks ──▶ review ──▶ PR
└── you can attach to it, on any device
PLAN.md ──▶ validate ──▶ local queue ──▶ isolated agents ──▶ gates and review
v
local Git integration ──▶ local build/deploy/accept/teardown ──▶ evidence
```

It is **not tied to any particular project, language or workload.** You supply the plan, the
provider and the checks; the harness supplies the queue, the claims, the failure model and
the record of what happened.
It is **not tied to any particular project, language or workload.** You supply
the plan, local topology, execution profile, provider and checks; the harness
supplies the queue, claims, gates, local integration and record of what
happened. The target contract is [`minimal.md`](minimal.md). Remote Git,
hosted CI/CD and non-local deployment are optional extensions, not prerequisites.

## Status: pre-alpha — deterministic paths are tested; real use is observed, not proven
## Status: pre-alpha — foundations exist; the minimal local lifecycle is not complete

It runs as a standalone service; [AIDevEnv](https://github.com/TheDancingDeveloper-org/aidevenv)
is an optional reference session host,
Expand All @@ -26,6 +29,11 @@ follow-up run, so it is an observation, not proof that the harness works against
fleet. Deterministic fixture success proves wiring, not model quality or unattended
reliability.

It also lacks deterministic admission of the new minimum plan, a pinned
per-project execution profile, and final local build/deploy/readiness/acceptance/
teardown for the product under development. See
[`docs/STATUS.md`](docs/STATUS.md) for the capability-by-capability comparison.

Three words are used precisely throughout this README, and they are not
interchangeable:

Expand Down Expand Up @@ -102,35 +110,43 @@ worker killed mid-item releases it by doing nothing. A heartbeat keeps genuinely
alive, because "slow" and "dead" look identical from outside and only a live process can
keep stamping one.

## Definition of done for v1
## Definition of done for the minimal local product

Expressed as observed behaviour, not internal completeness.
The full acceptance contract is in [`minimal.md`](minimal.md). In summary:

- [ ] The fleet runs 7 days unattended with no manual restart.
- [ ] Every failure is diagnosable from the GUI alone, without opening a log file.
- [ ] Rate-limit errors are classified, and cost caps are never retried.
- [ ] No single worker's failure pauses another worker.
- [ ] Reviewer-approved work survives a killed worker.
- [ ] Delivery rate is no worse than the workload's own pre-harness baseline, at lower cost.
- [ ] The role→model map can be changed without a redeploy.
- [ ] Two projects run concurrently without either starving the other.
- [ ] Deleting `harness.sqlite` changes no audited answer.
- [ ] An invalid minimum plan gets one complete deterministic rejection report
and creates no executable state.
- [ ] A valid plan and local Git repo are admitted atomically without remote
credentials.
- [ ] A pinned per-project execution profile passes preflight before work begins.
- [ ] Work survives the existing checks, review, durability, budget and policy
gates and is promoted into a local integration branch.
- [ ] The integrated commit builds, deploys locally, becomes ready, passes
acceptance, and tears down with durable evidence.
- [ ] Two materially different projects complete without changes to core
execution-path modules.
- [ ] The repository gates and genericity enforcement pass.

If all seven hold, v1 is done regardless of what remains unimplemented.
None of those unchecked outcomes should be inferred from component tests.

## Documentation

Two documents carry the current state. Everything else is a how-to, an
operational runbook, or history.
Four documents separate the target, implementation backlog, implemented
design, and current state.

- **[`minimal.md`](minimal.md) — what the smallest useful generic product must
do.** This is the local-only target and includes the minimum plan template.
- **[`BACKLOG.md`](BACKLOG.md) — the exploration-complete work to reach that
target.** Each item fixes its boundary, dependencies, implementation
decision, failure behaviour, tests, evidence, and non-goals.

- **[`docs/DESIGN.md`](docs/DESIGN.md) — how the harness works, and why it is
shaped that way.** The execution pipeline, the invariants and the failure
each one came from, model routing and failure classification, the dependency
graph, durability, and the extension points. Start here to understand it.
- **[`docs/STATUS.md`](docs/STATUS.md) — where it stands, and everything
outstanding.** What is proven, observed and merely tested; the open work in
the order it can be done; and how to run the harness against **rdpapp**, the
first application it is being tested against.
outstanding.** The direct comparison with `minimal.md`, retained foundations,
misalignments, milestone exits, and evidence boundary.

### How to use it

Expand Down Expand Up @@ -181,6 +197,11 @@ It has no state field and is not kept in sync; GitHub is the tracker (D1).
A five-minute tour. The full walkthrough, with real output, is in
[`docs/USAGE.md`](docs/USAGE.md).

The commands below document the current pre-alpha implementation. Some still
expose optional GitHub publication because that capability predates the local
target. The end-to-end `minimal.md` path is not available until the gaps in
`docs/STATUS.md` are closed.

### 0. See it work, before you configure anything

```bash
Expand Down
1 change: 1 addition & 0 deletions docs/AUDIT-PLAN.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
> The durable audit layer, which is built. What survives is in `DESIGN.md`; the plan itself is history.
>
> **Current documentation:**
> [`minimal.md`](../minimal.md) — the current generic local-only target.
> [`docs/DESIGN.md`](DESIGN.md) — how the harness works and why.
> [`docs/STATUS.md`](STATUS.md) — where it stands and what is left to do.
>
Expand Down
5 changes: 3 additions & 2 deletions docs/COORDINATION-PLANE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@
>
> **Half superseded, half still the only record.** The typed work graph (§8) is built and is described in `DESIGN.md`. The message ledger, rooms and oversight actor remain **proposed and not built**, and this document is still the only place they are specified — that part is not replaced by anything.
>
> **Current documentation:** [`docs/DESIGN.md`](DESIGN.md) — how the harness
> works and why. [`docs/STATUS.md`](STATUS.md) — where it stands.
> **Current documentation:** [`minimal.md`](../minimal.md) — the generic
> local-only target. [`docs/DESIGN.md`](DESIGN.md) — how the harness works and
> why. [`docs/STATUS.md`](STATUS.md) — where it stands.
>
> Where this document and the code disagree, the code is right.

Expand Down
18 changes: 17 additions & 1 deletion docs/DESIGN.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,16 @@ here. **Where a claim here disagrees with the code, the code is right and this
document is wrong**; that is rule 7 of [`AGENTS.md`](../AGENTS.md) and it
applies to this file first.

The target product boundary is now [`minimal.md`](../minimal.md): validated
plans, local agent execution, local Git integration, and local product
build/deploy/acceptance. This file still describes remote issue, branch, pull
request, and reconciliation capabilities because they exist in the pre-alpha
implementation. They are optional legacy/extension paths, not prerequisites or
the target lifecycle. Missing target capabilities are recorded only in
[`STATUS.md`](STATUS.md); their exploration-complete implementation work and
dependency spine are in [`BACKLOG.md`](../BACKLOG.md). This design document
does not duplicate that roadmap.

What is built, what is half-built, what has never run against a real fleet, and
what is blocked on what: [`docs/STATUS.md`](STATUS.md) owns all of it. Nothing
here is a status claim, and where a design element exists but is not yet
Expand All @@ -17,14 +27,20 @@ reachable, this says so in one clause and moves on.

## 1. What this is, and the one idea

A queue and a delivery pipeline for a fleet of coding agents.
A queue and gated execution foundation for a fleet of coding agents. The
currently implemented remote path is:

```
PLAN.md ──▶ issues ──▶ claim ──▶ implement ──▶ checks ──▶ review ──▶ PR
every stage recorded, append-only
```

The target minimum path replaces the remote endpoints with deterministic plan
admission, a local queue and integration branch, then an integrated local
build/deploy/readiness/acceptance/teardown lifecycle. Those gaps are not
silently treated as implemented here.

You supply the plan, the model provider and the checks. The harness supplies
the queue, the leases, the failure model, the gates and the record of what
happened. It writes no code itself and judges no code itself; it decides *what
Expand Down
Loading
Loading