hookSpecificOutput.sessionTitle does not propagate to desktop app sidebar / remote session title (unlike /rename)
Environment
- Claude Code 2.1.153 (native build, macOS), session running inside the Claude desktop app
- Hook events:
UserPromptSubmit/SessionStart
Description
A UserPromptSubmit (or SessionStart) hook that returns
{"hookSpecificOutput": {"hookEventName": "UserPromptSubmit", "sessionTitle": "<new title>"}}
updates the session picker, the terminal title, and writes a custom-title record to the session JSONL — but the desktop app's sidebar chat name and the remote (claude.ai) session title never change, even across later turns. The app-side session metadata keeps titleSource: "auto".
Typing /rename <new title> in the same session updates all of those live, including the desktop sidebar.
The SessionStart hook schema describes sessionTitle as "Set the session title (same effect as /rename)", so the hook path appears to be missing the remote/bridge title propagation the /rename path performs (the flow that updates the bridge session and PUTs the title to /v1/code/sessions/<id>, which the desktop app syncs from).
Steps to reproduce
- Register a minimal hook in
~/.claude/settings.json:
``json``
{"hooks": {"UserPromptSubmit": [{"matcher": "*", "hooks": [{"type": "command", "command": "echo '{\"hookSpecificOutput\":{\"hookEventName\":\"UserPromptSubmit\",\"sessionTitle\":\"hook-title-test\"}}'"}]}]}}
- Open a session inside the Claude desktop app and send any prompt.
- Observe: picker/terminal title update to
hook-title-testand acustom-titlerecord lands in the session JSONL — while the desktop sidebar name and the claude.ai session name keep the auto-generated title. - Type
/rename hook-title-test— the sidebar updates immediately.
Expected
Hook-set sessionTitle propagates everywhere /rename does, per the schema's "same effect as /rename".
Impact
Hooks and agents can set durable session titles, but the desktop app's visible session list stays stale until app relaunch, so programmatic session naming desyncs from the UI.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