Feature request: sequential numbered session filenames with name, date, and time

Resolved 💬 3 comments Opened Mar 7, 2026 by ablev3 Closed Mar 10, 2026

Preflight Checklist

  • [x] I have searched existing requests and this feature hasn't been requested yet
  • [x] This is a single feature request (not multiple features)

Problem Statement

Session files are stored as UUIDs (e.g., 413951fe-3247-4cd0-8b85-a3a41f40daf7.jsonl). This makes it impossible to:

  1. Know the order sessions were created (no sequence number)
  2. Know when a session was created without checking file metadata
  3. Identify what a session was about without opening it

When you accumulate 30+ sessions across a project, the sessions directory is an unreadable wall of UUIDs. You can't sort them, can't
search them by name, and can't tell anything about them from the filesystem alone — you have to use --resume every time.

File metadata (creation date via ls -lt) is fragile — it changes if files are copied, moved, or restored from backup.

Proposed Solution

Session filenames should encode: sequential number, user-defined name, and creation timestamp.

Format: {NNN}_{name}_{YYYY-MM-DD_HH-MM-SS}.jsonl

Examples:
001_initial-project-setup_2026-02-23_14-30-00.jsonl
002_sdk-development_2026-02-24_19-41-00.jsonl
003_quality-pipeline_2026-02-25_14-08-00.jsonl
004_doc-audit_2026-03-06_20-48-00.jsonl

Interaction:

  • claude --name "quality-pipeline" — starts a session with that name embedded in the filename
  • claude (no flag) — auto-names as unnamed or prompts for a name
  • Sequential number auto-increments based on existing sessions in the project directory
  • Date and time are UTC at session creation, baked into the filename permanently
  • Internal references use the full filename (not just UUID), or a mapping file maintains UUID-to-filename lookup for backward

compatibility

Benefits:

  • ls shows sessions in order with meaningful names and dates
  • No need to open files or use --resume just to identify a session
  • Survives file copies, moves, and backups (date is in the name, not metadata)
  • --resume picker can display the name and number directly from the filename

Alternative Solutions

  • Current UUIDs + --resume picker: works but requires interactive CLI just to identify sessions. Can't browse from a file manager

or terminal ls.

  • Adding a label field inside the JSONL metadata: helps --resume display but doesn't solve the filesystem readability problem. The

filename is still a UUID.

  • External mapping file (UUID → name): fragile, gets out of sync, extra maintenance.
  • Renaming files manually: breaks --continue and --resume since they reference UUIDs internally.

Priority

Medium - Would be very helpful

Feature Category

CLI commands and flags

Use Case Example

Today:
$ ls ~/.claude/projects/-Users-Able-Licentric/
260a7332-f53a-45da-a5fd-5d6c27db8fa6.jsonl
413951fe-3247-4cd0-8b85-a3a41f40daf7.jsonl
558111cc-d011-446c-8de2-5a0797f96486.jsonl
b38dc3fd-0039-470b-a210-a95b876c53e0.jsonl
e630701b-8393-458f-bde0-4d79084c4ebc.jsonl

→ Which session had the quality pipeline work? No idea. Must run claude --resume and guess.

Proposed:
$ ls ~/.claude/projects/-Users-Able-Licentric/
001_core-platform-build_2026-02-23_14-30-00.jsonl
002_sdk-development_2026-02-24_19-41-00.jsonl
003_quality-pipeline-plan_2026-02-25_14-08-00.jsonl
004_plan-005-implementation_2026-03-06_20-48-00.jsonl
005_doc-audit-and-cleanup_2026-03-07_00-43-00.jsonl

→ Instantly readable. Sorted by creation order. Searchable by name. No tools needed.

Additional Context

  • This is a standard pattern: shell history files, log files, database migration files (001_create_schema.sql), and test recordings

all use numbered sequential filenames with timestamps.

  • Backward compatibility: existing UUID sessions could remain as-is. New sessions use the new format. A one-time migration command

(claude sessions migrate) could rename existing sessions using their internal metadata.

  • The UUID could still be stored inside the JSONL for internal correlation — it just doesn't need to be the filename.

View original on GitHub ↗

This issue has 3 comments on GitHub. Read the full discussion on GitHub ↗