@paigy/mcp 0.40.24 → 0.40.26

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/README.md CHANGED
@@ -117,18 +117,27 @@ Then pair: `PAIGY_AGENT=gemini npx -p @paigy/mcp@latest paigy-mcp-onboard`.
117
117
  ## Tools
118
118
 
119
119
  One catalog, on every transport (2026-09-11): the agent tools are `AGENT_TOOLS` in
120
- `packages/schema/src/tools.ts` — contact, check_replies, create_goal, claim_goal,
121
- get_goal, update_goal — and both this server and the hosted MCP
120
+ `packages/schema/src/tools.ts` — who_is_working, contact, manage_goals, claim_goal,
121
+ get_goal, search, send_feedback — and both this server and the hosted MCP
122
122
  (`apps/api/src/mcp`) publish that list and dispatch it through the SDK's one `runTool`.
123
123
  This server adds only onboard, pair and unpair, the tools that mint and delete the token
124
- file this machine holds. See the [SDK contract](../../packages/sdk/README.md) for the
125
- single-Goal start shape. Notification returns immediately. Call holds one cancellable
126
- ~45-second window here (the hosted transport returns after one read); continue with
127
- contact({deliveryId}) without sending another ask. Durable Entries and accepted answers can
128
- repeat on reads; check_replies lists every open Delivery addressed to you (a request the
129
- user started toward you, an answer relayed to something you asked, a handoff) without
130
- consuming any of it, and claim_goal is the catch-up for your own Goals. Bookkeeping ids
131
- (`operationId`, `idempotencyKey`) are minted here, never asked of the model. Retired
124
+ file this machine holds, and listen. See the [SDK contract](../../packages/sdk/README.md) for the
125
+ contact shape. Sending returns immediately unless it asks to `wait`: `wait: true` holds one
126
+ cancellable ~45-second window here for a response to what was sent (the hosted transport
127
+ returns after one read), and `contact({})` holds one for anything addressed to you; after an
128
+ `expired` window, wait again without sending again. Every Goal a contact names must already
129
+ exist (create it with manage_goals); a question with `workItBlocks` asks for a call; a
130
+ question, an update or an answer is at most 250 characters with its context in `units`; and
131
+ `withdrawQuestionIds` takes back a question of yours. `update_goal` is gone (2026-10-07): progress
132
+ is a contact update (one the person does not need yet is kept as the Goal's progress), a review is
133
+ acknowledged with `ackEventIds`, and a Goal is postponed with manage_goals `defer` (you are woken
134
+ when its time comes). Durable Entries and accepted answers can
135
+ repeat on reads; contact with nothing to send receives what is addressed to you (a request the
136
+ user started toward you, an answer relayed to something you asked, a handoff, a question you owe) without
137
+ consuming any of it until you acknowledge it (`ackEventIds`), and claim_goal is the catch-up for
138
+ your own Goals. manage_goals creates, edits, assigns, organizes and closes work, a change at a
139
+ time. Bookkeeping (`operationId`, the manage request id, the revision an edit was read at) is
140
+ minted here, never asked of the model. Retired
132
141
  reply-lease/ACK/work/callback tools and hidden notification aliases are rejected.
133
142
 
134
143
  The standalone listener below is still a **legacy host and target-release blocker**.
@@ -154,7 +163,7 @@ wake channel and reads what is waiting on every nudge. Keep it alive past the te
154
163
  with `paigy-listen --install` (launchd on macOS, systemd user unit on Linux;
155
164
  `--uninstall` removes it).
156
165
 
157
- The read is `check_replies` — the open Deliveries addressed to this agent — and it
166
+ The read is `receive` (behind `contact({})`) — the open Deliveries addressed to this agent — and it
158
167
  **consumes nothing**: no lease, no acknowledgement, and the same read twice returns the
159
168
  same list. So the daemon hands the launcher what it found and stops there; claiming is
160
169
  the agent's own first act (`claim_goal`), because the daemon shares this machine's
@@ -169,7 +178,7 @@ To launch an agent — any agent, not just Claude — when work arrives, set
169
178
  | `PAIGY_WORK` | everything the wake found, as JSON (`deliveries`, `goal`) |
170
179
  | `PAIGY_EVENT` | the wake that caused this run — `boot`, `wake:reply`, `wake:request`… |
171
180
  | `PAIGY_PARENT_ID` | the thread to continue on (`PAIGY_THREAD_ID` is the same value, for existing scripts) |
172
- | `PAIGY_DELIVERY_ID` | the Delivery being acted on — `contact({deliveryId})` rereads it |
181
+ | `PAIGY_DELIVERY_ID` | the Delivery being acted on (`get_goal` on `PAIGY_GOAL_ID` reads its conversation) |
173
182
  | `PAIGY_GOAL_ID` | the Goal it belongs to — `claim_goal` it **first** |
174
183
  | `PAIGY_TEXT` | what the person said, in prose |
175
184
 
@@ -231,7 +240,7 @@ codex exec "Paigy goal $PAIGY_GOAL_ID. claim_goal it first. The user said: $PAIG
231
240
  ## Stalled work (turn-end hook — Claude Code, Codex, Gemini CLI, Antigravity)
232
241
 
233
242
  An agent that goes quiet leaves its Goals behind. Three things hand it that work back, all
234
- reading one rule (no progress for 3 days, `COLD_AFTER_MS`): `check_replies` lists it under
243
+ reading one rule (no progress for 3 days, `COLD_AFTER_MS`): `contact({})` lists it under
235
244
  `stalled`, `paigy-listen` carries it in `PAIGY_WORK` (and launches for it on boot), and this
236
245
  hook holds a session's turn end once a day to list it. One program, four tools:
237
246
 
@@ -4,12 +4,12 @@ import {
4
4
  serverInstructions,
5
5
  sessionStartHook,
6
6
  withSessionStartHook
7
- } from "./chunk-VUKR2E24.js";
7
+ } from "./chunk-7LQKX73K.js";
8
8
  import {
9
9
  CODEX_ENV,
10
10
  agentName,
11
11
  withCodexEnv
12
- } from "./chunk-WR2M3RME.js";
12
+ } from "./chunk-OVSAQW3K.js";
13
13
 
