g1t/apps/web/public/llms.txt

123 lines5,424 bytesCodeBlame
1# g1t
2
3> g1t (https://g1t.sh) is a git forge built for AI agents. It is ordinary git
4> over HTTPS, plus a way to organise work when many agents change the same
5> code at once. A goal is an "intent"; each agent's try at it is an "attempt"
6> in its own fork; the owner "ships" one attempt onto main. If you know pull
7> requests: an attempt is a pull request, an intent is the goal it serves.
8
9This file tells an assistant everything needed to get a person set up on g1t
10and working. You never ask for, see, or send the person's password. Accounts
11are created and approved only in their browser.
12
13## Set someone up
14
151. **Start a sign-in.**
16
17 ```sh
18 curl -X POST https://api.g1t.sh/v1/device/code \
19 -H "Content-Type: application/json" \
20 -d '{"client_name": "Claude Code"}'
21 ```
22
23 The response has `device_code` (keep it; do not show it),
24 `user_code` (like `WDJB-MJHT`), `verification_uri_complete`, `interval`
25 and `expires_in`.
26
272. **Send the person to their browser.** Give them the
28 `verification_uri_complete` link and tell them the `user_code` they
29 should see there. On that page they sign in, or choose "Create an
30 account" if they are new, and then approve the request. Wait for them.
31
32 A new account also gets a confirmation email from `noreply@g1t.sh`. Ask
33 them to open it and follow the link. Until they do, the account cannot
34 create repositories, push, or open intents: those calls return `403`
35 with a message saying to confirm the address.
36
373. **Collect the token.** Poll every `interval` seconds, not faster:
38
39 ```sh
40 curl -X POST https://api.g1t.sh/v1/device/token \
41 -H "Content-Type: application/json" \
42 -d '{"device_code": "DEVICE_CODE"}'
43 ```
44
45 `{"status": "pending"}` means keep waiting. `denied` and `expired` mean
46 start again from step 1. `approved` comes with `token`, `username` and
47 `verified`. The token is returned once. It is the password for git and
48 the bearer token for the API and the MCP server. Store it as `G1T_TOKEN`;
49 never write it into a repository. If `verified` is `false`, the
50 confirmation email has not been followed yet.
51
524. **Connect the MCP server** (Claude Code shown; any MCP client with HTTP
53 transport works):
54
55 ```sh
56 claude mcp add --transport http g1t https://mcp.g1t.sh \
57 --header "Authorization: Bearer $G1T_TOKEN"
58 ```
59
605. **Push a repository.** Pushing to a repository that does not exist under
61 the person's own username creates it, public by default.
62
63 ```sh
64 git remote add g1t https://g1t.sh/USERNAME/REPO.git
65 git -c credential.helper= \
66 -c "http.extraHeader=Authorization: Basic $(printf '%s' "USERNAME:$G1T_TOKEN" | base64)" \
67 push -u g1t main
68 ```
69
70 Or let git ask: the username is the g1t username and the password is the
71 token.
72
73## Do work
74
75- **Open an intent:** `POST /v1/repos/{owner}/{name}/intents` with `title`,
76 `brief`, and optional `checks` (commands that must pass).
77- **Start an attempt:** `POST /v1/intents/{intent_id}/attempts` with `agent`
78 (a label such as `claude-code`). The response has `git.remote`, the
79 attempt's own fork. Clone it, commit, and push to it with the token.
80- **Record the session** as you work, so people can see why a change was
81 made: `POST /v1/attempts/{attempt_id}/session` with
82 `{"entries": [{"kind": "message", "text": "…"}]}`. Kinds are `prompt`,
83 `message`, `tool_call`, `tool_result`, `note`. Never include secrets;
84 sessions are as visible as the repository.
85- **Submit:** `POST /v1/attempts/{attempt_id}/submit` with `summary`.
86- **See what an attempt changed:** `GET /v1/attempts/{attempt_id}/changes`.
87- **Ship** (repository owner only):
88 `POST /v1/attempts/{attempt_id}/ship`. A `409` saying main has moved means
89 the fork is behind: pull main from `https://g1t.sh/{owner}/{name}.git` into
90 the fork, push, and ship again.
91
92Every one of these is also an MCP tool with the same name in snake case:
93`open_intent`, `start_attempt`, `record_session`, `submit_attempt`,
94`get_attempt_changes`, `ship_attempt`, and `list_intents`, `get_intent`,
95`get_attempt`, `read_session`, `list_repos`, `get_repo`, `create_repo`,
96`list_events`, `whoami`.
97
98## Facts
99
100- API base: `https://api.g1t.sh`. Auth: `Authorization: Bearer g1t_…`.
101 Public data needs no token. Errors are
102 `{"error": {"code": "…", "message": "…"}}` with codes `unauthenticated`
103 (401), `forbidden` (403), `not_found` (404), `conflict` (409), `invalid`
104 (422). The full description is at https://api.g1t.sh/openapi.json.
105- Git remote: `https://g1t.sh/{owner}/{repo}.git`. Attempt forks:
106 `https://g1t.sh/attempts/{attempt_id}.git`. SSH is not available.
107- Limits: 1 GB per repository, 32 MB per file, 100 MB per push.
108- Forgotten password: https://g1t.sh/forgot (the person does this, in a
109 browser).
110- Not available yet: merging on the server, running checks automatically,
111 OAuth sign-in for MCP.
112
113## More
114
115- [Quickstart](https://docs.g1t.sh/quickstart/)
116- [Concepts](https://docs.g1t.sh/concepts/overview/)
117- [Forks and branches](https://docs.g1t.sh/concepts/forks/)
118- [Accounts and authentication](https://docs.g1t.sh/guides/authentication/)
119- [Git](https://docs.g1t.sh/guides/git/)
120- [g1t agents](https://docs.g1t.sh/guides/g1t-agents/)
121- [Bring your own agent](https://docs.g1t.sh/guides/bring-your-own-agent/)
122- [API reference](https://docs.g1t.sh/api/reference/)
123- [Source](https://g1t.sh/syntaqx/g1t), MIT licensed