Documentation

Kairo: triage, review, and Ask

Spam triage for outside contributions, Kairo Review on Change Requests, and Ask on any repository.

Kairo is the AI built into Upstream. It does three things on upstream.codes.

Spam triage

Triage is free and unlimited on every plan. It checks change requests, issues, discussions, and comments from people outside the project. Maintainers, organization members, trusted people, and anyone with a merged change request skip it.

Kairo judges effort and quality. It never judges whether an agent wrote something. Quick checks run first, such as a brand-new account, a tiny docs-only change, a duplicate, or an ignored template. Only unclear cases go to the AI check.

Flagged items move to the Triage page and out of the main lists. Authors still see their own items, with a short reason and a Request a human look button. Nothing is ever deleted. Maintainers decide with Not spam or Spam.

Optional settings, under Settings → Kairo:

  • How strict triage is: relaxed, normal, or strict.
  • Close likely spam automatically. Only when Kairo is very confident and the quick checks agree.
  • Ask the author first. For unclear items, Kairo asks the author for context before pinging maintainers.
  • Require a linked issue, and limit open change requests per outside contributor.

Maintainers get one daily digest instead of a notification per item.

Kairo Review

Kairo Review reads a Change Request version and reports every real problem: bugs, security issues, and broken repository rules. There is no limit on findings. Nitpicks are off unless you turn them on.

Kairo reads the diff, related code, linked issues, AGENTS.md, and CONTRIBUTING.md. On paid plans it also reads house rules from .upstream/review.md. It never reads private workspace context on upstream.codes.

When a new version arrives, Kairo reviews only the files that changed and closes its own findings that were fixed. Its result is the kairo/review check. Make it a required check to block merges on open issues.

Every finding has Fixed, Won't fix, and Wrong. Won't fix and Wrong become notes Kairo follows in future reviews of that repository. Only maintainers can teach it.

The owner or an admin chooses whether Kairo reviews every change request or only when asked. Each repository can override that. Ask from a Change Request with the Kairo button, or comment:

  • @Kairo review to review the current version.
  • @Kairo review deep for a deeper review (maintainers, paid plans). A deep review counts as 6 units per 400 changed lines.

Mention Kairo

Type @ in any comment on a Change Request to mention Kairo. Ask it anything about the change, like @Kairo why does this cache per session?, and it replies in the same thread with links to the code. Mention it in a thread on a changed line and it starts from that line.

Anyone who can comment can ask. Each question counts as one of your daily Ask questions, and failed answers aren't counted. Kairo always replies, even when it can't help, so a mention is never ignored. It can't push code, approve, or merge; when you ask for a change, it says what to change.

Ask

Press ⌘I on any repository to ask about it. Kairo answers from the code with links to the exact lines, and says when it doesn't know. It can't change anything. Signed-in people can share an answer from a public repository as a link.

On Pro and Team, switch the dock from This repository to All of the namespace to ask across every repository you can read there. Maintainers see what people ask most under Settings → Kairo.

Usage and billing

FreeProTeamEnterprise
Spam triageUnlimitedUnlimitedUnlimitedUnlimited
Kairo ReviewReview Lite on public repositories, 30 units a month300 units a month300 units per seat, pooled300 units per seat, pooled
Ask10 questions a day100 a day60 per seat a day, pooled150 per seat a day, pooled

One review unit covers up to 400 changed lines. Review Lite skips change requests over 2,000 changed lines. On Free, every namespace you own shares one allowance. The repository owner pays for reviews; the person asking pays for questions. Failed reviews and answers are refunded. Paid plans can keep going on credits after the allowance, up to a monthly limit you set in Settings → Billing.

Your code is never used to train models.