Desktop app: /resume shows every session as "Untitled session" with no preview

Status Open
Reported on v2.1.260
Maintainer reply None cached
Activity 0 comments · opened Sep 10, 2026

Preflight Checklist

  • [x] I have searched existing issues and this hasn't been reported yet
  • [x] This is a single bug report (please file separate reports for different bugs)
  • [x] I am using the latest version of Claude Code

What's Wrong?

What happens

In the desktop app, /resume lists every past session as "Untitled session". The preview
pane on the right says "Couldn't load the preview." for all of them. The only thing that
tells one row from another is its timestamp.

The same sessions show correct titles in the VS Code extension, and in the desktop app's own
sidebar.

Environment

  • Windows 11
  • Claude desktop app, Code tab
  • CLI bundled with the app: 2.1.260, at %APPDATA%\Claude\claude-code\2.1.260\claude.exe
  • VS Code extension: 2.1.266

The titles are already on disk

Session transcripts under ~/.claude/projects/<folder>/*.jsonl carry title records:

{"type":"ai-title","sessionId":"...","aiTitle":"..."}
{"type":"custom-title","sessionId":"...","customTitle":"..."}
{"type":"last-prompt","sessionId":"...","lastPrompt":"..."}

In one project folder holding 84 transcripts, 75 have an ai-title record, 15 have a
custom-title record, and 81 have a last-prompt record. Across all my project folders,
147 transcripts, not one contains a {"type":"summary"} line.

The resume dialog shows every one of them as untitled.

The app's own stored titles are ignored too

The desktop app keeps a record per session at
%APPDATA%\Claude\claude-code-sessions\<account>\<org>\local_<uuid>.json. Each record has a
title field and a cliSessionId field pointing at the transcript.

One of my sessions has such a record, with a title the app generated itself and shows
correctly in the sidebar. That same session appears as "Untitled session" in /resume. So
the dialog reads neither the transcript records nor the app's own store.

Where the two strings come from

Neither string is in the CLI that the app bundles. Counting plain string matches in
claude.exe 2.1.260:

| String | Matches |
| --- | --- |
| aiTitle | 14 |
| lastPrompt | 6 |
| Untitled session | 0 |
| Couldn't load the preview | 0 |

The CLI knows about the title fields and never emits either string. Both come from the app's
own interface, so updating the CLI does not help.

What the VS Code extension does instead

extension.js in 2.1.266 builds each history row's label as:

title = customTitle || aiTitle || lastPrompt || summary || firstPrompt

It reads the head and tail of each transcript, and falls back to the first user message when
no title record is present. That is why its history list reads correctly against the same
files.

What Should Happen?

Expected

The resume dialog should fall back the same way: the app's stored title, then custom-title,
ai-title, last-prompt, then the first user message. Any one of those four would have
produced a usable label for all 84 of my sessions.

Error Messages/Logs

Steps to Reproduce

Steps to reproduce

  1. Run some sessions from the VS Code extension so transcripts build up in a project folder.
  2. Open the same folder in the desktop app.
  3. Run /resume and pick "This folder".

Every row reads "Untitled session", and the preview pane fails to load for each one.

Claude Model

None

Is this a regression?

Yes, this worked in a previous version

Last Working Version

_No response_

Claude Code Version

2.1.263

Platform

Anthropic API

Operating System

Windows

Terminal/Shell

Other

Additional Information

_No response_

View original on GitHub ↗