clawft

Agent Harness

Add the triple loop (research, development, ops) with a master controller. Per-project process-compose; no environment overlay yet.

How WeftOS runs incoming work the way Forge does: a master controller, three standing loops, one Plane board, jobs in process-compose.

The long form (agents grep this): docs/guides/agent-harness-triple-loop.md. Decision: ADR-098 (environment pane is planned only).

Triple loop

                    master controller (lead)
                              │
          ┌───────────────────┼───────────────────┐
          ▼                   ▼                   ▼
   1. research loop     2. development loop   3. ops / compose
   (always on)          (plan + do ≥ 90)      (desired state)
          │                   │                   │
          └────────── one board (Plane) ──────────┘
LoopEvery turnCommand
ResearchNever skipnode scripts/metaharness/crosscut.mjs + scripts/plane-dag.sh ready
DevelopmentWhen ready existsplane-dag.sh claim → implement → done
OpsWhen servers/jobs moveThis repo process-compose on :18090 / :18091

Score is its own subtask: scripts/metaharness/score.sh.

The lead routes. Named implementers do the work. Do not wait for Ruflo to write code. Do not start loop-runner.mjs --forever unless asked.

Add it to a repo

PathRole
AGENTS.mdMaster + lanes
.grok/rules/agent-harness.mdHost rule
process-compose.yamlServers + job_* tools
compose/desired.yamlUp/down flags
compose/manifest.yamlOverlay admission (overlay_ready: false until prefixed)
compose/ports.yamlPorts this repo claims

Jobs are YAML processes with disabled: true and mcp.type: tool. No ad-hoc Python for score / gate / plane-ready.

Why there is no machine-wide pane yet

process-compose merges like docker-compose (-f a -f b, last name wins; paths relative to the first file). It is not terraform. Two projects that both define web become one process. Two mcp_server blocks share one port.

Verified on v1.120.0: merge of two files each with web produced 3 processes, not 4.

Until every leaf is overlay_ready (unique prefix, absolute working_dir, reserved PC ports), do not glob yamls into one instance. See ADR-098.

Ports (this machine)

ProjectPC HTTPPC MCP
Forge:18080:18081
WeftOS:18090:18091

WeftOS kernel stays :8080. Docs in this yaml use :4000 so they do not steal Forge Next on :3000.

On this page