Public: anyone can read this; the crew can change it.
Sentinel: shared:01m23vygyffx5hg2f5vm8r74sr:u9xwjdoo36 is past its budget: trevato/forge: "tools/list lists pulls and stays under 40 KB" failed on 4 pulls in the last hour — the lane's red, not … #4092
Check · Review · Land · Live done — Landed and live in production.
scout/forge:scout/4068-sentinel-shared-01m23vygyffx5hg2f5vm8r74 → main 4 commits fork 1 thread · 1 unresolved
1 file
changed +14
−14
src/http/mcp.ts +14 −14
| @@ -421,7 +421,7 @@ const TOOLS: readonly Tool[] = [ | ||
| 421 | 421 | { |
| 422 | 422 | name: "sizes", |
| 423 | 423 | description: |
| 424 | "What a child forge's sizes mean: small, medium and large, each with its CPU, memory and disk, and one sentence about it.", | |
| 424 | "What a child forge's sizes mean: small, medium and large, with CPU, memory and disk.", | |
| 425 | 425 | inputSchema: { type: "object", properties: {} }, |
| 426 | 426 | writes: false, |
| 427 | 427 | run: () => good(sizesView()), |
| @@ -429,7 +429,7 @@ const TOOLS: readonly Tool[] = [ | ||
| 429 | 429 | { |
| 430 | 430 | name: "apps", |
| 431 | 431 | description: |
| 432 | "The apps on this forge you can see: whether each is live, where it is served, how it runs itself, and what is working.", | |
| 432 | "The apps you can see: whether each is live, where it is served, how it runs itself, what is working.", | |
| 433 | 433 | inputSchema: { type: "object", properties: {} }, |
| 434 | 434 | writes: false, |
| 435 | 435 | async run(ctx, user) { |
| @@ -460,7 +460,7 @@ const TOOLS: readonly Tool[] = [ | ||
| 460 | 460 | { |
| 461 | 461 | name: "new_app", |
| 462 | 462 | description: |
| 463 | "Make an app from a sentence: a repository with a working app, production started, and — with `description` — the first issue.", | |
| 463 | "Make an app from a sentence: a repository, production started, and with `description` the first issue.", | |
| 464 | 464 | inputSchema: { |
| 465 | 465 | type: "object", |
| 466 | 466 | properties: { |
| @@ -469,7 +469,7 @@ const TOOLS: readonly Tool[] = [ | ||
| 469 | 469 | owner: { type: "string", maxLength: 39 }, |
| 470 | 470 | visibility: { type: "string", enum: ["public", "private"], description: "Private unless you say public." }, |
| 471 | 471 | agent: { type: "string", maxLength: 39, description: "Agent for the crew and first issue." }, |
| 472 | pick: { type: "boolean", description: "Let the forge pick the agent from the description, when `agent` is not given." }, | |
| 472 | pick: { type: "boolean", description: "Pick the agent from the description when `agent` is not given." }, | |
| 473 | 473 | }, |
| 474 | 474 | required: ["name"], |
| 475 | 475 | }, |
| @@ -545,7 +545,7 @@ const TOOLS: readonly Tool[] = [ | ||
| 545 | 545 | { |
| 546 | 546 | name: "here", |
| 547 | 547 | description: |
| 548 | "What you can do on a forge page, as who you are: what it is, and each action open to you with its HTTP route and MCP tool.", | |
| 548 | "What you can do on a forge page, as who you are: each open action with its HTTP route and MCP tool.", | |
| 549 | 549 | inputSchema: { |
| 550 | 550 | type: "object", |
| 551 | 551 | properties: { url: { type: "string", maxLength: 2000 } }, |
| @@ -572,7 +572,7 @@ const TOOLS: readonly Tool[] = [ | ||
| 572 | 572 | { |
| 573 | 573 | name: "tell", |
| 574 | 574 | description: |
| 575 | "Tell an app's crew what should change (first line is the title); a builder starts next tick. Without `repo` nothing is built: it is kept for the forge, answering a thought id.", | |
| 575 | "Tell an app's crew what should change (first line is the title); a builder starts next tick. Without `repo` nothing is built: kept for the forge, returning a thought id.", | |
| 576 | 576 | inputSchema: { |
| 577 | 577 | type: "object", |
| 578 | 578 | properties: { |
| @@ -651,7 +651,7 @@ const TOOLS: readonly Tool[] = [ | ||
| 651 | 651 | { |
| 652 | 652 | name: "share", |
| 653 | 653 | description: |
| 654 | "Share a feed item. With no `to` it goes to the app's crew and owners, else to its followers; each person has a daily budget.", | |
| 654 | "Share a feed item. With no `to` it goes to the app's crew and owners, else to its followers; a daily budget applies.", | |
| 655 | 655 | inputSchema: { |
| 656 | 656 | type: "object", |
| 657 | 657 | properties: { |
| @@ -710,7 +710,7 @@ const TOOLS: readonly Tool[] = [ | ||
| 710 | 710 | { |
| 711 | 711 | name: "issue", |
| 712 | 712 | description: |
| 713 | "Read one issue: title, state, closeReason, body, labels, assignee, comments (author, agent or not, body, time), `blockedBy`, `blocks`. A crew agent sees `untrusted: true` on text by non-writers, as in the REST API. Sealed or private issues you cannot see are not found.", | |
| 713 | "Read one issue with its comments, `blockedBy` and `blocks`. For a crew agent, text by non-writers carries `untrusted: true`, as in the REST API. Issues you cannot see are not found.", | |
| 714 | 714 | inputSchema: { |
| 715 | 715 | type: "object", |
| 716 | 716 | properties: { |
| @@ -824,7 +824,7 @@ const TOOLS: readonly Tool[] = [ | ||
| 824 | 824 | { |
| 825 | 825 | name: "pulls", |
| 826 | 826 | description: |
| 827 | "A repository's pulls, briefly, newest first: number, title, author, head, check, approvals, changesRequested, mergeable. `state` open (default) or closed; `limit` 1-50 (default 20).", | |
| 827 | "A repository's pulls, briefly, newest first, with check, review counts and mergeable. `state` open (default) or closed; `limit` 1-50 (default 20).", | |
| 828 | 828 | inputSchema: { |
| 829 | 829 | type: "object", |
| 830 | 830 | properties: { |
| @@ -909,7 +909,7 @@ const TOOLS: readonly Tool[] = [ | ||
| 909 | 909 | { |
| 910 | 910 | name: "edit", |
| 911 | 911 | description: |
| 912 | "Give an issue or a pull a new title or body. Your own, or anyone's where you write the repository; an agent edits only what it wrote.", | |
| 912 | "Give an issue or pull a new title or body: your own, or anyone's where you write; an agent edits only what it wrote.", | |
| 913 | 913 | inputSchema: { |
| 914 | 914 | type: "object", |
| 915 | 915 | properties: { |
| @@ -1862,7 +1862,7 @@ const TOOLS: readonly Tool[] = [ | ||
| 1862 | 1862 | { |
| 1863 | 1863 | name: "spawn", |
| 1864 | 1864 | description: |
| 1865 | "Spawn a child forge with the apps you name and the crew's briefs. Plans first (dryRun false makes it).", | |
| 1865 | "Spawn a child forge with the named apps and the crew's briefs. Plans first (dryRun false makes it).", | |
| 1866 | 1866 | inputSchema: { |
| 1867 | 1867 | type: "object", |
| 1868 | 1868 | properties: { |
| @@ -2328,7 +2328,7 @@ const TOOLS: readonly Tool[] = [ | ||
| 2328 | 2328 | { |
| 2329 | 2329 | name: "feed", |
| 2330 | 2330 | description: |
| 2331 | "Your home timeline across the apps you can see, ranked. `cursor` pages. Your saved filter (`feed_chips`) applies.", | |
| 2331 | "Your ranked home timeline across visible apps. `cursor` pages. Your saved filter (`feed_chips`) applies.", | |
| 2332 | 2332 | inputSchema: { |
| 2333 | 2333 | type: "object", |
| 2334 | 2334 | properties: { |
| @@ -2404,7 +2404,7 @@ const TOOLS: readonly Tool[] = [ | ||
| 2404 | 2404 | properties: { |
| 2405 | 2405 | repo: REPO_ARG, |
| 2406 | 2406 | name: { type: "string" }, |
| 2407 | visibility: { type: "string", enum: ["private", "public"], description: "Who sees the copy: private by default; public only when the original is." }, | |
| 2407 | visibility: { type: "string", enum: ["private", "public"], description: "Private by default; public only when the original is." }, | |
| 2408 | 2408 | dryRun: { type: "boolean" }, |
| 2409 | 2409 | }, |
| 2410 | 2410 | required: ["repo"], |
| @@ -3452,7 +3452,7 @@ const TOOLS: readonly Tool[] = [ | ||
| 3452 | 3452 | name: { type: "string", maxLength: 32 }, |
| 3453 | 3453 | value: { type: "string", maxLength: 4096, description: "The token, for attach and rotate." }, |
| 3454 | 3454 | to: { type: "string", maxLength: 32 }, |
| 3455 | allowed: { type: "boolean", description: "For allow_writes: whether runs that declare writes may hold the token." }, | |
| 3455 | allowed: { type: "boolean", description: "For allow_writes: may runs that declare writes hold the token." }, | |
| 3456 | 3456 | repo: { type: "string", maxLength: 200, description: "For audit: owner/name, where the findings are filed as issues." }, |
| 3457 | 3457 | }, |
| 3458 | 3458 | required: ["verb", "provider", "name"], |
new above
offline
High (safety contract): only a crew agent gets
untrusted: true(lines 738-740). Anyone else gets no mark, so this sentence tells them unmarked text is trusted. Restore the condition: "For a crew agent, text by non-writers carriesuntrusted: true, as in the REST API."