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

A new forge comes with a crew that builds at once: agents made, autonomy on, the plan's included credit to start, and one obvious place to add your own model key #11160

Parked opened this in answer to
Closed without merging

A new hosted forge now comes with a builder and a reviewer, autonomy on, and $2 of included crew credit. I did not write the browser acceptance tests from the issue. The server-side parts are tested, but I did not run the full suite; the forge's check does that on push. `tsc`, the gate and the design lint are clean. Of the existing tests I re-ran, the only two that broke were these: `child-credit`…

stopped parked by the crew deploy 13e3cd1

opened this

A new hosted forge now comes with a builder and a reviewer, autonomy on, and $2 of included crew credit. I did not write the browser acceptance tests from the issue. The server-side parts are tested, but I did not run the full suite; the forge's check does that on push. tsc, the gate and the design lint are clean. Of the existing tests I re-ran, the only two that broke were these: child-credit and spawn-child-apps.

What changed

  • Starter crew: src/spawn/starter_crew.ts creates builder and reviewer when a forge is made, seats them on the owner's apps and turns autonomy on. createRepo does the same for any repo made later under the owner's organisation. A forge that was handed a crew by its host keeps that one. The forge's own code repo is not made autonomous.
  • Included credit: the new limit spawn.included_credit_usd (default 2, 0 turns it off) is lent once through the existing child credit (src/spawn/included_credit.ts). Nothing is lent if the forge was spawned with its own key. The child holds only a capped bearer, never the host's key. The existing model door answers 402 once the cap is spent.
  • Bring your own key: the field is on home, on New app and at the top of Settings → Subscriptions (src/web/studio/crew_key.ts, POST /settings/crew/key).

- It seals the key in the forge and grants it to the owner's crew. - The card says "$X of $Y included credit" while credit lasts. - When credit is gone it says: add your own key to keep building, or wait for next month. - With neither credit nor key it says the crew needs a model key. - None of these say "subscription".

  • Copy that no longer over-promises: the claim page says "a crew ready to build them" only when the forge has a crew and something to run on.
  • Platform row: on a hosted forge the "platform (env) — never used" row is gone. Subscriptions shows the included credit and what is left instead.
  • Worst case: /admin/limits shows the worst-case daily cost.
  • Docs: docs/features/starter-crew.md.

Two existing tests changed. child-credit and spawn-child-apps assumed a new forge has no credit. They now set the limit to 0, and the second one's copy is updated to "The crew needs a model key to start". They were wrong about the default, not about behaviour.

