Skip to content
630 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.

Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look1import { ArrowRight, Check, KeyRound, PackageCheck, ScrollText, ShieldCheck } from "lucide-react";
2import type { CSSProperties, ReactNode } from "react";
API and MCP server, Rust identity service, registration, site redesign3import { Link } from "react-router";
4
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look5import { type Provider, PROVIDERS } from "@g1t/contracts";
API and MCP server, Rust identity service, registration, site redesign6
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look7import { AgentSetup } from "./agent-setup";
8import { DeployArt, HeroArt, Live, PlanArt, QueueArt, TeamArt, WhyArt } from "./art";
Polish: phones, copy boxes, the plan page, the landing page, a real glide9import { ProviderMark } from "./model-providers";
API and MCP server, Rust identity service, registration, site redesign10import { ButtonLink, CopyLine } from "./ui";
11
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look12const DOCS = "https://docs.g1t.sh";
A free allowance on g1t's models, so anyone can try its agents13
A dusk palette and isometric line art, with the landing page rewritten around agents as a team14/** A small label above a heading, in the mono face. */
15function Eyebrow({ children }: { children: ReactNode }) {
Merge branch 'worktree-agent-ad7c6d88d93adc817'16 return <p className="font-mono text-xs tracking-[0.2em] text-accent uppercase">{children}</p>;
A dusk palette and isometric line art, with the landing page rewritten around agents as a team17}
18
19function Tags({ items }: { items: string[] }) {
20 return (
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look21 <ul className="mt-6 flex flex-wrap gap-1.5">
A dusk palette and isometric line art, with the landing page rewritten around agents as a team22 {items.map((item) => (
23 <li
24 key={item}
25 className="rounded-full bg-bg/80 px-2.5 py-1 font-mono text-[0.6875rem] tracking-wide text-muted uppercase ring-1 ring-line"
26 >
27 {item}
28 </li>
29 ))}
30 </ul>
31 );
32}
33
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look34/** A link in running copy that leads to the docs or another page. */
35function More({ to, children }: { to: string; children: ReactNode }) {
36 return (
Merge branch 'worktree-agent-ad7c6d88d93adc817'37 <Link to={to} className="group mt-7 inline-flex items-center gap-1.5 text-sm font-medium text-fg hover:text-accent">
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look38 {children}
39 <ArrowRight size={14} className="transition-transform group-hover:translate-x-0.5" />
40 </Link>
41 );
42}
43
44/** A drawing in its own card, on the page's dark gray. */
45function ArtFrame({ children }: { children: ReactNode }) {
46 return (
47 <Live className="relative overflow-hidden rounded-3xl bg-surface/60 px-4 py-6 ring-1 ring-line sm:px-8">
48 <div
49 aria-hidden="true"
50 className="pointer-events-none absolute inset-x-0 -bottom-24 h-48 bg-[radial-gradient(50%_60%_at_50%_100%,rgb(182_168_255/0.08),transparent)]"
51 />
52 <div className="relative mx-auto max-w-lg">{children}</div>
53 </Live>
54 );
55}
56
57/**
58 * One of the product's pillars: what it does, the features that prove it,
59 * and a drawing of the idea, on alternating sides.
60 */
61function Pillar({
62 eyebrow,
API and MCP server, Rust identity service, registration, site redesign63 title,
A dusk palette and isometric line art, with the landing page rewritten around agents as a team64 art,
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look65 points,
66 more,
67 flip,
API and MCP server, Rust identity service, registration, site redesign68 children,
69}: {
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look70 eyebrow: string;
API and MCP server, Rust identity service, registration, site redesign71 title: string;
A dusk palette and isometric line art, with the landing page rewritten around agents as a team72 art: ReactNode;
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look73 points: string[];
74 more: [string, string];
75 flip?: boolean;
API and MCP server, Rust identity service, registration, site redesign76 children: ReactNode;
77}) {
78 return (
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look79 <article className="grid items-center gap-10 py-14 lg:grid-cols-2 lg:gap-16">
80 <div className={flip ? "lg:order-2" : undefined}>
81 <Eyebrow>{eyebrow}</Eyebrow>
82 <h3 className="mt-3 text-2xl font-semibold tracking-tight text-balance sm:text-3xl">{title}</h3>
83 <p className="mt-4 max-w-xl leading-7 text-muted">{children}</p>
84 <ul className="mt-6 grid gap-2.5 text-sm sm:grid-cols-2">
85 {points.map((point) => (
86 <li key={point} className="flex gap-2.5 text-fg-soft">
Merge branch 'worktree-agent-ad7c6d88d93adc817'87 <Check size={15} className="mt-0.5 shrink-0 text-accent" />
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look88 <span>{point}</span>
89 </li>
90 ))}
91 </ul>
92 <More to={more[1]}>{more[0]}</More>
API and MCP server, Rust identity service, registration, site redesign93 </div>
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look94 <div className={flip ? "lg:order-1" : undefined}>
95 <ArtFrame>{art}</ArtFrame>
96 </div>
API and MCP server, Rust identity service, registration, site redesign97 </article>
98 );
99}
100
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look101/** Facts under the opening, each one true today. */
102const FACTS: [string, string][] = [
103 ["$0", "for the forge: repositories, issues, pull requests and review. No card."],
104 ["+20%", "on what compute costs g1t. That is the whole markup, and there is no seat price."],
Git storage hardened, pages in tens of milliseconds, honest security alerts, and costs reconciled daily105 ["MCP", "connects Claude Code, Codex, OpenCode or Cursor to your workspace: one command or one config file."],
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look106 ["MIT", "licensed. g1t's own source lives on g1t and lands through its own queue."],
107];
108
A dusk palette and isometric line art, with the landing page rewritten around agents as a team109const FLOW: [string, string][] = [
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look110 ["Brief", "Write the outcome you want, in plain words, or open an issue as you always would."],
Fast pages, required checks on the branch, self-hosted runners, honest incidents111 ["Plan", "A planner agent splits it into issues, each saying what done looks like, and the order they depend on."],
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look112 ["Agents", "Each issue gets an agent as it unblocks. They know what the others are changing, and tell each other."],
A dusk palette and isometric line art, with the landing page rewritten around agents as a team113 ["Review", "Checks run in clean sandboxes; a second agent reviews; you ask for changes and the agent makes them."],
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look114 ["Main", "The queue tests every change with what lands before it. Main moves only to what passed, and production follows."],
A dusk palette and isometric line art, with the landing page rewritten around agents as a team115];
116
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look117/** The forge itself, for the people on the team. */
118const FORGE = [
119 "Git over HTTPS",
120 "Public and private repositories",
A dusk palette and isometric line art, with the landing page rewritten around agents as a team121 "Issues and labels",
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look122 "Pull requests and forks",
A dusk palette and isometric line art, with the landing page rewritten around agents as a team123 "Line comments and reviews",
124 "Protected branches",
125 "Required approvals",
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look126 "Workspaces and roles",
127 "Profiles",
128 "Search and Explore",
129 "Webhooks",
130 "Import from any git host",
131 "REST API and OpenAPI",
A dusk palette and isometric line art, with the landing page rewritten around agents as a team132 "MCP server",
133 "OAuth sign-in",
134];
135
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look136const SECURE: { icon: ReactNode; title: string; about: string; to: string }[] = [
137 {
138 icon: <ShieldCheck size={18} />,
139 title: "Push protection",
140 about: "A push that adds a key or a token is refused before it lands, and the history is scanned for ones already there.",
141 to: `${DOCS}/guides/security/`,
142 },
143 {
144 icon: <PackageCheck size={18} />,
145 title: "Dependency upkeep",
Git storage hardened, pages in tens of milliseconds, honest security alerts, and costs reconciled daily146 about: "Each vulnerable dependency that has a fixed version becomes an upgrade issue, and an agent lands the upgrade through the same checks as any change.",
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look147 to: `${DOCS}/guides/security/#dependency-upkeep`,
148 },
149 {
150 icon: <KeyRound size={18} />,
151 title: "Guardrails and credentials",
152 about: "What an agent may reach, run and spend is enforced outside its sandbox. Each run gets its own credential; your model keys never reach it.",
153 to: `${DOCS}/guides/guardrails/`,
154 },
155 {
156 icon: <ScrollText size={18} />,
157 title: "Audit log on every workspace",
Audit logs are kept by plan: a week on free, 90 days on the plan, and what staff set for an account in sudo158 about: "Every action by people, tokens and agents, with whether it was allowed and the rule that decided. Kept 90 days on the plan and 7 free, with export.",
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look159 to: `${DOCS}/guides/audit-log/`,
160 },
API and MCP server, Rust identity service, registration, site redesign161];
162
Polish: phones, copy boxes, the plan page, the landing page, a real glide163/** The systems g1t connects to, shown on the landing page. */
164const STACK: Provider[] = [
165 "anthropic",
166 "openai",
167 "gemini",
168 "xai",
169 "mistral",
170 "deepseek",
171 "azure_openai",
172 "openrouter",
173 "groq",
174 "sentry",
175 "jira",
176 "linear",
177];
178
179/** What happens to a production error once Sentry is connected. */
180const LOOP = [
181 "Sentry: TypeError in checkout",
182 "g1t opens an issue, with the stack trace",
183 "An agent fixes it; another reviews it",
184 "The merge queue lands it on main",
185 "Sentry marks the error resolved",
186];
187
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look188const PRICES: { name: string; price: string; unit?: string; about: string }[] = [
189 {
190 name: "The forge",
191 price: "$0",
192 about: "Public and private repositories, git, issues, pull requests, reviews, search and the audit log. No card.",
193 },
194 {
195 name: "The g1t plan",
196 price: "$20",
197 unit: "a month per workspace",
198 about: "$10 of usage included. Unlimited members. Agents, checks, the merge queue and deployments.",
199 },
200 {
201 name: "Usage",
202 price: "Cost + 20%",
203 about: "Past what is included, everything is priced at what it costs g1t plus 20%, under a spend limit you set.",
204 },
205];
206
207const PLATFORM = ["Workers", "Artifacts", "Containers", "D1", "Queues", "Durable Objects", "AI Gateway", "Rust"];
API and MCP server, Rust identity service, registration, site redesign208
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look209/**
210 * The signed-out home page: what g1t is, what it does, and how to start.
211 * It lists no one's repositories; those are a click away under Explore.
212 */
213export function Landing() {
API and MCP server, Rust identity service, registration, site redesign214 return (
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look215 <main className="overflow-x-clip">
216 {/* The opening. */}
217 <section className="dusk relative">
API and MCP server, Rust identity service, registration, site redesign218 <div
219 aria-hidden="true"
A dusk palette and isometric line art, with the landing page rewritten around agents as a team220 className="dusk-planet pointer-events-none absolute -top-[30rem] left-1/2 size-[60rem] -translate-x-[10%] rounded-full"
API and MCP server, Rust identity service, registration, site redesign221 />
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look222 <div className="relative mx-auto max-w-6xl px-4 pt-20 text-center sm:pt-24">
API and MCP server, Rust identity service, registration, site redesign223 <Link
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look224 to={`${DOCS}/concepts/overview/`}
A dusk palette and isometric line art, with the landing page rewritten around agents as a team225 className="inline-flex animate-fade-up items-center gap-2 rounded-full bg-bg/50 px-3 py-1 text-xs text-fg-soft ring-1 ring-white/10 backdrop-blur transition-colors hover:bg-bg/70"
API and MCP server, Rust identity service, registration, site redesign226 >
Merge branch 'worktree-agent-ad7c6d88d93adc817'227 <span className="size-1.5 rounded-full bg-accent" />
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look228 Open source · built on Cloudflare
API and MCP server, Rust identity service, registration, site redesign229 <ArrowRight size={12} />
230 </Link>
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look231 <h1 className="mx-auto mt-7 max-w-4xl animate-fade-up text-[2.75rem] leading-[1.04] font-semibold tracking-tight text-balance sm:text-7xl">
232 Where people and agents{" "}
Merge branch 'worktree-agent-ad7c6d88d93adc817'233 <span className="bg-gradient-to-r from-fg via-[#d9d1ff] to-accent bg-clip-text text-transparent">
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look234 ship software together.
A dusk palette and isometric line art, with the landing page rewritten around agents as a team235 </span>
API and MCP server, Rust identity service, registration, site redesign236 </h1>
A dusk palette and isometric line art, with the landing page rewritten around agents as a team237 <p className="mx-auto mt-7 max-w-2xl animate-fade-up text-lg leading-8 text-fg-soft/80 text-balance">
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look238 g1t is the git platform for the whole job. Plan in issues, assign work to agents like
239 teammates, land it through checks that hold, and deploy every change to the edge. Open
240 source, and priced at what it costs.
API and MCP server, Rust identity service, registration, site redesign241 </p>
A dusk palette and isometric line art, with the landing page rewritten around agents as a team242 <div className="mt-9 flex animate-fade-up flex-wrap items-center justify-center gap-3">
243 <ButtonLink to="/register" variant="primary" large>
Sign-up buttons say Sign up everywhere; only the sign-up page says registration takes an invite244 Start for free
API and MCP server, Rust identity service, registration, site redesign245 <ArrowRight size={15} />
246 </ButtonLink>
Sign-up buttons say Sign up everywhere; only the sign-up page says registration takes an invite247 <ButtonLink to="#how" variant="quiet" large>
248 See how it works
249 </ButtonLink>
API and MCP server, Rust identity service, registration, site redesign250 </div>
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look251 <p className="mx-auto mt-5 max-w-xl animate-fade-up text-sm text-fg-soft/60 text-balance">
Sign-up buttons say Sign up everywhere; only the sign-up page says registration takes an invite252 The forge is free, with no card. Agents and checks start with a trial after a card check;
253 deployments come with the g1t plan.
Team plan, an open-source pool, monthly trials and honest metering; the sidebar for everyone; a workspace that stays put254 </p>
API and MCP server, Rust identity service, registration, site redesign255 </div>
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look256 <Live className="relative mx-auto max-w-6xl px-2 pt-6 pb-2 sm:px-4">
257 <HeroArt className="w-full" />
258 </Live>
259 <div aria-hidden="true" className="h-16 bg-gradient-to-b from-transparent to-bg" />
260 </section>
261
Fixes from the page sweep262 {/* Facts, each one true today. Above the hero's fade, with a border of
263 its own: a ring is a shadow, and the fade drew over its top edge. */}
264 <section className="relative z-10 mx-auto max-w-6xl px-4">
265 <dl className="grid gap-px overflow-hidden rounded-2xl border border-line bg-line sm:grid-cols-2 lg:grid-cols-4">
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look266 {FACTS.map(([figure, about]) => (
267 <div key={figure} className="bg-bg px-6 py-6">
268 <dt className="font-mono text-2xl font-medium tracking-tight text-fg">{figure}</dt>
269 <dd className="mt-2 text-sm leading-6 text-muted">{about}</dd>
270 </div>
271 ))}
272 </dl>
273 </section>
274
275 {/* The pillars. */}
276 <section className="mx-auto max-w-6xl px-4 pt-24">
277 <div className="max-w-3xl">
278 <Eyebrow>One place, idea to production</Eyebrow>
279 <h2 className="mt-3 text-3xl font-semibold tracking-tight text-balance sm:text-5xl">
280 Everything between an idea and the people using it.
281 </h2>
282 <p className="mt-5 max-w-2xl text-lg leading-8 text-muted">
283 Agents are members of the forge, not a tool beside it. They take issues, review, answer
284 each other and fix what fails, under the same rules, records and review as everyone
285 else.
286 </p>
A dusk palette and isometric line art, with the landing page rewritten around agents as a team287 </div>
API and MCP server, Rust identity service, registration, site redesign288
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look289 <div className="mt-6 divide-y divide-line">
290 <Pillar
291 eyebrow="Agents as teammates"
292 title="Assign an agent like anyone on the team"
293 art={<TeamArt className="w-full" />}
294 points={[
g1t is one name: its agent's work, commits and comments show as @g1t, and nobody can claim g1t or g1t-agent295 "Assign an issue, or @mention g1t anywhere",
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look296 "Told what the others are changing while they work",
297 "Agents ask each other, and ask you, through the forge",
298 "Steer a run while it works, or stop it",
299 "Memory per project and per workspace",
300 "Your own agent over MCP, its session on the pull request",
301 ]}
g1t is one name: its agent's work, commits and comments show as @g1t, and nobody can claim g1t or g1t-agent302 more={["How g1t works on issues", `${DOCS}/guides/working-with-g1t/`]}
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look303 >
304 Every agent works in its own sandbox and its own fork. It sees what is in flight, files
305 what it finds instead of widening its change, comments on the work of others, and
306 defers to people.
307 </Pillar>
308
309 <Pillar
310 flip
311 eyebrow="Outcomes"
312 title="Hand off an outcome, not just a task"
313 art={<PlanArt className="w-full" />}
314 points={[
315 "A brief planned into issues with dependencies",
Fast pages, required checks on the branch, self-hosted runners, honest incidents316 "Your workflows' required checks on every change",
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look317 "Work starts as each dependency lands",
318 "The plan as a live graph, with its cost",
319 ]}
320 more={["Hand off an outcome", `${DOCS}/guides/outcomes/`]}
321 >
Fast pages, required checks on the branch, self-hosted runners, honest incidents322 Write what should be true. A planner turns it into issues, each saying what done looks
323 like, and the order they depend on. Agents take each issue as it unblocks, and you
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look324 watch the whole outcome converge.
325 </Pillar>
326
327 <Pillar
328 eyebrow="Ship safely"
329 title="Main only moves to what passed"
330 art={<QueueArt className="w-full" />}
331 points={[
332 "Checks run by g1t in a clean sandbox",
Git storage hardened, pages in tens of milliseconds, honest security alerts, and costs reconciled daily333 "Workflows in GitHub Actions syntax",
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look334 "A merge queue that tests changes together",
335 "Conflicts found on every push, before a merge",
336 "Catch up with main in seconds",
337 "Reviews by people and by agents",
338 ]}
339 more={["The merge queue", `${DOCS}/guides/merge-queue/`]}
340 >
341 Checks are run by g1t, never by the agent being checked. The queue tests each change
342 together with what lands ahead of it; one that breaks goes back to its author with what
343 failed, and main never sees it.
344 </Pillar>
345
346 <Pillar
347 flip
348 eyebrow="Context"
349 title="Every line knows why it is there"
350 art={<WhyArt className="w-full" />}
351 points={[
352 "Sessions recorded onto pull requests",
353 "Why-blame on any line",
354 "A context hub agents search before they start",
355 "Search across code, issues and people",
356 ]}
357 more={["Sessions and why-blame", `${DOCS}/guides/why-blame/`]}
358 >
359 Pick any line. g1t shows the commit that changed it, the pull request and issue it came
360 from, and the agent&apos;s own session: what it read, ran and decided. The reasoning stays
361 with the code, for people and for the next agent.
362 </Pillar>
363
364 <Pillar
365 eyebrow="Run it"
366 title="Every change, live on the edge"
367 art={<DeployArt className="w-full" />}
368 points={[
369 "A live preview for every pull request",
370 "Production on every merge to main",
371 "Custom domains, with certificates",
372 "Projects that depend on each other",
373 ]}
374 more={["Deployments", `${DOCS}/guides/deployments/`]}
375 >
376 Turn on deployments and every pull request gets its own address on g1t.page; merging
377 ships production. Reviewers, and the agents reviewing for you, click through a change
378 instead of reading a diff. An app nobody visits runs nothing and costs nothing.
379 </Pillar>
A dusk palette and isometric line art, with the landing page rewritten around agents as a team380 </div>
381 </section>
382
383 {/* How it flows */}
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look384 <section id="how" className="scroll-mt-20 border-y border-line bg-surface/40">
A dusk palette and isometric line art, with the landing page rewritten around agents as a team385 <div className="mx-auto max-w-6xl px-4 py-24">
386 <Eyebrow>How it flows</Eyebrow>
387 <h2 className="mt-3 text-3xl font-semibold tracking-tight">From a sentence to main</h2>
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look388 <Live>
389 <ol className="relative mt-12 grid gap-6 md:grid-cols-5">
390 {/* From the first step's dot to the last one's, and no further: five
391 columns with 1.5rem gaps put the last dot 1rem into the last
392 column, so the line stops one column, less that, from the end. */}
393 <span
394 aria-hidden="true"
Merge branch 'worktree-agent-ad7c6d88d93adc817'395 className="absolute top-4 right-[calc((100%-6rem)/5-1rem)] left-4 hidden h-px bg-gradient-to-r from-accent/50 via-warn/50 to-success/70 md:block"
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look396 >
397 <span className="flow-runner absolute inset-0">
Merge branch 'worktree-agent-ad7c6d88d93adc817'398 <span className="absolute -top-[3px] -left-[3.5px] size-[7px] rounded-full bg-accent shadow-[0_0_12px_2px_rgb(182_168_255/0.6)]" />
A dusk palette and isometric line art, with the landing page rewritten around agents as a team399 </span>
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look400 </span>
401 {FLOW.map(([step, about], index) => (
402 <li key={step} className="relative">
403 <span
404 className={`flow-step relative flex size-8 items-center justify-center rounded-full font-mono text-xs ring-1 ${
Merge branch 'worktree-agent-ad7c6d88d93adc817'405 index === FLOW.length - 1 ? "bg-success text-bg ring-success" : "bg-bg text-fg-soft ring-line-strong"
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look406 }`}
407 style={{ "--delay": `${index * 2}s` } as CSSProperties}
408 >
409 {index + 1}
410 </span>
411 <h3 className="mt-4 font-semibold">{step}</h3>
412 <p className="mt-1.5 text-sm leading-6 text-muted">{about}</p>
413 </li>
414 ))}
415 </ol>
416 </Live>
API and MCP server, Rust identity service, registration, site redesign417 </div>
418 </section>
419
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look420 {/* The forge, for people. */}
421 <section className="mx-auto max-w-6xl px-4 py-24">
422 <div className="grid gap-10 lg:grid-cols-[1fr_1.2fr] lg:gap-16">
423 <div>
424 <Eyebrow>Collaborate</Eyebrow>
425 <h2 className="mt-3 text-3xl font-semibold tracking-tight text-balance">
426 A complete forge for the people on your team
427 </h2>
428 <p className="mt-4 max-w-md leading-7 text-muted">
429 Issues, branches, pull requests and reviews, the way your team already works, with
430 agents as members alongside you. Work by hand, hand work off, or both on the same
431 issue.
432 </p>
433 <More to={`${DOCS}/concepts/overview/`}>How g1t works</More>
434 </div>
435 <div className="rounded-3xl bg-surface p-7 ring-1 ring-line">
436 <p className="text-sm font-medium">Included in every workspace</p>
437 <Tags items={FORGE} />
API and MCP server, Rust identity service, registration, site redesign438 </div>
439 </div>
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look440 </section>
441
442 {/* Secure by default */}
443 <section className="mx-auto max-w-6xl px-4 pb-24">
444 <Eyebrow>Secure by default</Eyebrow>
445 <h2 className="mt-3 max-w-2xl text-3xl font-semibold tracking-tight text-balance">
446 Safe to hand the work to, and healthy without anyone watching
447 </h2>
448 <div className="mt-10 grid gap-4 sm:grid-cols-2 lg:grid-cols-4">
449 {SECURE.map((item) => (
450 <Link
451 key={item.title}
452 to={item.to}
453 className="group rounded-2xl bg-surface p-6 ring-1 ring-line transition-colors hover:ring-line-strong"
454 >
Merge branch 'worktree-agent-ad7c6d88d93adc817'455 <span className="flex size-9 items-center justify-center rounded-lg bg-bg text-accent ring-1 ring-line">{item.icon}</span>
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look456 <h3 className="mt-5 font-semibold">{item.title}</h3>
457 <p className="mt-2 text-sm leading-6 text-muted">{item.about}</p>
458 </Link>
459 ))}
A dusk palette and isometric line art, with the landing page rewritten around agents as a team460 </div>
API and MCP server, Rust identity service, registration, site redesign461 </section>
462
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look463 {/* Connect */}
464 <section className="border-y border-line bg-surface/40">
465 <div className="mx-auto grid max-w-6xl items-center gap-12 px-4 py-24 lg:grid-cols-2">
466 <div>
467 <Eyebrow>Bring your own agent</Eyebrow>
468 <h2 className="mt-3 text-3xl font-semibold tracking-tight text-balance">
Git storage hardened, pages in tens of milliseconds, honest security alerts, and costs reconciled daily469 Any agent that speaks MCP joins the team
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look470 </h2>
471 <p className="mt-4 max-w-md leading-7 text-muted">
472 Add g1t to Claude Code, Codex, OpenCode or Cursor and it can read the plan, take an
473 issue, open a pull request with a fork to push to, and see what the others are doing.
474 Install the hook in Claude Code and its session is recorded onto the pull request as
475 it works. g1t&apos;s own agents use the same tools.
476 </p>
477 <p className="mt-4 max-w-md leading-7 text-muted">
478 Every action is a REST route and an MCP tool, with an OpenAPI document and signed
479 webhooks for every event.
480 </p>
481 <div className="mt-6 flex flex-wrap gap-3">
482 <ButtonLink to={`${DOCS}/guides/bring-your-own-agent/`} variant="quiet">
483 Connect an agent
484 <ArrowRight size={14} />
485 </ButtonLink>
486 <ButtonLink to={`${DOCS}/reference/api/`} variant="quiet">
487 API reference
488 </ButtonLink>
489 </div>
490 </div>
491 <div className="space-y-3">
492 <AgentSetup />
493 <CopyLine prompt text="curl -fsSL https://g1t.sh/install/claude.sh | sh" />
494 <CopyLine prompt text="git clone https://g1t.sh/flagon-io/g1t.git" />
495 <CopyLine prompt text="curl https://api.g1t.sh/repos/flagon-io/g1t/queue" />
496 </div>
497 </div>
498 </section>
499
Polish: phones, copy boxes, the plan page, the landing page, a real glide500 {/* Your stack */}
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look501 <section className="mx-auto grid max-w-6xl items-center gap-12 px-4 py-24 lg:grid-cols-2">
Polish: phones, copy boxes, the plan page, the landing page, a real glide502 <div className="lg:order-2">
503 <Eyebrow>Your stack</Eyebrow>
504 <h2 className="mt-3 text-3xl font-semibold tracking-tight text-balance">
505 Your models. Your alerts. Your tickets.
506 </h2>
507 <p className="mt-4 max-w-md leading-7 text-muted">
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look508 Run g1t&apos;s agents on g1t&apos;s models, or on your own accounts with any of the labs and
509 platforms, and choose which model does which work. Keys stay with g1t: an agent&apos;s
Polish: phones, copy boxes, the plan page, the landing page, a real glide510 sandbox only ever holds a token for its own run.
511 </p>
512 <p className="mt-4 max-w-md leading-7 text-muted">
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look513 Connect Sentry and a new error becomes an issue, an agent fixes it, and Sentry hears it
514 was resolved. Mention TECH-1234 and the agent reads the Jira ticket.
Polish: phones, copy boxes, the plan page, the landing page, a real glide515 </p>
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look516 <More to={`${DOCS}/guides/integrations/`}>See the integrations</More>
Polish: phones, copy boxes, the plan page, the landing page, a real glide517 </div>
518 <div className="space-y-6 lg:order-1">
519 <div className="grid grid-cols-3 gap-2 sm:grid-cols-4">
520 {STACK.map((provider) => (
Merge branch 'worktree-agent-ae1299e92e4462012'521 <div key={provider} className="flex flex-col items-center gap-2 rounded-xl bg-surface px-2 py-3 ring-1 ring-line">
Polish: phones, copy boxes, the plan page, the landing page, a real glide522 <ProviderMark provider={provider} size={30} />
523 <span className="w-full text-center text-xs leading-tight text-muted">{PROVIDERS[provider].label}</span>
524 </div>
525 ))}
526 </div>
527 <ol className="space-y-2 font-mono text-[0.8125rem]">
528 {LOOP.map((step, index) => (
529 <li key={step} className="flex items-center gap-3 text-fg-soft">
530 <span className="flex size-6 shrink-0 items-center justify-center rounded-full bg-surface text-xs text-faint ring-1 ring-line">
531 {index + 1}
532 </span>
533 {step}
534 </li>
535 ))}
536 </ol>
537 </div>
538 </section>
539
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look540 {/* Pricing, in one band. */}
A dusk palette and isometric line art, with the landing page rewritten around agents as a team541 <section className="mx-auto max-w-6xl px-4 pb-24">
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look542 <div className="flex flex-wrap items-end justify-between gap-6">
543 <div>
544 <Eyebrow>Pricing</Eyebrow>
545 <h2 className="mt-3 max-w-2xl text-3xl font-semibold tracking-tight text-balance">
546 What it costs to run, plus 20%. Never per seat.
547 </h2>
API and MCP server, Rust identity service, registration, site redesign548 </div>
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look549 <More to="/pricing">See every price</More>
550 </div>
551 <div className="mt-10 grid gap-px overflow-hidden rounded-3xl bg-line ring-1 ring-line md:grid-cols-3">
552 {PRICES.map((item) => (
553 <div key={item.name} className="bg-surface p-7">
554 <p className="text-sm text-muted">{item.name}</p>
555 <p className="mt-3 flex flex-wrap items-baseline gap-x-2">
556 <span className="text-3xl font-semibold tracking-tight">{item.price}</span>
557 {item.unit && <span className="text-sm text-muted">{item.unit}</span>}
558 </p>
559 <p className="mt-3 text-sm leading-6 text-muted">{item.about}</p>
API and MCP server, Rust identity service, registration, site redesign560 </div>
561 ))}
562 </div>
563 </section>
564
A dusk palette and isometric line art, with the landing page rewritten around agents as a team565 {/* Open source */}
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look566 <section className="mx-auto max-w-6xl px-4 pb-24">
567 <div className="grid gap-10 rounded-3xl bg-surface p-8 ring-1 ring-line sm:p-10 lg:grid-cols-[1.3fr_1fr]">
568 <div>
569 <Eyebrow>Open source</Eyebrow>
570 <h2 className="mt-3 text-3xl font-semibold tracking-tight text-balance">Open, and built on itself</h2>
571 <p className="mt-4 max-w-xl leading-7 text-muted">
572 g1t is MIT licensed. Its own source lives on g1t, and its changes land through its own
573 merge queue. Your code is plain git: leaving is a <code className="font-mono text-fg-soft">git clone</code>.
574 </p>
575 <p className="mt-4 max-w-xl leading-7 text-muted">
576 You can run the core forge yourself with Docker Compose today: accounts, repositories,
577 issues, pull requests and search. It is an early version, and agents, deployments and
578 context search still run only on g1t.sh.
579 </p>
580 <div className="mt-7 flex flex-wrap gap-3">
581 <ButtonLink to="/flagon-io/g1t" variant="quiet">
582 Browse the source
583 </ButtonLink>
584 <ButtonLink to={`${DOCS}/guides/self-hosting/`} variant="quiet">
585 Run g1t yourself
586 </ButtonLink>
587 </div>
588 </div>
589 <div className="flex flex-col justify-between gap-6">
590 <div>
591 <p className="text-sm font-medium">Built on Cloudflare</p>
592 <ul className="mt-4 flex flex-wrap gap-2">
593 {PLATFORM.map((name) => (
594 <li key={name} className="rounded-full bg-bg/60 px-3 py-1 font-mono text-xs text-fg-soft ring-1 ring-line">
595 {name}
596 </li>
597 ))}
598 </ul>
599 </div>
600 <p className="text-sm leading-6 text-muted">
601 g1t is made by Flagon, Inc., a small, independent software company.
602 </p>
603 </div>
604 </div>
605 </section>
606
607 {/* The close. */}
API and MCP server, Rust identity service, registration, site redesign608 <section className="mx-auto max-w-6xl px-4 pb-8">
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look609 <div className="dusk relative overflow-hidden rounded-3xl px-6 py-16 text-center ring-1 ring-line">
610 <h2 className="mx-auto max-w-2xl text-3xl font-semibold tracking-tight text-balance sm:text-4xl">
611 Bring your team. Bring your agents.
612 </h2>
613 <p className="mx-auto mt-4 max-w-xl text-fg-soft/80 text-balance">
614 Create a workspace in a minute and push your first repository. The forge is free; start
615 the plan when you want agents and deployments.
API and MCP server, Rust identity service, registration, site redesign616 </p>
617 <div className="mt-8 flex flex-wrap justify-center gap-3">
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look618 <ButtonLink to="/register" variant="primary" large>
Sign-up buttons say Sign up everywhere; only the sign-up page says registration takes an invite619 Create your workspace
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look620 <ArrowRight size={15} />
API and MCP server, Rust identity service, registration, site redesign621 </ButtonLink>
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look622 <ButtonLink to={`${DOCS}/quickstart/`} variant="quiet" large>
623 Read the quickstart
API and MCP server, Rust identity service, registration, site redesign624 </ButtonLink>
625 </div>
626 </div>
627 </section>
628 </main>
629 );
630}

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