grokbot/forge
Public: anyone can read this; 1 person can change it.
forked from trevato/forge
workbenchthis machine
The forge keeps its merge queue through a restart, proves its backups by restoring them, and lets agents sign in with OAuth
0.7.272 · 2026-11-01 · 82 changes in 1 app
Highlights
- Agents sign in to the forge's MCP with OAuth — a client that speaks the standard can discover the forge, register itself and be told where to authorize, so connecting an agent no longer means pasting a token by hand (#579, #2397)
- The merge queue survives a rollout — deploying the forge used to throw away a gate half-run; now the new process resumes the same candidate, so a release no longer costs every waiting pull another full check (#6616)
- A backup is proved by restoring it — the weekly drill boots the restored copy, posts its verdict on the recovery issue and, when it fails, puts a card in the inbox until one passes, so nobody learns a backup is bad on the day they need it (#1717)
- A typical pull is checked in under two minutes — slow test setup was the longest wait between a pull and its merge; cheaper hashing and SQLite in tests, and the two slowest files split, shorten that wait for everyone (#2064)
- The API is a page you can read and try — /api renders the forge's own OpenAPI spec by area, with schemas and a way to try a call as yourself, so a person or an agent learns what the forge can do from the forge (#7587)
Pulls
- #579 OAuth for the MCP, step one: discovery documents, dynamic client registration, and a 401 that names them
- #886 Make it yours: copies start private, and an account makes at most five a day
- #1717 The weekly restore drill posts its verdict on the recovery issue, and a failed drill is a card in the inbox
- #1773 The palette's "Tell the crew" opens a composer in place on any repository page and sends the page with the tell
- #2064 Check time under 2 minutes for a typical pull: Bun-native affected tests, real timings, split the two slowest files, fast git and SQLite in tests
- #1862 A spawned forge carries a fork of the forge it came from, and the chain shows both ways
- #2300 Tell the crew from the forge toolbar: the tell carries the page it was sent from
- #2397 GET /.well-known/oauth-protected-resource answers RFC 9728 JSON naming this forge's /mcp and its authorization server
- #2436 A proposal to the parent forge reaches an open chain page live, through any door
- #2440 MCP: propose to the parent forge and list proposals
- #2468 Boards, step 6a: the forge writes the Usage and Crew starting boards on boot, and never overwrites an edited one
- #2475 Boards, step 6d: a stages source and the Throughput starting board
- #2496 MCP OAuth, part 2: authorize with consent and a PKCE token exchange that mints the same ro/rw forge token
- #2524 On the home, an admin selects apps and archives them in one tap, and the answer offers Undo
- #2560 Schema migrations are identified by name, so two pulls can each add one without colliding
- #2604 Take updates from trevato/forge-upstream
- #2620 The restore drill's time limit grows with the size of the snapshot it restores
- #2640 take-updates: a forge in take-updates merges its parent's new code when it applies cleanly, and opens the converge issue when it does not
- #2661 Through MCP an agent reads how a forge stands against its parent forge and takes its new code
- #2820 Crew teams: a named group of crew members with a charter and a dial the owner sets on one settings page
- #2792 Every app made from the template measures its visitors and page speed from its first deploy
- #2948 Strangers cannot exhaust the forge: anonymous clones, code search and streams are rate-limited and capped
- #2952 Perimeter: the forge's anonymous answers say only what a stranger needs
- #3000 Each deployed preview of the forge is checked by webspec() and the pull shows its findings, report-only
- #3104 A pull's looks sit beside the same page's look from main: before and after
- #3156 A landing gate cut short by a roll is not red: the queue re-gates it on boot
- #3184 A crew member's scorecard shows the last 30 days beside all time
- #3304 Issues and pull requests are called issues and pull requests everywhere: retire "Told", "Changes", /tells and /changes
- #3448 The forge pill can be moved out of the way: drag it to any corner, it stays there per app, and it never covers the app's own controls
- #3412 Migrate from the terminal: pick a repository and its branch, put a crew on it, watch the job
- #3760 The `new_app` tool's answer draws a ui://forge/app card: the app coming alive, its preview link and its agent
- #3772 /apps shows each app's time from New app to its first preview, beside its name
- #3996 The sentinel files no forge issue for another repository's red main; that repository's owner is told instead, in words that name the fix
- #3968 A release is never held because main moved: the build accepts a green check of a descendant of the tagged commit
- #3312 A migrated repository shows its trail: "migrated from github.com/Trevato/SO-ARM100, a fork of TheRobotStudio/SO-ARM100", each a link up - hideable per repository
- #4176 The asks list holds every pull waiting on a person: handed over, or untouched by a person for 24 h
- #4220 The landing gate itself lands an upstream pull as a merge, so the upstream's commits stay ancestors of main
- #4360 Turning following on or off reaches every open page and terminal at once
- #4236 An upstream merge that conflicts starts one converge run for the crew
- #4420 GET /review lists every ask as a row with its title, repository, age and why
- #4736 Each /review row says what the crew advises and why, or that it has not advised yet
- #5182 Act from /review: Merge, Close, Request changes, Reply, by button or key, then the next item
- #5932 Drain the 199 open pulls: split src/http/mcp.ts (61 pulls collide on it) into one file per tool, re-cut the open pulls onto it, and a hot-file WIP limit
- #6116 `ssh <app>@<forge> pulls` prints the app's open pulls a viewer may see, newest first, with each head's check word
- #6120 `ssh <forge> tell <words>` tells the crew in one line from any shell, and prints where it went
- #6172 `ssh <app>@<forge> tell <words>` tells that app's crew, and the tell records the app as where it was said
- #6232 Approved-but-conflicted pulls drain one at a time: give rebases priority in the check lane, spread them across idle builders, and re-cut split files mechanically
- #5752 MCP `write_file`: commit one file to an existing branch through commitToBranch, refusing in edit_words' sentences
- #6252 GET /api/v1/feed answers 304 only when nothing the viewer would read has changed: events, shares, dismissals, mutes, chips and the minute
- #6296 A repository's forks page draws the tree: each fork's own forks beneath it, two levels deep
- #5708 MCP `app_domains`: list, add, check and remove an app's domains, with the same rules as the API
- #6360 The forge computes the "stuck pull" flow alarm (#5930)
- #6364 The forge computes the "no release" flow alarm (#5930)
- #6400 The forge computes the "drifting pull" flow alarm: an open pull's base is 25 landings or 6 h behind main
- #6416 The forge's `here` manifest names how to help: GET /api/v1/contribute and MCP `contribute`, no account needed
- #5388 MCP `releases`: the forge's kept releases, which one is live and since when, for whoever may read /releases
- #6616 The merge queue survives a rollout: gates in flight resume on the new pod instead of starting over
- #6564 A pure function turns a day's feed events into at most three digest lines, one per repository, biggest change first, each with its evidence link
- #6732 A rollout must not turn in-flight gates red: an interrupted gate re-runs as the same candidate, and red (check) retries once before bisecting
- #6528 An admin can hold new work on one file: the picker starts no build whose issue names it, and the hold says who set it
- #6776 The flow panel on /boards says the crew's build yield and review latency
- #6964 MCP `sessions` lists the caller's sign-ins
- #6940 A repository has a "flow only" switch: one setting, readable and writable by its admin from Settings, the API and MCP
- #6968 MCP `sessions` ends one sign-in, so a lost device is signed out from anywhere
- #6820 The command palette's last row is "Tell the crew: <what you typed>", and choosing it sends the tell from wherever you are
- #7220 POST /api/v1/repos/:owner/:name/pulls/:number/take-back opens the pull that undoes a shipped one, as the page's Take back does
- #7340 The terminal's waves screen cuts a wave with `c` and a confirm: a draft pull listing every pull merged since the last wave, as the waves page does
- #7360 The palette's Working now lists every running crew run on this repository with how long it has run, and choosing one opens it
- #7432 The planner's brief names the files that are hot now, with their pull counts, so it plans around them
- #7388 Files render in the browser: CSV/TSV as a real table — sticky header, sort, filter, row count
- #7392 Config files open as a form: JSON edited through a clean, typed UI that commits or proposes
- #7456 `forge asks --ship/--close/--dismiss <n…>` decides asks from the shell: planned first, applied after a y/N, as POST /api/v1/asks/bulk
- #7576 Escalate to Opus by need, not by agent: P0s, planning, and any pull sent back twice run on Opus; everything else on the agent's own model
- #7587 An API reference in the forge: /api renders the forge's OpenAPI spec (and an app's own, if it serves one) — endpoints by area, schemas, and try it as yourself
- #7548 Choosing a template for a new forge: the spawn path takes a `template`, records it, and `GET /api/v1/forges/templates` + MCP `templates` list what is offered
- #7528 The commits page shows each commit's check beside it, green, red or not run, and a commit's own page says why, as MCP `commits` does
- #7620 A pull enters the merge queue only after the full suite passes on its current head merged with main (not the impact-mapped subset)
- #7608 `forge map` prints the plan of the folder's repository: ready now, being built, and what waits on what
- #7740 A thought that says only a repository's name opens no issue: it waits as a note and the reply asks what should change
- #7708 A proof is a run with a state, and a proof that cannot start or is cut off says why on the pull
- #7744 The Runs page's "Working" tab shows what is working now
- #7008 Home's builders tile says why builders are idle: the ceiling, no ready issue, or no subscription with headroom