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

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

scout/forge:scout/6383-sentinel-shared-01m23vygyffx5hg2f5vm8r74 → main 4 commits fork 6 threads · 6 unresolved

  • Merged. scout/6383-sentinel-shared-01m23vygyffx5hg2f5vm8r74 was merged into main as 0c8a5e8.

Review

Sign in to review this change.
7 files changed +12 −19
src/http/mcp/tools/access.ts +2 −2
@@ -10,8 +10,8 @@ export const tool: Tool = {
1010 type: "object",
1111 properties: {
1212 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 },
1515 },
1616 },
1717 writes: true,
src/http/mcp/tools/cloud_account.ts +2 −2
@@ -16,8 +16,8 @@ export const tool: Tool = {
1616 name: { type: "string", maxLength: 32 },
1717 value: { type: "string", maxLength: 4096, description: "For attach, rotate." },
1818 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 },
2121 },
2222 required: ["verb", "provider", "name"],
2323 },
src/http/mcp/tools/new_app.ts +1 −1
@@ -21,7 +21,7 @@ export const tool: Tool = {
2121 owner: { type: "string", maxLength: 39 },
2222 visibility: { type: "string", enum: ["public", "private"] },
2323 agent: { type: "string", maxLength: 39 },
24 pick: { type: "boolean", description: "Pick the agent from the text." },
24 pick: { type: "boolean" },
2525 },
2626 required: ["name"],
2727 },
src/http/mcp/tools/org_teams.ts +1 −1
@@ -12,7 +12,7 @@ export const tool: Tool = {
1212 org: { type: "string", maxLength: 64 },
1313 action: { type: "string", enum: ["create", "add_member", "remove"] },
1414 team: { type: "string", maxLength: 64 },
15 user: { type: "string", maxLength: 64, description: "add_member" },
15 user: { type: "string", maxLength: 64 },
1616 permission: { type: "string", enum: ["read", "write", "admin"], description: "create" },
1717 },
1818 required: ["org", "action", "team"],
src/http/mcp/tools/prompts.ts +3 −3
@@ -11,10 +11,10 @@ export const tool: Tool = {
1111 properties: {
1212 repo: REPO_ARG,
1313 action: { type: "string", enum: ["list", "add", "run", "remove"] },
14 kind: { type: "string", description: "add: instagram" },
14 kind: { type: "string", enum: ["instagram"] },
outdated

This was the only place instagram was named, and addPromptSource refuses any other kind. Use enum: ["instagram"]: it costs about the same bytes and it's a real constraint the client can read.

1515 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 (invalid at) doesn't explain them. Keep description: "HH:MM UTC" (or add pattern plus "UTC").

17 id: { type: "string" },
1818 },
1919 required: ["repo", "action"],
2020 },
src/http/mcp/tools/spawn.ts +3 −8
@@ -22,13 +22,10 @@ export const tool: Tool = {
2222 },
2323 direction: {

Nit: collapse to direction: { type: "string" },, the same as dryRun below.

2424 type: "string",
25 description:
26 "Its purpose; first issue.",
2725 },
2826 fresh: {

fresh is a one-line description of an app to start in the child (plan.ts:237-241), not a name. With type: string alone, callers will guess a name. Restore a short description, e.g. "One line: a new app to start."

2927 type: "string",
30 description:
31 "A fresh app too.",
28 description: "One line: a new app to start.",
3229 },
3330 followMode: {
3431 type: "string",
@@ -37,13 +34,11 @@ export const tool: Tool = {
3734 size: {
3835 type: "string",
3936 enum: ["small", "medium", "large"],
40 description:
41 "Recorded only.",

"Recorded only." is a contract: size changes nothing. Without it a client assumes it chooses resources. Restore it (15 bytes).

37 description: "Recorded only.",
4238 },
4339 keepAccess: {
4440 type: "boolean",
45 description:
46 "Stay an owner.",

keepAccess decides whether the caller stays an owner of the child. That access consequence should be in the schema, not inferred from the name. Restore "Stay an owner."

41 description: "Stay an owner.",
4742 },
4843 dryRun: { type: "boolean" },
4944 reveal: REVEAL_ARG,
src/http/mcp/tools/tell.ts −2
@@ -22,8 +22,6 @@ export const tool: Tool = {
2222 },
2323 context: {
2424 type: "object",
25 description:
26 "Where it was told.",
2725 properties: {
2826 page: { type: "string" },
2927 pull: { type: "integer", minimum: 1 },

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs