Skip to content

refactor(skills): decompose netclaw-operations + reconcile identity-vs-memory routing#1485

Merged
Aaronontheweb merged 2 commits into
netclaw-dev:devfrom
Aaronontheweb:decompose-operations-skill
Jun 25, 2026
Merged

refactor(skills): decompose netclaw-operations + reconcile identity-vs-memory routing#1485
Aaronontheweb merged 2 commits into
netclaw-dev:devfrom
Aaronontheweb:decompose-operations-skill

Conversation

@Aaronontheweb

@Aaronontheweb Aaronontheweb commented Jun 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

Decomposes the 1,148-line netclaw-operations skill into a hybrid progressive-disclosure layout (a variant of #1115) and reconciles the identity-vs-memory routing rule to openspec/specs/netclaw-agent-memory.

Part 1 — Decompose netclaw-operations (#1115)

SKILL.md drops 1,148 → 346 lines. Safety-critical / high-frequency guidance stays inline (tool-argument validation, large-output handling, the full approval-prompts section, identity routing); the long-tail manuals move into references/*.md, surfaced on demand via skill_read_resource.

Why hybrid, not the full split #1115 sketched: I gated the decomposition on whether the local-tier model (Qwen3.6-35B-A3B) reliably does the skill_load → skill_read_resource two-hop. It does ~80% of runs (3/5 clean, 1/5 after thrashing, 1/5 bypassed to a web fetch of the source). For long-tail detail that's fine; for distilled guidance with no external fallback a missed hop = lost guidance — so the high-value content stays inline.

Mechanism verified end-to-end (no runtime/feed changes needed):

  • Skill auto-activation keys off the frontmatter description (unchanged) — the split does not affect activation (SkillRegistry.GenerateIndex/Search).
  • references/*.md are auto-discovered (SkillScanner.EnumerateResources) and surfaced by skill_load; skill_read_resource reads them (scoped to references//scripts//assets/).

Part 2 — Reconcile identity-vs-memory routing

Per openspec/specs/netclaw-agent-memory, durable user facts & preferences are memory documents (store_memory); identity files (SOUL.md/AGENTS.md) define the agent. The binary AGENTS.md memory-triage table, skill-authoring, and netclaw-operations had all routed user "preferences" → SOUL.md, contradicting the spec and netclaw-memory. The model correctly used store_memory and failed the old eval. Aligned all four sources.

Part 3 — Evals

  • Added skill_progressive_disclosure — verifies the skill_read_resource second hop via a reference-only detail (the reminder auto-disable threshold/alert name).
  • Repurposed memory_identity_preference_routing to assert the spec-correct invariant: routed to memory, never an identity-file edit. 5/5 on the local-tier model.

Version bumps: netclaw-operations 2.17.0, netclaw-memory 1.5.0, skill-authoring 1.7.1. (2.17.0 rather than 2.16.0 because #1481 independently took 2.16.0 on dev; this PR is rebased past it and folds its sub-agent-liveness wording into references/scheduling.md.)

Verification

Full rebuild + 55-case eval suite vs Qwen3.6-35B-A3B (spark1): tool-calling 8/8, identity 4/4, grounding 3/3, multi-turn 7/7 — no regressions from the split or the always-loaded AGENTS.md change. memory_identity_preference_routing 5/5 (refined assertion). Remaining suite movement is small-sample model nondeterminism in untouched categories. skill_progressive_disclosure lands ~70–80% — the intended ongoing signal for the two-hop read (and the reason for the hybrid layout).

CI

This is the first multi-file skill, so I hardened publish_skills.yml: the post-upload validation previously only spot-checked the first skill's SKILL.md URL. It now also fetches a files[] (reference) URL from the generated manifest and asserts HTTP 200 — self-verifying that progressive-disclosure reference files actually publish to R2 end-to-end, not just the top-level SKILL.md.

Verified the full publish chain on this branch: generate-skill-manifest.sh emits netclaw-operations v2.17.0 with all 10 references/*.md in files[] (each with path/sha256/sizeBytes/url) and an upload-list entry per file; publish_skills.yml uploads every upload-list entry to R2; the consumer (SkillFeedManifest / SystemSkillSyncService) reads files[] with matching field names and downloads + sha256-verifies each reference atomically.

Closes #1115.

@Aaronontheweb Aaronontheweb force-pushed the decompose-operations-skill branch from e44793f to b5e1231 Compare June 24, 2026 22:08
@Aaronontheweb Aaronontheweb added skills Skill loading, handling, authoring, indexing, and evals. context-pipeline LLM context assembly: prompt layers, dynamic injection, memory recall, temporal grounding labels Jun 25, 2026
@Aaronontheweb Aaronontheweb marked this pull request as ready for review June 25, 2026 00:41
@Aaronontheweb Aaronontheweb marked this pull request as draft June 25, 2026 01:26
@Aaronontheweb Aaronontheweb force-pushed the decompose-operations-skill branch from 6021c01 to 0781454 Compare June 25, 2026 01:39
@Aaronontheweb Aaronontheweb marked this pull request as ready for review June 25, 2026 16:10
…s-memory routing

Decompose the 1,148-line netclaw-operations skill into a hybrid layout (netclaw-dev#1115):
keep safety-critical, high-frequency guidance inline (tool-argument validation,
large-output handling, the full approval-prompts section, identity routing) and
move the long-tail manuals into references/*.md, surfaced on demand via
skill_read_resource. SKILL.md drops to 346 lines. Activation is unaffected --
it keys off the frontmatter description, which is unchanged. Validated against
the local-tier model (Qwen3.6-35B-A3B): the skill_read_resource second hop
fires ~80% of runs, which is why high-value content stays inline rather than
being fully externalized.

Reconcile the identity-vs-memory routing rule to openspec/specs/
netclaw-agent-memory: durable user facts and preferences are memory documents
(store_memory); identity files (SOUL.md/AGENTS.md) define the agent. The binary
AGENTS.md memory-triage table, skill-authoring, and netclaw-operations had all
routed user "preferences" to SOUL.md, contradicting the spec and netclaw-memory
-- the model correctly used store_memory and failed the eval. Align AGENTS.md,
skill-authoring, netclaw-memory, and the ops Identity section.

Evals: add skill_progressive_disclosure (verifies the skill_read_resource
second hop via a reference-only detail) and repurpose
memory_identity_preference_routing to assert the spec-correct invariant (routed
to memory, never an identity-file edit).

Bump versions: netclaw-operations 2.16.0, netclaw-memory 1.5.0,
skill-authoring 1.7.1.
The publish_skills.yml post-upload validation only spot-checked the first
skill's SKILL.md URL, so a reference (files[]) object that failed to resolve
would not be caught. Now that netclaw-operations ships as a multi-file skill,
also fetch the first files[] URL from the generated manifest and assert HTTP
200 -- self-verifying that progressive-disclosure reference files publish to
R2 end-to-end.
@Aaronontheweb Aaronontheweb force-pushed the decompose-operations-skill branch from 0781454 to ab4d3a1 Compare June 25, 2026 16:12
@Aaronontheweb Aaronontheweb enabled auto-merge (squash) June 25, 2026 16:13
@Aaronontheweb Aaronontheweb merged commit e9ca384 into netclaw-dev:dev Jun 25, 2026
15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

context-pipeline LLM context assembly: prompt layers, dynamic injection, memory recall, temporal grounding skills Skill loading, handling, authoring, indexing, and evals.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Split netclaw-operations SKILL.md via progressive disclosure

1 participant