14
14
  // src/toolset.ts
15
15
  var ONBOARD_DESCRIPTION = "Get this agent talking to Paigy \u2014 call it FIRST, before contact, and any time you're unsure who you are. One call, and it does whatever the situation needs: NOT SET UP \u2192 hatches an identity instantly if this machine holds a device credential (the user ran the Paigy desktop app or harness), otherwise starts the code ceremony; ALREADY SET UP \u2192 returns your current identity and offers the two things left to decide, renaming it or unpairing; TOKEN NO LONGER VALID \u2192 says so, then re-pairs. Pass { name, voice } to choose who you are when hatching, or to RENAME yourself when already set up (voices: rachel, george, jessica, brian, lily). Safe to call any time: idempotent, and it never writes settings \u2014 the tool-allowlist state it reports is read-only. If it returns a `user_code`, print it to the user immediately and call onboard again with the `device_code`. If it returns `enable_command`, PRINT that command for the user to run \u2014 you cannot apply it yourself (it writes your own permission allowlist, which hosts block as privilege escalation), so print it, don't wait for it, and carry on.";
@@ -51,7 +51,7 @@ var IDENTITY_TOOLS = [
51
51
  },
52
52
  {
53
53
  name: "listen",
54
- description: "Am I listening for answers, and can Paigy resume this session? Takes no arguments. Returns status `listening` for harness delivery or a running listener with a ready wake adapter; `receiving` means a process is running but automatic resume is not confirmed (read its wake error or watch its output); `unpaired` means call onboard; `start` gives the exact command to run NOW as a watched background task for this session. Start it once. Codex queues into CODEX_THREAD_ID automatically when its CLI supports queue; PAIGY_ON_WAKE overrides it. A successful queue is not evidence the agent handled the answer: read check_replies and the relevant Goal, then respond with contact. This tool never subscribes or starts anything itself.",
54
+ description: "Am I listening for answers, and can Paigy resume this session? Takes no arguments. Returns status `listening` for harness delivery or a running listener with a ready wake adapter; `receiving` means a process is running but automatic resume is not confirmed (read its wake error or watch its output); `unpaired` means call onboard; `start` gives the exact command to run NOW as a watched background task for this session. Start it once. Codex queues into CODEX_THREAD_ID automatically when its CLI supports queue; PAIGY_ON_WAKE overrides it. A successful queue is not evidence the agent handled the answer: receive with contact({ wait: false }) and read the relevant Goal, then respond with contact. This tool never subscribes or starts anything itself.",
55
55
  inputSchema: mcpInputSchema(z.object({}))
56
56
  }
57
57
  ];