| 1 | 1 | | # Demo script |
| 2 | 2 | | |
| 3 | | − | A walk through g1t for the submission video. It runs seven to eight minutes |
| 4 | | − | at a normal speaking pace and uses `syntaqx/hello`, which is seeded for it. |
| 3 | + | A walk through g1t for the submission video. It runs about eight minutes at |
| 4 | + | a normal speaking pace and uses `syntaqx/hello`, a small Rust greeter whose |
| 5 | + | whole history was written by agents working on issues. |
| 5 | 6 | | |
| 6 | 7 | | Everything shown is live on g1t.sh. Nothing is mocked. |
| 7 | 8 | | |
| 9 | + | The judges weigh agent collaboration (half), concurrency and conflicts (a |
| 10 | + | quarter) and ease of use (a quarter). Sections 3 to 6 carry the first two; |
| 11 | + | sections 2 and 8 the third. |
| 12 | + | |
| 8 | 13 | | ## Before recording |
| 9 | 14 | | |
| 10 | 15 | | - Sign in as `syntaqx`. |
| 11 | 16 | | - Have a terminal open in an empty directory, with Claude Code installed. |
| 12 | 17 | | - Open `https://g1t.sh/syntaqx/hello` in one tab and `https://g1t.sh/` in |
| 13 | 18 | | another. |
| 14 | | − | - Agents take one to three minutes. Start them, talk over something else, |
| 15 | | − | and come back. Do not deploy the runner while they work. |
| 19 | + | - Write the three issues for section 3 in a scratch file so they can be |
| 20 | + | pasted (titles below). Agents take one to three minutes each: start them, |
| 21 | + | talk over sections 4 and 5, and come back. |
| 22 | + | - Do not deploy the runner while agents work. |
| 16 | 23 | | |
| 17 | 24 | | ## 1. The problem (30 seconds) |
| 18 | 25 | | |
| ⋯ |
| 25 | 32 | | > is ordinary git, with issues and pull requests, and it runs entirely on |
| 26 | 33 | | > Cloudflare. |
| 27 | 34 | | |
| 28 | | − | ## 2. It is still git (45 seconds) |
| 35 | + | ## 2. It is still git, and your CI comes with you (1 minute) |
| 29 | 36 | | |
| 30 | 37 | | On `syntaqx/hello`, Code tab. |
| 31 | 38 | | |
| 32 | 39 | | - Show the clone box: HTTPS, and the one line that connects an agent. |
| 33 | 40 | | - In the terminal: `git clone https://g1t.sh/syntaqx/hello.git`. |
| 34 | | − | - Mention: storage is Cloudflare Artifacts; the site, the API and every |
| 35 | | − | service are Workers. |
| 41 | + | - Open `.g1t/workflows/ci.yml`. It is a GitHub Actions workflow, unchanged: |
| 42 | + | `actions/checkout@v7`, a Rust toolchain action, `actions/cache@v6`, then |
| 43 | + | formatting, lints, an "Every flag is documented" step, and tests. |
| 44 | + | |
| 45 | + | > Moving from GitHub is renaming `.github` to `.g1t`. The same workflow |
| 46 | + | > syntax, the same actions from the marketplace, the same `push`, |
| 47 | + | > `pull_request` and `merge_group` events. Storage is Cloudflare Artifacts; |
| 48 | + | > every job runs in its own Cloudflare Container. |
| 36 | 49 | | |
| 37 | | − | ## 3. Many issues, an agent on each (2 minutes) |
| 50 | + | - Actions tab: the runs, by event. Open one and show the steps and the log. |
| 51 | + | |
| 52 | + | ## 3. Many issues, an agent on each (1 minute 30 seconds) |
| 38 | 53 | | |
| 39 | 54 | | Issues tab. |
| 40 | 55 | | |
| 41 | | − | - Point out labels, and that issues come from people, agents or anything |
| 42 | | − | with a token, such as an error tracker. |
| 43 | | − | - Tick several open issues and press **Assign to g1t agent**. Say that |
| 44 | | − | there is nothing else to choose: no number of agents and no model. Each |
| 45 | | − | issue gets an agent of its own and g1t routes the work; every session |
| 46 | | − | opens by naming the model that ran. |
| 47 | | − | - Open **Document the command-line options**. Its draft pull request has |
| 48 | | − | appeared. Show the **Session** tab filling in live: the prompt, the |
| 49 | | − | agent's reasoning, every command. |
| 56 | + | - Create three issues quickly, pasting them in: |
| 57 | + | - **Add a --sparkle flag** that ends the greeting with a sparkle emoji. |
| 58 | + | - **Greet in German** with `--lang de`. |
| 59 | + | - **Explain in the README what happens with no name.** |
| 60 | + | - Tick all three and press **Assign to g1t agent**. Say there is nothing |
| 61 | + | else to choose: no number of agents, no model. Each issue gets an agent of |
| 62 | + | its own and g1t routes the work; every session opens by naming the model |
| 63 | + | that ran. |
| 64 | + | - Open one. Its draft pull request has appeared. Show the **Session** tab |
| 65 | + | filling in live: the prompt, what the agent was told about the other work |
| 66 | + | in progress, every command it runs. |
| 50 | 67 | | |
| 51 | | − | > Each agent has its own sandbox, a Cloudflare Container, and its own fork. |
| 52 | | − | > A fork is copy-on-write, so it costs about what a branch would, and an |
| 53 | | − | > agent cannot damage what it cannot write to. |
| 68 | + | > Each agent has its own sandbox and its own fork. A fork is copy-on-write, |
| 69 | + | > so it costs about what a branch would, and an agent cannot damage what it |
| 70 | + | > cannot write to. Each is told what else is in flight, so two agents on |
| 71 | + | > the same file know about each other before they collide. |
| 54 | 72 | | |
| 55 | | − | While they run, go to the next section. |
| 73 | + | While they run, go on. |
| 56 | 74 | | |
| 57 | | − | ## 4. Checks nobody can fake (1 minute) |
| 75 | + | ## 4. Agents keep CI honest, and fix what it catches (1 minute 30 seconds) |
| 58 | 76 | | |
| 59 | | − | Open **Say goodbye too** and its pull request, **Add a farewell**. |
| 77 | + | Open issue **#80, CI: fail when a flag is missing from the README**, and its |
| 78 | + | pull request **#81**. |
| 60 | 79 | | |
| 61 | | − | - This one was pushed as a branch by a person, the way you already work. |
| 62 | | − | - **Checks failed.** Expand `cargo test` and show the output. |
| 63 | | − | - Changes tab: the reviewer's comment sits on the faulty line. |
| 80 | + | - An agent wrote this CI step. Changes tab: the shell step it added to |
| 81 | + | `ci.yml`. It went through review and the merge queue like any change. |
| 64 | 82 | | |
| 65 | | − | > The issue says what done means: here, `cargo test`. g1t runs that itself, |
| 66 | | − | > in a clean sandbox that holds only this commit. The agent that wrote the |
| 67 | | − | > code never touches the result, so a pass means something. And a pull |
| 68 | | − | > request that has not passed cannot be merged. |
| 83 | + | Open issue **#84, Add a --reverse flag**, and its pull request **#85**. |
| 69 | 84 | | |
| 70 | | − | ## 5. Choosing between pull requests (1 minute 15 seconds) |
| 85 | + | - Its checks, `cargo test`, passed. Its first workflow run did not: |
| 86 | + | **Formatting** failed. Open the run and show the step and its log. |
| 87 | + | - Session tab: the agent's second session opens with the failed run, the |
| 88 | + | instruction to read it with `get_workflow_run` and `get_job_logs`, and to |
| 89 | + | fix the code rather than the workflow. Show it reading the log, fixing |
| 90 | + | the formatting, and pushing. The second run is green. |
| 71 | 91 | | |
| 72 | | − | Open **Greet in Spanish and French**. |
| 92 | + | > Nobody marks their own homework. Workflows run in a clean sandbox on the |
| 93 | + | > exact commit; the agent that wrote the code never touches the result. A |
| 94 | + | > failure goes back to the agent with the log, and the pull request cannot |
| 95 | + | > merge until it is green. |
| 73 | 96 | | |
| 74 | | − | - Two pull requests for the same issue, side by side: checks, size of the |
| 75 | | − | change, who reviewed. |
| 76 | | − | - Open one. Show **Review by a g1t agent**: comments on lines, a summary, a |
| 77 | | − | verdict. Say that an agent cannot review its own pull request. |
| 78 | | − | - Show **Other work is changing the same files**. |
| 97 | + | ## 5. Checks, reviews and choosing between pull requests (1 minute) |
| 79 | 98 | | |
| 80 | | − | > This is the overlap radar. Two pull requests for different issues are |
| 81 | | − | > editing the same file. g1t says so while the work is still going on, not |
| 82 | | − | > at the end as a merge conflict. Agents see the same thing through the API. |
| 99 | + | Open **Say goodbye too** (#4) and its pull request **Add a farewell** (#9). |
| 83 | 100 | | |
| 84 | | − | ## 6. Converging on main (1 minute 15 seconds) |
| 101 | + | - This one was pushed as a branch by a person, the way you already work. |
| 102 | + | - **Checks failed.** Expand `cargo test` and show the output. Changes tab: |
| 103 | + | the reviewer's comment sits on the faulty line. The agent's pull request |
| 104 | + | for the same issue, #10, passed and was merged; #9 was closed. |
| 85 | 105 | | |
| 86 | | − | Open **A blank name greets nobody**. |
| 106 | + | Open **Greet in Spanish and French** (#2). |
| 87 | 107 | | |
| 88 | | − | - It is closed, and it says which pull request resolved it. The other one |
| 89 | | − | is marked superseded. |
| 108 | + | - Two pull requests for one issue, side by side: checks, size of the change, |
| 109 | + | who reviewed. Open one and show **Other work is changing the same files**. |
| 90 | 110 | | |
| 91 | | − | > Two pull requests for one issue, one merged. The issue records which. |
| 111 | + | > This is the overlap radar. g1t says so while the work is still going on, |
| 112 | + | > not at the end as a merge conflict. Agents see the same thing through the |
| 113 | + | > API, which is how the agents in section 3 were told about each other. |
| 92 | 114 | | |
| 93 | | − | Go back to a pull request for the Spanish and French issue that says main |
| 94 | | − | has moved. |
| 115 | + | Open **A blank name greets nobody** (#1): closed, saying which pull request |
| 116 | + | resolved it; the other is marked superseded. |
| 117 | + | |
| 118 | + | ## 6. The merge queue (1 minute 15 seconds) |
| 119 | + | |
| 120 | + | Back to the pull requests from section 3. Their checks have passed and a g1t |
| 121 | + | agent has reviewed them. |
| 122 | + | |
| 123 | + | - With auto-merge on, they enter the **Merge queue** on their own. Open it. |
| 124 | + | |
| 125 | + | > Three changes, written at the same time, each green on its own. That |
| 126 | + | > proves nothing about all three together. The queue builds main with the |
| 127 | + | > first, main with the first and second, and so on, and tests every one of |
| 128 | + | > those combinations at once, in parallel sandboxes: the issues' acceptance |
| 129 | + | > checks, every check main has promised so far, and the repository's |
| 130 | + | > `merge_group` workflows, exactly as GitHub's merge queue sends them. |
| 95 | 131 | | |
| 96 | | − | - Press **Catch up with main**. Open the Session tab. |
| 132 | + | - As each lands, the issue closes, recording which pull request resolved it. |
| 133 | + | - Show #79 and #81 under **Recent**: landed, with the `merge_group` run. |
| 97 | 134 | | |
| 98 | | − | > Something else landed first, so this pull request is behind. A g1t agent |
| 99 | | − | > merges main in. If that conflicts, the agent is given both sides and what |
| 100 | | − | > this pull request is for, and resolves it. Then the checks run again on |
| 101 | | − | > the result. |
| 135 | + | > When a combination fails, that entry is taken out with the reason, the |
| 136 | + | > ones behind it are tested again without it, and its agent is sent back |
| 137 | + | > to fix it. A conflict with something ahead of it says which. |
| 102 | 138 | | |
| 103 | | − | - When it is done, merge it. The issue closes; the other pull request for |
| 104 | | − | it closes as superseded. |
| 139 | + | If one conflicts on camera, so much the better: open its Session and show |
| 140 | + | the agent being given both sides and what the pull request is for. |
| 105 | 141 | | |
| 106 | 142 | | ## 7. Bring your own agent (45 seconds) |
| 107 | 143 | | |
| ⋯ |
| 114 | 150 | | - In Claude Code, `/mcp`, choose g1t. The browser opens on g1t's consent |
| 115 | 151 | | page. Approve. |
| 116 | 152 | | - Ask: "What issues are open on syntaqx/hello on g1t, and which pull |
| 117 | | − | requests overlap?" |
| 153 | + | requests overlap? Did the last CI run pass?" |
| 118 | 154 | | |
| 119 | | − | > No token to paste. The same operations are a REST API at api.g1t.sh, and |
| 120 | | − | > the two are generated from one list, so they cannot drift apart. |
| 155 | + | > No token to paste. The same operations are a REST API at api.g1t.sh, |
| 156 | + | > including GitHub's own Actions endpoints, and the two are generated from |
| 157 | + | > one list, so they cannot drift apart. |
| 121 | 158 | | |
| 122 | 159 | | ## 8. Close (30 seconds) |
| 123 | 160 | | |
| 124 | | − | Back on the first issue: the three pull requests from section 3 are ready, |
| 125 | | − | with their checks. |
| 161 | + | Back on the Issues tab: the three issues from section 3, closed, each saying |
| 162 | + | which pull request resolved it. |
| 126 | 163 | | |
| 127 | | − | > Issues and pull requests, as you know them. What changes is the number of |
| 128 | | − | > hands. Every pull request isolated in its own fork, every decision |
| 129 | | − | > recorded with the code, checks that agents cannot mark themselves, overlap |
| 130 | | − | > flagged while it is happening, and one clear answer to which change you |
| 131 | | − | > took. g1t is open source, and it is hosted on itself. |
| 164 | + | > Issues and pull requests, as you know them, and your GitHub Actions as |
| 165 | + | > they are. What changes is the number of hands. Every agent isolated in its |
| 166 | + | > own fork, told what the others are doing, held to checks and workflows it |
| 167 | + | > cannot mark itself, reviewed, and landed through a queue that tests the |
| 168 | + | > combinations. g1t is open source, free while it is being built out, and |
| 169 | + | > hosted on itself. |
| 132 | 170 | | |
| 133 | 171 | | Show `https://g1t.sh/syntaqx/g1t`. |
| 134 | 172 | | |
| ⋯ |
| 136 | 174 | | |
| 137 | 175 | | | What | Do | |
| 138 | 176 | | | --- | --- | |
| 139 | | − | | An agent's pull request closes itself | Open its Session; the last note says why. Assign another. | |
| 177 | + | | An agent's pull request closes itself | Open its Session; the last note says why. Assign the issue again. | |
| 178 | + | | A workflow stays queued | Open the run and press **Re-run all jobs**. | |
| 140 | 179 | | | Checks stay queued | Press the re-run button on the checks panel. | |
| 141 | | − | | Catch up does nothing | The pull request was already up to date; refresh. | |
| 142 | | − | | Merge is refused | Read the message: it is a draft, its checks have not passed, or main moved. | |
| 180 | + | | Nothing enters the queue | Auto-merge waits for checks, workflows and a review; the pull request's sidebar says which is missing. | |
| 181 | + | | Merge is refused | Read the message: it is a draft, its checks or workflows have not passed, or it needs a review. | |