Pick any line to see why it is the way it is: the commit, the pull request and issue it came from, and what the agent was thinking.
| What g1t can't do yet, and an open letter to Cloudflare | 1 | --- |
| 2 | title: What g1t can't do yet | |
| 3 | description: The limits you can hit on g1t today, why each one exists, what to do instead, and whether it is planned. | |
| 4 | --- | |
| 5 | ||
| 6 | This page lists what g1t cannot do today. Each entry says what you can't | |
| 7 | do, why, what to do instead, and where it stands. | |
| 8 | ||
| 9 | Where it stands is one of: | |
| 10 | ||
| 11 | - **Planned**: we intend to build it. We don't give dates we can't keep. | |
| 12 | - **Depends on Cloudflare**: g1t runs on Cloudflare, and this needs | |
| 13 | something the platform does not offer yet. | |
| 14 | - **Not scheduled**: no work is planned on it now. | |
| 15 | ||
| 16 | Several of these depend on Cloudflare; [we wrote to them about it](/about/open-letter-to-cloudflare/). | |
| 17 | ||
| 18 | If you hit a limit that is not here, tell us at | |
| 19 | [g1t.sh/support](https://g1t.sh/support), and we will add it. | |
| 20 | ||
| 21 | ## Git | |
| 22 | ||
| 23 | ### No git over SSH | |
| 24 | ||
| 25 | You can reach repositories only over HTTPS. A `git@g1t.sh:…` remote does | |
| 26 | not work. | |
| 27 | ||
| 28 | - **Why.** SSH needs inbound TCP connections on port 22. g1t runs on | |
| 29 | Cloudflare Workers, which accept HTTP, not raw TCP. Cloudflare has a beta | |
| 30 | for inbound TCP; we have applied and are waiting. | |
| 31 | - **Instead.** Use the HTTPS remote with an | |
| 32 | [access token](/guides/git/#authentication). It does everything SSH would: | |
| 33 | clone, fetch and push. SSH keys you add under **Settings → SSH keys** are | |
| 34 | kept for when SSH arrives. | |
| 35 | - **Status.** Depends on Cloudflare. See [Git](/guides/git/#ssh). | |
| 36 | ||
| 37 | ### Repositories up to 1 GB, files up to 32 MB, no LFS | |
| 38 | ||
| 39 | A repository can hold up to 1 GB and a single file up to 32 MB. Git LFS is | |
| Git storage hardened, pages in tens of milliseconds, honest security alerts, and costs reconciled daily | 40 | not supported. A push that would cross either is declined before it is |
| 41 | stored, and git prints why. See [Size limits](/guides/git/#size-limits). | |
| What g1t can't do yet, and an open letter to Cloudflare | 42 | |
| 43 | - **Why.** These are the limits of Cloudflare Artifacts, where every | |
| Git storage hardened, pages in tens of milliseconds, honest security alerts, and costs reconciled daily | 44 | repository is stored. |
| What g1t can't do yet, and an open letter to Cloudflare | 45 | - **Instead.** Keep large binaries out of the repository: in a release |
| 46 | bucket, a package registry or object storage, fetched at build time. | |
| Git storage hardened, pages in tens of milliseconds, honest security alerts, and costs reconciled daily | 47 | - **Status.** Large file storage is planned. Raising the limits themselves |
| 48 | depends on Cloudflare. | |
| What g1t can't do yet, and an open letter to Cloudflare | 49 | |
| 50 | ### Pushes up to 100 MB each | |
| 51 | ||
| 52 | A single push can carry up to 100 MB. A larger one is refused with HTTP | |
| 53 | `413` before g1t sees it. | |
| 54 | ||
| 55 | - **Why.** Cloudflare's network limits the size of one request body on the | |
| 56 | plan g1t.sh is on. | |
| 57 | - **Instead.** Push history in steps, oldest first: | |
| 58 | `git push origin <older-commit>:refs/heads/main`, then a newer one, then | |
| 59 | `main`. Each push sends only what the last did not. | |
| 60 | - **Status.** Depends on Cloudflare. | |
| 61 | ||
| 62 | ### Imports and mirrors up to 40 MB | |
| 63 | ||
| 64 | Importing or mirroring a repository copies it in one piece of at most | |
| 65 | 40 MB, after compression. | |
| 66 | ||
| 67 | - **Why.** The copy is held in memory while it moves, and a Worker has | |
| 68 | 128 MB for everything it is doing at once. | |
| 69 | - **Instead.** Clone the repository yourself and push it to g1t, in steps if | |
| 70 | it is over 100 MB. See [Import, mirror or move a repository](/guides/github/#what-comes-across). | |
| 71 | - **Status.** Streaming the copy, so size stops mattering, is planned. | |
| 72 | ||
| 73 | ### Partial clone works, but is not promised | |
| 74 | ||
| 75 | `git clone --filter=blob:none` returns a real partial clone today. We don't | |
| 76 | promise it will keep doing so. | |
| 77 | ||
| 78 | - **Why.** Cloudflare's documentation says filters are not supported, but | |
| 79 | they work with git's protocol version 2. We have asked whether that is | |
| 80 | intended. | |
| 81 | - **Instead.** Use it, and fall back to `--depth=1` for a shallow clone, | |
| 82 | which is supported. | |
| 83 | - **Status.** Depends on Cloudflare. | |
| 84 | ||
| 85 | ### No server-side hooks of your own | |
| 86 | ||
| 87 | You can't run a script of your own on g1t when a push arrives, before or | |
| 88 | after its refs move. | |
| 89 | ||
| 90 | - **Why.** The git store has no hook for this. g1t's own checks run in front | |
| 91 | of it, in g1t's code: [protected branches](/guides/git/#protected-branches) | |
| 92 | and [push protection](/guides/security/#push-protection). | |
| 93 | - **Instead.** Protect the default branch and make your workflows | |
| 94 | [required checks](/guides/pull-requests/#required-status-checks). To react | |
| 95 | after a push, use a [webhook](/guides/webhooks/) or a workflow on `push`. | |
| 96 | - **Status.** Not scheduled for your own scripts. A hook in the store, | |
| 97 | which would let g1t enforce more before refs move, depends on Cloudflare. | |
| 98 | ||
| Git storage hardened, pages in tens of milliseconds, honest security alerts, and costs reconciled daily | 99 | ### Very large pushes are scanned after they land, not before |
| What g1t can't do yet, and an open letter to Cloudflare | 100 | |
| Git storage hardened, pages in tens of milliseconds, honest security alerts, and costs reconciled daily | 101 | A very large push is too large for push protection to read before it is |
| 102 | stored, so it is let through, and g1t scans every commit it added | |
| 103 | afterwards, in the background. A secret found that way is an open alert | |
| 104 | rather than a refused push, and the workspace's owners are emailed when one | |
| 105 | looks real. Most pushes are scanned before they land. | |
| What g1t can't do yet, and an open letter to Cloudflare | 106 | |
| 107 | - **Why.** Scanning reads the whole push inside a Worker, which has 128 MB | |
| Git storage hardened, pages in tens of milliseconds, honest security alerts, and costs reconciled daily | 108 | for everything it is doing at once. Past a certain size, scanning could fail |
| 109 | the push outright, and refusing such pushes would block importing real | |
| 110 | repositories. | |
| 111 | - **Instead.** To have a large history checked before it lands, push it in | |
| 112 | steps (see above), so each push is scanned first. Secrets already in | |
| 113 | history are listed under | |
| What g1t can't do yet, and an open letter to Cloudflare | 114 | [Secrets in history](/guides/security/#secrets-in-history). |
| 115 | - **Status.** Planned: scanning while the push streams, at any size. | |
| 116 | ||
| 117 | ### Deleting history does not free storage | |
| 118 | ||
| 119 | Storage is counted from what is pushed, and the count only grows. Deleting | |
| 120 | a branch, or force-pushing over commits, does not lower it. | |
| 121 | ||
| 122 | - **Why.** The git store does not say whether or when it reclaims space | |
| 123 | from objects nothing points to any more, or report how much a repository | |
| 124 | holds. So g1t cannot see it either. | |
| 125 | - **Instead.** Keep large mistakes out with a `.gitignore`. If one landed in | |
| 126 | a private repository and counts against you, tell us at | |
| 127 | [g1t.sh/support](https://g1t.sh/support). | |
| 128 | - **Status.** Depends on Cloudflare. See | |
| 129 | [private repository storage](/guides/usage-and-billing/#private-repository-storage). | |
| 130 | ||
| 131 | ## Pull requests and forks | |
| 132 | ||
| 133 | ### Forks are only for pull requests | |
| 134 | ||
| 135 | You can't fork a repository into your own workspace. On g1t, a fork is a | |
| 136 | pull request's own working copy, made when the pull request is opened. | |
| 137 | ||
| 138 | - **Why.** We built forks to isolate agents' work, one per pull request. | |
| 139 | See [Forks and branches](/concepts/forks/). | |
| 140 | - **Instead.** To contribute, open a pull request: it gets its own fork. To | |
| 141 | start a copy of your own, clone the repository and push it to a new one | |
| 142 | in your workspace; pushing creates it. | |
| 143 | - **Status.** Not scheduled. | |
| 144 | ||
| Pull request forks are removed a day after they merge or close, not a week | 145 | ### Pull request forks are removed a day after they close |
| What g1t can't do yet, and an open letter to Cloudflare | 146 | |
| Pull request forks are removed a day after they merge or close, not a week | 147 | A day after a pull request merges or closes, its fork's git data is |
| Git storage hardened, pages in tens of milliseconds, honest security alerts, and costs reconciled daily | 148 | removed. The pull request's changes stay readable: its head is kept in the |
| 149 | repository as `refs/pull/<pull request id>/head`. Pushing to the fork, or | |
| 150 | reopening the pull request, makes the fork again from there. | |
| What g1t can't do yet, and an open letter to Cloudflare | 151 | |
| 152 | - **Why.** Cloudflare has not documented whether a fork shares stored | |
| Git storage hardened, pages in tens of milliseconds, honest security alerts, and costs reconciled daily | 153 | objects with its source or copies them, so forks are not kept longer |
| 154 | than they are useful. | |
| 155 | - **Instead.** Nothing you need to do. To keep working on a closed pull | |
| 156 | request's change, fetch `refs/pull/<pull request id>/head` and push it | |
| 157 | to a branch. | |
| 158 | - **Status.** Clear fork storage rules depend on Cloudflare. | |
| What g1t can't do yet, and an open letter to Cloudflare | 159 | |
| Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar | 160 | ### Some dependency update options are not applied yet |
| 161 | ||
| 162 | g1t reads and checks every option of a `dependabot.yml` file, but does not | |
| 163 | act on all of them yet: | |
| 164 | ||
| 165 | - Version update pull requests are opened for npm, Cargo, Go and pip only. | |
| 166 | Entries for other ecosystems are checked and listed, and open nothing. | |
| 167 | ||
| 168 | - A multi-ecosystem group opens one pull request per ecosystem, not one | |
| 169 | for the group. | |
| 170 | - Registries that sign in with OIDC are not used. | |
| 171 | ||
| 172 | - **Instead.** Keep a separate entry per ecosystem and directory, and | |
| 173 | check the Security page, which lists what each entry reads but does not | |
| 174 | act on. See [Dependency updates](/guides/dependency-updates/#options). | |
| 175 | - **Status.** Planned. | |
| 176 | ||
| What g1t can't do yet, and an open letter to Cloudflare | 177 | ### No conflict resolution in the browser |
| 178 | ||
| 179 | You can't resolve a merge conflict on the pull request's page. | |
| 180 | ||
| g1t is one name: its agent's work, commits and comments show as @g1t, and nobody can claim g1t or g1t-agent | 181 | - **Instead.** Ask g1t to resolve it, or fix it on the command line. |
| What g1t can't do yet, and an open letter to Cloudflare | 182 | See [Conflicts](/guides/pull-requests/#conflicts). |
| 183 | - **Status.** Planned. | |
| 184 | ||
| 185 | ## Actions and runners | |
| 186 | ||
| Merge branch 'main' into actions-toolkit-oidc-artifacts | 187 | ### Docker shares the job's network |
| What g1t can't do yet, and an open letter to Cloudflare | 188 | |
| Merge branch 'main' into actions-toolkit-oidc-artifacts | 189 | A job's Docker Engine runs its containers on the job's own network, not on |
| 190 | networks of their own. A service is reached at `localhost` and by its | |
| 191 | name, as on GitHub, but two containers cannot listen on the same port, and | |
| 192 | `docker network create` gives no separation between containers. | |
| What g1t can't do yet, and an open letter to Cloudflare | 193 | |
| Merge branch 'main' into actions-toolkit-oidc-artifacts | 194 | - **Why.** Jobs run in Cloudflare Containers, which let a container run |
| 195 | Docker but not route a container network of its own out, or change its | |
| 196 | packet filter. Sharing the job's network is also what keeps the job's | |
| 197 | guardrails on every container. | |
| 198 | - **Instead.** Give containers that would clash different ports. | |
| 199 | - **Status.** Not scheduled. | |
| 200 | ||
| 201 | ### No `type=gha` build cache | |
| 202 | ||
| 203 | Buildx's GitHub Actions cache backend (`cache-to: type=gha`) is skipped on | |
| 204 | g1t, and the build runs without a cache. | |
| 205 | ||
| 206 | - **Why.** It talks to GitHub's cache service, which g1t's cache does not | |
| 207 | speak yet. | |
| 208 | - **Instead.** Use a registry cache in g1t's container registry | |
| 209 | (`type=registry`), or `type=local` with `actions/cache`. See | |
| 210 | [caching image builds](/guides/actions/#caching-image-builds). | |
| 211 | - **Status.** Planned. | |
| 212 | ||
| 213 | ### No multi-platform image builds on g1t's machines | |
| 214 | ||
| 215 | Building an image for another platform, such as `linux/arm64`, needs QEMU's | |
| 216 | emulators, which g1t's machines do not have set up. | |
| 217 | ||
| 218 | - **Instead.** Build other platforms on a | |
| 219 | [self-hosted runner](/guides/self-hosted-runners/) of that architecture, | |
| 220 | or one with QEMU set up. | |
| 221 | - **Status.** Planned. | |
| What g1t can't do yet, and an open letter to Cloudflare | 222 | |
| 223 | ### Linux only on g1t's machines | |
| 224 | ||
| 225 | A job with `runs-on: windows-latest` or `macos-latest` fails on g1t's own | |
| 226 | machines. | |
| 227 | ||
| 228 | - **Instead.** [Self-hosted runners](/guides/self-hosted-runners/) run Linux, | |
| 229 | macOS and Windows, on x64 and arm64. | |
| 230 | - **Status.** Not scheduled. | |
| 231 | ||
| Merge branch 'worktree-agent-a641fa0e2e4fffccb' into claude/cool-newton-7nm8r9 | 232 | ### No background steps |
| 233 | ||
| 234 | GitHub's background steps (`background: true` on a step, and `wait`, | |
| 235 | `wait-all`, `cancel` and `parallel` steps) are refused: a workflow with one | |
| 236 | does not run on g1t. A schedule's `timezone`, `concurrency.queue`, | |
| 237 | `cancel-timeout-minutes` and `snapshot` are read but not applied: schedules | |
| 238 | run in UTC, a concurrency group keeps one run waiting, a cancelled job stops | |
| 239 | in its usual time, and no runner image is made from a job. The workflow's | |
| 240 | page says so. | |
| 241 | ||
| 242 | - **Why.** They are newer than g1t's runner, which runs a job's steps one | |
| 243 | after another. | |
| 244 | - **Instead.** Start a long-running process with `&` in a `run:` step and | |
| 245 | stop it in a later one; write a schedule's `cron` in UTC. | |
| 246 | - **Status.** Not scheduled. | |
| 247 | ||
| Merge branch 'worktree-agent-ac79a505eca749d4d' into claude/cool-newton-7nm8r9 | 248 | ### Self-hosted Windows and macOS jobs run on the host |
| 249 | ||
| 250 | On a self-hosted runner, a job native to Windows or macOS runs directly on | |
| 251 | the machine, unsandboxed, in host mode, which is deprecated. Only Linux | |
| 252 | jobs run in a sandbox of their own, a container inside the runner's own | |
| 253 | container under Sysbox. | |
| 254 | ||
| 255 | - **Why.** Sandboxes for them are not built yet: Windows containers with | |
| 256 | Hyper-V isolation, and ephemeral macOS virtual machines (two per Mac at | |
| 257 | most, by Apple's licence). | |
| 258 | - **Instead.** Run Linux jobs in | |
| 259 | [the runner's container](/guides/self-hosted-runners/#run-it-as-a-container), | |
| 260 | and keep Windows and macOS runners for repositories whose code you | |
| 261 | trust. Host mode refuses public repositories' work. | |
| 262 | - **Status.** Planned. See | |
| 263 | [Windows and macOS](/guides/self-hosted-runners/#windows-and-macos). | |
| 264 | ||
| 265 | ### A self-hosted job's Docker can reach its runner's container | |
| 266 | ||
| 267 | On a runner in its container under Sysbox, a job that uses Docker gets an | |
| 268 | engine of its own that is privileged inside the runner's container. It | |
| 269 | cannot reach the machine, but it can reach the runner's container, | |
| 270 | including the runner's credential. | |
| 271 | ||
| 272 | - **Instead.** Use ephemeral runners for code you do not trust, or | |
| 273 | register with `--no-job-docker`. | |
| 274 | - **Status.** Not scheduled. | |
| 275 | ||
| `actions/checkout` is the real action now, at the version a step names: g1t's runner no longer checks out in its place. It fetches from g1t with the job's token, as on GitHub, including a pull request's test merge commit, which g1t now keeps in the repository as `refs/pull/<number>/merge` beside `refs/pull/<number>/head`, and its post step removes the credential it left. Every input and output is the action's own. In a job container whose image has no git, the action falls back to a tarball download g1t does not serve yet, and `lfs` finds no files: the limitations say so, with what to do instead. | 276 | ### `actions/checkout` without git, or with Git LFS |
| Merge branch 'worktree-agent-a1eb74e8a85291bbb' into claude/cool-newton-7nm8r9 | 277 | |
| `actions/checkout` is the real action now, at the version a step names: g1t's runner no longer checks out in its place. It fetches from g1t with the job's token, as on GitHub, including a pull request's test merge commit, which g1t now keeps in the repository as `refs/pull/<number>/merge` beside `refs/pull/<number>/head`, and its post step removes the credential it left. Every input and output is the action's own. In a job container whose image has no git, the action falls back to a tarball download g1t does not serve yet, and `lfs` finds no files: the limitations say so, with what to do instead. | 278 | `actions/checkout` is the action itself. In a job container whose image |
| 279 | has no git, it downloads the repository as a tarball from | |
| 280 | `GET /repos/{owner}/{repo}/tarball/{ref}`, which g1t does not serve yet, | |
| 281 | and fails. With `lfs: true`, it finds no LFS files: g1t keeps none. | |
| Merge branch 'worktree-agent-a1eb74e8a85291bbb' into claude/cool-newton-7nm8r9 | 282 | |
| `actions/checkout` is the real action now, at the version a step names: g1t's runner no longer checks out in its place. It fetches from g1t with the job's token, as on GitHub, including a pull request's test merge commit, which g1t now keeps in the repository as `refs/pull/<number>/merge` beside `refs/pull/<number>/head`, and its post step removes the credential it left. Every input and output is the action's own. In a job container whose image has no git, the action falls back to a tarball download g1t does not serve yet, and `lfs` finds no files: the limitations say so, with what to do instead. | 283 | - **Instead.** Use an image with git, or install git in a step before the |
| 284 | checkout. Keep large files out of Git LFS for now. | |
| 285 | - **Status.** Planned. | |
| Merge branch 'worktree-agent-a1eb74e8a85291bbb' into claude/cool-newton-7nm8r9 | 286 | |
| Merge runner image: Java 21, .NET 8, Ruby 3.3 | 287 | ### No `gh` command in jobs |
| 288 | ||
| 289 | The runner does not include the `gh` command, and pointing it at g1t | |
| 290 | (`GH_HOST=g1t.sh`) does not work. | |
| 291 | ||
| 292 | - **Why.** Most of `gh`'s commands use a GraphQL API, and the rest expect | |
| 293 | the REST API under `/api/v3` on the same host. g1t's API is REST, at | |
| 294 | `api.g1t.sh`. | |
| 295 | - **Instead.** Call the API with `curl` and the job's token. See | |
| 296 | [calling g1t's API from a job](/guides/actions/#calling-g1ts-api-from-a-job). | |
| 297 | - **Status.** Not scheduled. | |
| 298 | ||
| 299 | ### One Ruby for `ruby/setup-ruby` | |
| 300 | ||
| 301 | On g1t's machines, `ruby/setup-ruby` finds Ruby 3.3, which the runner | |
| 302 | includes, and fails for any other version. | |
| 303 | ||
| 304 | - **Why.** Its prebuilt Rubies are for other Linux systems, so on Debian it | |
| 305 | uses only the Rubies already in `RUNNER_TOOL_CACHE`. | |
| 306 | - **Instead.** Use 3.3, run the job in a `container:` with the Ruby you | |
| 307 | need (such as `ruby:3.4`), or build it in a step with `ruby-build`. See | |
| 308 | [languages and their setup actions](/guides/actions/#languages-and-their-setup-actions). | |
| 309 | - **Status.** Not scheduled. | |
| 310 | ||
| What g1t can't do yet, and an open letter to Cloudflare | 311 | ### Machine sizes, time and storage |
| 312 | ||
| 313 | | Limit | Value | | |
| 314 | | --- | --- | | |
| 315 | | Largest machine | 4 vCPUs, 12 GiB of memory, 20 GB of disk (`g1t-4core`). No GPUs. | | |
| 316 | | One job on g1t's machines | 60 minutes. On a self-hosted runner, 24 hours. | | |
| Git storage hardened, pages in tens of milliseconds, honest security alerts, and costs reconciled daily | 317 | | One cache entry | 2 GiB, compressed. A larger one is not saved. | |
| 318 | | A repository's caches | 10 GiB together. Past it, the entries restored longest ago are removed. | | |
| Actions: OIDC tokens, the toolkit's cache and artifact services, and artifacts in R2 | 319 | | One artifact | 5 GiB, zipped. Kept 14 days unless the repository says otherwise, at most 90. | |
| 320 | | A run's artifacts | 10 GiB together. | | |
| What g1t can't do yet, and an open letter to Cloudflare | 321 | |
| 322 | The machine sizes are Cloudflare Containers' instance sizes. For more, use a | |
| 323 | [self-hosted runner](/guides/self-hosted-runners/). See | |
| 324 | [Machine sizes](/guides/actions/#machine-sizes) and [the cache](/guides/actions/#the-cache). | |
| 325 | ||
| 326 | ### Workflow features not supported yet | |
| 327 | ||
| Actions: OIDC tokens, the toolkit's cache and artifact services, and artifacts in R2 | 328 | - Actions that upload or download artifacts with the toolkit's artifact |
| 329 | library themselves. The library refuses to run against any server but | |
| 330 | github.com. `actions/upload-artifact`, `actions/download-artifact` and | |
| 331 | `actions/upload-artifact/merge` work, as g1t runs them itself. | |
| `actions/cache`, `actions/cache/restore` and `actions/cache/save` are the real actions now, at the version a step names, as `setup-node` and every other action are: g1t's runner no longer stands in for them by name. They save to and restore from the repository's cache through the toolkit's cache service, which g1t already answered, so an entry `actions/cache` saves is restored by `setup-node` with the same key and paths, and the other way round, as on GitHub. Entries the stand-in saved were versioned its own way and are not restored by the real action: each cache misses once, then fills again. As for every toolkit cache, an entry between 100 and 128 MB, which the toolkit sends in one request, is not saved. The Actions guide and the limitations say so. | 332 | - A cache entry between 100 and 128 MB saved by `actions/cache` or another |
| 333 | action built on the toolkit, such as `setup-node` with `cache: npm`. The toolkit sends an | |
| Actions: OIDC tokens, the toolkit's cache and artifact services, and artifacts in R2 | 334 | entry under 128 MB in one request, and g1t takes at most 100 MB in one |
| 335 | request, as for [pushes](#pushes-up-to-100-mb-each). The step warns and | |
| 336 | the job goes on; smaller and larger entries are saved. | |
| Merge branch 'worktree-agent-a8b78c62188153aa3' into claude/cool-newton-7nm8r9 | 337 | - `on: label`: creating, editing or deleting a label starts no workflows. |
| 338 | Putting a label on an issue or a pull request starts `issues` and | |
| 339 | `pull_request` workflows with the `labeled` type. | |
| 340 | - The `pull_request` activity types `unassigned`, `locked`, `unlocked`, | |
| 341 | and `edited` for a new title or description, and the `issues` types | |
| 342 | `unassigned`, `locked`, `unlocked`, `pinned` and `unpinned`: g1t starts | |
| 343 | no workflows for them. | |
| What g1t can't do yet, and an open letter to Cloudflare | 344 | |
| 345 | See [Not yet](/guides/actions/#not-yet). **Status.** Planned. | |
| 346 | ||
| Actions: OIDC tokens, the toolkit's cache and artifact services, and artifacts in R2 | 347 | ### No npm trusted publishing or provenance |
| 348 | ||
| 349 | A workflow on g1t can't publish to npm with trusted publishing, or with | |
| 350 | `--provenance`. | |
| 351 | ||
| 352 | - **Why.** Both trade the job's OIDC token with npm and Sigstore, which | |
| 353 | accept tokens only from the CI services they list. g1t's | |
| 354 | [OIDC tokens](/guides/actions/#oidc-tokens) work with any cloud that | |
| 355 | lets you add an issuer, and npm does not. | |
| 356 | - **Instead.** Publish with a granular access token in a secret | |
| 357 | (`NODE_AUTH_TOKEN`); see [npm](/guides/actions/#npm). | |
| 358 | - **Status.** Depends on npm. | |
| 359 | ||
| What g1t can't do yet, and an open letter to Cloudflare | 360 | ## Deployments |
| 361 | ||
| 362 | ### Static sites and Workers only | |
| 363 | ||
| 364 | Deployments run static sites and Workers projects. You can't deploy a | |
| 365 | long-running server, a container, or an app that needs a process that stays | |
| 366 | up. | |
| 367 | ||
| 368 | - **Why.** Apps run on Cloudflare Workers, which run only while they answer a | |
| 369 | request. That is why an app nobody visits costs nothing. | |
| 370 | - **Instead.** Deploy the server from a workflow to wherever it runs today, | |
| 371 | with its credentials in [secrets](/guides/secrets-and-variables/). | |
| 372 | - **Status.** A runtime for servers is planned. | |
| 373 | ||
| 374 | ### Some Workers bindings are not provisioned | |
| 375 | ||
| 376 | A Workers project deploys without D1, KV, R2, Durable Objects, Queues, | |
| 377 | service bindings, Vectorize, Hyperdrive, Workers AI or Workflows, and its | |
| 378 | cron triggers are not scheduled. | |
| 379 | ||
| 380 | - **Why.** Each of these is a resource g1t has to create and bill per | |
| 381 | project, and that is not built yet. | |
| 382 | - **Instead.** Check that a binding exists before using it. The deployment | |
| Git storage hardened, pages in tens of milliseconds, honest security alerts, and costs reconciled daily | 383 | lists each binding it left out, and warns when its cron triggers will |
| 384 | not run. | |
| What g1t can't do yet, and an open letter to Cloudflare | 385 | - **Status.** Planned. See [Workers projects](/guides/deployments/#workers-projects). |
| 386 | ||
| 387 | ### Build and size limits | |
| 388 | ||
| 389 | A build stops after 45 minutes. A static site can have up to 20,000 files | |
| 390 | and 25 MiB per file, which are Cloudflare's limits. See | |
| 391 | [Static sites](/guides/deployments/#static-sites). | |
| 392 | ||
| 393 | ## Data residency | |
| 394 | ||
| 395 | You can't choose where a workspace's data is stored. g1t's databases keep | |
| 396 | their primary copy in the United States, with read copies in other regions | |
| 397 | so pages load fast. Repositories are not pinned to a region. | |
| 398 | ||
| 399 | - **Why.** Cloudflare fixes the region of a repository store when it is | |
| 400 | created, and g1t has one store so far. | |
| 401 | - **Instead.** None today, if your data must stay in the EU. | |
| 402 | - **Status.** EU residency, with an EU-only repository store and databases, | |
| 403 | is planned. | |
| 404 | ||
| 405 | ## Billing | |
| 406 | ||
| 407 | ### Some costs are not fully defined yet | |
| 408 | ||
| 409 | Cloudflare starts billing for Artifacts, where repositories are stored, on | |
| 410 | October 14, 2026, and has not yet said exactly which calls count as a | |
| 411 | billable operation. | |
| 412 | ||
| 413 | - **What g1t does.** It counts every clone, fetch and push through its git | |
| 414 | endpoints. Each day it checks what Cloudflare billed it for containers and | |
| 415 | apps against what was used. When a cost moves, | |
| 416 | g1t's price moves with it, and every change is listed with its reason on | |
| 417 | [g1t.sh/pricing](https://g1t.sh/pricing). | |
| 418 | - **What this means for you.** Prices can change while Cloudflare's beta | |
| 419 | products settle. They follow cost. | |
| 420 | See [How prices are set](/guides/usage-and-billing/#how-prices-are-set) | |
| 421 | and [git operations](/guides/usage-and-billing/#git-operations). | |
| 422 | - **Status.** Depends on Cloudflare. | |
| 423 | ||
| 424 | ### Payments are in test mode | |
| 425 | ||
| Git storage hardened, pages in tens of milliseconds, honest security alerts, and costs reconciled daily | 426 | While payments are in test mode, no real card is charged, so a card check |
| 427 | proves nothing. g1t's hosted models are open only to a few invited | |
| 428 | workspaces, g1t's own among them. Every other workspace, trial or not, | |
| 429 | runs its agents on its own model provider; without one, assigning an agent | |
| 430 | is refused with a message that says so. | |
| What g1t can't do yet, and an open letter to Cloudflare | 431 | |
| 432 | - **Instead.** Connect your own [model provider](/guides/models/). Your | |
| 433 | agents then run on your keys, and the provider bills you directly. | |
| 434 | - **Status.** Planned: hosted models for every workspace once payments go | |
| 435 | live. | |
| 436 | ||
| 437 | ## Agents | |
| 438 | ||
| 439 | ### Confidence is a judgement, not a guarantee | |
| 440 | ||
| 441 | The confidence g1t gives an agent's change, high, medium or low, is | |
| 442 | worked out from what g1t can observe: checks, reviews, revisions, the size | |
| 443 | and reach of the change. It cannot tell whether the change is correct. | |
| 444 | ||
| 445 | - **Instead.** Keep **Ask a person before merging low-confidence changes** | |
| 446 | on, and make your workflows required checks. A high rating on a | |
| 447 | repository with weak tests means less. See | |
| g1t is one name: its agent's work, commits and comments show as @g1t, and nobody can claim g1t or g1t-agent | 448 | [How sure the agent is](/guides/working-with-g1t/#how-sure-the-agent-is). |
| What g1t can't do yet, and an open letter to Cloudflare | 449 | - **Status.** The signals and their weights may change as we learn from |
| 450 | real changes. | |
| 451 | ||
| 452 | ### Agents' model calls go through g1t | |
| 453 | ||
| 454 | An agent's model requests always pass through g1t's model proxy, | |
| 455 | `models.g1t.sh`, with your keys or g1t's. You can't point an agent's sandbox | |
| 456 | straight at a provider. | |
| 457 | ||
| 458 | - **Why.** So that no key is ever inside a sandbox, and so budgets, caps and | |
| 459 | the audit log hold. See [Your keys never reach a sandbox](/guides/models/#your-keys-never-reach-a-sandbox). | |
| 460 | - **Status.** Not planned. This is by design. | |
| 461 | ||
| 462 | ## Accounts, status and self-hosting | |
| 463 | ||
| 464 | ### Sign-up needs an invite | |
| 465 | ||
| 466 | g1t is invite-only for now. See [Invites](/guides/authentication/#invites). | |
| 467 | **Status.** Opening sign-up is planned. | |
| 468 | ||
| One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers | 469 | ### Tokens for one workspace you belong to |
| Docs and plan: fine-grained tokens, workspace token rules, workflow files, workspace token Write | 470 | |
| One kind of access token; presence and status; usernames keep their case; the tour is a miniature of the real app; icons for password managers | 471 | A personal access token can be made for one workspace only when you are a |
| 472 | member of it. For a repository where you are an outside collaborator, make | |
| 473 | a token for all your workspaces. A workspace's | |
| Docs and plan: fine-grained tokens, workspace token rules, workflow files, workspace token Write | 474 | [rules for tokens](/guides/authentication/#a-workspaces-rules-for-tokens) |
| 475 | cover personal access tokens only, not applications you signed in to with | |
| 476 | OAuth. **Status.** Planned. | |
| 477 | ||
| What g1t can't do yet, and an open letter to Cloudflare | 478 | ### No uptime commitment during the beta |
| 479 | ||
| 480 | g1t does not promise a particular uptime or offer a service level agreement | |
| 481 | unless you have a written agreement with us. Several of the Cloudflare | |
| 482 | products g1t is built on are in beta and have none either. | |
| 483 | [status.g1t.sh](https://status.g1t.sh/) shows how each part of g1t is doing, | |
| 484 | and every incident. Sandboxes are not checked there yet. See | |
| 485 | [Status and incidents](/guides/status/). **Status.** Not scheduled during | |
| 486 | the beta. | |
| 487 | ||
| 488 | ### Self-hosting is early | |
| 489 | ||
| 490 | [Running g1t yourself](/guides/self-hosting/) gives you the core forge: | |
| g1t is one name: its agent's work, commits and comments show as @g1t, and nobody can claim g1t or g1t-agent | 491 | accounts, repositories over HTTP, issues and pull requests. g1t's agent, |
| What g1t can't do yet, and an open letter to Cloudflare | 492 | Actions, deployments, git over SSH, the REST API and MCP are off, and it is |
| 493 | not ready for the open internet. **Status.** Planned, in phases. | |
| 494 | ||
| 495 | ### Not built yet | |
| 496 | ||
| Teams and CODEOWNERS, labels and milestones, dependency updates, the security suite, and a clearer top bar | 497 | |
| What g1t can't do yet, and an open letter to Cloudflare | 498 | - **Releases and package registries.** Planned. |
| 499 | - **Wikis.** Not scheduled. Keep docs in the repository. |
This file's history is long; its oldest lines are credited to the oldest commit read.