Events service in Rust, with RFC 3339 times and accurate push events
- events: rewritten in Rust; publishing queues, the queue consumer writes the log and fans out to each subscriber's own queue. Event times are RFC 3339 text, the last place Unix milliseconds were stored - repos and work publish over the same JSON RPC as every other call between services - git.push is published once per branch that moved, naming that branch, instead of always naming the default branch. The branches are read from the push's own commands and checked against the store before reporting - work: a push event updates the pull request for that branch directly
Chase Pierce committed
Pull requests from branches
A pull request can now come from a branch pushed to the repository, the way engineers already work, as well as from a fork made for it, the way agents work. - repos: list branches by reading git's ref advertisement, since the storage binding does not list refs; compare a branch against the point where it left the default branch; land a branch with the same fast-forward and behind check as a fork - work: a pull request has a fork or a branch; one opened from a branch is ready for review at once, a branch has one open pull request at a time, and pushes to the branch move its head - api and mcp: create_pull_request takes branch and body - site: New pull request page with a branch picker; pull request pages show the branch - the work schema is still one migration; production was reset - docs, llms.txt, README and plan updated
Chase Pierce committed
OAuth 2.1 sign-in for MCP clients and other applications
Connecting an MCP client now needs only the server's address: the client is told to sign in, registers itself, and sends the person to a consent page on g1t. No token is pasted. - identity: authorization codes with PKCE (S256), grants with rotating refresh tokens, listing and revoking grants - client registration stores nothing: a client id encodes its own name and redirect addresses, so the open endpoint cannot be used to fill a database - api: authorization server and protected resource metadata, registration and token endpoints; the MCP server answers unauthenticated requests with 401 and a pointer to the metadata - site: consent page at /oauth/authorize, which never redirects to an address the client did not register; connected applications in Settings - docs, llms.txt, README and plan updated
Chase Pierce committed
Issues and pull requests replace intents and attempts
An issue is what should change; a pull request is a proposed change in its own fork. One issue can have any number of pull requests, and it is always clear which one was taken: merging closes the issue with resolvedBy set to that pull request, and closes the others still in progress for it as superseded. Merging with keepIssueOpen leaves both alone, for a pull request that is only part of the work. - work: issues with labels, acceptance checks and comments; pull requests (draft, open, merged, closed); one sequence of numbers per repository shared by both; migrations squashed into one schema - labels need no setup: five defaults, and any other name exists once used - api and mcp: GitHub-shaped names and paths, addressed by repo and number - site: Issues and Pull requests tabs, label filters, issue page listing its pull requests with the merged one marked, conversation tab on pull requests - runner: g1t agents open a pull request per agent; commits no longer carry the harness's co-author trailer - docs, llms.txt, README and plan rewritten for the model
Chase Pierce committed
Workspaces own repositories
There is no longer a namespace per user. A person creates a workspace, which may share their username, and repositories belong to it; a team is a workspace with more members. Authorization is by membership. - identity: workspaces, members and roles; every user resolved from credentials carries their memberships - repos: read, write, create and push-to-create check membership - site: create-workspace flow for new accounts, workspace pages with members, workspace choice when creating a repository - api: create_workspace; create_repo takes a workspace - docs and llms.txt updated
Chase Pierce committed
Work service in Rust, with RFC 3339 timestamps
- services/work rewritten in Rust: intents, attempts, sessions, shipping, and the queue consumer that moves an attempt's head on a push - work database migrated to text timestamps - site, API and runner call it through a typed client - identity migration corrected so rebuilding tables cannot cascade-delete rows that reference the old users table
Chase Pierce committed
RFC 3339 timestamps in identity and repos
Times are stored and returned as UTC text such as 2026-10-02T05:16:19.000Z instead of Unix integers. Both databases are migrated; the work and events services follow when they are ported.
Chase Pierce committed
Show the model behind each choice; toolchains in the sandbox
- runner: model menu carries the public model name; each run's session opens with a note naming the model - sandbox image: Rust, Go, Python and build tools, so an agent can build and test what it changes
Chase Pierce committed
Device sign-in replaces registering and minting tokens over the API
A tool asks for a code, the person approves it in their browser (signing in or registering there), and the tool collects a token. Accounts are now created only on the website; no endpoint takes a password. - identity: device_start, device_lookup, device_resolve, device_claim - api: /v1/device/code and /v1/device/token; /v1/register and /v1/tokens removed - site: /device approval page; sign-in and registration return to where the person was going - llms.txt and docs rewritten around the new flow
Chase Pierce committed
g1t agents: model menu and optional AI Gateway routing
- runner: models offered are configured as Balanced, Deep and Fast, each mapped to a provider model server-side; AI_GATEWAY_ID routes model traffic through a Cloudflare AI Gateway - site: model choice when starting a run - docs: choosing a model, and how traffic is routed
Chase Pierce committed
Docs as their own app; shared theme package
- apps/docs: Astro Starlight site deployed to docs.g1t.sh, with search, the API explorer, and a page on why attempts use forks and when a branch is the better choice - packages/theme: one set of design tokens and marks for every public site - site: docs removed; old /docs links redirect
Chase Pierce committed
docs.g1t.sh, generated OpenAPI with an interactive reference, full footer
- api: /openapi.json generated from the operation list; CORS; attempt changes endpoint and MCP tool - site: docs served at docs.g1t.sh; grouped navigation with previous and next; guides for accounts and for g1t agents; API explorer; heading anchors; three-column footer
Chase Pierce committed
Diffs on attempts; hosted agent presented as the g1t agent
- repos: compare, a tree walk that skips identical subtrees plus line diffs, against the commit a fork last shared with its source - work: records what main pointed to before an attempt landed - site: Session and Changes tabs on attempts with a pull-request style diff - the hosted agent is labelled g1t-agent; what runs behind it is g1t's choice
Chase Pierce committed
Hosted agents: sandboxes on Cloudflare Containers started from an intent
- services/runner: starts one container per attempt running the g1t runner, limited to an allowlist of accounts; abandons the attempt if a sandbox dies without reporting - site: Run hosted agents panel on intents with live refresh; attempt summaries and agent messages render as markdown; GitHub-style clone box with HTTPS, SSH and Agent tabs
Chase Pierce committed
Account dropdown, llms.txt onboarding, hosted agent runner (not yet deployed)
- site: shadcn-style dropdown for the account menu - llms.txt: lets an assistant register someone, wait for the confirmation email, create a token and connect; API gains /v1/register and /v1/tokens - identity: expiring access tokens for hosted attempts - crates/runner: runs Claude Code headless on an attempt, streams its events into the session, pushes and submits; secrets are redacted from everything it records and the git credential is never written to disk - services/runner/Dockerfile: the sandbox image
Chase Pierce committed
Rust repos service with shipping; pull requests kept in the model
- services/repos rewritten in Rust: registry, contents, forks, git over HTTPS, and landing an attempt on main by relaying a pack from the fork - landing refuses an attempt that is behind main, following every parent when checking ancestry - work: ship_attempt closes the intent; exposed in the API, MCP and site - kit: call Worker RPC stubs correctly from Rust - docs and marketing: shipping documented; intents framed as building on pull requests
Chase Pierce committed
Email verification, password reset, and Git for AI scale positioning
- identity: verification and reset tokens, emails through Cloudflare Email Sending; unverified accounts cannot create or change anything - site: verify, forgot and reset pages, and a banner for unconfirmed accounts - kit: helpers for JavaScript bindings without a typed Rust wrapper - marketing copy repositioned around scale
Chase Pierce committed
API and MCP server, Rust identity service, registration, site redesign
- apps/api: REST at api.g1t.sh and MCP at mcp.g1t.sh over one set of operations - services/identity: rewritten in Rust (WebAssembly on Workers), with registration - crates/contracts, crates/kit: shared types and plumbing for Rust services - ids are now TypeIDs (prefix + UUIDv7), monotonic within a millisecond - site: GitHub-style header, marketing page with animated illustrations, sign-up, explore and search, profiles, commits, docs, markdown READMEs and syntax highlighting - git front end publishes push events itself - README and plan updates
Chase Pierce committed
Initial g1t: services, event bus, intents and attempts
A git forge for agents on Cloudflare Workers and Artifacts. - packages/contracts: service interfaces, event catalogue, shared types - services/identity: accounts, sessions, SSH keys, access tokens - services/repos: registry, contents, forks, git over HTTPS (Artifacts) - services/events: event bus with a durable log and per-subscriber queues - services/work: intents, attempts (a fork each), sessions - apps/web: server-rendered site on g1t.sh - crates/sshd: SSH-to-Artifacts bridge (not yet deployed)
Chase Pierce committed