| Automatic names | Yes, in the interactive TUI. After your first message in an unnamed chat, Codex runs a hidden background request that writes a short title of at most 36 characters. It uses gpt-5.6-luna at low effort when you're signed in with ChatGPT, and your current model otherwise. Renaming the chat cancels any title still being generated. codex exec sessions aren't auto-titled. An unnamed session appears in pickers under its first-message preview. Source | Yes. If you don't name a session, a background request to the small fast model (normally Haiku-class) writes a short title from your first prompt, and accepting a plan in plan mode replaces it with a title based on the plan. Interactive sessions also get a default display name such as my-app-3f for listings like claude agents, but that one can't be used to resume. A claude -p run started directly from a shell or script gets no generated title (since v2.1.277). Titles are written in your conversation's language unless the language setting pins one. Source | Yes. A new chat starts as New Agent. In CLI 2026.10.12, after your first message Cursor's backend generates a short title from that prompt, and the title appears in the resume picker and the terminal tab title. A name you set with /rename is never overwritten. In CLI 2026.10.12, auto-naming runs in interactive and ACP sessions (ACP clients receive a session_info_update with the title); -p runs are not auto-named. The model can't set or change the title itself. Source | Yes. When the first prompt in an untitled top-level session is accepted, the hidden title agent writes a title of up to 100 characters. Choose its model with agents.title.model (a V1 small_model is mapped to it). Source | Not supported No. A session has no name until you set one, and the /resume picker shows its first message instead. An extension can name sessions itself through pi.setSessionName(); see examples/extensions/session-name.ts. Source |
|---|
| Rename a session | Type /rename <name>, or /rename alone to open a naming prompt. It works even while a task is running. You can name a chat as you create it with /new <name> or /fork <name>. When the TUI is connected to the background server (the default), the model can also rename the chat with its set_thread_title tool. The set_thread_title tool isn't offered with --no-daemon or in side chats, which can't be renamed. SDK and app-server clients use thread.set_name(name) / thread/name/set. Source | Start with claude -n <name> (--name), run /rename <name> during the session (with no argument it generates a name from the conversation), or highlight a session in the /resume picker and press Ctrl+R. A SessionStart or UserPromptSubmit hook can return hookSpecificOutput.sessionTitle, and the Agent SDK has renameSession() / rename_session(). Names are capped at 200 characters and control or invisible characters become spaces. In the desktop app you can rename a session by clicking its title, or ask Claude to rename another Code tab session. Source | Run /rename <name> inside a session. There is no CLI flag or subcommand for renaming, and you can't rename from the agent ls picker. Source | In the TUI, /rename <title> sets the title, /rename with nothing after it regenerates it from the conversation, and ctrl+r opens a rename dialog. opencode run --title "..." names a new session, and PATCH /api/session/{id} with title renames one (an empty string regenerates it). Source | Run /name <name> in a session (plain /name shows the current name), or start Pi with --name <name> / -n <name>. In the /resume picker, select a session and press Ctrl+R to rename it. RPC clients send set_session_name, and extensions call pi.setSessionName(). Line breaks in a name are turned into spaces. Pi shows the name in the footer and the terminal title. Source |
|---|
| Find or resume by name | Yes. codex resume <name>, codex fork <name>, codex exec resume <name>, codex exec fork <name>, codex archive|unarchive|delete <name> and /resume <name> all take a session name. A UUID wins if the argument parses as one. The name must match exactly, and if several sessions share it, Codex refuses and asks for the UUID. An unnamed session can be matched by its first-message preview text. Source | Yes. claude --resume <name> or /resume <name> resumes an exact match directly, across the repository and its worktrees; an ambiguous name opens the picker pre-filtered from the shell, or an error from /resume. Generated titles work the same way, and claude -p --resume <name> accepts them too. The default display name (for example my-app-3f) is not a resume handle. Source | Partly Names show in the agent ls / agent --resume / /resume picker (All chats or This workspace), but you can't type to search them. --resume only accepts a chat ID, or -N for the Nth most recent chat. Use /copy-conversation-id to get the current chat's ID. Source | Partly The /sessions picker searches titles (a substring match), but --session only takes an ID, and with an unknown ID it creates a new session. opencode session list prints titles next to IDs. Source | Partly You can search for it in the /resume (or pi --resume) picker, which matches the name along with the ID, message text and folder; Ctrl+N limits the list to named sessions. --session, --fork and --continue take only a file path or session ID, not a name. Source |
|---|
| Where the name is kept | Names are stored in Codex's SQLite state database (~/.codex/state_5.sqlite). Each rename is also appended to ~/.codex/session_index.jsonl, where the newest entry wins. Names survive restart and resume. Forks start without the parent's name, and /export Markdown is just the transcript. Source | Names are written into the session's transcript at ~/.claude/projects/<project>/<session-id>.jsonl: a name you set as a custom-title entry (the latest one wins) and a generated title as an ai-title entry. Names survive resume and compaction, and /clear carries a name you set into the new session but drops a generated title. A /branch copy gets the name you pass, or one taken from the conversation's first prompt. /export writes the conversation as plain text; it is not a resumable session. Source | The name is saved with the chat in ~/.cursor/chats/<workspace-hash>/<chatId>/. In CLI 2026.10.12 it lives in store.db metadata as name and is mirrored as title in meta.json. It survives restarts and --resume, and a fork copies it with (forked) appended. The JSONL transcript copy doesn't include it, and there is no export command. The chats folder follows CURSOR_CONFIG_DIR when set. Source | The title is the title column of the session_v2 table in ~/.local/share/opencode/opencode.db (opencode debug paths db). It survives restarts, is included in opencode session export JSON, and comes back with opencode session import; titles of migrated V1 sessions are kept. Source | Each rename adds a session_info entry with a name field to the session's JSONL file, and the latest one wins (an empty name clears it), so the name survives restarts and resume. pi --fork copies the name along with everything else. /fork, /clone and /export <file>.jsonl copy only the active branch, so they keep the name only if it was set on that branch before the copy point. Source |
|---|