# Working in a git repository

Pro can work inside one of your repositories the way a coding agent does — reading your actual files, and with writes on, changing them.

## Connecting a repository

`?git`, or the **Git** chip in the toolbar, connects a provider: GitHub, GitLab, or Gitea/Forgejo — which covers Codeberg and self-hosted instances. It takes a scoped personal access token, a repository and a branch.

Once connected, the chip shows the repository name, and messages sent with a [Pro model](https://nymbot.ai/docs/models/#pro) selected run in that repository's context. `?git disconnect` removes it.

## What it can do

A message in repo context runs as a small agent rather than a single completion. The model can list directories, read files and search the tree, then answer using what it actually found — so "why does the retry loop give up early" is answered from your code, not from a guess about code that looks like yours.

It sees the branch you connected, at its current head.

## Turning writes on

`?git writes on` adds the ability to commit files, create branches and open pull or merge requests. Off by default, and worth leaving off until you want it.

With writes on, ask for a change and you get a branch and a pull request to review rather than a patch pasted into chat. Nothing is pushed to your default branch unless that is the branch you connected and you asked for it.

## What a repo task costs

A repo task uses up to six model calls per message — look, read, search, answer — each billed at the pinned model's [Pro price](https://nymbot.ai/docs/credits/#what-a-reply-costs). Only the calls actually used are charged, so a question answered from one file costs about what an ordinary reply costs.

The app reports the total and the number of calls after each repo task.

## About that token

> **About that token**
>
> The access token is stored only on your device and is wiped by a [panic wipe](https://nymbot.ai/docs/identity/#panic). It travels to the Nymbot worker with each request, and is never stored server-side or published to relays. Scope it to the one repository you mean to use, and revoke it at your provider when you are done.

Because it is device-local, it does not sync: connect the repository again on a second device, with a token scoped for that device if you would rather be able to revoke them separately.
