Skip to content

fix(cli): ship complete agent diagnostic skill surface - #1034

Merged
rickylabs merged 8 commits into
mainfrom
fix/1023-agent-init-skill-surface
Aug 1, 2026
Merged

fix(cli): ship complete agent diagnostic skill surface#1034
rickylabs merged 8 commits into
mainfrom
fix/1023-agent-init-skill-surface

Conversation

@rickylabs

@rickylabs rickylabs commented Aug 1, 2026

Copy link
Copy Markdown
Owner

Summary

netscript agent init installed three skills (164 lines) whose own routing told agents to "use the aspire skill" — a skill it never installed. This ships the complete five-skill diagnostic surface plus a symptom-indexed playbook: 6 files, 863 lines, with no dangling routes.

The installer itself was never the defect. It already writes every file the manifest lists, so the fix is manifest + content + the generated barrel, and the installer's bundle iteration and hash verification are untouched.

Scope

Why this exists — and what it does not prove

Measurement across five agent build rounds on 0.0.2: netscript plugin doctor 0 uses, aspire otel 0 uses, aspire export 0 uses — despite plugin doctor being named six times in the shipped skills. A mention in a capability table does not change behaviour; the command has to be reachable from the symptom an agent is actually in.

So plugin doctor is now reachable from three symptoms, not just a verb table:

  • help.md — "A plugin install succeeded, but nothing is wired"
  • netscript-build — "install seemed to work, but its boundary never runs"
  • netscript-operate — "a plugin's boundary never runs, or installation succeeded but nothing is wired"

This is structural, not behavioural, proof. Whether these commands actually get invoked can only be confirmed by re-measuring in another instrumented build round against 0.0.3. Please do not read this PR as evidence that the zero-invocation metric has moved.

What changed

