Summary
The Claude Code watcher always reads from ~/.claude/projects/. Users who run multiple Claude Code accounts via the $CLAUDE_CONFIG_DIR environment variable (e.g. a separate ~/.claude-personal/ config dir for a personal subscription, distinct from ~/.claude/ for work) end up with transcripts in ~/.claude-personal/projects/ that opensessions never sees.
Result: only one of the configured accounts shows up in the sidebar. For users in the multi-account pattern this is half the value of the integration.
Where it lives
packages/runtime/src/agents/watchers/claude-code.ts:263:
this.projectsDir = join(homedir(), ".claude", "projects");
Comments at line 4 and line 8 reinforce the assumption:
* Watches ~/.claude/projects/ for JSONL file changes,
* Directory structure: ~/.claude/projects/<encoded-path>/<session-id>.jsonl
Suggested fix
Detect all Claude Code config dirs and watch each one's projects/ subdir. Two reasonable signals:
$CLAUDE_CONFIG_DIR env var — Claude Code's officially documented override. If set, watch $CLAUDE_CONFIG_DIR/projects/ in addition to (or instead of) the default.
- Convention scan — glob
~/.claude*/projects/ to pick up any sibling config dirs the user has. Cheap, no env-var dependency, works even when opensessions is launched in a shell that doesn't have CLAUDE_CONFIG_DIR exported.
Either approach should compose with the existing single-dir behaviour so the change is backwards-compatible. The ClaudeCodeWatcher would then maintain a set of projects dirs rather than a single one, and the per-dir watch + decoding logic stays as-is.
If multiple accounts could overlap on the same encoded-path (same project run from both accounts), surfacing the config-dir as part of the session identity in the UI (or as a per-session tag/colour) would help disambiguate. Lower-priority than the basic detection fix.
Context
Common pattern in the wild: claude (default config dir, work account) and claude-personal (separate config dir for personal account). CLAUDE_CONFIG_DIR is set per-invocation via shell aliases. Both write transcripts into their respective <config-dir>/projects/<encoded-path>/<session-id>.jsonl.
Happy to PR if a maintainer can confirm which approach (env-var vs glob vs both) you'd prefer.
Environment
- opensessions installed via TPM (latest as of 2026-05-19)
- macOS, tmux 3.6a
- bun 1.3.12
- Two Claude Code config dirs in active use:
~/.claude/ and ~/.claude-personal/
Summary
The Claude Code watcher always reads from
~/.claude/projects/. Users who run multiple Claude Code accounts via the$CLAUDE_CONFIG_DIRenvironment variable (e.g. a separate~/.claude-personal/config dir for a personal subscription, distinct from~/.claude/for work) end up with transcripts in~/.claude-personal/projects/that opensessions never sees.Result: only one of the configured accounts shows up in the sidebar. For users in the multi-account pattern this is half the value of the integration.
Where it lives
packages/runtime/src/agents/watchers/claude-code.ts:263:Comments at line 4 and line 8 reinforce the assumption:
Suggested fix
Detect all Claude Code config dirs and watch each one's
projects/subdir. Two reasonable signals:$CLAUDE_CONFIG_DIRenv var — Claude Code's officially documented override. If set, watch$CLAUDE_CONFIG_DIR/projects/in addition to (or instead of) the default.~/.claude*/projects/to pick up any sibling config dirs the user has. Cheap, no env-var dependency, works even when opensessions is launched in a shell that doesn't haveCLAUDE_CONFIG_DIRexported.Either approach should compose with the existing single-dir behaviour so the change is backwards-compatible. The
ClaudeCodeWatcherwould then maintain a set of projects dirs rather than a single one, and the per-dir watch + decoding logic stays as-is.If multiple accounts could overlap on the same encoded-path (same project run from both accounts), surfacing the config-dir as part of the session identity in the UI (or as a per-session tag/colour) would help disambiguate. Lower-priority than the basic detection fix.
Context
Common pattern in the wild:
claude(default config dir, work account) andclaude-personal(separate config dir for personal account).CLAUDE_CONFIG_DIRis set per-invocation via shell aliases. Both write transcripts into their respective<config-dir>/projects/<encoded-path>/<session-id>.jsonl.Happy to PR if a maintainer can confirm which approach (env-var vs glob vs both) you'd prefer.
Environment
~/.claude/and~/.claude-personal/