Reference
Security & privacy
The AI drafts, you publish. Only a description of your commit leaves your machine — never your code.
The AI never publishes#
Writing a draft and publishing a build log are separate steps, on separate requests. The request that asks the AI for a draft stores nothing on Kairo, and the request that publishes never calls the AI. What gets published is exactly what was on your screen when you said yes.
You always approve#
- Publishing takes two answers:
Pat the draft, thenYto a question naming the project and repository it’s going to. - With no terminal to ask — CI, a pipe, an editor’s commit button — nothing is ever published. The CLI prints the draft and stops.
- The post-commit hook only starts a review. It goes through the same two answers.
Repository ownership is checked#
You can only publish to a project you own, from a repository connected to it:
- Connecting goes through GitHub. A repository is connected on the project’s page using Kairo’s GitHub App, and only repositories that the app has been granted, and that your GitHub account can access, are offered.
- Every request is checked on the server. The CLI sends the repository name from your
originremote; Kairo looks for that repository on a project owned by the signed-in account. The CLI can’t choose a different project. - Nothing leaks about other people’s repositories. “Not connected”, “connected to someone else’s project” and “project deleted” all get the same answer: isn’t connected to a Kairo project you own.
Only commit metadata is sent#
To find your project and write a draft, the CLI sends Kairo a description of your latest commit:
| Field | Example |
|---|---|
| Repository | ada/lighthouse, from the origin remote |
| Commit hash | 79de83c… |
| Branch | main |
| Commit message | The full message, subject and body |
| Author | Name and email from the commit |
| Commit time | When the commit was made |
| Size of the change | Number of files changed, lines added and lines removed |
Of these, only the commit message, branch and size of the change are passed to the AI model that writes the draft. When you publish, the CLI sends the repository, the commit hash and your approved title and summary.
Your source code is never uploaded#
The CLI sends no diff, no file contents and no file names — only the counts above. The AI knows how big a change was and what your commit message says about it, not what the code does.
Drafts stay on your machine#
Unpublished drafts are kept only in your local config directory. Kairo doesn’t store a draft until you publish it.
Your sign-in#
No API keys to paste
kairo login uses browser approval of a short code. The token goes straight to the terminal that asked for it; the browser never sees it.
Stored privately
- The token is saved in
credentials.jsonin your user’s config directory. On macOS and Linux the file is readable by your user account only. - It’s only ever sent to the Kairo server it was issued by.
- It lasts 90 days.
Revocable
kairo logout deletes the token from the machine and revokes it on Kairo, so a copied token stops working too.