Skip to content

Where people and agents ship software together. The open-source git platform for the whole job: issues, agents, checks and deploys to the edge.

g1t.sh
76 linesCodeBlameRaw

Pick any line to see why it is the way it is: the commit, the pull request and issue it came from, and what the agent was thinking.

README: run the core forge locally with Docker Compose; forks described as copies, not copy-on-write, until Cloudflare says otherwise1{
2 "$schema": "../../node_modules/wrangler/config-schema.json",
3 "name": "g1t",
4 "account_id": "1e6f2cffa3f445920836e8ebe446bb58",
5 "compatibility_date": "2026-09-26",
6 // AsyncLocalStorage, for per-request timings and D1 bookmarks
7 // (app/lib/perf.server.ts).
8 "compatibility_flags": ["nodejs_als"],
The docs folder is gone, and what it held lives where people read it: how a self-hosted g1t runs and how to deploy g1t to Cloudflare are pages on docs.g1t.sh under Run g1t yourself, and speed, rate limits and operating g1t.sh are sections of CONTRIBUTING.md; code that cited a file in docs/ now points to the page or section that covers it, or says what it means itself, and applied migrations and the runner images are left as they were.9 // Where it runs (CONTRIBUTING.md, "Speed"). Off runs it in the data centre
README: run the core forge locally with Docker Compose; forks described as copies, not copy-on-write, until Cloudflare says otherwise10 // nearest the visitor; scripts/perf/placement-probe.mjs measures the
11 // alternatives and `apply` changes every Worker's at once.
12 "placement": { "mode": "off" },
13 "main": "./workers/app.ts",
Merge g1tusercontent.com: registry answers run nothing in a browser, the site's pages run only their own scripts, repository files and avatars on their own origin, raw files rate limited per address14 // g1tusercontent.com: repository files and avatars, on an origin of
15 // their own that never sees g1t.sh's cookies (workers/usercontent.ts).
16 "routes": [
17 { "pattern": "g1t.sh", "custom_domain": true },
18 { "pattern": "g1tusercontent.com", "custom_domain": true }
19 ],
README: run the core forge locally with Docker Compose; forks described as copies, not copy-on-write, until Cloudflare says otherwise20 // The site holds no data of its own; everything goes through services.
21 // GitHub Actions artifacts, as the API keeps them, for download from a run.
22 // Uploaded avatars (g1t-avatars), served at /avatars/<sha256>. Read
23 // only here: the identity service checks and writes them.
24 "kv_namespaces": [
25 { "binding": "BLOBS", "id": "16a4232cb746418db53782aa068be693" },
26 { "binding": "AVATARS", "id": "e627b571f07047e187c03e1fc2b3bbdd" }
27 ],
28 // The self-hosted runner's releases, served at /downloads/runner/
29 // (routes/downloads-runner.ts); published by scripts/runner-release.mjs.
30 "r2_buckets": [{ "binding": "DOWNLOADS", "bucket_name": "g1t-downloads" }],
31 "services": [
32 { "binding": "IDENTITY", "service": "g1t-identity" },
33 { "binding": "REPOS", "service": "g1t-repos" },
34 // The package registries, on g1t.sh/v2/ (workers/app.ts).
35 { "binding": "PACKAGES", "service": "g1t-packages" },
36 { "binding": "WORK", "service": "g1t-work" },
37 { "binding": "BILLING", "service": "g1t-billing" },
38 { "binding": "EVENTS", "service": "g1t-events" },
39 { "binding": "INTEGRATIONS", "service": "g1t-integrations" },
40 { "binding": "WEBHOOKS", "service": "g1t-webhooks" },
41 { "binding": "ACTIONS", "service": "g1t-actions" },
42 { "binding": "DEPLOYMENTS", "service": "g1t-deployments" },
43 { "binding": "PROJECTS", "service": "g1t-projects" },
44 { "binding": "SECURITY", "service": "g1t-security" },
45 { "binding": "SEARCH", "service": "g1t-search" },
Chat and workspace agents: channels, DMs and named agents you talk to46 // Chat: channels, direct messages and the live socket (services/chat).
47 { "binding": "CHAT", "service": "g1t-chat" },
The artifacts service is services/artifacts, the Worker g1t-artifacts, bound as ARTIFACTS by the API, the site and the agents; its live rooms move to it with a Durable Object transfer from g1t-docs-service, and its database, bucket, indexes and queue keep their names. The git store's binding and settings are GITSTORE, its ops scripts gitstore-*, and workflow run artifacts keep their compatible API under run_artifacts modules. The deploy tool puts a Worker that has never deployed before the Workers in its stage that bind to it, and the deploy guide gives the cutover runbook.48 // Artifacts: spaces, artifacts, each one's live socket, and files in them (services/artifacts).
49 { "binding": "ARTIFACTS", "service": "g1t-artifacts" },
Merge the workspace shell: navigation and phone shell, g1t as orchestrator, agents in roles with audience-checked reads, reactions and custom emoji, live notifications and browser push, the homepage tour (agents 0002, chat 0002)50 // Live notifications, counts and browser push: each tab's feed socket (services/notify).
51 { "binding": "NOTIFY", "service": "g1t-notify" },
Projects have Observability: their requests, logs, traces, metrics and errors, from apps on g1t.page with nothing to set up, and from software anywhere else over OpenTelemetry.52 // Observability: each project's requests, logs, traces, metrics and errors, and its live tail (services/telemetry).
53 { "binding": "TELEMETRY", "service": "g1t-telemetry" },
README: run the core forge locally with Docker Compose; forks described as copies, not copy-on-write, until Cloudflare says otherwise54 // Production screenshots for a project's overview (services/og).
55 { "binding": "SCREENSHOTS", "service": "g1t-og", "entrypoint": "Screenshots" }
56 ],
Merge branch 'worktree-agent-a8752162fea25f63f' into spend-guardrails57 // The front door's limits (app/lib/front-door-limits.ts). Every id and
58 // limit is in RATE_LIMITS (packages/contracts/src/rate-limits.ts), which
59 // the tests check this against. Self-hosted, without them, nothing is limited.
60 "ratelimits": [
61 { "name": "WEB_ANONYMOUS_LIMIT", "namespace_id": "4201", "simple": { "limit": 600, "period": 60 } },
62 { "name": "WEB_HEAVY_LIMIT", "namespace_id": "4202", "simple": { "limit": 30, "period": 60 } },
63 { "name": "WEB_SESSION_LIMIT", "namespace_id": "4203", "simple": { "limit": 1200, "period": 60 } },
64 { "name": "WEB_ADDRESS_LIMIT", "namespace_id": "4204", "simple": { "limit": 3000, "period": 60 } },
65 { "name": "GIT_ANONYMOUS_LIMIT", "namespace_id": "4205", "simple": { "limit": 120, "period": 60 } },
Merge main into Artifacts Phase 266 { "name": "GIT_SIGNED_LIMIT", "namespace_id": "4206", "simple": { "limit": 1200, "period": 60 } },
g1t coordinates the work and the person's own sessions do it: Ask g1t reads g1t with the same tools any agent gets, answers in one conversation shared with the @g1t direct message in Chat, and hands work to sessions in the person's own harness, whose subagents g1t records, ties to issues and pull requests, and lets see each other.67 { "name": "WEB_TOKEN_LIMIT", "namespace_id": "4207", "simple": { "limit": 1000, "period": 60 } }
Merge branch 'worktree-agent-a8752162fea25f63f' into spend-guardrails68 ],
69 // Logs of a tenth of requests: every page view is one, too many to keep all.
Merge main into rm-agents: mirroring removal, open signups, free-tier limits, the g1t CLI and runner fixes, with the agent removal kept. The CLI's table of operations is regenerated from the API without the agent, customize and AI credit operations; no CLI command used them.70 // Cloudflare Turnstile on email sign-up (app/lib/turnstile.ts): the
71 // widget's public site key here, and its secret as the TURNSTILE_SECRET
72 // secret. Either one empty turns it off.
73 "vars": { "TURNSTILE_SITE_KEY": "" },
Merge branch 'worktree-agent-a8752162fea25f63f' into spend-guardrails74 "observability": { "enabled": true, "head_sampling_rate": 0.1 },
README: run the core forge locally with Docker Compose; forks described as copies, not copy-on-write, until Cloudflare says otherwise75 "upload_source_maps": true
76}

This file's history is long; its oldest lines are credited to the oldest commit read.