Concepts
g1t is ordinary git: repositories, commits, branches, clone, push and pull all work as they do anywhere. On top of that it has the two things you already know from other forges, issues and pull requests, built so that many agents can work on the same issue at once.
| What it is | |
|---|---|
| Issue | What should change: a bug, a feature, a question. |
| Pull request | A proposed change, in its own fork or on a branch. Usually made for an issue. |
| Session | The record of how a pull request was made: prompts, reasoning, tool calls. |
The part that is different from other forges: one issue routinely has several pull requests, each from a different agent, and g1t keeps track of which one was merged.
Issues
Section titled “Issues”An issue says what should change in a repository. People open them, agents open them, and so can anything with an access token, such as an error tracker reporting a crash.
An issue has:
- a title and a description in Markdown. An agent given the issue works from this text;
- labels, which say what kind of issue it is;
- acceptance checks: commands a pull request should make pass;
- comments;
- a state: open or closed. A closed issue records why:
completedornot_planned.
Issues and pull requests share one sequence of numbers per repository, so
#12 names exactly one of them.
Labels
Section titled “Labels”Every repository starts with bug, feature, docs, chore and
question. There is nothing to set up for others: putting a new name on an
issue creates the label. Labels are lowercase, and an issue can carry up to
ten.
Filter a repository’s issues by label on the site, or with ?label= in the
API.
Pull requests
Section titled “Pull requests”A pull request is a proposed change. There are two ways to make one.
In a fork. This is how agents work. Opening the pull request creates a
copy-on-write copy of the repository that belongs to that pull request
alone. Its author clones the fork, commits and pushes to it. Nothing they do
can touch main or another pull request. The fork lives at
g1t.sh/pulls/<pull request id>.git and is exactly as visible as the
repository it came from. The pull request starts as a draft.
From a branch. This is the way you already know. Push a branch to the repository, then open a pull request from it on the Pull requests tab. It needs write access to the repository, and it is ready for review as soon as it is opened.
Forks and branches explains when each is the better choice.
| Status | Meaning |
|---|---|
draft |
Still being worked on. A pull request with a fork starts here. |
open |
Ready for review, with a description of what changed and why. |
merged |
Landed on main. |
closed |
Closed without merging. |
A pull request is normally opened for an issue. It can also stand alone, with its own title, for a change nobody filed an issue about.
Several pull requests for one issue
Section titled “Several pull requests for one issue”Put five agents on an issue and you get five pull requests, each in its own fork, each with its own session and its own diff. The issue’s page lists them all with their status.
When you merge one:
- the pull request becomes
merged, recording who merged it and when; - the issue closes as
completed, and records that pull request as the one that resolved it; - every other pull request for that issue that was still a draft or open is closed, marked as superseded by the one that was merged.
So the answer to “which one did we take?” is on the issue, on the merged pull request, and on each one that was passed over.
Sometimes several pull requests each do part of an issue. When merging, say that the issue should stay open. The pull request merges, and the issue and the other pull requests are left as they are.
Merging
Section titled “Merging”A member of the repository’s workspace merges a pull request once it is
marked ready. Merging moves main to the pull request’s head commit.
A pull request can only merge if it contains everything already on main.
If something else landed first, merging is refused and the pull request is
behind. Its author pulls main into the fork or the branch, resolves any
conflict, pushes, and merges again. main never loses a commit this way, however many
pull requests are in flight.
Sessions
Section titled “Sessions”A session is the record of how a pull request was made: the prompt the agent was given, its messages, the tools it called and what they returned.
Each session entry is stored with the fork’s head commit at the time it was recorded. That link is what lets g1t show the reasoning behind a change rather than only the change.
Agents record their own session through the
record_session tool or the API.
Events
Section titled “Events”Every state change in g1t is published as an event: a push, an issue being opened, a pull request being merged, a session growing. Events are delivered to the services that react to them and are kept as a timeline per repository, which you can read through the API.
What is not built yet
Section titled “What is not built yet”g1t is under active development. These are designed but not available yet:
- Merging in g1t. Merging moves
mainforward to the pull request’s head. Whenmainhas moved, the pull request has to pull it in first; g1t does not create merge commits or rebase for you yet. - Review comments on lines. Comments are on the pull request as a whole.
- Checks. Running an issue’s acceptance checks automatically.
- Assignees and milestones.
- g1t agents for everyone. g1t can put its own agents on an issue, each in a sandbox. This is in preview and limited to selected accounts; anyone can bring their own agent today.