---
title: Review session titles (how an AI reviewer session is named)
---

# Review session titles (how an AI reviewer session is named)

## What it is

When an agent starts a separate session to review its work — a plan review, a code review — that
session is titled in one fixed shape:

```
[<Kind> Review] <AI>: <What it reviews>
```

For example `[Code Review] GLM: Fix the login redirect`, or `[Plan Review] DeepSeek: Nightly backup
retry`.

The point is the session list. Reviewer sessions arrive in batches and are short-lived, and before
this each agent improvised its own wording — "glm review (plan)", "GLM review — code: …", "GLM plan
review - …" — so two reviews of the same work rarely looked alike. The fixed shape answers three
questions at a glance:

- **`[<Kind> Review]`** — what sort of review it is: Code or Plan.
- **`<AI>`** — which AI is doing the review, spelled the way the app spells it everywhere else
  (GLM, DeepSeek, Codex, Gemini, Claude, …).
- **`<What it reviews>`** — the work under review, in a few words written by the agent that asked
  for the review.

## Where to find it

The title appears on the reviewer's own session row — in the session list, the inbox, and anywhere
else that session is listed. There is no screen to open: the title is set when the reviewer session
starts. Most reviewer sessions come from the Dev Pipeline's AI Code Review phase and its cross-vendor
peer review.

## How it behaves

- **The fixed part is written by the app.** The review type is capitalised and "Review" appears once
  inside the brackets, and the AI's name comes from the app's own list of engines — never from how
  the agent happened to type it.
- **The subject always starts with the asking agent's words.** The app never guesses it from the
  reviewer's instructions; a request without one is turned down with a message asking the agent to
  write it. When several reviewers look at the same thing and the agent did not give each one its
  own angle, the app appends one from a fixed rotation ("security", "test coverage", …) so their
  titles still read apart.
- **Titles stay within 100 characters.** When a subject is long, only the subject is shortened (it
  ends in `...`); the `[<Kind> Review] <AI>:` part stays whole.
- **A bad request costs nothing.** A review with a blank subject or an unrecognised review type is
  refused before any reviewer starts — there is no way to send a review with a hand-written title
  instead, or one that is not a locked session.
- **The title sticks.** The AI auto-titler only renames sessions still carrying a placeholder name,
  so a review title is never rewritten.
- **Only review sessions change.** Sessions you start yourself, Overseer workers, mission crew
  members and every other kind of session keep the naming they had. Sessions that already exist keep
  their old titles.

## For agents

A review's title is built from two things you send to `POST /reviews` — never a `name` you write
yourself, and never a separate lock field; every review Omniscio starts is a locked session:

```json
{
  "kind": "code",
  "subject": "Fix the login redirect",
  "work": "<the diff, or the plan>",
  "readRoot": "<your worktree's absolute path>",
  "stage": "build"
}
```

- **`subject`** — up to 200 characters, yours to write: what the review is about, in a few words.
  Every reviewer's title starts with it.
- **`reviewers[].focus`** — up to 500 characters, optional, one per named reviewer: that reviewer's
  own angle ("security", "the retry path"). Leave it out and Omniscio appends one from a fixed
  rotation instead, so several reviewers of the same subject still read apart in the session list.
- **`kind`** — exactly `"plan"` or `"code"` — supplies the `[Plan Review]` / `[Code Review]` part.
- The AI named in the title is whichever engine actually reviews — the one a `reviewers` entry
  names, or the one a Dev Pipeline `stage` resolves to — never how you happened to type it.

There is no way to hand-write a review session's title, and no way to start a review that is not a
locked reviewer.

The composing function is `formatReviewSessionTitle` in `src/shared/review-session-title.ts`; the
promises it keeps are in `.claude/memory/contracts/review-session-title-contract.md`. Starting a
review at all — the full request shape, `stage` vs `reviewers`, and what comes back — is
`.claude/memory/contracts/review-service-contract.md`.

## Related

- [dev-pipeline.md](dev-pipeline.md) — the Dev Pipeline, whose AI Code Review phase and cross-vendor
  peer review start most reviewer sessions.
- [overseer-worker-titles.md](overseer-worker-titles.md) — the matching fixed title shape for workers
  an Overseer spawns.
- [rename-a-session.md](rename-a-session.md) — renaming any session by hand.
