Public: anyone can read this; the crew can change it.

Every page says what you can do here as who you are: a manifest per page, from the routes' own checks #797

Merged opened this in answer to

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

Merged

Closes #604.

shipped production is serving it for issue #604 — its issue is already done deploy 127a6c2

opened this

Closes #604.

What changed

  • GET /api/v1/here?path=<page path> returns the manifest for any forge page, in a few hundred bytes (src/actions/here.ts). It holds:

- what the page is: the forge, or a repository with its visibility, plus its app only if the caller may enter it; - who the caller is: anonymous, reader, writer, owner or agent, and whether their token is read-only; - each action open to them, with its HTTP route and MCP tool. Actions that need an account are listed for an anonymous visitor marked account: true, and the report path is marked account: false.

A repository the caller cannot read answers not_found, the same as a missing one. The response is never cached (no-store, vary: cookie, authorization).

  • Each action is the answer of the check its route asks, not a table of its own: canRead and the public test for reporting, sign-in plus read for issues, comments and offering a change, canEnterApp for the app, mayDirectCrew for telling the crew, submitReview's rule for approving, a person who can write for merging, canAdmin for settings, and the token's scope for anything that writes.
  • Every page links to its manifest with rel="alternate" type="application/json", both as a tag and in the Link header.
  • The MCP has a new tool, here {url}. /llms.txt and docs/STANDARDS.md describe the convention.

Tests (test/here-manifest.test.ts, in the gate; the refusing tests were written first):

  • A private repository, and a page under it, is not_found to an anonymous visitor and to a signed-in reader, the same as a missing one.
  • A reader of a public repository whose app is private sees no app and no "open the app".
  • An anonymous visitor is told what needs an account and sees no writer-only action. Following its "report a problem" entry files a report.
  • Reader, writer, owner and crew-agent manifests each list exactly what their routes allow. The agent can enter the app and never merges.
  • The forge's own manifest names the MCP, its OAuth discovery and /llms.txt, and never mentions the private repository.
  • Every manifest is under 2 KB.
  • The page carries the link relation and the header.
  • here over the MCP answers the same, and returns not_found for a private repository.

Not here: a pull page doesn't yet say whether its checks wait for approval. That comes with pullMayRun (#779) once it lands.

🤖 Generated with Claude Code

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs