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

Share the editor settings and Claude Code deploy permissions1import { type RouteConfig, index, route } from "@react-router/dev/routes";
2
3export default [
4 index("routes/home.tsx"),
5 route("login", "routes/login.tsx"),
Merge main (membership, two-factor, GitHub repo roles) into tokens6 // The second step of signing in, for an account with two-factor authentication.
7 route("login/two-factor", "routes/login-two-factor.tsx"),
Share the editor settings and Claude Code deploy permissions8 route("register", "routes/register.tsx"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look9 // An invite link: who sent it, then sign-up or joining. `invite` is reserved.
10 route("invite/:code", "routes/invite.tsx"),
Share the editor settings and Claude Code deploy permissions11 route("logout", "routes/logout.tsx"),
12 route("verify", "routes/verify.tsx"),
Merge email confirmation gate: a code and a link, nothing until confirmed (identity 0036)13 // Where an account confirms its email address, with the code from the
14 // email; every other page sends it here until it has (lib/confirm-gate.ts).
15 route("confirm-email", "routes/confirm-email.tsx"),
Share the editor settings and Claude Code deploy permissions16 route("forgot", "routes/forgot.tsx"),
17 route("reset", "routes/reset.tsx"),
18 route("device", "routes/device.tsx"),
19 route("oauth/authorize", "routes/oauth-authorize.tsx"),
20 route("new", "routes/new.tsx"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look21 // GitHub: signing in with it, and bringing repositories across through
22 // g1t's GitHub App. `auth` and `integrations` are reserved names.
23 route("new/github", "routes/new-github.tsx"),
24 route("auth/github", "routes/auth-github.ts"),
25 route("auth/github/callback", "routes/auth-github-callback.tsx"),
26 route("auth/github/username", "routes/auth-github-username.tsx"),
27 route("integrations/github/install", "routes/github-install.ts"),
28 route("integrations/github/setup", "routes/github-setup.tsx"),
status.g1t.sh with incident management, invites that land you in the workspace, settings as pages, usage without quotas29 // Your own settings: one page each, so links can name the one they mean.
30 // `/settings` goes to the first; an old link's `#anchor` to its page.
31 route("settings", "routes/settings/layout.tsx", [
32 index("routes/settings/index.tsx"),
33 route("profile", "routes/settings/profile.tsx"),
34 route("emails", "routes/settings/emails.tsx"),
Inbox on the site: reasons, a reason filter, Subscribe, Watch and settings35 route("notifications", "routes/settings/notifications.tsx"),
status.g1t.sh with incident management, invites that land you in the workspace, settings as pages, usage without quotas36 route("invites", "routes/settings/invites.tsx"),
37 route("keys", "routes/settings/keys.tsx"),
One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers38 // Your access tokens: the list, a new one, and each one's page.
status.g1t.sh with incident management, invites that land you in the workspace, settings as pages, usage without quotas39 route("tokens", "routes/settings/tokens.tsx"),
One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers40 route("tokens/new", "routes/settings/token-new.tsx"),
41 route("tokens/:id", "routes/settings/token.tsx"),
status.g1t.sh with incident management, invites that land you in the workspace, settings as pages, usage without quotas42 route("github", "routes/settings/github.tsx"),
43 route("applications", "routes/settings/applications.tsx"),
Integrations are a directory of connectors, for a workspace and for each person44 route("integrations", "routes/settings/integrations.tsx"),
Merge main (membership, two-factor, GitHub repo roles) into tokens45 route("two-factor", "routes/settings/two-factor.tsx"),
status.g1t.sh with incident management, invites that land you in the workspace, settings as pages, usage without quotas46 route("security-log", "routes/settings/security-log.tsx"),
Merge account deletion: soft delete for 30 days, staff restore and purge, ghost for what remains (identity 0037)47 route("account", "routes/settings/account.tsx"),
status.g1t.sh with incident management, invites that land you in the workspace, settings as pages, usage without quotas48 ]),
49 // The account menu's header: name, primary email and invites left.
50 route("settings/menu.json", "routes/settings-menu-json.ts"),
Agents and memory, checks and conflicts, profiles, slug renames, custom domains51 // People, apart from workspaces: `u` is a reserved name.
52 route("u/:username", "routes/user.tsx"),
Merge commit authors and hovercards: commits show their accounts, every name opens a card (repos 0016)53 // The card that opens over a person's name or avatar (lib/hovercard.ts).
54 // `-` is no workspace's name, so nothing else is ever found here.
55 route("-/hovercard/user/:username", "routes/hovercard-user.ts"),
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)56 // Live notifications: each tab's feed socket, and the person's
57 // notification settings as JSON (services/notify).
58 route("-/live", "routes/notify/live.ts"),
Merge branch 'socket-tickets'59 // A page opened with an access token asks here for each socket's
60 // short-lived ticket (lib/socket-ticket.ts).
61 route("-/live/ticket", "routes/notify/ticket.ts"),
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)62 route("-/notify", "routes/notify/api.ts"),
Share the editor settings and Claude Code deploy permissions63 route("explore", "routes/explore.tsx", { id: "explore" }),
Prices keep themselves current with what g1t pays64 route("pricing", "routes/pricing.tsx"),
Search across all of g1t, Explore, and a command palette65 route("search", "routes/search.tsx"),
g1t is described as the product it is in alpha, and its shell takes the new shape: the README, the docs home and docs/PLAN.md label every feature Live, Preview or Coming; a floating dock with the g1t mark, Today, Chat, Notifications, Agents, Code, Artifacts, your pinned apps and the Apps launcher, with People, Workspace and the account menu (now holding help) at its foot; the workspace's logo and switcher heading a flat sidebar that folds away with Ctrl B, or leading the header's breadcrumbs where there is none; the page in a rounded panel with a full-width header; Today as the front page, with first-time acceptance of agents' pull requests, what needs you and what's at stake, spend today and one item to start with, every number from a service; Notifications in place of the Inbox at /notifications; a bottom bar and More sheet on phones; and sign-in, sign-up, two-factor, reset, invites and choosing a workspace on standalone pages with no app around them.66 // Each person's notifications, what the panel in the top bar fetches,
67 // and the address the page once had.
68 route("notifications", "routes/notifications.tsx"),
69 route("inbox", "routes/inbox-moved.ts"),
Inbox: a bell in the top bar opens it beside the page, and /inbox holds it all70 route("inbox.json", "routes/inbox-json.ts"),
Search across all of g1t, Explore, and a command palette71 // What the command palette shows as someone types.
72 route("search.json", "routes/search-json.ts"),
Share the editor settings and Claude Code deploy permissions73 route("workspaces/new", "routes/workspace/new.tsx"),
Merge workspace invitations: nobody joins a workspace without saying yes, people are found by username, your own invites can bring someone in, and nobody is left without a workspace (identity 0040)74 // Workspace invitations waiting for the person's answer. `invitations` is reserved.
75 route("invitations", "routes/invitations.tsx"),
76 // People to invite, as the People page's invite form searches them.
77 route("-/people.json", "routes/people-json.ts"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look78 // Trust pages: reserved names, like the rest above.
79 route("policies", "routes/policies.tsx"),
80 route("policies/:policy", "routes/policy.tsx"),
81 route("security", "routes/security.tsx"),
82 route("support", "routes/support.tsx"),
status.g1t.sh with incident management, invites that land you in the workspace, settings as pages, usage without quotas83 // Status moved to status.g1t.sh (apps/status); old links go there.
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look84 route("status", "routes/status.tsx"),
85 route("status.json", "routes/status-json.ts"),
86 route(".well-known/security.txt", "routes/security-txt.ts"),
Merge site-audit: SEO routes, analytics with consent first in Europe, security page, founder and X account, docs header; the tour opens on the pull request and leads with Code, on the real shell, with Agents and Docs working today87 // For search engines: what may be crawled, and a map of the public pages.
88 route("robots.txt", "routes/robots-txt.ts"),
89 route("sitemap.xml", "routes/sitemap-xml.ts"),
The g1t CLI 0.1.0 is downloadable: g1t.sh/downloads/cli/latest/, five platforms with SHA256SUMS90 // Releases of the self-hosted runner and the g1t CLI, from R2.
91 route("downloads/:tool/*", "routes/downloads-runner.ts"),
Share the editor settings and Claude Code deploy permissions92 // A workspace's own pages sit under `-`, which no repository can be named.
93 route(":owner", "routes/workspace/layout.tsx", [
94 index("routes/workspace/overview.tsx"),
Merge branch 'worktree-agent-ad7c6d88d93adc817'95 // Its pages, each in the sidebar: Overview (above), Projects, People, Insights; Teams and Packages below.
Navigation: the workspace's own page with tabs, pins and recent in the sidebar96 route("-/projects", "routes/workspace/projects.tsx"),
People and teams are front and centre: one directory of people and agents with presence, local time, titles, teams and what each owns; profiles with manager and reports and the agents they work with; an org chart with each team's agents beside the person who leads it; and teams of any mix, with a lead, a channel, a budget agents keep to and the agents on them. Every agent is told its teams each turn (who leads, who owns what, who's around and who to page), and the team page shows exactly what. Member management is Members and invites; the people and teams guide says how.97 // People mode: the directory of people and agents, each one's profile, and the org chart.
Share the editor settings and Claude Code deploy permissions98 route("-/people", "routes/workspace/people.tsx"),
People and teams are front and centre: one directory of people and agents with presence, local time, titles, teams and what each owns; profiles with manager and reports and the agents they work with; an org chart with each team's agents beside the person who leads it; and teams of any mix, with a lead, a channel, a budget agents keep to and the agents on them. Every agent is told its teams each turn (who leads, who owns what, who's around and who to page), and the team page shows exactly what. Member management is Members and invites; the people and teams guide says how.99 route("-/people/agents/:handle", "routes/workspace/people/agent.tsx"),
100 route("-/people/:username", "routes/workspace/people/person.tsx"),
101 route("-/org-chart", "routes/workspace/org-chart.tsx"),
102 // Who is a member, their roles, invitations and outside collaborators.
103 route("-/members", "routes/workspace/members.tsx"),
Navigation: the workspace's own page with tabs, pins and recent in the sidebar104 route("-/insights", "routes/workspace/tab-soon.tsx", { id: "routes/workspace/insights" }),
105 // Pinning its projects, for the person signed in.
106 route("-/pins", "routes/workspace/pins.ts"),
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)107 // Code's Overview: Mission control's code panels, for this workspace.
108 route("-/overview", "routes/workspace/code-overview.tsx"),
109 // The workspace itself, at a glance: members, plan and spend.
110 route("-/workspace", "routes/workspace/workspace-overview.tsx"),
Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar111 // Teams: the list, a new one, and each team's pages.
112 route("-/teams", "routes/workspace/teams.tsx"),
113 route("-/teams/new", "routes/workspace/team-new.tsx"),
114 route("-/teams/:team", "routes/workspace/team/layout.tsx", [
115 index("routes/workspace/team/members.tsx"),
116 route("teams", "routes/workspace/team/teams.tsx"),
117 route("repositories", "routes/workspace/team/repositories.tsx"),
118 route("settings", "routes/workspace/team/settings.tsx"),
119 ]),
One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers120 // The workspace's own access tokens: the list, a new one, and each one's page.
Share the editor settings and Claude Code deploy permissions121 route("-/tokens", "routes/workspace/tokens.tsx"),
One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers122 route("-/tokens/new", "routes/workspace/token-new.tsx"),
123 route("-/tokens/:id", "routes/workspace/token.tsx"),
Settings: fine-grained tokens, workspace token Admin, workspace personal access token rules124 // Its rules for members' personal access tokens, and approving them.
125 route("-/personal-access-tokens", "routes/workspace/personal-access-tokens.tsx"),
The Spend page says what a workspace spent, where it went and the budgets that hold it, in Workspace under Money: spent at price, agents' spend and the spend limit; by day; by agent, person, channel, model, kind of work and product; budgets from the workspace down to each person, agent and task, with what happens at 100%; the costliest tasks, each with a receipt of every session at the provider's price and what was charged; and how it's priced. Everyone sees what agents spent for them, and owners and billing managers the whole workspace; each person can have a monthly budget agents keep to, and the spend pill in the top bar shows your month or the workspace's against its limit. The spend guide says how.126 // Spend, the front of its money: where it went, budgets, receipts; and the top bar's pill.
127 route("-/spend", "routes/workspace/spend.tsx"),
128 route("-/spend/pill", "routes/workspace/spend-pill.ts"),
129 route("-/spend/receipts/:id", "routes/workspace/spend-receipt.tsx"),
Share the editor settings and Claude Code deploy permissions130 route("-/usage", "routes/workspace/usage.tsx"),
Merge the AI Gateway: Anthropic's Messages API on a workspace's tokens131 route("-/gateway", "routes/workspace/gateway.tsx"),
Share the editor settings and Claude Code deploy permissions132 route("-/billing", "routes/workspace/billing.tsx"),
The statement is a month at a time, a line per kind of charge133 route("-/billing/entries", "routes/workspace/statement-entries.ts"),
134 route("-/billing/statement.csv", "routes/workspace/statement-csv.ts"),
Integrations are a directory of connectors, for a workspace and for each person135 // The integrations directory, and the setup page for each kind of
136 // provider connection: models, alerts, trackers (lib/integration-sections).
137 route("-/integrations", "routes/workspace/integrations-directory.tsx"),
138 route("-/integrations/:section", "routes/workspace/integrations.tsx"),
Share the editor settings and Claude Code deploy permissions139 route("-/webhooks", "routes/workspace/webhooks.tsx"),
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)140 // The workspace's own emoji, for chat (components/emoji).
141 route("-/emoji", "routes/workspace/emoji.tsx"),
Share the editor settings and Claude Code deploy permissions142 route("-/secrets", "routes/workspace/secrets.tsx"),
Fast pages, required checks on the branch, self-hosted runners, honest incidents143 route("-/runners", "routes/workspace/runners.tsx"),
Merge branch 'worktree-agent-a3abfcce648e87dca'144 route("-/actions", "routes/workspace/actions-settings.tsx"),
Packages, with a container registry on g1t.sh; workspaces deleted whole and kept 30 days; Members for every member145 route("-/packages", "routes/workspace/packages.tsx"),
146 route("-/packages/:ecosystem/*", "routes/workspace/package.tsx"),
Share the editor settings and Claude Code deploy permissions147 route("-/settings", "routes/workspace/settings.tsx"),
Chat controls, public profiles, shadcn selects, and no Docs tab in a project148 // What members may do in chat: channels, emoji, default channels.
149 route("-/settings/chat", "routes/workspace/chat-settings.tsx"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look150 route("-/repositories", "routes/workspace/repositories.tsx"),
Agents mode: an overview of every agent's work and spend, and each agent's sessions, memory, routines, spend, activity and versions151 // Agents mode: the overview (budget, sessions, roster, spend) first, then
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.152 // each of the workspace's own agents and its sessions.
Agents mode: an overview of every agent's work and spend, and each agent's sessions, memory, routines, spend, activity and versions153 // `new` is no agent's handle.
Chat and workspace agents: channels, DMs and named agents you talk to154 route("-/agents", "routes/workspace/agents/layout.tsx", [
155 index("routes/workspace/agents.tsx"),
156 route("new", "routes/workspace/agents/new.tsx"),
The Marketplace adds what g1t doesn't do and connects what you already use: extensions (Mail, Support, CRM, Recruiting, On-call, and bridges to a helpdesk, CRM or ERP you run, all Soon), starter kits, and integrations connected by the workspace or by each person; agents aren't installed there. Agent templates live in Agents, as starting points you configure, at Agents → Templates, and the Marketplace's old agent addresses lead there. The marketplace and agents guides say how.157 // Templates: starting points for a new agent, each configured once started.
158 route("templates", "routes/workspace/agents/templates.tsx"),
159 route("templates/:template", "routes/workspace/agents/template.tsx"),
Agents → Skills is the workspace's skill library in the open SKILL.md format: write a skill in g1t, import a SKILL.md or zip, link a repository whose .g1t/skills folders publish on every push, or save a finished session as a skill once a person reviews it; attach a skill to an agent, a team or the whole workspace, each attachment pinned to a version. Agents see each skill's name and when to use it, and read the rest with use_skill when a request needs it; a skill never adds a permission, and scripts wait for an agent's own computer. The agent skills guide says how.160 // The skill library: every skill, one skill, the editor and import.
161 route("skills", "routes/workspace/agents/skill-library.tsx"),
162 route("skills/new", "routes/workspace/agents/skill-edit.tsx", { id: "routes/workspace/agents/skill-new" }),
163 route("skills/import", "routes/workspace/agents/skill-import.tsx"),
164 route("skills/:name", "routes/workspace/agents/skill.tsx"),
165 route("skills/:name/edit", "routes/workspace/agents/skill-edit.tsx"),
Chat and workspace agents: channels, DMs and named agents you talk to166 route(":handle", "routes/workspace/agents/agent.tsx", [
Agents mode: an overview of every agent's work and spend, and each agent's sessions, memory, routines, spend, activity and versions167 index("routes/workspace/agents/sessions.tsx"),
168 route("sessions/:id", "routes/workspace/agents/session.tsx"),
Every agent starts with g1t's foundational skills, playbooks for documents, research, data, code, communication, and files and media, each using only tools the agent already has and saying plainly what isn't possible yet: agents make PDFs, Word documents, spreadsheets, CSV and Markdown files with make_file, kept with a doc in Artifacts and served from g1tusercontent.com; an agent's Skills tab shows what each skill can do and with which tools, and owners turn a skill off per agent; the agent skills guide says how.169 route("skills", "routes/workspace/agents/skills.tsx"),
Each agent has an Abilities tab: g1t's built-ins, always on within the asker's access; its computer, coming; each connected integration's actions one row each, read, import, comment or resolve, with a level for each, alone, alone when the person asked for it, ask first or never, and whose connection it runs on; and MCP servers an owner adds. Reading is alone, writing inside g1t follows today's choices, anything that leaves g1t asks first, and production deploys can't go above ask. The agents service enforces every level: ask first posts a card to allow or deny and parks a session until it's answered, a refusal names its rule in the transcript and the audit log, and a missing ability posts a request to owners. The agent abilities guide says how.170 route("abilities", "routes/workspace/agents/abilities.tsx"),
Agents mode: an overview of every agent's work and spend, and each agent's sessions, memory, routines, spend, activity and versions171 route("memory", "routes/workspace/agents/memory.tsx"),
172 route("routines", "routes/workspace/agents/routines.tsx"),
Chat and workspace agents: channels, DMs and named agents you talk to173 route("spend", "routes/workspace/agents/spend.tsx"),
174 route("activity", "routes/workspace/agents/activity.tsx"),
Agents mode: an overview of every agent's work and spend, and each agent's sessions, memory, routines, spend, activity and versions175 route("profile", "routes/workspace/agents/profile.tsx"),
Chat and workspace agents: channels, DMs and named agents you talk to176 ]),
177 ]),
178 // Chat mode: channels by name, direct messages by id, and what the page
179 // calls as it runs: the live socket and the JSON for sending and reading.
180 route("-/chat/live", "routes/workspace/chat/live.ts"),
181 route("-/chat/api", "routes/workspace/chat/api.ts"),
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)182 // A person's card in Chat: their profile and teams here.
183 route("-/chat/person/:username", "routes/workspace/chat/person.ts"),
Chat and workspace agents: channels, DMs and named agents you talk to184 route("-/chat", "routes/workspace/chat/layout.tsx", [
185 index("routes/workspace/chat/index.tsx"),
186 route("browse", "routes/workspace/chat/browse.tsx"),
187 route("dm/:id", "routes/workspace/chat/channel.tsx", { id: "routes/workspace/chat/dm" }),
188 route(":channel", "routes/workspace/chat/channel.tsx"),
189 ]),
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.190 // Artifacts mode (code says "folio"): what its
Artifacts is a mode in the rail, the shell and the phone's tab bar in place of Docs: its home lists everything you can open by day or as cards under All, Yours and Shared with you, with search, filters and tiles to start a doc (slides, designs and dashboards say they are coming soon), and its sidebar holds favorites, spaces, Private, Shared, projects' docs and the trash.191 // pages call as they run (an artifact's live socket, JSON, comments,
192 // uploads, export), then Home, making one, templates, the trash, the
193 // spaces, and each artifact by its address. Addresses are flat and end
194 // in the id, so renaming or moving one keeps links working.
195 route("-/artifacts/live", "routes/workspace/folios/live.ts"),
196 route("-/artifacts/api", "routes/workspace/folios/api.ts"),
197 route("-/artifacts/threads/:folio/*", "routes/workspace/folios/threads.ts"),
198 route("-/artifacts/upload", "routes/workspace/folios/upload.ts"),
199 route("-/artifacts/export", "routes/workspace/folios/export.ts"),
200 route("-/artifacts", "routes/workspace/folios/layout.tsx", [
201 index("routes/workspace/folios/home.tsx"),
202 route("new/:kind", "routes/workspace/folios/new.tsx"),
203 route("templates", "routes/workspace/folios/templates.tsx"),
204 route("trash", "routes/workspace/folios/trash.tsx"),
205 // Artifacts possibly out of date, and a project's docs folder, read-only.
206 route("stale", "routes/workspace/folios/stale.tsx"),
207 route("spaces", "routes/workspace/folios/spaces.tsx"),
208 route("spaces/new", "routes/workspace/folios/space-new.tsx"),
209 route("spaces/:space", "routes/workspace/folios/space.tsx"),
210 route("spaces/:space/settings", "routes/workspace/folios/space-settings.tsx"),
211 route("repo/:repoOwner/:repoName/*", "routes/workspace/folios/repo-file.tsx"),
212 route(":folio", "routes/workspace/folios/folio.tsx"),
213 route(":folio/history", "routes/workspace/folios/history.tsx"),
Docs: a workspace knowledge base people and agents write together214 ]),
The front page is Home: where you're needed comes first, however long ago it started, with what's at stake and how long it has waited; then what happened since you were last here, in words, with the agent work that settled, what landed, what deployed, what was decided and what was spent, switchable to the last 24 hours or 7 days; then what's running now. Your last visit is kept with your account, so it's the same on every device; Today's old address leads here. The home guide says how.215 // Home, the workspace's front page (`-/today` leads there), where it
216 // marks your visit, and every app in it you can use, with pinning them
217 // to your dock.
218 route("-/home", "routes/workspace/home.tsx"),
219 route("-/home/seen", "routes/workspace/home-seen.ts"),
220 route("-/today", "routes/workspace/moved.ts", { id: "routes/workspace/moved-today" }),
g1t is described as the product it is in alpha, and its shell takes the new shape: the README, the docs home and docs/PLAN.md label every feature Live, Preview or Coming; a floating dock with the g1t mark, Today, Chat, Notifications, Agents, Code, Artifacts, your pinned apps and the Apps launcher, with People, Workspace and the account menu (now holding help) at its foot; the workspace's logo and switcher heading a flat sidebar that folds away with Ctrl B, or leading the header's breadcrumbs where there is none; the page in a rounded panel with a full-width header; Today as the front page, with first-time acceptance of agents' pull requests, what needs you and what's at stake, spend today and one item to start with, every number from a service; Notifications in place of the Inbox at /notifications; a bottom bar and More sheet on phones; and sign-in, sign-up, two-factor, reset, invites and choosing a workspace on standalone pages with no app around them.221 route("-/apps", "routes/workspace/apps.tsx"),
The Marketplace adds what g1t doesn't do and connects what you already use: extensions (Mail, Support, CRM, Recruiting, On-call, and bridges to a helpdesk, CRM or ERP you run, all Soon), starter kits, and integrations connected by the workspace or by each person; agents aren't installed there. Agent templates live in Agents, as starting points you configure, at Agents → Templates, and the Marketplace's old agent addresses lead there. The marketplace and agents guides say how.222 // The Marketplace: anyone browses it; owners add extensions and
223 // integrations, and everyone else asks (`requests` takes every form it
224 // posts). Agent templates were its Agents tab; they are under Agents now.
The Marketplace is where a workspace finds what to add, reached from Apps: the agent catalog of roles with who already does each job and Add to workspace; every integration with whether it's connected; g1t's own extensions, listed as Soon; and requests, where members ask and owners add or turn down, each told by a notification. Underneath, an extension is a manifest (publisher and tier, source and version from a tag, scopes, the domains its data goes to, its page on g1tusercontent.com, no price) and an install pins its version with an off switch, a budget and the audit log. Apps lists only what was added from the Marketplace, with pins; g1t's own pages stay in their sidebars, and AI Gateway joins Workspace's. The marketplace guide says how.225 route("-/marketplace", "routes/workspace/marketplace/layout.tsx", [
226 index("routes/workspace/marketplace/discover.tsx"),
227 route("extensions", "routes/workspace/marketplace/extensions.tsx"),
228 route("extensions/:extension", "routes/workspace/marketplace/extension.tsx"),
The Marketplace adds what g1t doesn't do and connects what you already use: extensions (Mail, Support, CRM, Recruiting, On-call, and bridges to a helpdesk, CRM or ERP you run, all Soon), starter kits, and integrations connected by the workspace or by each person; agents aren't installed there. Agent templates live in Agents, as starting points you configure, at Agents → Templates, and the Marketplace's old agent addresses lead there. The marketplace and agents guides say how.229 route("integrations", "routes/workspace/marketplace/integrations.tsx"),
Every Marketplace listing says who builds it and whether you can add it: a tier (Official, Verified, Community, Internal) with what it means, and an availability (Available, Connected, Soon, or Not available here with why) that never looks like a button that doesn't work; Extensions and Integrations are grouped and filtered by both, each integration has a page with what it lets agents do today and what's Soon, and the marketplace guide says how.230 route("integrations/:integration", "routes/workspace/marketplace/integration.tsx"),
The Marketplace is where a workspace finds what to add, reached from Apps: the agent catalog of roles with who already does each job and Add to workspace; every integration with whether it's connected; g1t's own extensions, listed as Soon; and requests, where members ask and owners add or turn down, each told by a notification. Underneath, an extension is a manifest (publisher and tier, source and version from a tag, scopes, the domains its data goes to, its page on g1tusercontent.com, no price) and an install pins its version with an off switch, a budget and the audit log. Apps lists only what was added from the Marketplace, with pins; g1t's own pages stay in their sidebars, and AI Gateway joins Workspace's. The marketplace guide says how.231 route("requests", "routes/workspace/marketplace/requests.tsx"),
232 ]),
The Marketplace adds what g1t doesn't do and connects what you already use: extensions (Mail, Support, CRM, Recruiting, On-call, and bridges to a helpdesk, CRM or ERP you run, all Soon), starter kits, and integrations connected by the workspace or by each person; agents aren't installed there. Agent templates live in Agents, as starting points you configure, at Agents → Templates, and the Marketplace's old agent addresses lead there. The marketplace and agents guides say how.233 route("-/marketplace/agents", "routes/workspace/moved.ts", { id: "routes/workspace/moved-marketplace-agents" }),
234 route("-/marketplace/agents/:template", "routes/workspace/moved.ts", { id: "routes/workspace/moved-marketplace-agent" }),
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.235 // What Code's pages say to a member without Code.
Chat and workspace agents: channels, DMs and named agents you talk to236 route("-/code-access", "routes/workspace/code-access.tsx"),
Agents and memory, checks and conflicts, profiles, slug renames, custom domains237 route("-/memory", "routes/workspace/memory.tsx"),
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API238 route("-/context", "routes/workspace/context.tsx"),
239 route("-/security", "routes/workspace/security.tsx"),
Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar240 route("-/security/patterns", "routes/workspace/security-patterns.tsx"),
241 route("-/security/bypass-requests", "routes/workspace/security-bypass.tsx"),
242 route("-/security/settings", "routes/workspace/security-settings.tsx"),
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API243 route("-/audit", "routes/workspace/audit.tsx"),
244 route("-/audit/export", "routes/workspace/audit-export.ts"),
245 route("-/guardrails", "routes/workspace/guardrails.tsx"),
Merge rulesets: branch and tag rules, agent-first, enforced on push and merge246 route("-/rules", "routes/workspace/rules.tsx"),
247 route("-/rules/:id", "routes/workspace/ruleset.tsx"),
A flat project menu with Code first, views as tabs, and Stripe for every owner248 // What the workspace will have across its projects.
249 route("-/soon/:feature", "routes/workspace/soon.tsx"),
Share the editor settings and Claude Code deploy permissions250 ]),
251 // Why a line is the way it is, fetched by the blame view.
252 route(":owner/:repo/why/:hash", "routes/repo/why.ts"),
Agents and memory, checks and conflicts, profiles, slug renames, custom domains253 // A project's agent runs as JSON, and stopping or messaging one.
254 route(":owner/:repo/agents.json", "routes/repo/agents-live.ts"),
Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar255 // Its branch names, for changing the branch a pull request merges into.
256 route(":owner/:repo/branches.json", "routes/repo/branch-names.ts"),
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API257 // What a project's agent runs did, from the audit log, for the Agent panel.
258 route(":owner/:repo/audit.json", "routes/repo/audit-live.ts"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look259 // An invitation to a repository, answered by someone who cannot see it yet.
260 route(":owner/:repo/invitations", "routes/repo/invitations.tsx"),
Merge branch 'main' into worktree-agent-a69aeabc4b0deeb97261 // The Files page's About as JSON, asked again while it is first worked out.
262 route(":owner/:repo/about.json", "routes/repo/about-json.ts"),
263 // Starring it, from the header's Star button.
264 route(":owner/:repo/star", "routes/repo/star.ts"),
Inbox on the site: reasons, a reason filter, Subscribe, Watch and settings265 // Subscribing to its issues and pull requests, and watching it.
266 route(":owner/:repo/notifications", "routes/repo/notifications.ts"),
Fast pages, required checks on the branch, self-hosted runners, honest incidents267 // A starter CI workflow, opened as a pull request (components/add-ci.tsx).
268 route(":owner/:repo/add-ci", "routes/repo/add-ci.ts"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look269 // A screenshot of a project's production, for its overview.
270 route(":owner/:repo/production.jpg", "routes/repo/production-screenshot.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 address271 // A file as it is, sent on to the usercontent origin (lib/usercontent.ts).
272 route(":owner/:repo/raw/:ref/*", "routes/repo/raw.ts"),
Projects: what a workspace builds and runs, first on every page273 // A project: its overview first, its repository's code under Code. The
274 // 1:1 project of a repository has the repository's name, so every
275 // repository address below keeps working.
Share the editor settings and Claude Code deploy permissions276 route(":owner/:repo", "routes/repo/layout.tsx", [
Projects: what a workspace builds and runs, first on every page277 index("routes/repo/overview.tsx"),
278 route("code", "routes/repo/code.tsx"),
Share the editor settings and Claude Code deploy permissions279 route("tree/:ref/*", "routes/repo/tree.tsx"),
280 route("blob/:ref/*", "routes/repo/blob.tsx"),
Download ZIP from the Code button; a slimmer lifecycle panel; agent steps say what was done, not sandbox paths281 route("archive/*", "routes/repo/archive.ts"),
Share the editor settings and Claude Code deploy permissions282 route("commits", "routes/repo/commits.tsx"),
Branches and Tags pages, each file's last commit, and the branch menu on files283 route("branches", "routes/repo/branches.tsx"),
284 route("tags", "routes/repo/tags.tsx"),
Merge branch 'main' into worktree-agent-a69aeabc4b0deeb97285 route("releases", "routes/repo/releases.tsx"),
286 route("releases/new", "routes/repo/release-new.tsx"),
287 route("releases/tag/*", "routes/repo/release.tsx"),
288 route("contributors", "routes/repo/contributors.tsx"),
289 route("activity", "routes/repo/activity.tsx"),
290 route("stargazers", "routes/repo/stargazers.tsx"),
Compare: any two branches, the commits one has that the other does not, and the diff, with Open a pull request291 route("compare/*", "routes/repo/compare.tsx", { id: "routes/repo/compare-range" }),
292 route("compare", "routes/repo/compare.tsx"),
Share the editor settings and Claude Code deploy permissions293 route("commit/:hash", "routes/repo/commit.tsx"),
Merge checks: statuses and check runs on every commit294 // A check run reported on a commit: its report, annotations and buttons.
295 route("checks/:id", "routes/repo/check-run.tsx"),
Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar296 route("labels", "routes/repo/labels.tsx"),
297 route("milestones", "routes/repo/milestones.tsx"),
298 route("milestones/:number", "routes/repo/milestone.tsx"),
Share the editor settings and Claude Code deploy permissions299 route("issues", "routes/repo/issues.tsx"),
300 route("issues/new", "routes/repo/issue-new.tsx"),
301 route("issues/:number", "routes/repo/issue.tsx"),
302 route("pulls", "routes/repo/pulls.tsx"),
303 route("pulls/new", "routes/repo/pull-new.tsx"),
304 route("pull/:number", "routes/repo/pull.tsx"),
305 route("queue", "routes/repo/queue.tsx"),
Agents and memory, checks and conflicts, profiles, slug renames, custom domains306 route("agents", "routes/repo/agents.tsx"),
Usage, Billing settings and prepaid AI credit; fixes from the UX audit307 route("usage", "routes/repo/usage.tsx"),
Agents and memory, checks and conflicts, profiles, slug renames, custom domains308 route("agents/runs/:id", "routes/repo/agents-run.tsx"),
309 route("sessions", "routes/repo/sessions.tsx"),
310 route("sessions/:number", "routes/repo/session.tsx"),
311 route("memory", "routes/repo/memory.tsx"),
Share the editor settings and Claude Code deploy permissions312 route("actions", "routes/repo/actions.tsx"),
313 route("actions/runs/:id", "routes/repo/actions-run.tsx"),
314 route("actions/runs/:id/artifacts/:name", "routes/repo/actions-artifact.ts"),
315 route("actions/jobs/:job/log", "routes/repo/actions-log.ts"),
Merge Actions runs: summaries, attempts and re-runs, graceful cancel, log downloads, badges (actions 0009)316 route("actions/jobs/:job/log.txt", "routes/repo/actions-job-log-download.ts"),
317 route("actions/runs/:id/logs.zip", "routes/repo/actions-logs-download.ts"),
318 route("actions/workflows/:file/badge.svg", "routes/repo/actions-badge.ts"),
Deployments: a preview for every pull request, production on g1t.page319 route("deployments", "routes/repo/deployments.tsx"),
320 route("deployments/:id", "routes/repo/deployment.tsx"),
Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar321 // Security: an overview, then a page for each part. Old links to
322 // `security?tab=…` are sent on by the overview.
323 route("security", "routes/repo/security-overview.tsx"),
324 route("security/secret-scanning", "routes/repo/security-secrets.tsx"),
325 route("security/secret-scanning/patterns", "routes/repo/security-patterns.tsx"),
326 route("security/secret-scanning/:id", "routes/repo/security-secret.tsx"),
327 route("security/code-scanning", "routes/repo/security-code.tsx"),
328 route("security/code-scanning/setup", "routes/repo/security-code-setup.ts"),
329 route("security/code-scanning/:number", "routes/repo/security-code-alert.tsx"),
330 route("security/vulnerabilities", "routes/repo/security.tsx"),
331 route("security/dependency-graph", "routes/repo/security-graph.tsx"),
332 route("security/dependency-graph/sbom.json", "routes/repo/security-sbom.ts"),
333 route("security/dependency-updates", "routes/repo/security-updates.tsx"),
334 route("security/pulls/:number", "routes/repo/security-pull.tsx"),
335 route("security/settings", "routes/repo/security-settings.tsx"),
Share the editor settings and Claude Code deploy permissions336 route("plans", "routes/repo/plans.tsx"),
337 route("plans/:id", "routes/repo/plan.tsx"),
338 route("settings", "routes/repo/settings.tsx"),
Projects: what a workspace builds and runs, first on every page339 route("settings/repository", "routes/repo/settings-repository.tsx"),
Merge branch 'mirroring' into artifacts-mode340 route("settings/mirroring", "routes/repo/settings-mirroring.tsx"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look341 route("settings/access", "routes/repo/settings-access.tsx"),
Merge branch 'worktree-agent-a5a5de74d8863d554' into worktree-agent-a16631325aecf58ca342 route("settings/keys", "routes/repo/settings-deploy-keys.tsx"),
Invite-only launch: sign in with GitHub, repository access and lifecycle, many emails, a new look343 route("settings/branches", "routes/repo/settings-branches.tsx"),
Merge rulesets: branch and tag rules, agent-first, enforced on push and merge344 route("settings/rules", "routes/repo/settings-rules.tsx"),
345 route("settings/rules/:id", "routes/repo/settings-ruleset.tsx"),
Share the editor settings and Claude Code deploy permissions346 route("settings/webhooks", "routes/repo/webhooks.tsx"),
347 route("settings/secrets", "routes/repo/secrets.tsx"),
Merge branch 'worktree-agent-a3abfcce648e87dca'348 route("settings/actions", "routes/repo/settings-actions.tsx"),
349 route("settings/environments", "routes/repo/settings-environments.tsx"),
Fast pages, required checks on the branch, self-hosted runners, honest incidents350 route("settings/runners", "routes/repo/settings-runners.tsx"),
Secrets and variables: one list, rows per environment, for workflows and deployments351 route("settings/deployments", "routes/repo/settings-deployments.tsx"),
Agents and memory, checks and conflicts, profiles, slug renames, custom domains352 route("settings/domains", "routes/repo/settings-domains.tsx"),
Agents get guardrails, run credentials, an audit log, a context hub, repository instructions and mentions; security upkeep; snake_case API353 route("settings/guardrails", "routes/repo/settings-guardrails.tsx"),
354 route("settings/agents", "routes/repo/settings-agents.tsx"),
A menu shaped by how g1t works, Soon pages for every promise, and sudo for sales355 // What the project will have: one page for each Soon in its menu.
356 route("soon/:feature", "routes/repo/soon.tsx"),
Share the editor settings and Claude Code deploy permissions357 ]),
358 // Anything else: a 404 that still knows who is signed in.
359 route("*", "routes/not-found.tsx"),
360] satisfies RouteConfig;

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