CommandCodeAI / CommandCodeAI/command-code
Taste learning silently finds 0 Claude Code sessions when the project path contains spaces (encodeAgentProjectDir mismatch)
@saqibameen ya está trabajando en esto.
Desde el 16/9/2026.
- Lenguaje dominante
- Sin datos de lenguaje
- Estrellas
- 4k
- Forks
- 350
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
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
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Evaluación
Este issue todavía no se ha evaluado.