Summary
Two CLI problems around scripts/export.py:
--since last: Behavior or messaging does not match expectations when there is no new activity since the last export (e.g. same day, no new chats). Users report getting an empty or useless archive/output instead of a clear notion of what changed since last time or what the last run exported. (Confirm exact behavior: current code exits with “Nothing to export.” before creating a zip when there are zero files; if empty zips still appear, note the exact command line and version.)
--project vs list: python scripts/export.py list shows the Project column using display_name (human-readable, from session cwd), but export filtering uses a substring match on p["name"] only (the hashed filesystem directory name under ~/.claude/projects). Users who pass the name shown in the table may get no matching projects, so export appears to do nothing (No projects found.).
Steps to reproduce
A. Incremental export
- Run a full export, then run
python scripts/export.py --since last again with no new session activity (or no chats “today,” per reporter).
- Observe output / zip behavior vs expectation.
B. Project filter
- Run
python scripts/export.py list and note the Project column value.
- Run
python scripts/export.py --project "<that visible name>" (or python scripts/export.py export --project "...").
- Observe
No projects found. or no exported files even though the project appeared in list.
Expected behavior
--since last: Either only emit sessions that changed since the stored baseline without surprising empty artifacts, or clearly report last export time, baseline, and “0 new sessions” without implying a failed incremental run.
--project: Filtering should accept the same identifier users see in list (e.g. match display_name and/or internal name, or document that only the directory slug is accepted).
Actual behavior
--since last: Reporter sees an undesirable empty zip or misleading outcome when there is no new chat activity (details TBD).
--project: Export does not run for names shown in the project table because filters only projects[*]["name"], not display_name.
Summary
Two CLI problems around
scripts/export.py:--since last: Behavior or messaging does not match expectations when there is no new activity since the last export (e.g. same day, no new chats). Users report getting an empty or useless archive/output instead of a clear notion of what changed since last time or what the last run exported. (Confirm exact behavior: current code exits with “Nothing to export.” before creating a zip when there are zero files; if empty zips still appear, note the exact command line and version.)--projectvslist:python scripts/export.py listshows the Project column usingdisplay_name(human-readable, from sessioncwd), but export filtering uses a substring match onp["name"]only (the hashed filesystem directory name under~/.claude/projects). Users who pass the name shown in the table may get no matching projects, so export appears to do nothing (No projects found.).Steps to reproduce
A. Incremental export
python scripts/export.py --since lastagain with no new session activity (or no chats “today,” per reporter).B. Project filter
python scripts/export.py listand note the Project column value.python scripts/export.py --project "<that visible name>"(orpython scripts/export.py export --project "...").No projects found.or no exported files even though the project appeared inlist.Expected behavior
--since last: Either only emit sessions that changed since the stored baseline without surprising empty artifacts, or clearly report last export time, baseline, and “0 new sessions” without implying a failed incremental run.--project: Filtering should accept the same identifier users see inlist(e.g. matchdisplay_nameand/or internalname, or document that only the directory slug is accepted).Actual behavior
--since last: Reporter sees an undesirable empty zip or misleading outcome when there is no new chat activity (details TBD).--project: Export does not run for names shown in the project table because filters onlyprojects[*]["name"], notdisplay_name.