names are infrastructure

Netsky stopped being a VSM thought experiment when the state vocabulary dropped viable and picked up ack, handoff, and envelope. A load-bearing word moves work; the rest is ornament.

The rewrite landed in d1ed330, a 25-line edit to the base prompt vocabulary (d1ed330:src/crates/netsky-prompts/prompts/base.md). The new block is shorter and names more machinery — mood words swapped for handles an agent can act on (src/crates/netsky-prompts/prompts/base.md:139-184).

git show --unified=80 d1ed330 -- src/crates/netsky-prompts/prompts/base.md
flowchart LR
    A[word] --> B{does it route work?}
    B -->|yes| C[vocabulary]
    B -->|no| D[prose or deletion]
    C --> E[brief, ack, handoff, landing]
    D --> F[viable, cadence, collate]

the nouns that earned a slot #

handoff: durable context left for agent0 or a revived agent (src/crates/netsky-prompts/prompts/base.md:151). Restart archives them under ~/Library/Logs/netsky-handoffs/ (src/crates/netsky-prompts/prompts/base.md:85-86), so the word points at a file on disk — the packet that survives a session boundary.

landing: a change merged onto main (src/crates/netsky-prompts/prompts/base.md:152). Netsky uses clone branches, pushes, and agent0 cherry-picks instead of PRs for its own repo (src/crates/netsky-prompts/prompts/base.md:9-15), so “merged” is a Git fact and “done” is an agent claim. landing ties the claim to main.

inbox: the per-agent queue at ~/.netsky/channels/agent/agent<N>/inbox/ (src/crates/netsky-prompts/prompts/base.md:149). Inbound agent traffic already routes through that directory (src/crates/netsky-prompts/prompts/base.md:42-46). A clone saying “inbox” can inspect a path.

envelope: one JSON message delivered through a channel inbox (src/crates/netsky-prompts/prompts/base.md:150). The transport layer is envelopes surfaced as channel messages (src/crates/netsky-prompts/prompts/base.md:44-46), and the boundary earns its name in retries, prompt-injection posture, and provenance.

ack: receipt confirmation (src/crates/netsky-prompts/prompts/base.md:159), small on purpose. Without it, briefs have silence and completion as the only checkpoints. With it, a brief has a first checkpoint before work starts.

runtime: the agent backend (Claude, Codex, etc.) (src/crates/netsky-prompts/prompts/base.md:145). Runtime neutrality is policy. Agent slots are topology. Backends are replaceable execution engines.

the words that got cut #

pre-rewrite                         post-rewrite
----------------------------------  ----------------------------------
network: multiple constellations    inbox: per-agent queue
collate: merge clone output         ack: confirm receipt
spawn: bring up a clone             fresh: respawn a clone
viable: running and making progress parked/stale/wedged/in-flight/backlog
trusted/untrusted: input posture    prose rule, not state vocabulary
cadence: rhythm of updates          wave/pipeline

The pre-rewrite vocabulary had viable, trusted, untrusted, cadence in the state and tempo blocks (src/crates/netsky-prompts/prompts/base.md@d1ed330^:182, src/crates/netsky-prompts/prompts/base.md@d1ed330^:190, src/crates/netsky-prompts/prompts/base.md@d1ed330^:197). Real concerns, but none of them named state an agent could inspect.

viable is the system’s title, not a useful runtime state. A session is now parked, stale, wedged, in-flight, or in backlog (src/crates/netsky-prompts/prompts/base.md:173-179) — words that pick different next actions. viable only said the system was alive enough to be praised.

trusted and untrusted still belong in prose. Cross-machine envelopes keep the untrusted-data posture, and the prompt-injection guard still refuses unsafe inbound requests (src/crates/netsky-prompts/prompts/base.md:47-49). They left the vocabulary because trust is a policy axis, not a state bucket.

cadence had no edge. The prompt already has concrete timing: iMessage updates at milestones, gaps near 15 minutes during orchestration, ticker at 60s, launchd at 120s as failsafe (src/crates/netsky-prompts/prompts/base.md:66, src/crates/netsky-prompts/prompts/base.md:87-88). wave and pipeline stayed because they carry scheduling shape (src/crates/netsky-prompts/prompts/base.md:181-184).

network left core vocabulary because netsky0 carries the rule. Owner-comms terminate at netsky0; siblings relay through it (src/crates/netsky-prompts/prompts/base.md:153). network is a map label; netsky0 is an authority boundary.

spawn left the commands list because it was overloaded. /spawn still launches tool-bounded subagents, but clones get briefed through clone and swarm paths (src/crates/netsky-prompts/prompts/base.md:70-74, src/crates/netsky-prompts/prompts/base.md:51-59). A word that meant both “bring up a clone” and “launch a subsystem” burned precision.

tighter defs #

dispatch stayed short: send a brief over the bus (src/crates/netsky-prompts/prompts/base.md:157). It earns its terseness because the orchestration rules carry the payload shape elsewhere — context, scope, read-write boundary, deliverable, workspace path, branch, gates, no-release flag, runtime procedure (src/crates/netsky-prompts/prompts/base.md:53-54).

brief stayed short too: the structured context packet (src/crates/netsky-prompts/prompts/base.md:158). Its schema lives in the quick reference (src/crates/netsky-prompts/prompts/base.md:14-15); the definition just names the object.

The split:

wordold riskcurrent job
dispatchvague delegationthe act of sending a brief
briefany instruction blobstructured packet with scope and gates
ackmissingreceipt checkpoint
handoffimplicit restart memorydurable context across session death
landing“done” driftmerged-to-main fact

what got collapsed #

collate left because it named a ceremony, not a durable operation (src/crates/netsky-prompts/prompts/base.md@d1ed330^:167). Clone output still gets synthesized, reports still get merged — but collate never told an agent whether to edit, summarize, cherry-pick, or push. A binder-clip word.

VSM labels stayed out of the vocabulary too. S1 through S5 remain as a map in the prompt’s VSM shape (src/crates/netsky-prompts/prompts/base.md:20-28), explaining where policy, intelligence, control, audit, coordination, operations, and watchdog loops sit. They aren’t control words. An agent saying “do S3” when it means “dispatch three clone briefs and harvest the best branch” has traded a concrete instruction for a diagram label.

flowchart TB
    S5[S5 policy] --> Words[vocabulary]
    Words --> Ops[dispatch / brief / ack]
    Ops --> Files[inbox / envelope / handoff]
    Files --> Main[landing]

the rule #

A good word reduces branching. ack turns silence into a state. handoff turns memory into an artifact. landing turns completion into a Git condition. envelope turns a message into a unit that can be archived, retried, inspected, cited.

viable flatters. cadence gestures. collate sounds organized while hiding the actual operation. Those words can still appear in essays; they just shouldn’t occupy command vocabulary. A prompt vocabulary is an operator interface, and operator interfaces want nouns that route work.

Netsky still uses VSM as the map, and still calls itself a viable system (src/crates/netsky-prompts/prompts/base.md:3, src/crates/netsky-prompts/prompts/base.md:20-28). The rule is narrower than “ban abstract language” — it’s prune the control surface before the words calcify.