[FEATURE] Project-Specific Todo Storage

Resolved 💬 3 comments Opened Sep 7, 2025 by vanman2024 Closed Jan 8, 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

Claude Code currently stores todo files in ~/.claude/todos/ with UUID-based filenames, which provide no project context. With 590+ todo files accumulating across all projects, It's impossible to:

  • Know which todos belong to which project
  • Filter todos by current project in commands like /wip-status
  • Clean up old project todos without losing active ones
  • Review what was planned for a specific project

Files like 4a03116f-3bc7-4b7c-bb40-f91984a21749-agent-4a03116f-3bc7-4b7c-bb40-f91984a21749.json give no indication of what project they're for, making the TodoWrite tool nearly useless for developers working on multiple projects.

Proposed Solution

Store todos with project association by either:

  1. Project-specific subdirectories: ~/.claude/todos/{project-path-hash}/todo-{uuid}.json
  2. Project name in filename: {project-name}-{uuid}.json
  3. Project metadata in JSON:

{
"project": "/home/user/Projects/my-app",
"projectName": "my-app",
"todos": [...]
}

Alternative Solutions

Currently, I use my own script to manage it. Integrating this feature directly into the system would be very helpful, as I believe it would be quite useful.

Priority

Critical - Blocking my work

Feature Category

Other

Use Case Example

Use Case Example

  1. I'm working on 3 different projects throughout the week
  2. I use TodoWrite to track tasks in each project
  3. When I return to Project A after 2 days, I run /wip-status
  4. Currently: Shows nothing useful from persistent storage
  5. With this feature, it Shows my Project A todos immediately

Additional Context

Current workaround is to never rely on persistent todo storage and recreate task lists each session, defeating the purpose of the TodoWrite tool entirely.

View original on GitHub ↗

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