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.

1,094 linesCodeBlameRaw
1---
2title: Workspaces
3description: Workspaces, their names and icons, renaming and deleting one, members, owners and the roles that add to a member, inviting people, Workspace mode's settings pages, requiring two-factor authentication, access tokens that belong to a workspace, and Getting started, the setup guide for its owners.
4---
5
6A workspace owns repositories and is the first part of their address:
7`g1t.sh/<workspace>/<repo>`. There is one kind. A workspace for just you and
8one for a company are the same thing with a different number of members, so
9there is no separate notion of an organization.
10
11## Create a workspace
12
13Your account does not own repositories itself: a workspace does, and
14repositories go in it. Every new account gets a workspace of its own, named
15for its username and on the free plan, unless its invite brings it into
16someone else's workspace; see
17[your first workspace](/guides/authentication/#your-first-workspace).
18Signed in without a workspace, g1t shows **Create your workspace or ask to
19join one** in place of Mission control: the invitations waiting for you,
20and the form below.
21
22To create another:
23
241. Open [g1t.sh/workspaces/new](https://g1t.sh/workspaces/new).
252. Choose its name in URLs: lowercase letters, digits and single hyphens.
26 An owner can [change it later](#rename-a-workspace), and old addresses
27 redirect for 90 days.
283. Optionally give it a display name.
29
30From the API, `POST /workspaces` with `slug` and `name`, or the
31`workspace` tool's `create` action:
32
33```sh
34curl -X POST https://api.g1t.sh/workspaces \
35 -H "Authorization: Bearer $G1T_TOKEN" \
36 -H "Content-Type: application/json" \
37 -d '{"slug": "acme", "name": "Acme"}'
38```
39
40You can belong to up to ten workspaces. `GET /user`, or the `account` tool's `whoami` action, lists the
41ones you belong to.
42
43A new workspace is free, and **each person can own one free workspace**.
44While you own a free workspace, the page shows **You already own a free
45workspace** in place of the form, with **Start the plan** on it; the API
46answers `402` (`payment_required`). Start the plan on it, or delete it,
47then create the new one. Several free workspaces from before are kept, but
48each needs the plan (or deleting) before you can create another. See
49[one free workspace per person](/guides/usage-and-billing/#one-free-workspace-per-person).
50
51Usernames and workspaces share one set of names, so a name means the same
52thing wherever it appears. Your username is reserved for you: only you can
53create a workspace with that name, and nobody can register a username that
54is already a workspace. The names `g1t` and `g1t-agent` belong to g1t,
55and nobody can register them.
56
57## Getting started
58
59**Getting started** is a setup guide for a workspace's owners. It opens
60by itself on the workspace's [Home](/guides/home/) and on its
61**Workspace** page, for each owner, until that owner finishes or closes
62it. A workspace made before the guide existed opens it once for each of
63its owners too.
64
65It has six steps. Each is ticked from what the workspace has, never from
66what you clicked, so a step you did elsewhere is ticked here as well:
67
68| Step | Done when |
69| --- | --- |
70| **Add an AI provider** | The workspace has an [AI provider](/guides/ai/) whose key passed its last check. You can add one in the guide: choose a provider, paste its key, and **Add and check the key** saves it and checks it at once, as the AI page does. **Test** checks one again. |
71| **Choose Ask's model** | [Ask g1t](/guides/ask/) answers with one of the workspace's providers, and has no problem with it. Choose the provider and a model, or Auto, and **Use for Ask**. |
72| **Bring your code** | The workspace has a project, or [GitHub is connected](/guides/github/). **New project** starts one; **Connect GitHub** installs g1t's GitHub App in one step, then you choose the repositories to bring across. |
73| **Connect your harness** | You signed in the [g1t CLI](/guides/cli/) (`g1t auth login`), or signed in an [AI client](/guides/bring-your-own-agent/) with g1t through MCP. The guide shows the install commands for macOS and Linux and for Windows, ready to copy. |
74| **Invite your team** | The workspace has another member, or an invitation waiting for an answer. Workspace invites come with the plan: on a free workspace the step says so, links to the plan, and offers [inviting a friend to g1t](/guides/authentication/#invite-a-friend) instead. |
75| **Add a runner** | The workspace has a [self-hosted runner](/guides/self-hosted-runners/), such as [the desktop app](/guides/desktop/). |
76
77Every step but the AI provider can be skipped with **Skip for now**; a
78skipped step counts as settled, and **Don't skip** takes it back. When
79every step is done or skipped, the guide says **All set**, and **Finish**
80puts it away.
81
82Closing the guide puts it away too: it stops opening by itself for you,
83in this workspace, on every device. Nothing else changes. Open it again
84any time from the **Getting started** button at the top of Home, from
85**Settings → General** (**Getting started**), from the
86workspace's **AI** page, or by typing *Getting started* in the command
87palette, which opens Home with `?setup=1`. Each owner has their own:
88closing it does not close it for anyone else.
89
90Members who are not owners do not see it.
91
92From the API, `GET /workspaces/{workspace}/onboarding` says whether you
93dismissed it (`dismissed_at`) and which steps you skipped (`skipped`), and
94`PATCH /workspaces/{workspace}/onboarding` changes them: `dismissed`
95true puts it away, false makes it open by itself again, and `skipped`
96replaces the skipped steps (any of `ai`, `ask`, `code`, `harness`,
97`people`, `runner`). Whether a step is done is not stored: it is read from
98the workspace each time.
99
100```sh
101curl -X PATCH https://api.g1t.sh/workspaces/acme/onboarding \
102 -H "Authorization: Bearer $G1T_TOKEN" \
103 -H "Content-Type: application/json" \
104 -d '{"dismissed": true}'
105```
106
107Reading it takes a token with `workspace:read`; changing it, which
108changes only your own, takes `account:write`.
109
110## Display name, slug and icon
111
112A workspace has two names:
113
114| | Example | Where it appears | Changes |
115| --- | --- | --- | --- |
116| **Display name** | `Flagon Industries` | The sidebar, the top of its page, mission control and link previews | Any time, up to 80 characters; spaces and capitals are fine |
117| **Slug** | `flagon` | Every address: `g1t.sh/flagon/<repo>`, clone URLs, API paths and `g1t.page` app addresses | By an owner, once a day at most; the old one redirects for 90 days. See [rename a workspace](#rename-a-workspace) |
118
119Without a display name, the slug is shown. Where an address is shown, the
120slug is in monospace beside the name. Owners change the display name and
121description (up to 160 characters) on **Settings → General**, or with
122[`PATCH /workspaces/{workspace}`](/reference/api/workspaces/update-workspace/)
123(MCP: `workspace` `update`), which takes `name` and `description` and
124changes only the fields given. It needs the `workspace:admin` scope, and
125is recorded in the [audit log](/guides/audit-log/):
126
127```sh
128curl -X PATCH https://api.g1t.sh/workspaces/flagon \n -H "Authorization: Bearer $G1T_TOKEN" \n -H "Content-Type: application/json" \n -d '{"name": "Flagon Industries", "description": "Rockets, and the software that flies them."}'
129```
130
131Neither changes the slug; that is a [rename](#rename-a-workspace).
132
133A workspace also has an icon. Without
134one, g1t draws its first letter in a colour of its own. To upload one, an
135owner opens **Settings → General** and picks an image:
136
137- PNG, JPEG, WebP or GIF, at most 1 MB. Square images look best.
138- An image is checked by its contents, not its name. SVG is refused,
139 because it can carry script.
140- **Remove** goes back to the letter.
141
142The icon then shows wherever the workspace does, and on its link previews
143(PNG and JPEG icons only). Each image is served from
144`g1tusercontent.com/avatars/<sha256>`, an address named after its contents, so an icon
145that changes gets a new address and nothing shows the old one.
146
147You can upload a picture of yourself the same way, under
148[Settings → Profile](https://g1t.sh/settings/profile).
149
150## Rename a workspace
151
152Renaming changes the slug, the first part of every address under the
153workspace. The display name is separate; change it on its own under
154**Settings → General → Workspace details**. Only owners can rename a
155workspace.
156
1571. Open the workspace's **Settings → General** and go to **Address**.
1582. Type the new slug. The field shows the new address, `g1t.sh/<new>`, and
159 whether the name is available.
1603. Choose **Change address**, read what changes, type the new slug to
161 confirm, and choose **Change address** again.
162
163You land on the workspace's settings at its new address. Repositories,
164work items and the rest move with it within a few seconds.
165
166### What changes
167
168| | Before | After |
169| --- | --- | --- |
170| Pages | `g1t.sh/old/<repo>` | `g1t.sh/new/<repo>` |
171| Git remotes | `https://g1t.sh/old/<repo>.git` | `https://g1t.sh/new/<repo>.git` |
172| API paths | `https://api.g1t.sh/repos/old/<repo>` | `https://api.g1t.sh/repos/new/<repo>` |
173| MCP tool arguments | `"owner": "old"` | `"owner": "new"` |
174| Production apps | `https://<project>-old.g1t.page` | `https://<project>-new.g1t.page` |
175| Previews | `https://<project>-git-<branch>-old.g1t.page` | `https://<project>-git-<branch>-new.g1t.page` |
176
177These stay the same: the display name, description and icon, members and
178roles, access tokens, secrets and variables, integrations, webhooks,
179work items and pull requests, and billing, plans and credit.
180
181### What redirects, and for how long
182
183For 90 days after a rename, the old name keeps working:
184
185| | Behaviour |
186| --- | --- |
187| Web pages | Answer with a permanent redirect (301) to the same page under the new name, query string included. |
188| `git clone`, `fetch`, `pull` and `push` | Redirected to the new remote. Git follows it, but prints a warning each time until you update the remote. |
189| API and MCP | A call that names the old slug runs under the new one. |
190| `g1t.page` apps | Production and preview addresses under the old name redirect to the new ones. |
191
192Update your remotes now rather than relying on the redirect:
193
194```sh
195git remote set-url origin https://g1t.sh/<new>/<repo>.git
196```
197
198Update anything else that has the old name written into it, too: links in
199READMEs and docs, CI configuration, API clients and MCP clients.
200
201### Limits
202
203- A workspace can be renamed once every 24 hours.
204- For 90 days the old name is held for the workspace. Nobody else can take
205 it, and you can rename back to it.
206- After 90 days the redirects stop, and anyone can create a workspace or
207 register a username with the old name. Links and remotes that still use
208 it then reach whatever has the name, or nothing.
209- The new name follows the same rules as a new workspace: lowercase letters,
210 digits and single hyphens, up to 39 characters, not a reserved word or a
211 well-known GitHub action owner's name (such as `actions` or `docker`), and
212 not another workspace's slug or someone else's username.
213
214## Workspace aliases
215
216An alias is a second name for a workspace that leads to it for good,
217wherever a workspace's name goes. On g1t.sh, `g1t` is an alias of
218`flagon-io`, the workspace of Flagon, Inc., which builds g1t and holds its
219repositories: `g1t.sh/g1t/deploy` is the repository `flagon-io/deploy`.
220
221| | Behaviour |
222| --- | --- |
223| Web pages | Answer with a permanent redirect (301) to the same page under the workspace's slug, query string included. |
224| `git clone`, `fetch`, `pull` and `push` | Answered in place, as the repository under the workspace's slug, with the same permissions, and no redirect for git to warn about. |
225| API and MCP | A call that names the alias runs under the workspace's slug, and the answer names the workspace by its slug. A token that reaches one repository reaches it under the alias too, and nothing else. |
226| Packages | Registry addresses under the alias redirect to the workspace's. |
227| Actions | `uses: g1t/deploy@v1` and `g1t/workflows/.g1t/workflows/deploy.yml@v1` are found as `flagon-io/deploy` and `flagon-io/workflows`. See [g1t's own actions](/guides/actions/#g1ts-own-actions). |
228
229An alias resolves whatever its case (`G1T` is `g1t`), and follows the
230workspace through renames: it points at the workspace, not at its slug.
231Pages, API answers and links always show the workspace's own slug.
232
233An alias never changes who can see what. A private repository is found
234under the alias only by someone who could see it under the workspace's
235slug, and the alias gives nobody access they did not have.
236
237Aliases are set and removed by g1t's staff; there is no setting for them.
238While an alias exists, nobody can register it as a username, create a
239workspace with it, or rename a workspace to it. An alias is never a
240person's or a workspace's name, and never one of the site's own routes.
241[Contact us](https://g1t.sh/support) if your workspace needs one, such as
242for a name it used to trade under.
243
244## Data residency
245
246Data residency says where the git data of the workspace's new repositories
247is stored. The section appears in **Settings** once g1t can store
248repositories in the EU. Until then it is not shown, and every repository is
249stored wherever g1t stores repositories.
250
251| Setting | What it does |
252| --- | --- |
253| Anywhere | New repositories are stored wherever g1t stores repositories. The default. |
254| EU only | New repositories are stored in the EU. If EU storage cannot take one right now, the repository is not made, and you are told why. It is never stored somewhere else instead. |
255
256To change it:
257
2581. Open the workspace, then **Settings**. Only owners see the page.
2592. Under **Data residency**, choose **Anywhere** or **EU only**.
2603. Select **Save**.
261
262The setting applies to repositories made after you save it, however they
263are made: from the site, with the API, by pushing to a new address, or by
264importing. Repositories the workspace already has stay where they are. To
265move them, contact support; a move keeps each repository's address, history
266and settings, and pushes to it wait a few minutes while it happens.
267
268Data residency covers the git data: commits, branches, tags and files,
269including pull requests' working copies, which are stored with their
270repository. Work items, pull requests, comments and settings are not affected.
271A repository [transferred](/guides/transferring-repositories/) to another
272workspace stays where it is stored.
273
274Changing the setting is recorded in the
275[audit log](/guides/audit-log/) as `workspace.residency_changed`.
276
277## Delete a workspace
278
279Deleting a workspace takes everything in it with it, in one step: its
280repositories, projects, apps, members' access and tokens. Only an owner can,
281signed in as a person, typing the workspace's slug to confirm.
282
283It is not gone at once. For **30 days** g1t keeps all of it, so that a
284deletion you did not mean, or did not make, can be undone: an owner writes
285to support@g1t.sh, and support restores the workspace as it was. After 30
286days it is purged for good.
287
2881. Open the workspace's **Settings → General** and go to **Danger zone**.
289 It lists what will go with the workspace: its repositories, projects,
290 live apps and members.
2912. Choose **Delete workspace**, read what happens, type the workspace's
292 slug to confirm, and choose **Delete workspace** again. You are taken
293 back to your own home.
294
295The one thing that can stand in the way is billing: see
296[what billing needs](#what-billing-needs). Repositories you want to keep in
297another workspace, [transfer](/guides/transferring-repositories/) first;
298their old addresses keep redirecting after the workspace is gone.
299
300From the API, call
301[`DELETE /workspaces/{workspace}`](/reference/api/workspaces/delete-workspace/)
302with the slug in `confirm`; over MCP, the `workspace` tool's `delete`
303action.
304
305Some workspaces can never be deleted, by anyone, such as Flagon's, which
306runs g1t. Their Danger zone says so instead of offering the button.
307
308### What billing needs
309
310| | |
311| --- | --- |
312| Money owed | Charged to the workspace's card at once, with no minimum charge. With no card, add one or pay from **Billing** first. |
313| An unpaid invoice | Pay it from **Billing** first. |
314| Prepaid credit | It would be lost: spend it, or write to support@g1t.sh about a refund, first. |
315| Usage this month still being metered | Storage and git operations are charged when the month closes. You can delete the workspace from the 1st of next month. |
316| The g1t plan | Ends at Stripe at once, not at the end of the period. |
317| An enterprise account | A workspace billed through one is moved off it by g1t first: write to support@g1t.sh. |
318
319A comped workspace owes nothing; only its plan is ended.
320
321### What happens
322
323At once, when an owner deletes it:
324
325| | |
326| --- | --- |
327| Members | Lose access, and the workspace leaves their list. Their own accounts are not touched: a person with no workspace left can still sign in, and create or join one. |
328| Access tokens | The workspace's own tokens stop working. Personal tokens are not affected. |
329| Repositories | Deleted with it: git refuses them, and their pages answer 404. Workflow runs stop. Ones deleted on their own earlier stay deleted. |
330| Projects and apps | Hidden. Its apps are taken offline and nothing builds. Custom domains are kept for a restore. |
331| Its pages | Answer 404, and it drops out of search. |
332| Billing | What it owes is charged, and its plan ends, as [billing needs](#what-billing-needs). Nothing more is charged. |
333| The audit log | Records the deletion. |
334
335Within 30 days, support can restore it: its members, tokens, repositories,
336projects and apps come back as they were, and its apps go back up as its
337limit allows. Its plan does not come back by itself: an owner starts it
338again from **Billing**. A repository deleted on its own before the
339workspace was stays in **Recently deleted**.
340
341After 30 days it is purged:
342
343| | |
344| --- | --- |
345| Repositories | Purged, their git data with them, including any that were in Recently deleted. |
346| Projects, apps and custom domains | Removed. |
347| Webhooks, integrations, secrets and variables | The workspace's own are removed. |
348| Guardrails | The workspace's own are removed. |
349| Statements, invoices and the ledger | Kept, for accounting. |
350| The audit log | Kept as [long as its account keeps it](/guides/audit-log/#how-long-it-is-kept), with the purge as its last entry: once the plan ends with the workspace, that is 7 days, unless an enterprise pays for it or longer was arranged. With no owners left, ask support@g1t.sh for an export. |
351| Old addresses | Redirects for repositories transferred out keep working. The workspace's own pages answer 404. |
352
353### The name afterwards
354
355A deleted workspace's slug is never given to another workspace or used as
356someone else's username. While it can still be restored, the slug is held
357for it. Links and git remotes that still use it keep
358meaning what they meant: a transferred repository's old address keeps
359redirecting to it, and nobody can take the name in the meantime.
360
361The one exception: when the slug is your own username, you may create a
362workspace with that name again once the old one is purged. It starts empty, on standard billing terms,
363and a repository made in it at an old address ends that address's redirect.
364
365## Members and roles
366
367<a id="members-and-owners"></a>
368
369| Role | Can |
370| --- | --- |
371| Member | Create repositories (as the [member privileges](#member-privileges) allow), see the workspace's usage and billing, and get the workspace's [base permission](/guides/access-and-roles/#the-base-permission) on every repository in it: Read for a new workspace, which an owner can raise to Write to let members push and merge pull requests. Admin on the repositories they create. |
372| Owner | Everything a member can, and manage members and owners, the base permission, the member privileges, two-factor requirement, the workspace's access tokens, its details, and billing: the plan, card checks, prepayment and limits. Admin on every repository, and the only ones who can transfer and delete them unless the member privileges allow admins; see [access and roles](/guides/access-and-roles/). |
373
374A workspace can have any number of owners, and always has at least one.
375
376### Roles that add to a member
377
378An owner can give a member one or both of these roles. Each adds to what
379the member already has; an owner has both already.
380
381| Role | Adds |
382| --- | --- |
383| **Billing manager** | Manages the workspace's billing as an owner does: the plan, budget and spend limit, prepaying, the card, billing details and invoices. Gives nothing on repositories. |
384| **Security manager** | Read on every repository, and seeing and managing every security alert and security setting on them: dismissing and reopening alerts, custom patterns, reviewing push protection bypass requests, and the workspace's security settings. |
385
386### Change someone's role
387
388On **Members**, `g1t.sh/<workspace>/-/members` (**Workspace → Access →
389Members**), an owner opens the **⋯** menu beside a member:
390
3911. **Make owner** or **Make member** changes their role.
3922. **Billing manager** and **Security manager** turn each role on or off.
3933. **Transfer ownership…** hands the workspace to that member: they become
394 an owner and you a member, in one step. To add an owner without stepping
395 down, choose **Make owner** instead.
3964. **Remove from {workspace}…** takes them out. Their roles on its
397 repositories and their place in its teams go too.
398
399Owners see a shield beside each member: green when two-factor
400authentication is on, amber when it is off. Above the list, a search box
401finds a member by username or name, and the filters narrow the list by
402role, by two-factor authentication (owners only) and by team; each is kept
403in the address (`?q=`, `?role=`, `?2fa=`, `?team=`), so a filtered list can
404be shared.
405
406The last owner cannot be made a member, removed, or leave: make someone
407else an owner first, or [delete the workspace](#delete-a-workspace).
408
409### Leave a workspace
410
411Anyone can leave a workspace they belong to: at the bottom of **Members**,
412choose **Leave {workspace}** and confirm. Your roles on its repositories
413and your place in its teams go with you at once. The only owner cannot
414leave.
415
416### Add people
417
418Whoever creates a workspace is its owner. Nobody is added to a workspace
419without saying yes: an owner invites people, and each person accepts or
420declines.
421
422Anyone can make a g1t account without an invite, so to bring someone in
423you invite them to the workspace; someone without an account signs up from
424the invitation. To tell a friend about g1t without adding them to a
425workspace, use [Invite a friend](/guides/authentication/#invite-a-friend)
426in your account menu instead.
427
428On the workspace's **Members** page, `g1t.sh/<workspace>/-/members`
429(**Workspace → Access → Members** in the sidebar), or on **Invitations**
430beside it:
431
4321. Select **Invite**. A dialog opens.
4332. Under **Who**, type a username, a name or an email address. As you
434 type, people on g1t are offered by username and name, with their
435 pictures; hover over one for their card. Only usernames, names and
436 pictures are shown, never anyone's email address. An email address is
437 taken as written.
4383. Choose the **Role** they join with: **Member** or **Owner**.
4394. Write a **Message** if you like: a line quoted in the invitation email,
440 under your name. Up to 500 characters.
4415. Select **Invite**. The dialog closes and the page says who was invited.
442
443- **By username**: they get a
444 [workspace invitation](/guides/authentication/#workspace-invitations) in
445 their notifications and by email, and join with that role when they accept at
446 [g1t.sh/invitations](https://g1t.sh/invitations). If they decline, you
447 are told in your notifications. It costs nothing.
448- **By email address**: g1t emails an invite that only that address can
449 use. With a g1t account, it is a workspace invitation like the one above
450 and costs nothing. Without one, the invitation also lets them make the
451 account first, and costs nothing (see
452 [invites](/guides/authentication/#invites)). The new account is then
453 invited to the workspace, and joins when it accepts. The page never says which it was.
454
455The email names you and the workspace and links to the invite's page.
456Someone new signs up right there, with the invited address filled in; once
457the address is confirmed (straight away when they opened the page from
458that email, which proves the address is theirs, otherwise with the code g1t
459emails them), they are asked to accept or decline the invitation. Someone
460with an account signs in and accepts on the page. Accepting lands them in
461the workspace, with a one-time welcome. See
462[using an invite](/guides/authentication/#using-an-invite).
463
464#### When someone joins
465
466A person becomes a member by accepting an invitation or by using an
467invite code that names the workspace. The join is an event,
468`workspace.member_joined`, for the workspace's
469[webhooks](/guides/webhooks/#events).
470
471Every invitation sent is on **Invitations**,
472`g1t.sh/<workspace>/-/members/invitations` (**Workspace → Access →
473Invitations**, owners only): a table of who it is for, who sent it, the
474role, when it was sent and where it stands, newest first. The chips above
475it narrow the table, each with its count:
476
477| Chip | Shows |
478| --- | --- |
479| **All** | Every invitation, however it ended. |
480| **Pending** | The ones still waiting: to be used, for the new account to confirm its email, or for the person to accept. Each says the day it stops working (30 days after it was sent). |
481| **Accepted** | The people who joined. |
482| **Declined** | The people who said no. |
483| **Expired** | The ones nobody used in time. g1t does not yet know whether an invitation's email was delivered, so one that bounced ends up here too. |
484| **Revoked** | The ones an owner took back. |
485
486The **⋯** menu on a pending invitation has **Copy link** (the invitation's
487page, while it waits to be used), **Send again** (the same email, and the
488inbox notice again for someone on g1t; the invitation itself does not
489change) and **Revoke**. Through the API, the invitation is sent again with
490nothing yet; revoke it and invite again instead. Converting an outside
491collaborator to a member sends them an invitation the same way. The
492Members page says how many invitations are waiting, and leads here.
493Through the API, use
494[`POST /workspaces/{workspace}/invitations`](/reference/api/invites/invite-member/)
495with a `username` or an `email` and a `role` (the `workspace` tool's
496`invite_member` action over MCP); the person answers with
497[`POST /user/invitations/{id}/accept`](/reference/api/invites/accept-invitation/)
498or [`/decline`](/reference/api/invites/decline-invitation/).
499
500To give someone a role on one repository without making them a member,
501add them as an [outside collaborator](/guides/access-and-roles/#outside-collaborators).
502
503**A free workspace cannot add people.** Until it starts the g1t plan, it
504cannot add members, send invites, or invite outside collaborators, and an
505invite sent before waits until the plan is on. Its members stay. Members and
506Invitations show **Start the plan to invite people** with the button in place of
507**Invite**, and the API and MCP answer `402` (`payment_required`). See
508[who a free workspace can add](/guides/usage-and-billing/#who-a-free-workspace-can-add).
509
510### Members through the API
511
512| Route | MCP tool and action | What it does | Who |
513| --- | --- | --- | --- |
514| `GET /workspaces/{workspace}/members` | `workspace` `list_members` | Its members, owners first: `role` (`owner` or `member`), `org_roles` (`billing_manager`, `security_manager`) and, for owners, `two_factor`. | Members |
515| `PATCH /workspaces/{workspace}/members/{username}` | `workspace` `update_member` | Change `role` and `org_roles` (a list that replaces theirs). | Owners |
516| `DELETE /workspaces/{workspace}/members/{username}` | `workspace` `remove_member` | Remove someone. Your own username is leaving. | Owners |
517| `POST /workspaces/{workspace}/transfer_ownership` | `workspace` `transfer_ownership` | Hand it to `username`: they become an owner, you a member. | Owners |
518| `DELETE /user/memberships/{workspace}` | `workspace` `leave` | Leave it. | You |
519
520Each is for people, signed in or with a personal access token; never a
521workspace token. A change that would leave no owner answers `409`.
522
523```sh
524curl -X PATCH https://api.g1t.sh/workspaces/acme/members/grace \
525 -H "Authorization: Bearer $G1T_TOKEN" \
526 -d '{"org_roles": ["security_manager"]}'
527```
528
529## Member privileges
530
531What members can do beyond their role on each repository. Owners set them
532under **Workspace → Access → [Permissions](/guides/permissions/#code)**,
533`g1t.sh/<workspace>/-/permissions`, in the **Code** card, and can always do
534all of it themselves.
535
536| Setting | Default | When on |
537| --- | --- | --- |
538| **Members can create public repositories** (`members_can_create_public_repositories`) | On | Any member can create a public repository. |
539| **Members can create private repositories** (`members_can_create_private_repositories`) | On | Any member can create a private repository. |
540| **Repository admins can change visibility** (`members_can_change_repo_visibility`) | On | A member with Admin on a repository can make it public or private, if they could create one of that kind. |
541| **Repository admins can delete and transfer repositories** (`members_can_delete_repositories`) | Off | A member with Admin on a repository can delete it, or transfer it to a workspace where they can create one. |
542| **Repository admins can add outside collaborators** (`members_can_invite_outside_collaborators`) | On | A member with Admin on a repository can give a role on it to someone outside the workspace. |
543
544When one is off, only owners can do it; the refusal says so. Someone who is
545not a member, an outside collaborator with Admin, never gets these.
546Forking private repositories is not a setting: g1t has no personal forks
547to allow or refuse.
548
549Through the API, `GET /workspaces/{workspace}` returns each by its name,
550and [`PATCH /workspaces/{workspace}`](/reference/api/workspaces/update-workspace/)
551sets any of them (`workspace` `update` over MCP). Each change is in the
552[audit log](/guides/audit-log/) as `workspace.member_privileges_changed`.
553
554## Workflows the workspace manages
555
556An owner can run a workflow in every repository of the workspace, or in
557those whose names match, without committing it to each: a security scan, a
558licence check, a release policy. Add it under **Workspace → Code →
559Actions**, `g1t.sh/<workspace>/-/actions`, from a workflow file in one of
560the workspace's repositories, as **Required** (repositories cannot take its
561place or turn it off, so a ruleset can require its check) or **Default**
562(a repository's own workflow of the same name runs instead, and its admins
563can turn it off). Each repository's Actions page lists it as managed by the
564workspace. [Workflows a workspace manages](/guides/actions/#workflows-a-workspace-manages)
565has the details, and the API.
566
567## Require two-factor authentication
568
569An owner can require everyone with access to the workspace, its members
570and its outside collaborators, to have
571[two-factor authentication](/guides/authentication/#two-factor-authentication)
572on.
573
5741. Turn it on for your own account first.
5752. Open **Workspace → General**, `g1t.sh/<workspace>/-/settings#two-factor`.
576 Under **Authentication security**, it says how many members do not have
577 it on, and who.
5783. Turn on **Require two-factor authentication** and choose **Save**.
579
580From then on, someone without it keeps their place but cannot use the
581workspace: its private repositories, pages and API answer as if they were
582not a member, and every page shows them a notice with a link to turn it
583on. Turning it on gives everything back at once. Nobody can join or accept
584an invitation to the workspace without it.
585
586Through the API, `two_factor_requirement_enabled` on
587`PATCH /workspaces/{workspace}`. Recorded as `workspace.two_factor_required`
588and `workspace.two_factor_not_required`.
589
590A workspace on a paid plan can also require
591[single sign-on](/guides/single-sign-on/) through its own identity
592provider.
593
594## The workspace's page
595
596A workspace's own page, `g1t.sh/<workspace>`, has its icon, name, address
597and description at the top, then its overview: your
598[pinned projects](#pinned-and-recent-projects), then the most active ones,
599the pull requests in progress across them, and **All projects**. Members
600also see a **Usage** card with this month's spend, and who belongs.
601
602The workspace's other pages each have a heading of their own and a row in
603[the sidebar](#the-sidebar), lit while you are on them. The trail in the
604top bar, such as *acme / Projects*, leads back to the workspace's page.
605
606| Page | Address | Who | |
607| --- | --- | --- | --- |
608| **Overview** | `g1t.sh/<workspace>` | Everyone | The page above. |
609| **Projects** | `/-/projects` | Everyone | Every project you can see. See [the Projects page](#the-projects-page). |
610| [**Packages**](/guides/packages/) | `/-/packages` | Everyone | What the workspace publishes. A visitor opens it from **Packages** on the workspace's page. |
611| [**Teams**](/guides/teams/) | `/-/teams` | Members | Groups of members given roles on repositories together, mentioned as `@workspace/team` and asked to review together. Each team has its own page at `/-/teams/<team>`. |
612| [**People**](/guides/people-and-teams/) | `/-/people` | Members | The workspace's people, with their titles, teams and what they own. Each has a profile at `/-/people/<username>`. |
613| **Members and invites** | `/-/members` | Members | Who belongs. Owners invite, change roles and remove people here. |
614| **Insights** | `/-/insights` | Members | How the workspace delivers, what waits and what it costs. See [Insights](#insights). |
615| **Settings** | `/-/settings` | Owners | How the workspace is set up and connected (below). |
616
617Each person sees the projects they can read: a member whose base permission
618is None, an [outside collaborator](/guides/access-and-roles/#outside-collaborators)
619or a visitor sees the public ones and those shared with them, without the
620workspace's people, deployments or settings.
621
622`g1t.sh/<workspace>?tab=projects` (or `repositories`, `packages`,
623`teams`, `people`, `members`, `insights` or `settings`) opens that page.
624
625### The Projects page
626
627The Projects page, `g1t.sh/<workspace>/-/projects`, is made for workspaces with hundreds of projects:
628
629- **Find a project** matches every word you type in a project's name, its
630 address or its description. Press <kbd>/</kbd> anywhere on the page to
631 start typing.
632- **Filters**: public or private; [what it is](/guides/projects/#what-a-project-is)
633 (apps, libraries, and tools, docs or other when the workspace has any); the language its
634 manifests say it is written in; only projects with
635 [Deployments](/guides/deployments/) on; and archived projects, which are
636 left out unless you ask for them. Each choice shows how many projects it
637 holds.
638- **Sort** by recently updated (its settings or its last push, whichever is
639 later), recently pushed, most active, or name. Most active counts each
640 push, work item or pull request opened or closed, review, comment and
641 deployment, and what happened a week ago counts half as much.
642- **List** or **grid**, 30 projects to a page.
643- The arrow keys (or <kbd>j</kbd> and <kbd>k</kbd>) move between projects,
644 and <kbd>Enter</kbd> opens one.
645
646Everything you choose is in the address, so a filtered list can be
647bookmarked or shared.
648
649### Insights
650
651Insights, `g1t.sh/<workspace>/-/insights`, puts the workspace's projects
652side by side: how much they ship, how long changes take, what is waiting
653now, and what the work cost. Choose the last 7, 30 or 90 days and all
654projects or one; both are in the address (`?period=7d&project=api`).
655
656| | What it counts |
657| --- | --- |
658| **Merged changes** | Pull requests merged in the period, with a bar for each day. The daily values are in a table under the chart. |
659| **Average lead time** | From a pull request's opening to its merge, for those merged in the period. |
660| **Average first review** (per project) | From opening to the first approval or request for changes by a person other than its owner, for first reviews given in the period. Reviews by g1t and by workspace agents do not count. |
661| **Opened** and **Open now** (per project) | Pull requests opened in the period, and those open or in draft now. |
662| **Awaiting a first review** | Open pull requests (not drafts) no person has reviewed yet. |
663| **In the merge queue** | Open pull requests waiting, being tested or passed in the [merge queue](/guides/merge-queue/). |
664| **Checks running** and **Checks failed** | Open pull requests by their latest commit's checks: statuses, check runs and g1t Actions jobs, as the pull request shows them. One with a failed check counts as failed, else one with a check still going counts as running; one with no checks counts in neither. |
665| **Usage at price** and **Cost** | [Usage](/guides/usage-and-billing/#the-usage-page) at price, before what the plan, credit or discounts paid. A project's cost is its repository's usage; with all projects shown, the total also holds usage that is no project's. |
666| **Cost per merged change** | The period's usage divided by its merged changes: an average, not what any one change cost. |
667
668The days are UTC days, and the waiting counts are as of now and can
669overlap. Each person sees only the projects they can read. When part of
670it cannot be read, such as one service being briefly unavailable, Insights
671says so and shows a dash in place of numbers it cannot vouch for. **Explore
672costs** opens [Usage](/guides/usage-and-billing/#the-usage-page) with the same period and project.
673
674## The rail, the sidebar and the page
675
676Signed in, g1t is always about one workspace: the one you are in. On a
677workspace's pages, and on a project in one of your workspaces, that is the
678workspace the page belongs to, so opening a project in another of your
679workspaces switches you to it; anywhere else, even on public pages such as
680[Explore](https://g1t.sh/explore), someone's profile or another
681workspace's public project, it stays the one you chose last.
682
683Those pages beyond your workspaces are browsing g1t: the rail lights
684**Explore**, and Explore's sidebar sits beside them. It has **Back to**
685your workspace at the top, which goes to its [Home](/guides/home/); then
686**Recently active**, **New projects** and **Search**; **Your stars** and
687**Your profile**; and under **You are viewing**, whose page this is: a
688workspace with its overview and **Projects**, or a person with their
689profile and **Stars**. In one of their public projects, the sidebar is
690that project's own list, as in Code, with **Projects** at its top to go
691back to the rest of theirs. A project shared with you stays in Code, under
692**Shared with you**. On a phone, the button at the top left opens the same
693sidebar, and **More** has **Explore**.
694
695Each page has three parts:
696
697| Part | Where | What it holds |
698| --- | --- | --- |
699| **The rail** | A narrow column of icons down the left edge | g1t's mark, which goes to [Home](/guides/home/); the built-in apps; and at its foot **People**, **Workspace** and your account. Hold the pointer over an icon for its name. |
700| **The sidebar** | Flush against the rail | The workspace and its switcher at the top, **Search or jump to**, then the lists of the app you are in, in named groups. Home has none. |
701| **The page** | The rest of the window, flat against the sidebar | Its header: the button that shows or hides the sidebar, where you are, **Search or jump to** (<kbd>Ctrl</kbd> <kbd>K</kbd>, or <kbd>⌘</kbd> <kbd>K</kbd> on a Mac) when the sidebar is hidden or has a search of its own, the [notifications](/guides/notifications/) bell and **Create new**. Then the page itself. |
702
703### The rail
704
705The built-in apps are always in the rail, each an icon with what is
706unread on it:
707
708| App | Opens |
709| --- | --- |
710| **Home** | Where you're needed across the workspace, and what happened while you were away. See [Home](/guides/home/). |
711| **Work** | The workspace's work items, with its labels and milestones, at `g1t.sh/<workspace>/-/work`. See [work items](/guides/work-items/). |
712| **Chat** | Channels and messages. See [Chat](/guides/chat/). |
713| **Notifications** | Reviews, mentions and failures. See [notifications](/guides/notifications/). |
714| **Code** | Projects, pull requests and checks. Not shown to a member without Code access. |
715| **Artifacts** | Documents, decks and pages. See [artifacts](/guides/artifacts/). |
716| **People** | Everyone in the workspace, and its [teams](/guides/teams/). See [people and teams](/guides/people-and-teams/). |
717| **Workspace** | The workspace's settings: who has access, money, compute, and how each part of g1t is set up. See [Workspace mode](#workspace-mode). |
718
719The app you are in sits on a filled square. Your account is the
720avatar at the foot: your status, your profile and settings,
721[appearance](#appearance), the documentation, support, status, the
722keyboard's shortcuts, and signing out.
723
724### Appearance
725
726g1t comes in a dark theme and a light one. Until you choose, it follows
727your system's setting.
728
729| Choice | What you see |
730| --- | --- |
731| **Auto** | Follows your system's light or dark setting, and changes when it does. |
732| **Light** | A near-white page with white panels and a deeper lavender accent. |
733| **Dark** | g1t's very dark gray with the lavender accent. |
734
735To change it:
736
7371. Select your avatar at the foot of the rail. On a phone, open **More**,
738 then **You and help**.
7392. Under **Appearance**, select **Auto** (the screen icon), **Light** (the
740 sun) or **Dark** (the moon).
741
742The page changes at once. You can also choose under
743[Settings → Account](https://g1t.sh/settings/account), or press
744<kbd>Ctrl</kbd> <kbd>K</kbd> (<kbd>⌘</kbd> <kbd>K</kbd> on a Mac) and run
745**Use light theme**, **Use dark theme** or **Use auto theme**. Signed out,
746the same commands are in ⌘K, and the phone's menu has the switch.
747
748Your choice is kept in this browser, in a `g1t_theme` cookie, so every page
749is drawn in it from the start; another browser or device starts on Auto.
750Product screenshots on g1t.sh's home page stay dark in either theme.
751
752These docs and [status.g1t.sh](https://status.g1t.sh/) also follow your
753system's setting, each with its own switch for this browser: here, the
754**Auto**, **Light** and **Dark** menu at the end of the header (at the foot
755of the menu on a phone); on the status page, the three icons at the top.
756
757### Developer mode
758
759When a page fails, g1t says only that something went wrong. To see why,
760turn on **Developer mode** under
761[Settings → Account](https://g1t.sh/settings/account#developer). From then
762on, a page that fails shows the error itself: its message and stack, the
763address, the time, the routes the page was drawn from, the site's build
764and your browser (and the desktop app's version, inside it). **Copy
765details** copies all of it as one report, ready to paste into a support
766request or a bug report.
767
768Signed in, errors from g1t's side come through in full too, where
769otherwise they read *Unexpected Server Error*. They are only ever about
770your own requests. Like Appearance, the setting is kept in this browser, in
771a `g1t_dev` cookie; turn it off the same way.
772
773### The sidebar
774
775The sidebar's top row names the workspace you are in. Select it to switch
776to another of your workspaces, make a new one, or open your profile or
777settings. The button beside it hides the sidebar, leaving the rail alone
778and the page wider, and the same button at the left of the page's header
779brings it back; <kbd>Ctrl</kbd> <kbd>B</kbd> (<kbd>⌘</kbd> <kbd>B</kbd> on
780a Mac) does both, except while you type. g1t remembers which you chose.
781When the sidebar is hidden, or the app has none, the page's header starts
782with the same switcher. Under the top row, **Search or jump to** opens the
783same palette as <kbd>Ctrl</kbd> <kbd>K</kbd>; in Chat and Artifacts, whose
784sidebars search their own lists, it stays in the page's header.
785
786Below it are the lists of the app you are in, each group under a small
787heading. Code's lists the workspace's
788[projects](#pinned-and-recent-projects), and drills into a project's own
789list when you open one, with **‹ All projects** at the top to go back. Its
790**Settings** opens one level further: **General**, **Deployments**,
791**Domains**, **Guardrails**, **Repository**, **Access**,
792**Branches and merging**, **Secrets and variables** and **Webhooks**, each
793for the roles that can use it. A link straight to any of these pages opens
794the sidebar already there.
795
796Workspace's sidebar is the [workspace's settings area](#workspace-mode):
797its **Overview**, then every settings page in named groups, each one click
798away.
799
800Below 1024px wide, the sidebar opens over the page from the left, from the
801header's button, and closes when you open a page.
802
803### Workspace mode
804
805**Workspace**, at the foot of the rail, is everything about the workspace
806itself: who has access, what it spends, and how each part of g1t is set up
807for it. There is no second Settings inside it: every page is in the
808sidebar, under the group it belongs to, and the group you are in stays
809open while the others fold when you select their name. A page only owners
810open is left out for members.
811
812| Group | Page | Who | |
813| --- | --- | --- | --- |
814| | **Overview** | Members | The workspace at a glance: members, plan and spend. `g1t.sh/<workspace>/-/workspace` |
815| **General** | **General** | Owners | The icon, the display name, a one-line description, the address (the slug), [requiring two-factor authentication](#require-two-factor-authentication), [data residency](#data-residency), and deleting the workspace. `-/settings` |
816| **Access** | **Members** | Members | Who is in the workspace and their roles, with search and filters; owners [invite people](#add-people), change roles, and see **Outside collaborators**. `-/members` |
817| | **Invitations** | Owners | Every invitation to join, filtered by where it stands; send one again, revoke it, copy its link. `-/members/invitations` |
818| | [**Permissions**](/guides/permissions/) | Owners | Who may do what, part by part: the base permission, repositories, teams and chat. `-/permissions` |
819| | [**Single sign-on**](/guides/single-sign-on/) | Owners | Your identity provider over SAML 2.0, OpenID Connect or OAuth 2.0, the people linked to it, and requiring it. Every paid plan. `-/sso` |
820| | [**Access tokens**](#workspace-access-tokens) | Members | The workspace's own tokens. Owners create and delete them. `-/tokens` |
821| | **Personal access tokens** | Owners | The workspace's rules for members' tokens, and approving them. `-/personal-access-tokens` |
822| **Money** | [**Usage**](/guides/usage-and-billing/#the-usage-page) | Members | What the workspace used, by product, project and day. `-/usage` |
823| | [**Billing and plans**](/guides/usage-and-billing/) | Members | The plan, the spend limit and budget alerts, prepaying and every charge. `-/billing` |
824| **Compute** | [**Runners**](/guides/self-hosted-runners/) | Owners | The workspace's self-hosted machines, their groups and registration tokens. `-/runners` |
825| **Code** | **Repositories** | Members | Every repository, and for owners **Recently deleted**, where a [deleted repository](/guides/managing-repositories/#restore-a-repository) can be restored, or purged, for 30 days. `-/repositories` |
826| | **Actions** | Members | How workflows run in the workspace: what jobs' tokens may do, and for owners the [workflows the workspace manages](#workflows-the-workspace-manages) in its repositories. `-/actions` |
827| | [**Secrets and variables**](/guides/secrets-and-variables/) | Members | What runs and deployments are given. Owners change them. `-/secrets` |
828| | [**Webhooks**](/guides/webhooks/) | Members | Where the workspace's events are sent. Owners add and change them. `-/webhooks` |
829| **Chat** | [**Chat settings**](/guides/chat/#workspace-chat-settings) | Members | Renaming and archiving channels, emoji, default channels. Owners change it. `-/settings/chat` |
830| | **Emoji** | Members | The workspace's own emoji. `-/emoji` |
831| **Security** | **Security settings** | Members | The workspace's security policies. `-/security/settings` |
832| | [**Guardrails**](/guides/guardrails/) | Members | How long checks, the merge queue and merge checks may run. `-/guardrails` |
833| | [**Rules**](/guides/rules/) | Members | Rulesets across projects. `-/rules` |
834| | [**Audit log**](/guides/audit-log/) | Members | Every change, by whom, to what. `-/audit` |
835| **Integrations** | [**Integrations**](/guides/integrations/) | Members | The tools connected for everyone. `-/integrations` |
836
837Each page's address is under `g1t.sh/<workspace>/`. The page's header
838shows where you are: **General**, **Members / Invitations**, **Permissions**.
839Every address that was there before this layout still works. To find
840someone, and what they work on, use the
841[People directory](/guides/people-and-teams/#the-directory).
842
843### Pinned and recent projects
844
845However many projects a workspace has, Code's sidebar lists a few:
846
847- **Pinned**: the projects you pinned, in your order, up to eight a
848 workspace. Pin one with **Pin** on its page, or the pin on its row of the
849 Projects page or its card on the Overview. Drag a pinned project to move
850 it, or hold <kbd>Alt</kbd> and press the up or down arrow.
851- **Recent**: the projects you opened last that you have not pinned, up to
852 five.
853- **All projects**, with how many there are, opens the Projects page.
854
855Pins and recent projects are yours: nobody else sees them, and each
856workspace has its own. ⌘K finds any project in the workspace, pinned or not.
857From the API, use
858[`GET /user/pinned_projects/{workspace}`](/reference/api/pinned-projects/list-pinned-projects/)
859and the other [pinned projects](/reference/api/pinned-projects/list-pinned-projects/)
860operations, or the `workspace` tool's `list_pinned_projects`,
861`pin_project`, `unpin_project` and `reorder_pinned_projects` actions
862over MCP.
863
864### On your phone
865
866On a screen narrower than a tablet, g1t keeps the same places and moves
867them within reach of your thumb:
868
869| | What it does |
870| --- | --- |
871| **The bar along the bottom** | **Home**, **Chat**, **Notifications** and **Code** (for members with Code access), each with what is unread, and **More**. It runs flat along the bottom edge, as the rail stands beside the page on a computer, and the page fills the screen above it. The app you are in is marked as on the rail. It steps aside while the keyboard is up and inside a conversation. |
872| **More** | A panel above the bar with **Artifacts**, **People**, **Workspace**, and **You and help**: your status, profile and settings, [appearance](#appearance), the documentation, support, status, the keyboard's shortcuts and signing out. |
873| **The sidebar button**, at the left of the page's header | Opens the sidebar of the app you are in from the left, most of the screen wide: the same lists and links as on a computer. Tap outside it, or open a page, and it closes. |
874| **The tab you are already on** | Tap it again to open that app's sidebar too. |
875| **The workspace's name** in the page's header | Switches workspace, or opens your profile or settings. |
876
877Inside a [project](/guides/projects/), its pages (**Overview**, **Code**,
878**Work**, **Pull requests**, **Workflows**, **Deployments**,
879**Insights** and, for the roles that see them, **Security** and
880**Settings**) run in a row under its name that scrolls sideways, with the
881page you are on kept in view, so work items and pull requests are one tap
882away. Pages with more than one view, such as **Files**, **Commits** and
883**Branches**, show those as a second row of tabs.
884
885Menus stay inside the screen, dialogs rise from the bottom and sit on top
886of the keyboard while you type, and nothing scrolls the page sideways: a
887wide file, diff or table scrolls within its own box.
888
889### Signed out, and signing in
890
891Signing in, signing up, an invite link, the two-factor step, choosing a new
892password and making your first workspace each stand on their own: the g1t
893logo, the form, and links to the terms, privacy policy, docs, status and
894support at the foot. Someone who is not signed in reads public pages, such
895as Explore, a profile or a public project, under a plain header with
896**Explore**, **Docs**, **Sign in** and **Sign up**; a project's pages run in
897the row under its name.
898
899## Mission control
900
901Mission control is Code's **Overview**, at `g1t.sh/<workspace>/-/overview`.
902It shows where you are needed in the workspace's code and what landed.
903Signed in, `g1t.sh` itself opens [Home](/guides/home/) in the workspace
904you are in.
905
906**Review N that need you** jumps to the list, and **New work item** opens
907a new [work item](/guides/work-items/) of the workspace, filed in the
908project you pick.
909
910| Tab | What it lists |
911| --- | --- |
912| **Needs you** | Reviews asked of you, changes ready for you to merge, failed checks, failed production builds, repository invitations and a usage limit that is close or reached. |
913| **Landed today** | Pull requests merged today in your time zone, and whether a person merged them. |
914
915Each row in **Needs you** carries the reason it needs you:
916
917| Reason | Means |
918| --- | --- |
919| `BLOCKING` | Nothing moves until a person acts: a failed production build, a merge g1t could not make, or the usage limit. |
920| `ASKED FOR YOU` | A review or an invitation addressed to you by name. |
921| `CHECKS FAILING` | A required check fails. |
922| `NEEDS REVIEW` | The repository wants a person's approval. |
923| `READY TO MERGE` | Checks passed and it was approved; the repository lands changes only when a person merges them. |
924
925From a row, **Review and respond** opens it, and where it can be done
926without leaving the page you can approve the change, merge it or re-run
927its failed jobs. **By impact** puts the most urgent first; **Newest** sorts
928by time.
929
930## Workspace access tokens
931
932A workspace has access tokens of its own, for CI, integrations and coding
933agents that work for a team. There is no shared service account to create, pay
934for or lose the password to.
935
936| | Personal token | Workspace token |
937| --- | --- | --- |
938| Belongs to | You | The workspace |
939| Acts as | You | The workspace: its name is the author of what it does |
940| Can reach | All your workspaces, one of them, or none ([where a token reaches](/guides/authentication/#where-a-token-reaches)) | That workspace only: all of its repositories, or the ones chosen |
941| Can do | What its [permissions](/guides/authentication/#permissions) allow, never more than you can | What its permissions allow, with Write on the workspace's repositories (Admin with Repositories: admin); it cannot manage people, tokens or workspaces, and holds no account permissions |
942| Expires | 7 days to 1 year, or never where the workspaces it reaches allow | 7 days to 1 year, or never |
943| When its creator leaves | Stops working | Keeps working |
944| Created by | You, in [Settings → Access tokens](https://g1t.sh/settings/tokens) | An owner, under the workspace's **Settings → Access tokens** |
945
946They are the same kind of token and are sent the same way; see
947[access tokens](/guides/authentication/#access-tokens). With git, any
948username works; the token is the password. `GET /user` answers with
949`"kind": "workspace"` for one, and `"kind": "user"` for a personal token.
950
951Every member can see a workspace's tokens: the name, who created each,
952its permissions and repositories, when it was last used and when it
953expires. Only owners can create, change or delete them. An owner selects
954**New token** and fills in the same form as a personal token: a name, an
955expiration (No expiration shows a warning), its repositories (all, or the
956ones chosen) and its permissions, starting on the CI preset. Each token
957shows **Write** or **Admin**: give it **Repositories: admin** to let it
958manage webhooks, secrets, deploy keys and who has access, and teams as an
959owner would. Select a token to change its permissions or repositories, or
960to delete it.
961
962Which of your members' own personal tokens reach the workspace is set under
963**Settings → Personal access tokens**; see
964[a workspace's rules for tokens](/guides/authentication/#a-workspaces-rules-for-tokens).
965
966## Profiles
967
968Every person has a profile at `g1t.sh/u/<username>`, apart from the
969workspaces at `g1t.sh/<workspace>`. Author names on work items and pull
970requests link to it.
971
972**What it shows.** Your picture, name, username, pronouns, bio, location,
973website and when you joined; then your work in three tabs:
974
975- **Overview:** your contribution calendar, then pull requests merged,
976 open pull requests and work items opened, and your most recent activity.
977- **Pull requests** and **Work items:** everything you opened, and what g1t
978 opened for you, newest first,
979 with filters beside the list for state (open, closed, merged), type,
980 repository and sort order. Each tab has its own address, such as `g1t.sh/u/<username>/pulls`;
981 add `?state=merged` and the like to
982 link to a filtered list.
983
984**The contribution calendar.** The last year as a square a day, a column a
985week, shaded more strongly the more you did that day, with the total
986above it ("128 contributions in the last year"). A contribution is a
987commit you pushed, a work item or pull request you opened (or g1t opened for
988you), and a review you gave. Days are counted in UTC. Hover over a square,
989or tap it, to see its day, its count and how many were commits ("5
990contributions on Oct 4, 2026, 3 of them commits"). On a narrow screen the
991calendar scrolls sideways inside its card, starting at today.
992
993Commits count like this:
994
995- **Pushed to the default branch, or to `gh-pages`.** Commits on other
996 branches count once they reach the default branch, which is usually a
997 pull request, and the pull request is counted already.
998- **Credited to whoever pushed,** on the day of the push, not to the
999 commits' authors. Pushes with a workspace's or a workflow job's token are
1000 not counted on anyone's calendar.
1001- **The new commits along the branch's own line,** at most 50 a push. A
1002 merge commit counts once. The first push of a branch counts one, so
1003 importing a long history doesn't fill a single day.
1004- **Only from the time this was added:** pushes before 9 October 2026 are
1005 not counted.
1006
1007**Edit it** in [Settings → Profile](https://g1t.sh/settings/profile). Every
1008field is optional. The bio takes up to 160 characters and is also what a
1009link to your profile says. The website must be an `https://` address;
1010`example.com` is saved as `https://example.com`. Your email address is
1011never shown.
1012
1013**Time zone.** Pick the time zone you are in, by city or region (such as
1014`America/Denver`), and the [card over your name](#the-card-over-a-name)
1015shows your local time, so people can tell whether it is a good moment to
1016ask you something. If your browser's time zone differs from the one
1017saved, the field offers **Use my browser's time zone**. Choose **Not
1018shown** to clear it.
1019
1020**Who sees what.** A profile is public, but the work and workspaces on it
1021are filtered for whoever is looking:
1022
1023| On the profile | Shown to a visitor when |
1024| --- | --- |
1025| A pull request, and its title | They can read its repository: it is public, or they are a member of its workspace |
1026| A work item, and its title | They are a member of its workspace, or can read the repository it was filed in |
1027| The counts, and the contribution calendar | Only what they could see is counted |
1028| A workspace | They are a member of it too, or you made a public project in it, whose page shows that already |
1029
1030Someone signed out sees your public work and the workspaces where you made
1031a public project; nothing else, and their calendar counts only work in
1032public repositories. The link preview for a profile uses only public work.
1033
1034**How it is laid out.** Signed out, a profile, Explore and Search are
1035shown with g1t's public header (search, Explore, Docs, signing in) and the page
1036at full width, with no workspace sidebar. Signed in, the rail stays with
1037**Explore** lit, and Explore's sidebar opens beside these pages, with the
1038person you are looking at under **You are viewing** (see
1039[The rail, the sidebar and the page](#the-rail-the-sidebar-and-the-page)).
1040Your own profile is browsing too, with **Your profile** lit.
1041
1042### The card over a name
1043
1044Hold the pointer over a person's name or picture anywhere on g1t, or move
1045the keyboard focus to their name, and a card opens with their profile at a
1046glance:
1047
1048| On the card | Shown when |
1049| --- | --- |
1050| Picture, name, username and pronouns | Always |
1051| Bio and location | They filled them in |
1052| Their local time, such as **3:42 PM local time** | They set a [time zone](#profiles) |
1053| **Member of** | The same workspaces their profile shows you, at most three named |
1054| **Committed to this repository in the past day**, **week** or **month** | You opened it inside a repository you can read, and their latest commit on its default branch is that recent |
1055
1056On a touch screen no card opens: a tap goes to the profile. `@g1t` has a
1057card of its own, about putting g1t to work. `ghost`, which stands in for
1058deleted accounts, has no card.
1059
1060### Commits and your account
1061
1062A commit shows as yours, with your username, picture, profile link and
1063card, when its author address is one of your
1064[confirmed addresses](/guides/authentication/#email-addresses) or your
1065noreply address. This holds everywhere a commit appears: the Files page,
1066history, a commit, blame, branches, tags, comparisons and the
1067Contributors list, which counts every address of yours as one person.
1068
1069To have commits made on your own machine show as yours without publishing
1070your address, commit with your noreply address:
1071
10721. Open [Settings → Emails](https://g1t.sh/settings/emails) and copy your
1073 noreply address. It looks like
1074 `<8 characters of your account id>+<username>@users.noreply.g1t.sh`.
10752. Set it for every repository, or leave out `--global` for one:
1076
1077 ```sh
1078 git config --global user.email "6c1d0efg+sam@users.noreply.g1t.sh"
1079 ```
1080
10813. Commit and push as usual. Commits you made before keep the address they
1082 were made with; add that address to your account and confirm it to have
1083 them show as yours.
1084
1085| A commit's address | Shown as |
1086| --- | --- |
1087| One of your confirmed addresses, or your noreply address | You |
1088| An address added to an account but not confirmed | The name in the commit |
1089| An address no account has | The name in the commit, with a plain picture, no link and no card |
1090| A deleted account's noreply address, or any of its confirmed addresses during the 30 days it can be restored | `ghost` |
1091| g1t's own (`g1t@users.noreply.g1t.sh`) | `g1t` |
1092
1093`Co-authored-by` trailers are matched the same way, and their pictures sit
1094beside the author's. An address itself is never shown on g1t.