Not done

  • No top-ups, checkout or parent–child payments, as the issue says. The plan-based monthly credit (#11135) is not in the tree, so the free-plan number is the single limit and it is lent once, with no monthly reset.
  • No browser test for the full flow from the acceptance list. test/starter-crew.test.ts instead spawns a real child and checks that it gets the crew and autonomy, is lent $2 once, and that 0 lends nothing. It also checks the key card's states and the worst-case figure. The existing door tests cover the 402 at the cap.
  • No test for the key POST route or for the key staying out of logs and host requests.
  • The forge's "$ left" is the last figure the host sent. The forge only learns the spend when it asks the host, and nothing refreshes it on page load, so it can lag. The cap itself is enforced on the host. A single in-flight call can still overshoot it by that call's cost.

Try it: open / on a newly spawned forge and write an ask; it should be taken with no setup. Pasting a key in the home field makes the crew run on it. /admin/limits shows the worst case a day.

🤖 Generated with Claude Code

Closes #11154

commented

A new hosted forge now comes with a builder and a reviewer, autonomy on, and $2 of included crew credit. I did not write the browser acceptance tests from the issue. The server-side parts are tested, but I did not run the full suite; the forge's check does that on push. tsc, the gate and the design lint are clean. Of the existing tests I re-ran, the only two that broke were these: child-credit and spawn-child-apps.

What changed

  • Starter crew: src/spawn/starter_crew.ts creates builder and reviewer when a forge is made, seats them on the owner's apps and turns autonomy on. createRepo does the same for any repo made later under the owner's organisation. A forge that was handed a crew by its host keeps that one. The forge's own code repo is not made autonomous.
  • Included credit: the new limit spawn.included_credit_usd (default 2, 0 turns it off) is lent once through the existing child credit (src/spawn/included_credit.ts). Nothing is lent if the forge was spawned with its own key. The child holds only a capped bearer, never the host's key. The existing model door answers 402 once the cap is spent.
  • Bring your own key: the field is on home, on New app and at the top of Settings → Subscriptions (src/web/studio/crew_key.ts, POST /settings/crew/key).

- It seals the key in the forge and grants it to the owner's crew. - The card says "$X of $Y included credit" while credit lasts. - When credit is gone it says: add your own key to keep building, or wait for next month. - With neither credit nor key it says the crew needs a model key. - None of these say "subscription".

  • Copy that no longer over-promises: the claim page says "a crew ready to build them" only when the forge has a crew and something to run on.
  • Platform row: on a hosted forge the "platform (env) — never used" row is gone. Subscriptions shows the included credit and what is left instead.
  • Worst case: /admin/limits shows the worst-case daily cost.
  • Docs: docs/features/starter-crew.md.

Two existing tests changed. child-credit and spawn-child-apps assumed a new forge has no credit. They now set the limit to 0, and the second one's copy is updated to "The crew needs a model key to start". They were wrong about the default, not about behaviour.

Not done

  • No top-ups, checkout or parent–child payments, as the issue says. The plan-based monthly credit (#11135) is not in the tree, so the free-plan number is the single limit and it is lent once, with no monthly reset.
  • No browser test for the full flow from the acceptance list. test/starter-crew.test.ts instead spawns a real child and checks that it gets the crew and autonomy, is lent $2 once, and that 0 lends nothing. It also checks the key card's states and the worst-case figure. The existing door tests cover the 402 at the cap.
  • No test for the key POST route or for the key staying out of logs and host requests.
  • The forge's "$ left" is the last figure the host sent. The forge only learns the spend when it asks the host, and nothing refreshes it on page load, so it can lag. The cap itself is enforced on the host. A single in-flight call can still overshoot it by that call's cost.

Try it: open / on a newly spawned forge and write an ask; it should be taken with no setup. Pasting a key in the home field makes the crew run on it. /admin/limits shows the worst case a day.

🤖 Generated with Claude Code

commented

I pushed fixes for the failures from the check. Seven of the eight now pass when run on their own; the "/map and / answer under their p95" budget test I could not reproduce. I did not run the full suite, because bun scripts/fast.ts named 2,204 of 2,703 test files for this diff, which is too broad. A broader targeted run (spawn-child-apps, child-credit, and the crew, home and first-login tests) hit the 120s timeout and went to the background. I have not read its result.

  • OpenAPI route scan: settings_routes.ts registered the key route through the KEY_ACTION constant, which the scan can't resolve across files. It now uses the literal "/settings/crew/key".
  • MCP docs: I regenerated the tool table in docs/MCP.md with bun scripts/mcp-table.ts.
  • Spawn test: the new credit block (cap 2, spent 0, a kid. token) is now in the expected parent.json. The test was out of date, not the code.
  • createUser callers test: it now lists src/spawn/starter_crew.ts as a spawn origin.
  • First-login jargon: the key field label read "…Claude setup token", and "token" is on the jargon list. It now reads "Your Anthropic API key or Claude login".
  • First-view budget: the new key card made the repository and app pages exceed the attention budget (words 133 against 117, blocks 20 against 18). Those pages now get a one-line note with a link to Subscriptions, through crewKeyCard(ctx, true). The full key field stays on the home page, New app, and Subscriptions.
  • p95 budget: this is a timing test and test/snappy.test.ts passes locally. The slow shard may have been a flaky one. The new check run will show whether it recurs.

bun scripts/gate.ts, bun x tsc --noEmit and the design lint passed. The preview is at https://lab--11160--forge-trevato-apps.open-platform.sh.

🤖 Generated with Claude Code

commented

Parked by the crew: the check stayed red through 2 automatic tries

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs