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
91 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.

The contracts no longer describe g1t's own agents, and workspaces can keep their AI providers. Every consumer had already stopped using them, so the TypeScript and Rust contracts drop the workspace-agent, ability, look, skill-library, context, runner-agent and mention modules, the chat and docs RPCs agents posted and read through, the folio agent methods, the agent_waiting notification, agent.asked and memory.changed events, AI credit, token and gateway billing types, model routes and sessions, team agents, agent tokens, plan, review, message and confidence types, command rules, cost caps and confidence rules. The agents:run and models:* scopes are no longer offered by any preset, OAuth default or permission form, but a stored token or grant that names them still reads; and the removed operations are gone from the scope table, so the API's check that every operation has exactly one scope is strict again. What stored data needs in order to parse (old run and credential kinds, an agent team lead, retired rules and webhook events, old guardrail and integration settings) still parses, and a run's token is still PrincipalKind::Agent, which now means a run's token and the @g1t rows written before. The customize, marketplace, skills and claude-plugin contracts stay only until the mobile app drops its Customize screens.1import type { RateLimitBinding, ServiceBinding } from "@g1t/contracts";
An unknown behind count reads ?, not 0+; Code pages leave the description and topics to Files2
3declare global {
4 namespace Cloudflare {
5 interface Env {
6 IDENTITY: ServiceBinding;
7 /** Also serves git over HTTPS through `fetch`. */
8 REPOS: ServiceBinding & { fetch(request: Request): Promise<Response> };
9 /** Also serves the container registry (`/v2/`) through `fetch`. */
10 PACKAGES: ServiceBinding & { fetch(request: Request): Promise<Response> };
11 WORK: ServiceBinding;
12 BILLING: ServiceBinding;
13 EVENTS: ServiceBinding;
14 INTEGRATIONS: ServiceBinding;
15 WEBHOOKS: ServiceBinding;
16 ACTIONS: ServiceBinding;
17 DEPLOYMENTS: ServiceBinding;
18 PROJECTS: ServiceBinding;
19 SECURITY: ServiceBinding;
20 /** Search across all of g1t, and Explore. */
21 SEARCH: ServiceBinding;
Chat and workspace agents: channels, DMs and named agents you talk to22 /**
23 * Chat: channels, messages and read state over RPC, and the live
24 * socket, forwarded as it is (app/lib/chat-live.server.ts).
25 */
26 CHAT: ServiceBinding & { fetch(request: Request): Promise<Response> };
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.27 /** Artifacts (services/artifacts): RPC, each artifact's live socket, and files in them. */
28 ARTIFACTS: ServiceBinding & { fetch(request: Request | string, init?: RequestInit): Promise<Response> };
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)29 /**
30 * Live notifications, counts and browser push (services/notify): RPC,
31 * and each tab's feed socket, forwarded as it is (routes/notify/live.ts).
32 * Absent where it is not deployed: pages work without it.
33 */
34 NOTIFY?: ServiceBinding & { fetch(request: Request): Promise<Response> };
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.35 /**
36 * Observability (services/telemetry): RPC, and a project's live tail,
37 * forwarded as it is (routes/repo/observability/live.ts). Absent where
38 * it is not deployed: the pages say so.
39 */
40 TELEMETRY?: ServiceBinding & { fetch(request: Request): Promise<Response> };
An unknown behind count reads ?, not 0+; Code pages leave the description and topics to Files41 /** Production screenshots, from the og service's `Screenshots` entrypoint. */
42 SCREENSHOTS?: {
43 image(input: { host: string; commit: string; since?: string }): Promise<{
44 body: ArrayBuffer;
45 contentType: string;
46 commit: string;
47 capturedAt: string;
48 } | null>;
Merge branch 'worktree-agent-a5b0d9e2733e9e382'49 /** A production deployed elsewhere, at its address; `commit` is a deploy's commit or a UTC day. */
50 externalImage(input: { url: string; commit: string; since?: string }): Promise<{
51 body: ArrayBuffer;
52 contentType: string;
53 commit: string;
54 capturedAt: string;
55 } | null>;
An unknown behind count reads ?, not 0+; Code pages leave the description and topics to Files56 };
57 BLOBS: KVNamespace;
58 /** Uploaded avatars by SHA-256, with `{ contentType }`; written by identity. */
59 AVATARS: KVNamespace;
60 /** The self-hosted runner's releases (scripts/runner-release.mjs). Absent when self-hosted. */
61 DOWNLOADS?: R2Bucket;
Merge branch 'worktree-agent-aaf03bdceac799c89'62 /** The site's own origin. Unset on g1t.sh, which is https://g1t.sh (app/lib/addresses.server.ts). */
63 SITE_URL?: string;
64 /** The REST API's origin, which is also the OAuth issuer. Unset on g1t.sh. */
65 API_URL?: string;
66 /** The MCP server's URL, as agents are told to add it. Unset on g1t.sh. */
67 MCP_URL?: string;
68 /** The social-card image service; an empty string for none. Unset on g1t.sh. */
69 OG_URL?: string;
Merge branch 'worktree-agent-a8752162fea25f63f' into spend-guardrails70 /** The front door's rate limits (app/lib/front-door-limits.ts). Absent when self-hosted. */
71 WEB_ANONYMOUS_LIMIT?: RateLimitBinding;
72 WEB_HEAVY_LIMIT?: RateLimitBinding;
73 WEB_SESSION_LIMIT?: RateLimitBinding;
74 WEB_ADDRESS_LIMIT?: RateLimitBinding;
Merge main into Artifacts Phase 275 WEB_TOKEN_LIMIT?: RateLimitBinding;
The top bar's Ask is live: it opens a conversation with g1t in a panel beside the page, answered by the AI provider and model the workspace's owner chose, streamed as it is written, with Markdown drawn as chat draws it, the provider and model under each answer, Stop to end an answer (what came stays), and New conversation to start over. Each question carries the page you are on, so g1t can say which repository, issue or pull request you are looking at. The conversation is kept in the browser tab for now, across pages and reloads; closing the panel keeps an answer coming. Until a provider is chosen the panel says so: owners get a link to choose one, members are told to ask an owner. On Integrations, Your AI providers has an Ask g1t card where owners choose the provider and one of the models it offers (a deployment for Azure, any name for an endpoint that lists none), or turn Ask off, and members see what it answers with. Questions go through -/ask, which streams the integrations service's answer straight through and counts 20 questions a minute per person (WEB_ASK_LIMIT).76 /** Ask g1t's questions, per person (app/routes/workspace/ask.ts). */
77 WEB_ASK_LIMIT?: RateLimitBinding;
Merge branch 'worktree-agent-a8752162fea25f63f' into spend-guardrails78 GIT_ANONYMOUS_LIMIT?: RateLimitBinding;
79 GIT_SIGNED_LIMIT?: RateLimitBinding;
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 address80 /**
81 * Where repository files and avatars are served (app/lib/usercontent.ts).
82 * Unset on g1t.sh, which is https://g1tusercontent.com; unset on another
83 * site, `<SITE_URL>/-/usercontent`.
84 */
85 USERCONTENT_URL?: string;
86 /** Signs the short-lived addresses of private repositories' files. A secret. */
87 USERCONTENT_KEY?: string;
An unknown behind count reads ?, not 0+; Code pages leave the description and topics to Files88 }
89 }
90 interface Env extends Cloudflare.Env {}
91}

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