Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
6c0dd58
chore(harness): record beta.10 orchestrator worktree identity
rickylabs Jul 12, 2026
da87783
chore(harness): beta.10 overnight run — record, hand-off, and canvas …
rickylabs Jul 13, 2026
bab5425
fix(cli): pin plugin CLI JSR specifiers — unpinned specs cannot resol…
rickylabs Jul 16, 2026
2b7d0f8
fix(workers): resolve scaffold health-check entrypoint (#786)
rickylabs Jul 16, 2026
0daa575
fix(ci): run real CI on integration-branch PRs (#787)
rickylabs Jul 16, 2026
52bac8e
fix(fresh-ui): close render_ui recursion hole (#788)
rickylabs Jul 16, 2026
3a3c280
fix(fresh): dedupe Preact module IDs on Windows (#789)
rickylabs Jul 16, 2026
7d353be
fix(fresh-ui): render Markdown with the Preact JSX runtime (#790)
rickylabs Jul 16, 2026
e4d2c85
fix(workers): make sample queue trigger opt-in (#793)
rickylabs Jul 16, 2026
3265b51
chore(harness): review-pairing ladder — tier Fable/Opus by implementa…
rickylabs Jul 16, 2026
0a57474
fix(fresh): make Markdown hydration builds deterministic on CI (#797)
rickylabs Jul 16, 2026
5262937
fix(cli): correct Aspire generator emission (#795)
rickylabs Jul 17, 2026
d3cf59c
feat(agentic): bind the evaluator lane as data — closed models reject…
rickylabs Jul 17, 2026
1a261ac
docs(jsr): fit package taglines in the 250-byte cap + gate it in CI (…
rickylabs Jul 17, 2026
ca1d937
quality: type the repo-wide @ts-*/as never sweep (36 → 0) and make re…
rickylabs Jul 17, 2026
d962502
docs(harness): name the local evaluator transport — Claude Code + Ope…
rickylabs Jul 17, 2026
bf2629e
chore: reconcile main into beta.10 integration
rickylabs Jul 17, 2026
1320b1d
fix(cli): remove duplicate JSR specifier import
rickylabs Jul 17, 2026
9d537e4
chore: reconcile main into beta.10 integration — agentic combo + Fabl…
rickylabs Jul 17, 2026
54aac69
docs(site): beta.10 refresh — full CLI command reference, agent skill…
rickylabs Jul 17, 2026
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
14 changes: 9 additions & 5 deletions .agents/skills/claude-manager/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ description: >
# Claude Manager

Use this skill when the task involves Claude Code session orchestration rather than package code.
Claude is the supervisor. OpenHands evaluates. WSL Codex implements harness slices that must be
visible from Codex Desktop/mobile.
Claude is the supervisor. WSL Codex implements harness slices that must be visible from Codex
Desktop/mobile. Evaluation runs on the evaluator lane in `.llm/harness/workflow/lane-policy.md`:
locally Claude Code + OpenRouter with an open model, and OpenHands for automated cloud runs.

## Workflow

Expand Down Expand Up @@ -65,8 +66,10 @@ outcome.
- Do not use Claude workflows as the default NetScript implementation agent. WSL Codex remains the
preferred implementation lane because it is daemon-attached, mobile-visible, and cheaper to steer
slice-by-slice.
- Keep OpenHands as the evaluator. Claude workflows may prepare evaluator inputs, but they do not
replace PLAN-EVAL or IMPL-EVAL.
- Keep the evaluator a separate session on the evaluator lane from
`.llm/harness/workflow/lane-policy.md` — locally Claude Code + OpenRouter with an **open model**, or
OpenHands for cloud runs. Claude workflows may prepare evaluator inputs, but they do not replace
PLAN-EVAL or IMPL-EVAL, and no session self-certifies.
- Route every Claude workflow, supervisor, and review session through the canonical lane table in
`.llm/harness/workflow/lane-policy.md`. Do not reproduce model/effort defaults here or infer a
paid escalation from workflow prose.
Expand Down Expand Up @@ -97,6 +100,7 @@ session should be started.

- [ ] Current branch/worktree is verified.
- [ ] Harness skill was loaded for harnessed work.
- [ ] Evaluator surface is OpenHands when evaluating.
- [ ] Evaluator surface is the lane-policy evaluator route (open model): Claude Code + OpenRouter
locally, OpenHands for cloud runs.
- [ ] Implementation surface is WSL Codex when slice work must be mobile-visible.
- [ ] Claude remote-control or Codex daemon visibility is proven before claiming phone visibility.
2 changes: 1 addition & 1 deletion .agents/skills/codex-wsl-remote/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ exit codes: `.llm/tools/agentic/README.md`.
| **Watch — progress** | Wake on the worktree's next **git** event (commit/ref) — *slice made progress* | `codex-watch.ts --worktree <wt>` (**run inside WSL**) |
| **Watch — finish** | Wake when the agent's **turn finishes** (rollout `task_complete`) — *agent is idle/done* | `codex-watch.ts --mode turn --thread-id <uuid>` (**run inside WSL**) |
| **Steer** | Continue/correct an existing thread (never forks a rival) | `codex-resume.ts --thread-id <uuid> --message …` (`--dry-run`) |
| **Evaluate** | Dispatch an `@openhands-agent` PLAN/IMPL-EVAL; read its verdict | `dispatch-openhands.ts`, `openhands-status.ts` |
| **Evaluate** | Local PLAN/IMPL-EVAL runs on the open-model evaluator lane (Claude Code + OpenRouter — see `lane-policy.md`); for a **cloud** run, dispatch an `@openhands-agent` and read its verdict | `dispatch-openhands.ts`, `openhands-status.ts` (cloud) |
| **Merge** | Eval-gated, clean-gated, base-guarded leaf-PR lifecycle | `gh-pr.ts create\|verdict\|merge` |

**The watch distinction is the one that bites you.** `codex-watch` has two signals and they answer
Expand Down
36 changes: 22 additions & 14 deletions .agents/skills/netscript-harness/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,8 +106,9 @@ routing here — defer to that file. The items below are the parts of the contra
for every implementation tier (B Opus sub-agents, C Workflow-generated slices, D WSL Codex); no
lane self-certifies. See `workflow/lane-policy.md` for the rule and `workflow/run-loop.md` for the
step placement.
- **Evaluator route binding.** Select the opposite-family review route from
`workflow/lane-policy.md` and record it in the run. The two-failure eval loop is unchanged.
- **Evaluator route binding.** Select the evaluator route from `workflow/lane-policy.md` — the
open-model evaluator lane for a formal PLAN-EVAL/IMPL-EVAL, or the opposite-family route for
ordinary review — and record it in the run. The two-failure eval loop is unchanged.
- **Tier-D mobile-visibility proof.** A Tier-D (WSL Codex) implementation slice is launched only via
skills + `.llm/tools/agentic/` (never ad-hoc `wsl.exe`), and only when the run artifacts include
the WSL worktree path, concrete Codex thread id, daemon-managed `remote-control` proof, and the
Expand All @@ -133,13 +134,18 @@ routing here — defer to that file. The items below are the parts of the contra
- **Self-evaluation** — The evaluator must be a separate session. The generator does not
self-certify.
- **Wrong evaluator surface** — the generator session may never evaluate its own output. For a
**local-machine run**, PLAN-EVAL/IMPL-EVAL is a **separate local session of the opposite model
family** (e.g. a Codex GPT-5.6 session reviews Claude-authored work; a Claude session reviews
Codex-authored work), and the **supervisor chooses when to trigger it** — never auto-dispatch a
cloud evaluator from a sub-agent. **OpenHands is open-models-only (minimax M3 / Qwen 3.7) and
cloud-driven-runs-only; dispatching it with a closed model (Claude/GPT/Gemini) is prohibited (it
burns paid OpenRouter credit).** See `.agents/skills/openhands-handoff/SKILL.md` "Routing policy".
If no evaluator surface is available, record a blocked launch in `drift.md`.
**local-machine run**, PLAN-EVAL/IMPL-EVAL is a **separate local session on Claude Code +
OpenRouter** (`claude-openrouter` profile → `claude-print`) running the bound **OPEN-model Qwen
evaluation preset** (`qwen/qwen3.7-max`) — an open model is adversarial to both the Claude and
Codex families. Minimax M3 remains in the approved open-model set but is not currently bound to a
local evaluation preset. **Ordinary (non-formal) review** — the slice review gate, code/PR review — uses a
local **opposite-family** session instead (a Codex GPT-5.6 session reviews Claude-authored work; a
Claude session reviews Codex-authored work). The **supervisor chooses when to trigger** — never
auto-dispatch a cloud evaluator from a sub-agent. **Both evaluator transports are open-models-only;
dispatching either with a closed model (Claude/GPT/Gemini) is prohibited
(it burns paid OpenRouter credit).** OpenHands remains the default automated **cloud** agent. See
`.agents/skills/openhands-handoff/SKILL.md` "Routing policy". If no evaluator surface is available,
record a blocked launch in `drift.md`.
- **Self-certifying a slice** — a green automated gate is not a sign-off. The Tier-A supervisor must
substantively review the slice before the sign-off commit, for every implementation lane
(`workflow/lane-policy.md` invariant 2). No lane self-certifies.
Expand Down Expand Up @@ -211,11 +217,13 @@ When external docs or examples matter:

## Evaluator Separation

There are **two** separate-session evaluator passes.
There are **two** separate-session evaluator passes. Both run on the evaluator lane selected from
`workflow/lane-policy.md`: locally on **Claude Code + OpenRouter with an OPEN model**, or in the
cloud on **OpenHands** (also open-models-only). Closed/paid models are prohibited on both.

**PLAN-EVAL** (before implementation):

- Runs in a separate opposite-family session selected from `workflow/lane-policy.md`.
- Runs in a separate session on the evaluator lane selected from `workflow/lane-policy.md`.
- Reads `evaluator/plan-protocol.md` + `gates/plan-gate.md`.
- Reads `research.md`, `plan.md`, and the `## Design` section.
- Writes `plan-eval.md`.
Expand All @@ -224,7 +232,7 @@ There are **two** separate-session evaluator passes.

**IMPL-EVAL** (final pass, after implementation):

- Runs in a separate opposite-family session selected from `workflow/lane-policy.md`.
- Runs in a separate session on the evaluator lane selected from `workflow/lane-policy.md`.
- Generator writes `worklog.md`, `context-pack.md`, and `drift.md`.
- Evaluator reads `.llm/harness/evaluator/protocol.md`, the plan, worklog, context pack, drift, the
draft-PR commit list + per-slice PR comments (the commit trail), selected archetype, overlays, and
Expand Down Expand Up @@ -316,11 +324,11 @@ User says "use harness"
`supervisor.md`/`drift.md`.
- [ ] Plan-Gate checklist (`gates/plan-gate.md`) was reviewed.
- [ ] PLAN-EVAL returned `PASS` before any implementation slice.
- [ ] PLAN-EVAL used the recorded opposite-family route, or the blocked launch was recorded.
- [ ] PLAN-EVAL used the recorded evaluator route (open model), or the blocked launch was recorded.
- [ ] Tier-D (WSL Codex) slices recorded daemon-managed proof, thread id, worktree, and steering
command.
- [ ] The slice review gate was performed (Tier-A substantive review) before each sign-off commit;
no lane self-certified.
- [ ] Each implementation slice was committed, pushed, and commented on the draft PR.
- [ ] IMPL-EVAL is a separate session from the generator.
- [ ] IMPL-EVAL used the recorded opposite-family route, or the blocked launch was recorded.
- [ ] IMPL-EVAL used the recorded evaluator route (open model), or the blocked launch was recorded.
78 changes: 52 additions & 26 deletions .agents/skills/openhands-handoff/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,19 +27,44 @@ required summary artifacts keep local and cloud agents synchronized.

OpenHands is **not** the evaluator for local runs. Two hard rules:

1. **OpenHands runs OPEN models only** — e.g. `minimax/minimax-m3`, `qwen/qwen3.7-max`. NEVER dispatch
OpenHands with a closed/paid model (Claude/`sonnet`, GPT/`gpt`, Gemini/`gemini`). Closed models on
OpenHands route through paid OpenRouter/LiteLLM credit and can silently burn the owner's balance —
this is prohibited.
1. **OpenHands runs OPEN models only** — e.g. `minimax/minimax-m3`, `qwen/qwen3.7-max`. NEVER
dispatch OpenHands with a closed/paid model (Claude/`sonnet`, GPT/`gpt`, Gemini/`gemini`). Closed
models on OpenHands route through paid OpenRouter/LiteLLM credit and can silently burn the
owner's balance — this is prohibited.
2. **OpenHands is for CLOUD-driven runs only** — small GitHub-Copilot-style tasks the owner wants
reviewed fully in the cloud with adversarial agents. For any run on the **local machine**, do NOT
dispatch cloud OpenHands at all. Use a **local opposite-family adversarial agent** for
PLAN-EVAL / IMPL-EVAL / review (e.g. Codex GPT-5.6 reviews Claude-authored work; a Claude session
reviews Codex-authored work), launched locally. The **supervisor chooses what to trigger** —
sub-agents/implementers must NEVER auto-dispatch a cloud evaluator.

If a local run's harness step calls for PLAN-EVAL/IMPL-EVAL and no local adversarial agent is
available, record the gap in `drift.md` and let the supervisor decide — do not fall back to OpenHands.
reviewed fully in the cloud with adversarial agents. OpenHands remains the **default automated
cloud agent**; nothing below changes that. For any run on the **local machine**, do NOT dispatch
cloud OpenHands at all — use the local evaluator transport named below. The **supervisor chooses
what to trigger** — sub-agents/implementers must NEVER auto-dispatch a cloud evaluator.

### The local evaluator transport (named, 2026-07-13)

A local run's PLAN-EVAL / IMPL-EVAL used to have no named transport — this skill described the gap
and told you to log it. It is now filled:

**Local PLAN-EVAL / IMPL-EVAL runs on Claude Code + OpenRouter** — the `claude-openrouter` provider
profile driven via `claude-print` — with the bound **OPEN-model Qwen evaluation preset**
(`qwen/qwen3.7-max`). Minimax M3 remains in the approved open-model set and is valid for cloud
evaluation, but its current local preset is workflow-fanout rather than evaluation. **Rule 1 above
applies verbatim to this lane: OPEN models only; closed/paid
models (Claude/`sonnet`, GPT/`gpt`, Gemini) are PROHIBITED** — they bill the owner's OpenRouter
balance and can silently burn it. An open model is neither Claude-family nor Codex-family, so it is
adversarial to **both** generators, which satisfies the generator-≠-evaluator invariant more
robustly than a family swap alone.

**Ordinary (non-formal) review** — the slice review gate, code/PR review — still uses a **local
opposite-family** agent: Codex GPT-5.6 reviews Claude-authored work; a Claude session reviews
Codex-authored work. Do not conflate it with the formal evaluator pass.

**Capability (verified; drift D-4 amended):** both approved open models return a **real reasoning
trace** and have a **verified agentic turn** (real tool calls) on this transport. The currently
bound Qwen evaluation preset can therefore run gates and its `effort` is genuine — not nominal. The zero-reasoning behaviour is
**specific to GLM 5.2** over OpenRouter (a design-lane model), **not** a client-wide gap: never cite
"GLM 5.2 · xhigh reasoning" as gate evidence, and do not restate that caveat as a property of the
transport or of the evaluator lane.

If neither the local transport nor a cloud run can be launched, record the gap in `drift.md` and let
the supervisor decide — never self-certify.

## Key Concepts

Expand Down Expand Up @@ -108,11 +133,11 @@ fallback).
| `summary-only` | Upload artifacts only; do not comment. |

The agent must write `OPENHANDS_SUMMARY_PATH` before exit. For a harness run, the verdict of record
and its trace live in the **tracked** run dir: `OPENHANDS_RUN_DIR` is the run's `.llm/runs/<run-id>/`
dir (where the evaluator's `plan-eval.md`/`evaluate.md` is committed), and `TRACE_DIR` is `trace/`
beneath it (env `OPENHANDS_TRACE_DIR`) for compact trace metadata. Do not reuse legacy
`.llm/tmp/openhands/summary.md` or `.llm/tmp/run/openhands/…` scratch as the verdict — see
`.llm/harness/workflow/agent-handoff.md` for the full output contract.
and its trace live in the **tracked** run dir: `OPENHANDS_RUN_DIR` is the run's
`.llm/runs/<run-id>/` dir (where the evaluator's `plan-eval.md`/`evaluate.md` is committed), and
`TRACE_DIR` is `trace/` beneath it (env `OPENHANDS_TRACE_DIR`) for compact trace metadata. Do not
reuse legacy `.llm/tmp/openhands/summary.md` or `.llm/tmp/run/openhands/…` scratch as the verdict —
see `.llm/harness/workflow/agent-handoff.md` for the full output contract.

## Token Rule

Expand All @@ -138,8 +163,8 @@ and carry a `## SKILL` chapter — see step 2 below) and reads the GitHub token
in-process env var (`--token-env`, default `GH_TOKEN`), never from a file or argv. It posts exactly
one trigger comment, respecting the per-PR concurrency-cancel rule.
`openhands-status.ts --source
local` needs no token and reads the newest committed trace under the run's `TRACE_DIR`
(`.llm/runs/<run-id>/trace/`).
local` needs no token and reads the newest committed trace under the
run's `TRACE_DIR` (`.llm/runs/<run-id>/trace/`).

## Workflow

Expand Down Expand Up @@ -184,26 +209,27 @@ local` needs no token and reads the newest committed trace under the run's `TRAC
budget during exploration, leaving zero artifacts. Split the task into sequential triggers and/or
raise `iterations=`, and require the agent to create deliverable files early and grow them
incrementally.
- **Eval run mutating `deno.lock`**: a PLAN-EVAL/IMPL-EVAL run's `deno check` / `deno publish
- **Eval run mutating `deno.lock`**: a PLAN-EVAL/IMPL-EVAL run's `deno check` /
`deno publish
--dry-run` can silently re-resolve and commit `deno.lock` churn (observed: a
`@opentelemetry/semantic-conventions` downgrade riding into a merged umbrella). Rule: **an
evaluator must never mutate the lock** — instruct the run prompt to `git checkout -- deno.lock`
before committing. Diff the lock against the **true base** (the commit the wave forked/synced
from), not the working baseline — an in-branch "unchanged" claim hides churn that predates the
first slice. Reconcile-don't-revert mid-wave (Golden Rule 6: never delete the lock or `--reload`
without approval). The lock is not the only churn: an IMPL-EVAL commit-back can also push
scratch/junk files alongside the verdict artifact. **Verify the committed file set before merge**
the intended change is the run's `evaluate.md`/`plan-eval.md` plus any authorized fix, not a
scratch/junk files alongside the verdict artifact. **Verify the committed file set before merge**
the intended change is the run's `evaluate.md`/`plan-eval.md` plus any authorized fix, not a
re-resolved `deno.lock` or stray workspace files; drop anything outside that set.
- **Trusting the persistent PR summary comment**: the `<!-- openhands-agent-summary -->` comment is
one per PR and is **not always regenerated** for a new run — it can show a prior run's package,
phase, and verdict while only its `updated_at` bumps. **The verdict source is the committed run
artifact** (`plan-eval.md` for PLAN-EVAL, `evaluate.md` for IMPL-EVAL), never the PR comment;
confirm it names the right run id, slices, and surface before accepting it.
- **Stacking `@openhands` comments on one PR**: multiple `@openhands` triggers on the same PR
cancel all-but-one under the per-PR concurrency group. Post exactly one trigger per intended run.
Trigger placement also chooses the checkout: a **PR comment** runs against the PR branch, an
**issue comment** runs against `main`.
- **Stacking `@openhands` comments on one PR**: multiple `@openhands` triggers on the same PR cancel
all-but-one under the per-PR concurrency group. Post exactly one trigger per intended run. Trigger
placement also chooses the checkout: a **PR comment** runs against the PR branch, an **issue
comment** runs against `main`.

## Reference Files

Expand Down
14 changes: 9 additions & 5 deletions .claude/skills/claude-manager/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,9 @@ description: >
# Claude Manager

Use this skill when the task involves Claude Code session orchestration rather than package code.
Claude is the supervisor. OpenHands evaluates. WSL Codex implements harness slices that must be
visible from Codex Desktop/mobile.
Claude is the supervisor. WSL Codex implements harness slices that must be visible from Codex
Desktop/mobile. Evaluation runs on the evaluator lane in `.llm/harness/workflow/lane-policy.md`:
locally Claude Code + OpenRouter with an open model, and OpenHands for automated cloud runs.

## Workflow

Expand Down Expand Up @@ -65,8 +66,10 @@ outcome.
- Do not use Claude workflows as the default NetScript implementation agent. WSL Codex remains the
preferred implementation lane because it is daemon-attached, mobile-visible, and cheaper to steer
slice-by-slice.
- Keep OpenHands as the evaluator. Claude workflows may prepare evaluator inputs, but they do not
replace PLAN-EVAL or IMPL-EVAL.
- Keep the evaluator a separate session on the evaluator lane from
`.llm/harness/workflow/lane-policy.md` — locally Claude Code + OpenRouter with an **open model**, or
OpenHands for cloud runs. Claude workflows may prepare evaluator inputs, but they do not replace
PLAN-EVAL or IMPL-EVAL, and no session self-certifies.
- Route every Claude workflow, supervisor, and review session through the canonical lane table in
`.llm/harness/workflow/lane-policy.md`. Do not reproduce model/effort defaults here or infer a
paid escalation from workflow prose.
Expand Down Expand Up @@ -97,6 +100,7 @@ session should be started.

- [ ] Current branch/worktree is verified.
- [ ] Harness skill was loaded for harnessed work.
- [ ] Evaluator surface is OpenHands when evaluating.
- [ ] Evaluator surface is the lane-policy evaluator route (open model): Claude Code + OpenRouter
locally, OpenHands for cloud runs.
- [ ] Implementation surface is WSL Codex when slice work must be mobile-visible.
- [ ] Claude remote-control or Codex daemon visibility is proven before claiming phone visibility.
Loading
Loading