Skip to content

ADR 0143: Make Session Titles User-Renamable ​

  • Status: Accepted
  • Date: 2026-09-01

Context ​

Tasks are durable sessions, but their labels are currently controlled by the default title and first-prompt auto-title flow. Once a task has accumulated history, users need a stable label that is easier to recognize in the sidebar, Project archive, topbar, and search results. Issue #27 requests renaming a project task without changing the task itself.

Decision ​

Treat a task name as session metadata and expose one shared rename dialog. The dialog is available from the Sidebar session overflow/right-click menu and from the Project archive task row. It trims input, accepts 1–80 Unicode code points, and keeps the Save action unavailable for an empty value. The host validates the same rules so direct IPC callers cannot persist invalid titles.

Renaming updates sessions.title and marks its host-owned title_source as manual. It does not modify the transcript, message count, project binding, empty-session predicate, or updated_at activity timestamp. Plugin-generated titles use a compare-and-set against the automatic title, so a manual rename wins a race without renderer-local title state. The core's own first-prompt fallback keeps that source default and stays replaceable, which is why only a manual title opts out of automatic replacement.

Historical notification title snapshots remain unchanged. Newly rendered surfaces read the current session summary, so the renamed title is shown in the Sidebar, topbar, Project archive, and search results after the local store update and across restart.

Consequences ​

  • Users can name a task from both primary task navigation and the project index.
  • Host-side validation provides one durable contract for renderer and future clients.
  • Renaming cannot accidentally move a task in recent-activity order or alter agent context.
  • The renderer owns modal focus, error presentation, and the immediate local title update after the host confirms the session exists.

Alternatives considered ​

  • Rename only from the topbar: rejected because the task can be discovered and managed from the Sidebar or Project archive before opening it.
  • Rename the project folder or project record: rejected because the request is about an individual task/session, not the workspace identity.
  • Add a command-palette command: deferred; the existing row actions are the discoverable surface and no new global command is needed for this operation.

Local-first · Model-agnostic · Plugin-powered. AIUO.NET