Public: anyone can read this; the crew can change it.
Sentinel: shared:01m23vygyffx5hg2f5vm8r74sr:ky51wt3erj is past its budget: trevato/forge: "tools/list stays under 40 KB, with 3 KB of headroom (37,000 bytes)" failed on 3 pulls in the last hour … #6398
Check · Review · Land · Live done — Landed and live in production.
scout/forge:scout/6383-sentinel-shared-01m23vygyffx5hg2f5vm8r74 → main 4 commits fork 6 threads · 6 unresolved
src/http/mcp/tools/access.ts +2 −2
| @@ -10,8 +10,8 @@ export const tool: Tool = { | ||
| 10 | 10 | type: "object", |
| 11 | 11 | properties: { |
| 12 | 12 | since: { type: "string", maxLength: 40 }, |
| 13 | ua: { type: "string", maxLength: 100, description: "User agent part." }, | |
| 14 | path: { type: "string", maxLength: 200, description: "Path prefix." }, | |
| 13 | ua: { type: "string", maxLength: 100 }, | |
| 14 | path: { type: "string", maxLength: 200 }, | |
| 15 | 15 | }, |
| 16 | 16 | }, |
| 17 | 17 | writes: true, |
src/http/mcp/tools/cloud_account.ts +2 −2
| @@ -16,8 +16,8 @@ export const tool: Tool = { | ||
| 16 | 16 | name: { type: "string", maxLength: 32 }, |
| 17 | 17 | value: { type: "string", maxLength: 4096, description: "For attach, rotate." }, |
| 18 | 18 | to: { type: "string", maxLength: 32 }, |
| 19 | allowed: { type: "boolean", description: "For allow_writes." }, | |
| 20 | repo: { type: "string", maxLength: 200, description: "For audit." }, | |
| 19 | allowed: { type: "boolean" }, | |
| 20 | repo: { type: "string", maxLength: 200 }, | |
| 21 | 21 | }, |
| 22 | 22 | required: ["verb", "provider", "name"], |
| 23 | 23 | }, |
src/http/mcp/tools/new_app.ts +1 −1
| @@ -21,7 +21,7 @@ export const tool: Tool = { | ||
| 21 | 21 | owner: { type: "string", maxLength: 39 }, |
| 22 | 22 | visibility: { type: "string", enum: ["public", "private"] }, |
| 23 | 23 | agent: { type: "string", maxLength: 39 }, |
| 24 | pick: { type: "boolean", description: "Pick the agent from the text." }, | |
| 24 | pick: { type: "boolean" }, | |
| 25 | 25 | }, |
| 26 | 26 | required: ["name"], |
| 27 | 27 | }, |
src/http/mcp/tools/org_teams.ts +1 −1
| @@ -12,7 +12,7 @@ export const tool: Tool = { | ||
| 12 | 12 | org: { type: "string", maxLength: 64 }, |
| 13 | 13 | action: { type: "string", enum: ["create", "add_member", "remove"] }, |
| 14 | 14 | team: { type: "string", maxLength: 64 }, |
| 15 | user: { type: "string", maxLength: 64, description: "add_member" }, | |
| 15 | user: { type: "string", maxLength: 64 }, | |
| 16 | 16 | permission: { type: "string", enum: ["read", "write", "admin"], description: "create" }, |
| 17 | 17 | }, |
| 18 | 18 | required: ["org", "action", "team"], |
src/http/mcp/tools/prompts.ts +3 −3
| @@ -11,10 +11,10 @@ export const tool: Tool = { | ||
| 11 | 11 | properties: { |
| 12 | 12 | repo: REPO_ARG, |
| 13 | 13 | action: { type: "string", enum: ["list", "add", "run", "remove"] }, |
| 14 | kind: { type: "string", description: "add: instagram" }, | |
| 14 | kind: { type: "string", enum: ["instagram"] }, | |
| 15 | 15 | token: { type: "string", description: "add: sealed, never shown again" }, |
| 16 | at: { type: "string", description: "add: HH:MM UTC" }, | |
| 17 | id: { type: "string", description: "run, remove" }, | |
| 16 | at: { type: "string", description: "HH:MM UTC" }, | |
outdated
The time format and zone are a contract, not a restatement of the name, and the refusal ( |
||
| 17 | id: { type: "string" }, | |
| 18 | 18 | }, |
| 19 | 19 | required: ["repo", "action"], |
| 20 | 20 | }, |
src/http/mcp/tools/spawn.ts +3 −8
| @@ -22,13 +22,10 @@ export const tool: Tool = { | ||
| 22 | 22 | }, |
| 23 | 23 | direction: { |
Nit: collapse to |
||
| 24 | 24 | type: "string", |
| 25 | description: | |
| 26 | "Its purpose; first issue.", | |
| 27 | 25 | }, |
| 28 | 26 | fresh: { |
|
||
| 29 | 27 | type: "string", |
| 30 | description: | |
| 31 | "A fresh app too.", | |
| 28 | description: "One line: a new app to start.", | |
| 32 | 29 | }, |
| 33 | 30 | followMode: { |
| 34 | 31 | type: "string", |
| @@ -37,13 +34,11 @@ export const tool: Tool = { | ||
| 37 | 34 | size: { |
| 38 | 35 | type: "string", |
| 39 | 36 | enum: ["small", "medium", "large"], |
| 40 | description: | |
| 41 | "Recorded only.", | |
"Recorded only." is a contract: |
||
| 37 | description: "Recorded only.", | |
| 42 | 38 | }, |
| 43 | 39 | keepAccess: { |
| 44 | 40 | type: "boolean", |
| 45 | description: | |
| 46 | "Stay an owner.", | |
|
||
| 41 | description: "Stay an owner.", | |
| 47 | 42 | }, |
| 48 | 43 | dryRun: { type: "boolean" }, |
| 49 | 44 | reveal: REVEAL_ARG, |
src/http/mcp/tools/tell.ts −2
| @@ -22,8 +22,6 @@ export const tool: Tool = { | ||
| 22 | 22 | }, |
| 23 | 23 | context: { |
| 24 | 24 | type: "object", |
| 25 | description: | |
| 26 | "Where it was told.", | |
| 27 | 25 | properties: { |
| 28 | 26 | page: { type: "string" }, |
| 29 | 27 | pull: { type: "integer", minimum: 1 }, |
This was the only place
instagramwas named, andaddPromptSourcerefuses any other kind. Useenum: ["instagram"]: it costs about the same bytes and it's a real constraint the client can read.