Surface Change
skills/aspire/SKILL.md new, 270 lines — diagnostic-first; Healthy is not proof, otel logs|spans|traces, describe --format Json, resource restart, export
skills/deno/SKILL.md new, 248 lines — check on one file, info for resolution, permissions, cache/--reload, sanitizers, the exit-code/pipe trap
skills/help.md new, 170 lines — indexed by symptom, not by command
skills/manifest.json 5 skills + help.md; bundle 0.1.00.2.0
netscript / -build / -operate dangling routes repaired; symptom anchors added
init-agent.ts AGENTS_SECTION names all five skills and help.md, and directs Aspire vs Deno problems explicitly
deno.json check:assets-barrel now diffs skills.generated.ts — it did not before, so editing skills/** without regenerating passed CI
docs README.md, docs/site/reference/ai/skills.md, docs/site/reference/cli/commands.md

The supplied drafts carried their own trap: deno/SKILL.md routed to deno-fresh and netscript-deno-toolchain, neither of which agent init installs. Adopting them unedited would have shipped two new dangling routes while claiming to fix dangling routes. Both are rewritten as direct domain guidance.

Acceptance evidence (issue #1023 boxes)

  • Installs an aspire and a deno skill alongside the existing ones — fresh agent init --host claude into a clean temp dir: aspire/SKILL.md, deno/SKILL.md, help.md, netscript/, netscript-build/, netscript-operate/ — 6 files, 863 lines (vs 164 on main).
  • No installed skill routes to a skill agent init does not install — route extractor over installed content reports none; grep for every unshipped repo skill name across skills/ returns nothing.
  • A symptom-indexed troubleshooting document ships.claude/skills/help.md.
  • The AGENTS.md block names all installed skills and directs to Aspire and Deno — installed block verified verbatim; idempotency preserved (existing second-run changedFiles: [] test still green).
  • Skills surface plugin doctor, aspire otel, aspire logs, deno info from the symptom — structurally; see the caveat above.
  • Test: every routing reference resolves to an installed skill — new test, and demonstrated red on pre-fix content:
=== PRE-FIX (origin/main) ===
installed: netscript, netscript-operate, netscript-build
DANGLING ROUTES: netscript -> aspire | netscript-operate -> aspire | netscript-build -> aspire
exit=1

=== POST-FIX (HEAD) ===
installed: netscript, netscript-operate, netscript-build, aspire, deno
DANGLING ROUTES: (none)
exit=0

Validation (re-run independently by the evaluator)

Gate Result
run-deno-check.ts --root packages/cli --ext ts,tsx PASS — 742 files, 0 occurrences
deno lint packages/cli PASS — 107 files
deno test -A .../agent/init/ PASS — 4 passed, 0 failed
deno task check:assets-barrel PASS — exit 0, clean after regeneration
deno task quality:scan / arch:check PASS — no new findings
e2e:cli run scaffold.runtime N/A — no scaffold, plugin-scaffold, DB-wiring, or Aspire-helper output changes

Reviewer note

The route extractor was tightened in 9fcd1044f to require the literal word "skill". Verified this removes genuine false positives (Use `help.md`, "the Aspire CLI") without weakening detection — it still catches all three pre-fix aspire routes, as shown above.

Harness

  • Run dir: .llm/runs/fix-1023-agent-init-skill-surface--skills-discoverability/
  • PLAN-EVAL: PASS · IMPL-EVAL: PASS — Opus 5 supervisor (owner-waived open-model lane, 2026-08-01).
  • Correction to an earlier revision of this body. It cited OpenHands run 30714594170 as a "corroborating PLAN-EVAL PASS". That is withdrawn: the run is real and succeeded, but its head SHA is 3ab64720f — the branch point, containing none of this PR's commits — and a green workflow is not an evaluator verdict. The supervisor verdict above is the only evaluation backing this PR.

Review round — owner review, addressed in 707e8d235 / a5310a19c

# Comment Resolution
1 (HIGH) help.md:166 shipped docker ps -aq | xargs -r docker rm -f — force-removes every container on the machine Rewritten Aspire-first per the owner directive. No Docker removal command ships at all; a scoping filter we could not prove is worse than none, so leftover containers are documented as Aspire's to reclaim. Only read-only docker ps survives anywhere in the bundle.
2 (MED) Dangling-route test scanned only <skill>/SKILL.md, missing help.md Scan extended to help.md, dangling entries keyed by path, and the scanned-path set is itself asserted so the scan cannot silently narrow again.
3 (LOW) Router said help.md, installed path is .claude/skills/help.md Qualified in netscript/SKILL.md; the same bare reference in netscript-operate/SKILL.md was found by sweep and fixed too.

Comment 1 was fixed as a principle, not a line. It also resolved a live self-contradiction: aspire/SKILL.md already said "leave pre-existing containers alone — deleting them destroys another session's data," which help.md was overriding with a blanket wipe. The adjacent "dangling AppHost" block (help.md:37-40) had the same shape and is Aspire-first too; the standing never kill aspire mcp start rule is preserved.

Every Aspire verb and flag now shipped was checked against the installed CLI (13.4.6+87fe259e). There is no aspire prune/clean/rm and none is claimed; aspire cache clear is documented but explicitly scoped as CLI disk-cache only, not runtime cleanup.

The comment-2 test was verified load-bearing by the supervisor independently of the slice's report — appending a ghost-cleaner route to help.md turns it red with "help.md -> ghost-cleaner", and it returns green on revert.

Drift / Debt

  • Repro drift: the brief's packages/cli/src/main.ts and --project-root do not exist on this checkout; the live contributor entrypoint from a temp cwd reproduces exactly three skills, 164 lines, and dangling Aspire routes.
  • Architecture debt: none created or closed.

@rickylabs rickylabs added this to the 0.0.3 milestone Aug 1, 2026
@rickylabs rickylabs added type:fix area:cli area:docs status:plan Harness plan phase priority:p1 High area:agentic status:plan-eval Awaiting plan evaluation and removed status:plan Harness plan phase labels Aug 1, 2026
@rickylabs

Copy link
Copy Markdown
Owner Author

[PHASE: PLAN]

Research and Design are locked for separate-session PLAN-EVAL.

Findings

  1. The live contributor entrypoint reproduces exactly three installed skills totaling 164 lines and dangling Aspire routes.
  2. The supplied repro path/flag are stale, recorded as minor drift.
  3. The installer already writes every hash-verified non-manifest asset; manifest/content and generated freshness are the defect.
  4. Two implementation slices cover source/content/tests/docs, then generated artifact and scoped validation.

Next

  • Formal open-model evaluator checks every Plan-Gate box.
  • No implementation begins before PASS.

Run artifact: .llm/runs/fix-1023-agent-init-skill-surface--skills-discoverability/

@rickylabs

Copy link
Copy Markdown
Owner Author

@openhands-agent model=openrouter/qwen/qwen3.7-max provider=openrouter effort=xhigh output=pr-comment iterations=300

use harness

SKILL

  • netscript-harness — enforce the separate-session PLAN-EVAL protocol and Plan-Gate.
  • netscript-cli — understand the agent init and generated asset surface.
  • netscript-tools — use trustworthy repository evidence and preserve lock hygiene.
  • netscript-pr — post the formal phase verdict comment on PR fix(cli): ship complete agent diagnostic skill surface #1034.

Run PLAN-EVAL only for PR #1034 / branch fix/1023-agent-init-skill-surface in
rickylabs/netscript. Do not implement or edit source.

Read, in order:

  1. .llm/harness/gates/plan-gate.md
  2. .llm/harness/evaluator/plan-protocol.md
  3. .llm/harness/evaluator/verdict-definitions.md
  4. .llm/runs/fix-1023-agent-init-skill-surface--skills-discoverability/research.md
  5. .llm/runs/fix-1023-agent-init-skill-surface--skills-discoverability/plan.md
  6. the ## Design section of that run's worklog.md
  7. .llm/harness/archetypes/ARCHETYPE-6-cli-tooling.md
  8. .llm/harness/archetypes/SCOPE-docs.md
  9. .llm/harness/gates/archetype-gate-matrix.md
  10. relevant CLI entries in .llm/harness/debt/arch-debt.md

Spot-check at least one load-bearing research finding against the tree. Walk every Plan-Gate box,
run the evaluator open-decision sweep, and write the formal verdict using the plan-eval template.
The verdict must be exactly PASS or FAIL_PLAN. Post a PR comment beginning with
**[PHASE: PLAN-EVAL] [VERDICT: PASS]** or
**[PHASE: PLAN-EVAL] [VERDICT: CHANGES_REQUESTED]**, and include the exact harness verdict in
the body. Do not modify implementation files. Preserve lock hygiene.


OUTPUT CONTRACT (mandatory — verdict first)

  1. Post the verdict PR comment IMMEDIATELY after you form the verdict — BEFORE any
    optional deep-dive, extra verification, or long context dump. Iteration budgets
    exhaust; a verdict comment deferred to the end of the run is frequently lost.
  2. That PR comment MUST start with the formal header line, exactly:
    [PHASE: ] [VERDICT: ]
    where is your eval phase (e.g. IMPL-EVAL, PLAN-EVAL) and is one
    of PASS, FAIL_FIX, FAIL_RESCOPE, FAIL_DEBT, FAIL_PLAN.
  3. ALWAYS end BOTH the verdict PR comment AND your summary file with one final
    machine-readable line of the exact form:
    OPENHANDS_VERDICT:
    using a literal token from: PASS, FAIL_FIX, FAIL_RESCOPE, FAIL_DEBT, FAIL_PLAN,
    NONE. Use NONE only when no verdict could be reached.

@rickylabs

rickylabs commented Aug 1, 2026

Copy link
Copy Markdown
Owner Author

OpenHands Agent — Completed

OPENHANDS_VERDICT: PASS

Model: openrouter/qwen/qwen3.7-max
Provider: OPENROUTER
Job status: success
Verdict source: summary-file
Verdict comment: #1034 (comment)
Summary source: agent
Housekeeping: ack=success trace=success commit-artifacts=success replies=skipped draft-pr=skipped
Trace: .llm/tmp/run/openhands/pr-1034/run-30714594170-1 (in the Actions artifact)
Artifact: openhands-agent-30714594170-1

PLAN-EVAL Summary: PR #1034 — Agent Init Skill Surface

Summary

Completed PLAN-EVAL for PR #1034 (branch fix/1023-agent-init-skill-surface) following the separate-session evaluator protocol. Evaluated the plan artifacts in .llm/runs/fix-1023-agent-init-skill-surface--skills-discoverability/ against the Plan-Gate checklist from .llm/harness/gates/plan-gate.md.

Verdict: PASS — all Plan-Gate boxes satisfied; implementation may begin.

Changes

No implementation changes made. This was a plan-only evaluation run.

Read and evaluated:

  • .llm/harness/gates/plan-gate.md — checklist enforcement
  • .llm/harness/evaluator/plan-protocol.md — evaluator protocol
  • .llm/harness/evaluator/verdict-definitions.md — verdict semantics
  • .llm/runs/fix-1023-agent-init-skill-surface--skills-discoverability/research.md — research findings
  • .llm/runs/fix-1023-agent-init-skill-surface--skills-discoverability/plan.md — plan with locked decisions
  • .llm/runs/fix-1023-agent-init-skill-surface--skills-discoverability/worklog.md — Design section with commit slices
  • .llm/harness/archetypes/ARCHETYPE-6-cli-tooling.md — archetype profile
  • .llm/harness/archetypes/SCOPE-docs.md — docs scope overlay
  • .llm/harness/gates/archetype-gate-matrix.md — gate selection matrix
  • .llm/harness/debt/arch-debt.md — relevant CLI debt entries

Validation

Spot-checked load-bearing research findings against the repository tree:

  1. Manifest contains 3 skills — Confirmed: packages/cli/src/kernel/assets/skills.generated.ts line 13 shows manifest with ["netscript", "netscript-operate", "netscript-build"]. Plan correctly identifies the gap (needs 5 skills: add aspire and deno).

  2. check:assets-barrel omits skills.generated.ts — Confirmed: deno.json line 89 shows the task checks embedded.generated.ts files and registry.generated.ts and scalar.generated.ts but not skills.generated.ts. Plan correctly addresses this in slice 2.

  3. init-agent.ts uses hash verification — Confirmed: packages/cli/src/public/features/agent/init/init-agent.ts lines 163-184 implement verifyBundle() that hash-checks EMBEDDED_SKILL_FILES against EMBEDDED_SKILL_BUNDLE_HASH. Plan decision D1 correctly preserves this.

Responses to Review Comments

Posted formal PLAN-EVAL verdict comment on PR #1034: #1034 (comment)

Comment begins with **[PHASE: PLAN-EVAL] [VERDICT: PASS]** and walks every Plan-Gate box with citations to the plan artifacts that satisfy each.

Remaining Risks

None blocking. The plan correctly identifies and addresses:

  • Exact regex for skill-reference parsing (must resolve now, addressed in slice 1)
  • Manifest version increment from 0.1.0 to 0.2.0 (must resolve now, addressed in slice 1)
  • Broader skill prose edits (safe to defer, explicitly marked as such)

The two commit slices are well-ordered: source/content/tests first, then generated artifact + full validation. This prevents false stale-barrel passes and keeps generated evidence traceable.

Archetype selection (6 — CLI / Tooling) and scope overlay (docs) are correct for this bounded content/installer/guidance change.

OPENHANDS_VERDICT: PASS

Run: https://github.com/rickylabs/netscript/actions/runs/30714594170

@rickylabs

Copy link
Copy Markdown
Owner Author

[PHASE: PLAN-EVAL] [VERDICT: PASS]

Plan-Gate Checklist

All boxes satisfied:

  • Research present and current. research.md exists, dated 2026-08-01, re-baselined against current main at 3ab6472. Load-bearing findings verified: manifest contains 3 skills (not 5), check:assets-barrel omits skills.generated.ts, init-agent.ts uses hash verification over EMBEDDED_SKILL_FILES.
  • Decisions locked. Five decisions (D1-D5) stated with rationale in plan.md.
  • Open-decision sweep. Three decisions listed: "exact regex for skill-reference parsing" and "manifest version increment" marked "must resolve now"; "broader skill prose edits" marked "safe to defer". No decisions would force rework if deferred.
  • Commit slices. Two slices enumerated in worklog.md, ordered, < 30. Each names what it proves, the gate that proves it, and the files it touches.
  • Risk register. Four risks listed with mitigations in plan.md.
  • Gate set selected. Required gates from archetype-gate-matrix for Archetype 6 (CLI / Tooling) plus docs scope overlay: F-1/F-3/F-5/F-10, F-CLI-3/F-CLI-4/F-CLI-19/F-CLI-24, plus docs gates.
  • Deferred scope explicit. Full scaffold runtime smoke explicitly N/A (no scaffold output changes); publishing/release verification deferred to 0.0.3 release run.
  • jsr-audit (package/plugin waves). Marked N/A with reason: no export map, package version, public TypeScript API, or JSDoc surface changes. This is embedded content, installer guidance, tests, and docs.

Archetype and Scope

  • Archetype: 6 — CLI / Tooling (v2)
  • Scope overlays: docs

Correct selection. The plan changes embedded skill content, installer-generated assets, and shipped Markdown, not the CLI command surface or public API.

Open-Decision Sweep (Evaluator)

Independent sweep found no additional decisions that would force rework when deferred. The plan correctly identifies the two "must resolve now" items (regex parsing and version bump) and addresses them in the commit slices.

Verdict

PASS — implementation may begin.

OPENHANDS_VERDICT: PASS

@rickylabs rickylabs added status:impl and removed status:plan-eval Awaiting plan evaluation labels Aug 1, 2026
@rickylabs

Copy link
Copy Markdown
Owner Author

[PHASE: IMPL]

S1 proves the source bundle is complete and symptom-discoverable.

  • Commit: 5f497a85a
  • Adapted the supplied Aspire, Deno, and help drafts.
  • Manifest now owns five skills plus help.md; all named non-installed specialist routes are removed.
  • netscript plugin doctor is reachable from plugin-failure symptoms in help/build/operate.
  • AGENTS guidance, semantic route-integrity test, enumerating docs, and asset freshness task are updated.
  • Source review: git diff --check and focused TypeScript/JSON formatting pass; focused grep finds no stale deno-fresh, netscript-deno-toolchain, or Deno-doc-only route.

Next: regenerate the embedded barrel, execute the exact scoped gates, and verify a fresh installed artifact.

@rickylabs

Copy link
Copy Markdown
Owner Author

Orchestrator note — this PR overlaps #1034/#1030 and must be sequenced

#1034 (issue #1023, agent-init skill surface) and #1030 (issue #1026, Aspire agent wiring) were
run as concurrent slices and both rewrite the same files. They are individually MERGEABLE against
main, so nothing here warns you — but they are not mergeable one after the other without a
deliberate reconciliation.

Measured divergence between the two branches on shared files:

file diff between the two branches
skills/aspire/SKILL.md 85+ / 80-
skills/deno/SKILL.md 81+ / 61-
skills/help.md 7+ / 20-
skills/manifest.json 8+ / 2-
packages/cli/src/public/features/agent/init/init-agent.ts 35+ / 2-
packages/cli/src/public/features/agent/init/init-agent_test.ts overlapping

Each slice independently authored its own version of the shared skill surface, so this is a
content conflict, not a textual one. Do not resolve it by taking either side wholesale — that
silently drops half the intended surface, and the acceptance bar for both issues is
discoverability, which is exactly what a careless resolution would break.

Sequencing: land one, rebase the other onto it, and re-verify that an agent can still find
netscript plugin doctor and aspire otel from a cold start afterwards. The reconciliation is
tracked by the orchestrator; do not merge these two independently.

@rickylabs

Copy link
Copy Markdown
Owner Author

[PHASE: IMPL]

S2 proves the generated embedded bundle and scoped gates.

  • Commits: 9fcd1044f (artifact/test), 05c86f51d (harness sign-off evidence)
  • Embedded hash: 71a86900a53bb52eb6e3ba974426fb66657aa50b433586c522ab55b621487264
  • Type check: 742 files / 7 batches / 0 failed / 0 diagnostics.
  • Lint: 107 files checked.
  • Init tests: 4 passed / 0 failed, including idempotency, hash mismatch, installed files, route resolution, and AGENTS guidance.
  • check:assets-barrel: PASS post-commit; regeneration produces no diff and now checks skills.generated.ts.
  • Quality scan: no findings. Architecture check: exit 0; reported warnings are pre-existing and unrelated.
  • Fresh install artifact: five skill directories plus help.md, 863 lines total; required symptom commands and AGENTS routes verified.
  • scaffold.runtime: N/A per owner instruction and release-gate scope.

Next: separate-session IMPL-EVAL.

@rickylabs

Copy link
Copy Markdown
Owner Author

@openhands-agent model=openrouter/qwen/qwen3.7-max provider=openrouter effort=xhigh output=pr-comment iterations=500

use harness

SKILL

  • netscript-harness — enforce the separate-session IMPL-EVAL protocol and verdict rules.
  • netscript-cli — evaluate the agent init installer, embedded asset barrel, and CLI-facing docs.
  • netscript-tools — independently verify gate evidence and lock hygiene.
  • netscript-pr — verify close-gate/labels/milestone/commit trail and post the formal verdict.

Run IMPL-EVAL only for PR #1034 / branch fix/1023-agent-init-skill-surface in
rickylabs/netscript. Do not implement fixes.

Read .llm/harness/evaluator/protocol.md, verdict definitions, the Archetype 6 profile, docs
overlay, gate matrix, relevant architecture debt, PR commit list/comments, and every artifact in
.llm/runs/fix-1023-agent-init-skill-surface--skills-discoverability/.

Verify that PLAN-EVAL passed before implementation, the Design slices match the commit trail, the
supplied drafts were adapted rather than replaced, all five installed skills and help.md are in
the embedded/fresh-install surface, every parsed installed-skill route resolves through the
manifest, symptom paths reach netscript plugin doctor, aspire otel, aspire logs, and
deno info, AGENTS guidance is complete/idempotent, and skills.generated.ts is covered by the
asset freshness task.

Independently run or inspect the exact scoped gates:

  1. deno run -A .llm/tools/run-deno-check.ts --root packages/cli --ext ts,tsx
  2. deno lint packages/cli
  3. deno test -A packages/cli/src/public/features/agent/init/
  4. deno task check:assets-barrel

Do not run scaffold.runtime; it is explicitly N/A. Preserve lock hygiene. Verify the PR carries
Closes #1023, milestone 0.0.3, the requested labels with exactly one status, and that acceptance
evidence can be completed before ready-merge.

Post a PR comment beginning exactly
**[PHASE: IMPL-EVAL] [VERDICT: PASS]** or the applicable failing verdict. The harness verdict must
be one of PASS, FAIL_FIX, FAIL_RESCOPE, or FAIL_DEBT. Include concrete evidence and end with
the machine-readable verdict line. Do not edit implementation files.


OUTPUT CONTRACT (mandatory — verdict first)

  1. Post the verdict PR comment IMMEDIATELY after you form the verdict — BEFORE any
    optional deep-dive, extra verification, or long context dump. Iteration budgets
    exhaust; a verdict comment deferred to the end of the run is frequently lost.
  2. That PR comment MUST start with the formal header line, exactly:
    [PHASE: ] [VERDICT: ]
    where is your eval phase (e.g. IMPL-EVAL, PLAN-EVAL) and is one
    of PASS, FAIL_FIX, FAIL_RESCOPE, FAIL_DEBT, FAIL_PLAN.
  3. ALWAYS end BOTH the verdict PR comment AND your summary file with one final
    machine-readable line of the exact form:
    OPENHANDS_VERDICT:
    using a literal token from: PASS, FAIL_FIX, FAIL_RESCOPE, FAIL_DEBT, FAIL_PLAN,
    NONE. Use NONE only when no verdict could be reached.

@rickylabs

rickylabs commented Aug 1, 2026

Copy link
Copy Markdown
Owner Author

OpenHands Agent — Completed

OPENHANDS_VERDICT: PASS

Model: openrouter/qwen/qwen3.7-max
Provider: OPENROUTER
Job status: success
Verdict source: summary-file
Verdict comment: #1034 (comment)
Summary source: agent
Housekeeping: ack=success trace=success commit-artifacts=success replies=skipped draft-pr=skipped
Trace: .llm/tmp/run/openhands/pr-1034/run-30715280587-1 (in the Actions artifact)
Artifact: openhands-agent-30715280587-1

IMPL-EVAL Summary — PR #1034

Run ID: fix-1023-agent-init-skill-surface--skills-discoverability
Evaluator session: OpenHands run 30715280587
Model: openrouter/qwen/qwen3.7-max (separate session from implementation)
Date: 2026-08-01

Summary

Performed IMPL-EVAL for PR #1034 (branch fix/1023-agent-init-skill-surface) which ships a complete agent diagnostic skill surface for netscript agent init. The PR expands the installed skill bundle from 3 skills to 5 skills (netscript, netscript-operate, netscript-build, aspire, deno) plus a symptom-indexed companion playbook (help.md), following Archetype 6 (CLI/tooling) + docs overlay gates.

Changes

No implementation changes made. This was a read-only evaluation per harness protocol. The evaluator verified existing commits without modifying source code.

Validation

All four scoped validation gates executed independently:

Gate 1: Type checking

deno run -A .llm/tools/run-deno-check.ts --root packages/cli --ext ts,tsx

Result: PASS

  • 742 files checked, 7 batches, 0 failed batches
  • 0 type diagnostics
  • Exit code: 0

Gate 2: Linting

deno lint packages/cli

Result: PASS

  • 107 files checked, clean
  • Exit code: 0

Gate 3: Feature tests

deno test -A packages/cli/src/public/features/agent/init/

Result: PASS

  • 4 tests passed, 0 failed
  • Tests cover: Claude config + skills + AGENTS idempotency, VS Code + host table, manifest hash verification, route completeness
  • Exit code: 0

Gate 4: Asset barrel freshness

deno task check:assets-barrel

Result: PASS

  • Generated barrel matches source with SHA-256 hash verification
  • No diff after generation
  • Exit code: 0
  • Note: Required unset LD_LIBRARY_PATH in OpenHands environment (subprocess spawning quirk, not implementation defect)

Additional verification

Symptom routes (all reachable from symptom-indexed playbook):

  • netscript plugin doctor — present in help.md, netscript-build/SKILL.md, netscript-operate/SKILL.md
  • aspire otel — present in help.md and aspire/SKILL.md with full command reference
  • aspire logs — present in help.md and aspire/SKILL.md with full command reference
  • deno info — present in deno/SKILL.md with extensive usage guidance

AGENTS guidance:

  • ✅ Complete: names all five skills + help.md with explicit Aspire/Deno direction
  • ✅ Idempotent: marked block with START/END markers, existing upsert path retained

Dangling routes:

  • ✅ None found: grep confirms no references to non-manifest skills (deno-fresh, netscript-deno-toolchain, etc.)

PR metadata:

  • ✅ Closing keyword: Closes #1023 in PR body
  • ✅ Milestone: 0.0.3
  • ✅ Labels: type:fix, area:cli, area:docs, area:agentic, priority:p1, status:impl-eval (exactly one status label)

scaffold.runtime: Explicitly N/A per plan, PR body, and issue scope. No scaffold/plugin/DB/Aspire-helper changes.

Responses to review comments

No review comments required response. The implementation satisfies the approved plan and all archetype gates.

Remaining risks

None. The implementation is complete, tested, and ready for merge. Minor drift recorded in worklog:

  • deno task repro-entry staleness (does not block acceptance)
  • --watch flag deprecation (does not block acceptance)

Conclusion

The implementation satisfies the approved plan and archetype gates:

  • All required gates pass
  • All symptom routes are present and reachable
  • AGENTS guidance is complete and idempotent
  • Generated barrel is fresh and covered by asset freshness task
  • PR carries correct metadata (closing keyword, milestone, labels)
  • PLAN-EVAL passed before implementation (separate session)
  • Commit trail follows design with 4 commits (plan, S1, S2, evidence)

OPENHANDS_VERDICT: PASS

Run: https://github.com/rickylabs/netscript/actions/runs/30715280587

Owner waived the open-model evaluator lane for the 0.0.3 fix train
(2026-08-01); the Opus supervisor performs both passes. The slice's
OpenHands/Qwen run 30714594170 is recorded as corroboration, not as
the authority.

IMPL-EVAL discharges the PLAN-EVAL condition: the route-integrity
extractor is demonstrated red on origin/main content (three dangling
aspire routes) and green on HEAD.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AUCp2k2VFnH3vydCXHN3uV
@rickylabs
rickylabs marked this pull request as ready for review August 1, 2026 19:44
@rickylabs

Copy link
Copy Markdown
Owner Author

@openhands-agent model=openrouter/minimax/minimax-m3 output=pr-comment iterations=400

use harness

SKILL

  • netscript-harness — preserve evaluator separation and record a concise, evidence-based verdict.
  • netscript-tools — use repository-native commands and keep lock/worktree state clean.
  • openhands-handoff — honor the pr-comment output contract and write the required summary.
  • netscript-cli — hand-test scaffold and documented CLI commands when executable claims exist.
  • rtk — keep changed-file and command inspection compact.

Act as a cheap-and-quick documentation accuracy evaluator. Do not edit source, documentation,
deno.lock, or run artifacts, and do not create commits. Write the complete result to
OPENHANDS_SUMMARY_PATH; output mode pr-comment will publish that result as the single PR
comment.

  1. Identify every changed documentation file in this PR and read each one fully. Include Markdown,
    MDX, READMEs, RFCs, harness/process docs, and skill instructions; do not review only the diff
    hunks.
  2. For every executable claim, QUICKLY hand-test the exact documented command or snippet from the
    repository root. Use the smallest representative scaffold/workspace needed, compare real output
    and generated paths with the document's claim, and stop after the highest-value small checks. Do
    not substitute a full expensive E2E suite for a focused manual check.
  3. If the changed set contains no executable command, snippet, flag, verb, or path claim, say
    exactly:
    No executable documentation claims in this changed set; manual command testing was not applicable.
    Full accuracy and hallucination review is still mandatory.
  4. Check every named command verb, flag, file path, package, API, and expected output against the
    repository. Any hallucinated or nonexistent verb, flag, or path is a BLOCKING finding.
  5. Return a compact per-file table with accurate, inaccurate, or unverifiable, the commands or
    snippets tested, observed-versus-claimed output, and blocking findings. End with one overall
    PASS or FAIL_FIX verdict and a short list of exact fixes.

Keep the iteration budget small. Prefer one to three decisive manual checks over broad exploration,
but never omit a changed documentation file from the per-file verdict table.

@augmentcode

augmentcode Bot commented Aug 1, 2026

Copy link
Copy Markdown
🤖 Augment PR Summary

Summary: Fixes netscript agent init discoverability by shipping the complete diagnostic skill surface (Aspire + Deno) plus a symptom-indexed help.md, and by ensuring generated skill assets can’t go stale unnoticed.

Changes:

  • Expanded skills/manifest.json to include aspire, deno, and help.md (bundle v0.2.0) and regenerated the embedded skill barrel.
  • Added new shipped content: skills/aspire/SKILL.md, skills/deno/SKILL.md, and skills/help.md (symptom-first troubleshooting).
  • Repaired routing language in the NetScript skills to avoid references to uninstalled skills and to surface netscript plugin doctor from relevant symptoms.
  • Updated the inserted AGENTS.md section to name all installed skills and direct users to the playbook / appropriate domain skill.
  • Added an init-time test that asserts the installed bundle has no dangling skill references.
  • Updated check:assets-barrel to include skills.generated.ts, and refreshed README/docs to match the new installed set.

🤖 Was this summary useful? React with 👍 or 👎

@augmentcode augmentcode Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review completed. 3 suggestions posted.

Fix All in Augment

Comment augment review to trigger a new review at any time.

Comment thread skills/help.md Outdated

```sh
aspire stop --all --non-interactive --nologo
docker ps -aq | xargs -r docker rm -f

@augmentcode augmentcode Bot Aug 1, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

skills/help.md:166: docker ps -aq | xargs -r docker rm -f will forcibly remove all Docker containers on the machine (including unrelated ones), which is risky on shared/dev hosts. Consider scoping or qualifying this cleanup guidance so it doesn’t encourage deleting non-NetScript containers.

Severity: high

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 707e8d235 — and treated as the principle, not the line.

docker ps -aq | xargs -r docker rm -f is gone. Per the owner directive the Aspire CLI is now the documented default for both stopping and inspecting runtime state, inspect-first:

aspire ps --format Json --non-interactive --nologo           # inspect running AppHosts first
aspire describe --format Json --non-interactive --nologo     # inspect resource state
aspire resource <resource> stop                              # targeted stop
aspire stop --all --non-interactive --nologo                 # only after confirming every AppHost is yours

No Docker removal command ships at all. We deliberately declined to ship a "scoped" docker rm: a removal filter we cannot prove is worse than none, so leftover containers are documented as Aspire's to reclaim, with aspire doctor --format Json as the diagnostic. The only surviving docker references in the bundle are read-only docker ps (verified by grep over skills/ and the generated barrel).

Audit findings beyond line 166:

  • help.md:37-40 ("dangling AppHost") had the same shape — docker ps -a # then clear exited orphans — and is now Aspire-first too. The never kill aspire mcp start rule is preserved there.
  • This also removed a real self-contradiction: aspire/SKILL.md:255-257 already said "Leave pre-existing containers alone — Aspire reuses persistent ones and deleting them destroys another session's data," which help.md was overriding with a blanket wipe.
  • aspire cache clear is documented, but explicitly scoped as CLI disk-cache only — it does not stop AppHosts or remove containers.

Every verb and flag shipped was verified against the installed CLI (aspire 13.4.6+87fe259e); there is no aspire prune/clean/rm, and none is claimed.

const installed = new Set(manifest.skills);
const referenced = new Set<string>();
const dangling = new Set<string>();
for (const skill of manifest.skills) {

@augmentcode augmentcode Bot Aug 1, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

packages/cli/src/public/features/agent/init/init-agent_test.ts:131-139: This dangling-route check only scans <skill>/SKILL.md, but .claude/skills/help.md is also installed and is likely to contain skill hand-offs. As written, a dangling “use the X skill” reference introduced in help.md would not be caught by this test.

Severity: medium

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Confirmed and fixed in 707e8d235. The scan now iterates [...manifest.skills.map((s) => ${s}/SKILL.md), "help.md"] instead of skills only, and dangling entries are keyed by path so a help.md route is attributable.

Two things to stop this regressing, given the test is the evidence for acceptance box 6:

  1. extractSkillReferences finds zero references in today's help.md, so simply widening the loop would have been a silently vacuous assertion. The test now also asserts the scanned-path set equals the expected list, so the scan cannot quietly narrow back to skills-only.
  2. The referenced assertion is kept exact rather than relaxed to a subset check.

Proven load-bearing, and re-verified independently by the supervisor rather than taken from the slice report — temporarily appending a ghost-cleaner route to help.md and regenerating the barrel:

agent init installs the diagnostic surface with no dangling skill routes ... FAILED
-   "help.md -> ghost-cleaner",
FAILED | 0 passed | 1 failed

and green again after revert (4 passed | 0 failed). The failure is attributed to help.md, which is exactly the hole you identified.

Comment thread skills/netscript/SKILL.md
| Aspire start/stop, dashboard, resource graph, raw traces/logs | `aspire` |
| Generic Deno runtime / tooling questions | `deno` |

When the symptom is unclear—something hangs, vanishes, or silently does nothing—start with

@augmentcode augmentcode Bot Aug 1, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

skills/netscript/SKILL.md:35-36: The router tells agents to start with help.md, but the installed playbook location is .claude/skills/help.md (as referenced in AGENTS_SECTION). This could lead agents to look for a repo-root help.md instead of the installed playbook.

Severity: low

Fix This in Augment

🤖 Was this useful? React with 👍 or 👎, or 🚀 if it prevented an incident/outage.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Valid — fixed in 707e8d235. skills/netscript/SKILL.md:36 now reads .claude/skills/help.md, matching how AGENTS_SECTION refers to it.

Swept the rest of the bundle for the same ambiguity rather than fixing only the reported line: skills/netscript-operate/SKILL.md:50 had an identical bare help.md reference and is fixed too. netscript-build turned out not to carry one, so it needed no change. A grep for help.md across the installed bundle now returns only fully-qualified .claude/skills/help.md paths.

@rickylabs

Copy link
Copy Markdown
Owner Author

[PHASE: IMPL-EVAL] [VERDICT: PASS]

Independent evaluation summary

Evaluator session: OpenHands run 30715280587, model openrouter/qwen/qwen3.7-max, separate session from implementation.

Surface / archetype: packages/cli agent assets / Archetype 6
Scope overlays: docs

Process verification

  • ✅ PLAN-EVAL passed before implementation (separate session run 30714594170, timestamp precedes S1 commit)
  • ✅ Design checkpoint exists in worklog.md with two ordered slices
  • ✅ Commit trail follows design: 4 commits (plan, S1 source/content/tests, S2 generated artifact, evidence)
  • ✅ No implementation fixes made during evaluation (read-only per protocol)

Implementation verification

  • ✅ Five installed skills in manifest: netscript, netscript-operate, netscript-build, aspire, deno
  • ✅ help.md installed as symptom-indexed companion playbook
  • ✅ No dangling installed-skill routes (grep confirms no references to non-manifest skills)
  • ✅ Symptom routes complete and reachable:
    • netscript plugin doctor — present in help.md, netscript-build/SKILL.md, netscript-operate/SKILL.md
    • aspire otel — present in help.md and aspire/SKILL.md with full command reference
    • aspire logs — present in help.md and aspire/SKILL.md with full command reference
    • deno info — present in deno/SKILL.md with extensive usage guidance
  • ✅ AGENTS guidance complete: names all five skills + help.md with explicit Aspire/Deno direction
  • ✅ AGENTS guidance idempotent: marked block with START/END markers, existing upsert path retained
  • ✅ Drafts adapted not replaced: S1 commit adds aspire (270 lines), deno (248 lines), help (170 lines)
  • ✅ skills.generated.ts regenerated in S2 commit with hash verification
  • ✅ skills.generated.ts covered by asset freshness task (check:assets-barrel)

Independent gate verification

All four scoped gates executed independently by evaluator session:

  1. Gate 1: deno run -A .llm/tools/run-deno-check.ts --root packages/cli --ext ts,tsx

    • 742 files checked, 7 batches, 0 failed batches, 0 type diagnostics
    • Exit code: 0
  2. Gate 2: deno lint packages/cli

    • 107 files checked, clean
    • Exit code: 0
  3. Gate 3: deno test -A packages/cli/src/public/features/agent/init/

    • 4 tests passed, 0 failed
    • Tests cover: Claude config + skills + AGENTS idempotency, VS Code + host table, manifest hash verification, route completeness
    • Exit code: 0
  4. Gate 4: deno task check:assets-barrel

    • Generated barrel matches source, no diff after generation
    • Exit code: 0 (after unset LD_LIBRARY_PATH — OpenHands environment quirk, not implementation defect)

scaffold.runtime: Explicitly N/A per plan, PR body, and issue scope. No scaffold/plugin/DB/Aspire-helper changes.

PR metadata verification

  • ✅ Closing keyword: Closes #1023 in PR body
  • ✅ Milestone: 0.0.3
  • ✅ Labels: type:fix, area:cli, area:docs, area:agentic, priority:p1, status:impl-eval (exactly one status label)

Acceptance evidence (from worklog)

  • Fresh temp install created with five SKILL.md files + help.md (863 lines total)
  • All symptom routes present and reachable from symptom-indexed playbook
  • Generated artifact matches source with SHA-256 hash verification
  • Route-integrity test parses installed skills and confirms all references resolve through manifest
  • AGENTS guidance is complete, idempotent, and names all installed routes

Architecture debt

None created or closed. Minor drift recorded: deno task repro-entry staleness and --watch flag deprecation, but these do not block acceptance.

Conclusion

The implementation satisfies the approved plan and archetype gates. All required gates pass, all symptom routes are present and reachable, AGENTS guidance is complete and idempotent, the generated barrel is fresh and covered by the asset freshness task, and the PR carries correct metadata.

OPENHANDS_VERDICT: PASS

rickylabs added a commit that referenced this pull request Aug 1, 2026
Scopes the Augment high-severity finding 3696483256 (docker ps -aq | xargs -r
docker rm -f in skills/help.md) to a single convergent doc fix plus an assets
barrel regeneration, aligned with #1034 707e8d2 so the pending rebase cannot
drop either side's content.
rickylabs added a commit that referenced this pull request Aug 1, 2026
Addresses Augment finding 3696483256 by converging the two cleanup sections with sibling #1034 commit 707e8d2.

skills.generated.ts was regenerated with gen:assets-barrel rather than hand-edited.
@rickylabs
rickylabs merged commit 67cf596 into main Aug 1, 2026
14 checks passed
rickylabs added a commit that referenced this pull request Aug 1, 2026
…ilable to dogfood

Closes the gap that forced acceptance box 5 unticked: skills/aspire, skills/deno
and skills/help.md landed on main at 67cf596 while this run was in flight.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RLqimdJHXcojxbUGBPVfci
rickylabs added a commit that referenced this pull request Aug 1, 2026
Scopes the Augment high-severity finding 3696483256 (docker ps -aq | xargs -r
docker rm -f in skills/help.md) to a single convergent doc fix plus an assets
barrel regeneration, aligned with #1034 707e8d2 so the pending rebase cannot
drop either side's content.
rickylabs added a commit that referenced this pull request Aug 1, 2026
Addresses Augment finding 3696483256 by converging the two cleanup sections with sibling #1034 commit 707e8d2.

skills.generated.ts was regenerated with gen:assets-barrel rather than hand-edited.
rickylabs added a commit that referenced this pull request Aug 1, 2026
* plan(cli): lock agent init discoverability design

* eval(plan): PLAN-EVAL PASS for 1026 agent init discoverability

Evaluator: Opus 5 supervisor (owner-waived open-model lane, 2026-08-01).
No open-model evaluator dispatch is required for this fix train.

* chore(harness): record blocked plan evaluator

* fix(cli): ship discoverable Aspire and Deno skills

* fix(cli): bound Aspire agent initialization

* test(cli): prove agent symptom discoverability

* eval(impl): IMPL-EVAL PASS for 1026 aspire agent wiring

Evaluator: Opus 5 supervisor (owner-waived open-model lane, 2026-08-01).
Gates re-run by the evaluator; cold-start behaviour verified live.
Held as draft pending a human decision on merge order with #1023.

* chore(harness): brief the destructive-cleanup follow-up slice

Scopes the Augment high-severity finding 3696483256 (docker ps -aq | xargs -r
docker rm -f in skills/help.md) to a single convergent doc fix plus an assets
barrel regeneration, aligned with #1034 707e8d2 so the pending rebase cannot
drop either side's content.

* fix(skills): replace destructive docker cleanup with Aspire CLI guidance

Addresses Augment finding 3696483256 by converging the two cleanup sections with sibling #1034 commit 707e8d2.

skills.generated.ts was regenerated with gen:assets-barrel rather than hand-edited.

* chore(harness): brief the rebase and review-thread slice

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RLqimdJHXcojxbUGBPVfci

* fix(cli): gate Aspire delegation on the selected agent host

* test(cli): validate linked routing targets for dangling routes

* chore(harness): brief the supervisor un-reflow correction

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RLqimdJHXcojxbUGBPVfci

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix(cli): agent init ships a 164-line skill surface that routes to skills it never installs — agents never found doctor, otel or logs

2 participants