---
title: Session title style — choose how titles are written
---

# Session title style — choose how titles are written

## What it is

Omniscio names a new session by asking a small AI model to summarise your first
message. **Title Style** gives you control over how that title is written, with
five built-in presets and the option to write your own prompt.

## Where to find it

Title Style has no screen of its own — you reach it inside Settings. Open Settings and go to the Sessions page, where you will find the title style preset, a box for extra title instructions, and, under the advanced per-feature models, the choice of which AI model writes and refreshes titles. The preset control only appears when session naming is set to an AI-generated title.

Each project can override the global choice: right-click a project in the sidebar, choose Edit Project, and set that project's own title style preset or its own extra instructions. A project left to inherit the global choice follows whatever the global setting says.

The presets also appear inline on the Lab page, just below the session title styles toggle, when that feature is enabled.

## How it behaves

### Title style presets

| Style            | What it does                                                                 | Auto-refreshes? |
| ---------------- | ---------------------------------------------------------------------------- | --------------- |
| **Brief**        | 2-4 word verb + noun pattern (e.g. "Fix Auth Bug")                           | No              |
| **Descriptive**  | Full context title, up to 80 characters (default)                            | No              |
| **Journey**      | Topic trail with arrows showing progression (e.g. "Auth > Tokens > Caching") | Yes             |
| **Latest Topic** | Always reflects the current conversation focus                               | Yes             |
| **Custom**       | Your own prompt, with optional refresh                                       | Configurable    |

Set the global preset in **Settings > Sessions > Title Style Preset**. The preset
only appears when **Session Naming** is set to _AI-generated title_. The presets
also appear inline on the **Lab** page directly below the Session Title Styles
toggle when the feature is enabled.

### Auto-refresh (Journey and Latest Topic)

Journey and Latest Topic styles automatically update the title as your conversation
evolves, so the title stays relevant even when the topic drifts.

Refresh triggers at natural breakpoints:

- **Context compaction** — when the conversation is summarised to free up context
- **Idle-then-resume** — when a session sits idle for 5+ minutes then resumes

The refresh uses a two-step process to keep costs low:

1. A cheap staleness check (a fast, low-cost model by default) asks whether the
   title still fits
2. Only if the title is stale does a full re-title run (the same fast, low-cost
   model by default)

Manual renames are always protected — if you rename a session by hand, auto-refresh
will never overwrite your choice.

### Custom prompt

When you select **Custom**, a text box appears where you can write your own title
instructions. You can also toggle **Auto-refresh** on or off for custom prompts.

Examples that work well:

- `Always start with the client name, then a dash, then the task.`
- `Use Traditional Chinese.`
- `Keep it to four words or fewer. Prefer nouns over verbs.`

### Per-project override

Each project can override the global title style preset:

| Level           | Where                                                           | Applies to        |
| --------------- | --------------------------------------------------------------- | ----------------- |
| **Global**      | Settings > Sessions > **Title Style Preset**                    | every project     |
| **Per-project** | right-click a project > **Edit Project** > _Title style preset_ | that project only |

A project set to "Inherit global" follows whatever the global setting is.

### Extra title instructions (append prompt)

In addition to the preset, you can write free-form instructions that are **appended**
to whatever preset is active. Two levels, and they stack:

| Level           | Where                                                                     | Applies to        |
| --------------- | ------------------------------------------------------------------------- | ----------------- |
| **Global**      | Settings > Sessions > **Title Style**                                     | every project     |
| **Per-project** | right-click a project > **Edit Project** > _Title style for this project_ | that project only |

If you set both, the global text is read first and the project text second, so a
project can refine or override what the global one says.

### What your instructions can and cannot do

Your text is added **on top of** Omniscio's built-in title instructions, not in
place of them. Five rules always win, however you phrase your preference:

- **Titles stay at or under the style's character ceiling** (40 for Brief, 80 for
  all others). A longer title is thrown away, so asking for "lots of detail" gets
  you _no_ title rather than a long one.
- **Secrets, tokens, email addresses, IP addresses and full file paths are removed.**
- **Your typing slips are corrected** — see below.
- **A message with nothing to title still comes out as `Untitled Session`.**
- **The title stays one line of plain text.**

### Your typos do not end up in the title

A title is generated from your first message, so a typo you made while typing that
message used to be copied straight into it — and then followed the work around for
weeks, in the sidebar, in the worktree list, and in the daily check-up card.

Titles are now spell-corrected as they are written. A missing space (`toget` becomes
`to get`), a misplaced one (`deeps eekworking` becomes `DeepSeek working`), a missing
apostrophe — all fixed. Only the spelling changes: the task itself is never reworded,
so the title still says what you said.

**If the AI namer cannot be reached**, Omniscio falls back to naming the session from
your own words without asking a model. That fallback has no spell-checker, so it fixes
only the mechanical damage it can be certain about — a run-together word, an apostrophe
typed as a hyphen, a stray `#` — and leaves an ordinary misspelling alone rather than
guessing at it. A title made this way is also cut to the first few words, so it can read
as a fragment.

### Model configuration

In **Settings > Sessions > Per-Feature Models** (advanced), you can choose which
AI model handles each step:

- **Initial title model** — the model that generates the first title from your
  opening message. Automatic uses a fast, low-cost model, and names the session
  on your own machine when the on-device title model is available.
- **Title refresh model** — the model that checks staleness and refreshes titles
  for Journey, Latest Topic, and Custom (with refresh on). Automatic uses a fast,
  low-cost model.

### Cost

- **Initial title**: same cost as before — one cheap model call per new session.
- **Refresh**: two calls per refresh event (staleness check + re-title), but only
  when the title is actually stale. The staleness check uses the same fast,
  low-cost model (very cheap) and the full re-title uses it too. Both are capped
  under the same daily cost limit as regular title generation.
- **Brief/Descriptive**: no additional cost — they title once, same as before.

### Leaving it blank changes nothing

Both the preset (Descriptive) and the append prompt (empty) are the defaults, and
those defaults are genuinely inert — Omniscio takes exactly the same code path it
always did. You have to change the preset or type something for anything to change.

## For agents

### Where it lives

- Prompts: `src/shared/types/session-title-prompt.ts` (style templates + compose; every
  style carries the same "fix the user's typing slips" rule)
- No-AI fallback: `src/shared/derive-local-title.ts`, which repairs mechanical damage
  via `src/shared/tidy-title.ts` before it counts words or applies Title Case
- Resolve: `src/main/services/session/session-title-prompt.ts` (style + prompt resolution)
- Refresh: `src/main/services/session/title-refresh-service.ts` (push-bus triggers)
- AI calls: `src/main/services/ai/ai-title-generation.ts` (staleness check + refresh)
- Manual protection: `title_manually_set` column on sessions table
- Applied at all three title-gen call sites in `src/main/ipc/title-orchestrator.ts`
- Contract: `.claude/memory/contracts/session-title-style-contract.md`

## Related

Nothing else in the library documents session naming, so begin at [INDEX.md](INDEX.md), the library index, to find the pages closest to it.
