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.
- package/.agents/skills/document-references.v1.json +0 -1
- package/.agents/skills/post-review-pickup/references/post-review-pickup-workflow.md +7 -0
- package/.agents/skills/session-sunset/SKILL.md +1 -1
- package/.agents/skills/session-sunset/references/session-sunset-workflow.md +16 -7
- package/.agents/skills/skills.manifest.json +1 -1
- package/package.json +1 -1
|
@@ -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: "
|
|
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.** *
|
|
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
|
|
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
|
|
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 (
|
|
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
|
|
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
|
|
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": "
|
|
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.
|
|
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",
|