neo-agent-skills 0.1.78 → 0.1.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -265,7 +265,6 @@
265
265
  "resolution": "https://github.com/neomjs/neo-agent-brain/blob/dev/learn/agentos/v13-path.md",
266
266
  "referencingSkills": [
267
267
  "epic-review",
268
- "session-sunset",
269
268
  "structural-pre-flight"
270
269
  ],
271
270
  "kinds": [
@@ -112,6 +112,13 @@ decision.**
112
112
  - Legitimate defer: name the artifact to re-read, the check to run, the peer
113
113
  signal awaited, or the external unblock condition. "Do it fresh next turn" or
114
114
  "await steer" name nothing.
115
+ - A turn never ends into an unbounded wait: when the next step waits on an
116
+ external condition, run every owned bounded lane, then end with a wake
117
+ scheduled inside the provider's cache TTL (≤ 50 min on Anthropic, naming the
118
+ condition) or a subscription its message triggers. `AGENT:*` broadcasts do
119
+ not wake, and the plane defers wakes above its context gate (neo-agent-brain
120
+ `ai/daemons/wake/contextGatePolicy.mjs`); "waits on X" alone is the hold
121
+ state §L3 forbids.
115
122
  - Deferring the same positive-ROI lane twice while busy elsewhere is drift.
116
123
  Resolve it: execute, hand off to a named peer with the collision state, or
117
124
  downgrade it with evidence that it is no longer positive-ROI.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: session-sunset
3
- description: "Protocol for ending an agent session without Zero-State Amnesia; use at >75% context window, ~2x post-recovery session size at a quiet point, a macro-semantic pivot, or human directive (never task completion/wait)."
3
+ description: "End a session without Zero-State Amnesia; use at ≤200k context tokens (the wake plane's gate; >75% window only without a gauge), a macro-semantic pivot, or human directive (never task completion/wait)."
4
4
  ---
5
5
 
6
6
  # Session Sunset Skill
@@ -15,7 +15,7 @@ To an LLM, yielding a prompt resolution feels like a "termination," but to a Hum
15
15
  You are strictly **FORBIDDEN** from executing the Sunset Protocol simply because you finished a prompt and yielded control back to the human. You MUST only execute the Sunset Protocol when a true **Session Boundary** is reached.
16
16
 
17
17
  A true Session Boundary is defined by:
