CommandCodeAI / CommandCodeAI/command-code
Taste learning silently finds 0 Claude Code sessions when the project path contains spaces (encodeAgentProjectDir mismatch)
@saqibameen arbeitet bereits daran.
Seit 16.9.2026.
- Vorherrschende Sprache
- Keine Sprachdaten
- Sterne
- 4k
- Forks
- 350
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
Summary
Taste onboarding and /learn-taste silently learn zero Claude Code sessions when the project path contains spaces (e.g. .../My Repository/My Works/Startup/WUP). encodeAgentProjectDir() only replaces /, \ and : with -, while Claude Code encodes project directories by replacing every non-alphanumeric character with - (spaces, CJK characters, etc.). Command Code therefore looks up a ~/.claude/projects/<dir> that does not exist, findClaudeCodeSessions() returns [], and nothing is reported to the user — no entry in skippedSessions or failedSessions.
Observed on a fresh v1.53.1 install: onboarding recorded 168 Codex sessions for the project but zero Claude Code sessions, even though 25 Claude Code sessions exist for the very same working directory.
Expected Behavior
For a project at /Users/<user>/Library/CloudStorage/OneDrive-Personal/My Repository/My Works/Startup/WUP, onboarding / /learn-taste should discover the existing ~/.claude/projects/-Users-<user>-Library-CloudStorage-OneDrive-Personal-My-Repository-My-Works-Startup-WUP/ directory (25 .jsonl sessions) and learn from it.
Actual Behavior
- Command Code computes the lookup path with spaces preserved:
~/.claude/projects/-Users-<user>-...-My Repository-My Works-Startup-WUP→isDirectory()fails → 0 sessions scanned. - Claude Code actually stores those sessions at:
~/.claude/projects/-Users-<user>-...-My-Repository-My-Works-Startup-WUP(spaces replaced by-). - After onboarding completes,
~/.commandcode/projects/<slug>/config.jsoncontains only:
"tasteOnboarding": {
"learnedSessions": { "codex": ["... 168 session ids ..."] },
"skippedSessions": {},
"failedSessions": {},
"lastLearningDate": "2026-09-13T17:44:49.082Z",
"completed": true
}
No claude-code key is created and no warning is surfaced, so it looks as if Claude Code simply had no sessions.
Steps to reproduce the issue
- Put a project in a path that contains a space (very common under OneDrive / Google Drive / "My Works"-style folders).
- Run Claude Code at least once in that project so
~/.claude/projects/<claude-encoded-dir>/*.jsonlexists (note that Claude Code replaces the spaces with-). - Fresh-install Command Code in the same directory (or run
/learn-taste) and let taste onboarding finish. - Inspect
~/.commandcode/projects/<project-slug>/config.json:learnedSessionscontains onlycodex(if anything); the Claude Code sessions were silently ignored.
Root cause / suggested fix
dist/cli.mjs:
function encodeAgentProjectDir(e){ return e.replace(/[/\\:]/g,"-") }
async function findClaudeCodeSessions(e){
const n = `${t}/.claude/projects/${encodeAgentProjectDir(e.projectPath)}`;
if (!await isDirectory2({ runtime: e.runtime, path: n })) return [];
...
}
Claude Code's own encoding replaces every non-alphanumeric character with -. Verified locally: a path segment 应用 (CJK) renders as two consecutive dashes, e.g. .../Dropbox/应用/Overleaf/... → ~/.claude/projects/-Users-<user>-Library-CloudStorage-Dropbox----Overleaf-....
Suggested fix:
- Mirror Claude Code's encoding:
e.replace(/[^a-zA-Z0-9]/g, "-"). - Optionally add a fallback that scans
~/.claude/projects/*and matches the decoded path, so future encoding divergences degrade gracefully. - Surface "0 sessions found for claude-code" instead of silently skipping a source, so users can tell that discovery failed.
Related: #438 (non-standard Claude Code config paths), #639 (ENAMETOOLONG on taste learning), #740 (learning from worktree sessions).
Command Code Version
1.53.1 (cmd --version, Homebrew npm global install)
Operating System
macOS
Terminal/IDE
Apple Terminal
Shell
zsh
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Bewertung
Dieses Issue wurde noch nicht bewertet.