18
- 1. **Context Exhaustion or Cost.** *Exhaustion:* over 75 % of the window, or context-pressure signals (forgetfulness). *Cost:* every call re-reads the whole context (cached reads are cheap, not free), so cost follows tokens, not the window's share. Rule of thumb, unvalidated: from about twice a session's post-recovery size on the harness's token gauge (1M-window Claude seat, 2026-10: ~150k, so ~300k), a `solo-refresh` is your own call; whether it pays depends on the handover work and the calls that follow. For this arm only: a quiet point (nothing of yours uncommitted, unpushed, unposted or unanswered); what comes next needs little of the context (a different area, or a wait that outlives the prompt cache); an operator-free way back verified on this seat (Auto-Wakeup note above). Without gauge or way back, this arm only recommends (trigger 4).
18
+ 1. **Context Exhaustion or Cost.** *Gate:* the wake plane defers every wake into a session above 250k context tokens and warns at 200k (neo-agent-brain `ai/daemons/wake/contextGatePolicy.mjs`); the seat never sees that warning, so its gauge is the instrument (`get_usage` on Claude Desktop, the harness's reading elsewhere): sunset at or before 200k, never run above 250k; only a harness without a gauge falls back to 75 % of the window or context-pressure signals. *Cost:* every call re-reads the whole context (cached reads are cheap, not free), so cost follows tokens, not the window's share, and below the gate a `solo-refresh` is your own call. For this arm only: a quiet point (nothing of yours uncommitted, unpushed, unposted or unanswered); what comes next needs little of the context (a different area, or a wait that outlives the prompt cache); an operator-free way back verified on this seat (Auto-Wakeup note above). Without gauge or way back, this arm only recommends (trigger 4).
19
19
  2. **Macro-Semantic Pivot:** The human explicitly shifts focus to a completely new domain, epic, or architectural phase (e.g., switching from Database Layer substrate work to UI Framework component design), requiring a clean slate. *Asymmetry Tiebreaker: The cost of a premature sunset is greater than a late sunset; when in doubt, lean conservative and keep the session open.*
20
20
  3. **Explicit Human Directive:** The Human Commander explicitly instructs you to terminate the session (e.g., "let's wrap", "time to sunset", or `/sunset`).
21
21
  4. **Proactive Agent Recommendation:** You recognize a natural, logical break point in the work stream and explicitly **RECOMMEND** sunsetting to the human (e.g. "We've reached a logical break point. Should we sunset the session?"). **NEVER unilaterally execute the protocol based solely on this.**
@@ -72,7 +72,7 @@ Detect your checkout class **mechanically** — never guess from harness names.
72
72
 
73
73
  The pull refreshes code; in `neo-agent-brain` (where `ai/` lives post-split), `--migrate-config` reconciles the gitignored `config.mjs` operator-overlay with pulled `config.template.mjs` leaves — a pull alone is NOT enough, because daemons and MCP servers read the overlay, not the template. Because the AI harness initializes MCP servers *before* an agent's first turn, sunset is the only window where this refresh lands in time for the next session's boot. **Any failure (dirty tree, switch/pull/script error) is surfaced in the Step 3 handover comment and the final sunset payload — the refresh is best-effort and must NEVER block sunset completion.**
74
74
 
75
- > **Division of labor + retirement condition (Substrate Accretion Defense):** the orchestrator's `primary-dev-sync` task (shipped via the daemon substrate; config-migrate cascade added 2026-06) automates freshness for the **operator's primary checkout only** — the deployment deliberately syncs ONE repo. Per-agent clones are never daemon-pulled: an FF-pull racing an *active* agent session is the hazard, and sunset is the safe window precisely because the session is terminating. This agent-side step is therefore the **durable owner** of agent-clone freshness across all org clones, while its `--migrate-config` reconcile is `neo-agent-brain`-scoped (the `[ -f ... ]` guard scopes repo topology after the `ai/` split, not retirement: the reconcile retires only if MCP server boot auto-reconciles overlays or local `ai/config.mjs` overlays retire; the pull retires only if clone topology changes or a session-liveness-aware sync lane ships).
75
+ > **Division of labor + retirement (Substrate Accretion Defense):** the orchestrator's `primary-dev-sync` task syncs the operator's primary checkout only; per-agent clones are never daemon-pulled (an FF-pull racing an active session is the hazard), so this step owns agent-clone freshness and sunset is its safe window. The pull retires only if clone topology changes or a session-liveness-aware sync lane ships; the `neo-agent-brain`-scoped reconcile only if MCP server boot auto-reconciles overlays or local `ai/config.mjs` overlays retire.
76
76
 
77
77
  - **Linked worktree — push only:** do NOT switch to `dev` (the primary holds it; git refuses to share a branch across worktrees). Ensure your current PR branch is fully committed and pushed (`git push origin HEAD`). The next agent session will either resume this worktree or bootstrap a new one from the primary's refreshed `dev`.
78
78
 
@@ -82,7 +82,7 @@ The "main checkout's updated `dev`" assumption above only holds if the operator
82
82
 
83
83
  - Worktree agents (per the Linked-worktree rule above) do NOT pull `dev` into primary.
84
84
  - Operators don't always run `git pull origin dev` between sunset events.
85
- - In `neo-agent-brain`, daemons running from primary — `orchestrator-daemon` (per the [Agent OS v13 path](https://github.com/neomjs/neo-agent-brain/blob/dev/learn/agentos/v13-path.md) M3) and its siblings (`wake-daemon`, `DreamService`, KB sync pipeline) — read pre-merge code when primary is stale.
85
+ - In `neo-agent-brain`, the daemons running from primary (`orchestrator-daemon`, `wake-daemon`, `DreamService`, KB sync) read pre-merge code when primary is stale.
86
86
 
87
87
  **Mandatory sunset probe (Isolated Worktree branch only):**
88
88
 
@@ -101,11 +101,11 @@ BEHIND=$(git -C "$PRIMARY_ROOT" rev-list --count dev..origin/dev 2>/dev/null ||
101
101
 
102
102
  **Conditional handover-comment block (fire only when `BEHIND > 0`):**
103
103
 
104
- > ⚠️ **Primary-checkout reminder:** the operator's primary checkout (`<PRIMARY_ROOT>`) `dev` branch is **`<BEHIND>` commits behind `origin/dev`**. Run `git -C <PRIMARY_ROOT> pull origin dev` in your main checkout (and when `<PRIMARY_ROOT>` is `neo-agent-brain`, where `ai/` and the Agent OS daemons `orchestrator-daemon`, `wake-daemon`, `DreamService`, and KB sync live, also run `node <PRIMARY_ROOT>/ai/scripts/setup/initServerConfigs.mjs --migrate-config` so the gitignored `config.mjs` operator-overlay reconciles to pulled `config.template.mjs` leaves).
104
+ > ⚠️ **Primary-checkout reminder:** the operator's primary checkout (`<PRIMARY_ROOT>`) `dev` branch is **`<BEHIND>` commits behind `origin/dev`**. Run `git -C <PRIMARY_ROOT> pull origin dev` in your main checkout (in `neo-agent-brain` also `node <PRIMARY_ROOT>/ai/scripts/setup/initServerConfigs.mjs --migrate-config`, so the gitignored `config.mjs` overlay reconciles to the pulled `config.template.mjs` leaves).
105
105
 
106
106
  When `BEHIND == 0`, suppress the block — no handover-comment noise on a fresh primary.
107
107
 
108
- **Why this lives at sunset rather than mid-session:** sunset is the natural Operator Synchronization Point — the agent is already drafting handover prose, and the operator is the next active actor between sessions. Mid-session staleness of the PRIMARY is closed by the shipped `primary-dev-sync` orchestrator task (FF-pull + KB cascade + config-migrate on a periodic cycle). That task deliberately syncs ONLY the primary — per-agent clones are never daemon-pulled (a pull racing an active session is the hazard), so their freshness owner remains the Step-1 primary-clone self-refresh above, executed at the sunset boundary.
108
+ **Why at sunset:** the operator is the next actor between sessions and the agent is already writing the handover; mid-session staleness of the primary belongs to `primary-dev-sync` (the division of labor above).
109
109
 
110
110
  ### Step 2: Active PR Cycle State is daemon-owned — agents must NOT trigger sandman
111
111
 
@@ -122,6 +122,15 @@ For any tickets or tasks that you actively worked on but did not fully complete,
122
122
  - Signal ownership (who was working on it).
123
123
  - Define the pickup protocol for the next agent.
124
124
 
125
+ ### Step 3.5: The Operator's Focus Items
126
+ The test is not "is it written somewhere" but "does the fresh session's first read show it with an owner and a date".
127
+ 1. List every item the operator called important, a priority or a cornerstone this session, from the session's own turns (`query_recent_turns`, `agentIdentity: '@me'`) — one line each, the operator's words paraphrased. No operator present: the list reads *none named* and the step is that line.
128
+ 2. Each item sits in the handover's pickup list **with an owner and a date**, or is handed to a named owner on the record (a ticket, a dashboard row, a peer's claim). A rule paragraph, a memory note or a mention in prose places nothing.
129
+ 3. An item that cannot be placed is said to the operator **before** the sunset, as *not placed: X — because*; a "yes, everything is in artifacts" without this list is refused by this step.
130
+ 4. Step 8's subject carries the count: `focus items: N, N placed`.
131
+
132
+ Fixture (2026-10-30): the CEO dashboard — the operator's prio-1, named four times — left the handover as a rule paragraph, present and weightless; the fresh session needed it said twice.
133
+
125
134
  ### Step 4: Handovers Considered (Deferred Work)
126
135
  Explicitly document what the next agent should **NOT** pick up. If there are tickets or discussions that are blocked, already handled internally, or assigned to a different domain, list them. This prevents the next agent from wasting cycles triaging noise.
127
136
 
@@ -139,9 +148,9 @@ Summarize the scope of your session. How many PRs were merged? How many skills w
139
148
  To preserve "hot" thread visibility across sessions (Option B), agents do NOT `mark_read` messages immediately during active processing. Now that handovers are drafted (and have read your inbox state), you MUST explicitly use the `mark_read` MCP tool on all processed messages in your inbox. This ensures the inbox is clean for the next agent session.
140
149
 
141
150
  ### Step 8: The A2A Continuity Ping & Reward Signal (Future-Self Routing)
142
- You MUST use the `add_message` MCP tool to send an A2A message to your own agent identity (e.g., `to: '@me'` or your explicit handle). The body of this message MUST contain the **full Sunset Protocol markdown payload** (the output from Steps 1-6), alongside the `Origin Session ID`.
151
+ You MUST use the `add_message` MCP tool to send an A2A message to your own agent identity (e.g., `to: '@me'` or your explicit handle). The body of this message MUST contain the **full Sunset Protocol markdown payload** (the output from Steps 1-6), alongside the `Origin Session ID`; the subject carries Step 3.5's count, `focus items: N, N placed` — the fresh session's first read.
143
152
 
144
- Set `wakeSuppressed: true` and `taggedConcepts: ['sunset-protocol-handover']` on this self-DM: self-addressed, it is the one quiet agent-to-agent direct message the rule allows (a peer address always wakes, neo-agent-brain#1250; a human or system address keeps its own policy) — mailbox-only, unread at the next boot check, no `SENT_TO_ME` wake into the closing session. Do not mark this continuity ping read in the same sunset flow. Peer broadcasts may stay quiet for `scope: solo-refresh` unless a cross-peer handoff needs them.
153
+ Set `wakeSuppressed: true` and `taggedConcepts: ['sunset-protocol-handover']` on this self-DM: self-addressed, it is the one quiet agent-to-agent direct message the rule allows (a peer address always wakes, neo-agent-brain#1250) — mailbox-only, no `SENT_TO_ME` wake into the closing session. Do not mark this continuity ping read in the same sunset flow. Peer broadcasts may stay quiet for `scope: solo-refresh` unless a cross-peer handoff needs them. This self-DM is the sunset receipt neomjs/neo-agent-brain#1383 reads at the context gate before asking neomjs/neo-agent-institution#842 for the fresh session: at night the seat writes it and ends; by day the sunset stays its call.
145
154
 
146
155
  **Seat memory layer — conditional mention only:** the seat's loader owns the boot/compaction load, so the ping does NOT routinely tell the next session to read the layer (that procedural fallback silently becomes the real path again). Name the layer in the ping ONLY when the load is known degraded — Kimi: the `<seat-memory-layer>` marker was absent this session (diagnosis route: seat `config.toml` `[[hooks]]` entries, emitted hook script, sentinel state dir); OpenCode: the boot files' content was absent (diagnosis route: the `instructions` array in `opencode.jsonc`) — or a seat memory migration is actively in progress.
147
156
 
@@ -151,7 +151,7 @@
151
151
  },
152
152
  "session-sunset": {
153
153
  "name": "session-sunset",
154
- "description": "Protocol for ending an agent session without Zero-State Amnesia; use at >75% context window, ~2x post-recovery session size at a quiet point, a macro-semantic pivot, or human directive (never task completion/wait).",
154
+ "description": "End a session without Zero-State Amnesia; use at ≤200k context tokens (the wake plane's gate; >75% window only without a gauge), a macro-semantic pivot, or human directive (never task completion/wait).",
155
155
  "routerByteBudget": 17
156
156
  },
157
157
  "structural-pre-flight": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "neo-agent-skills",
3
- "version": "0.1.78",
3
+ "version": "0.1.80",
4
4
  "description": "Install the workflow substrate a cross-model AI team actually runs on: ticket intake, PR review gates, lane coordination and guards, versioned as a package. The skills Neo.mjs maintainers load every session — materialized into your repo, not copied.",
5
5
  "type": "module",
6
6
  "license": "MIT",