--- description: Manage Claude Code session history, aliases, and session metadata. --- # Sessions Command Manage Claude Code session history - list, load, alias, and edit sessions stored in `~/.claude/session-data/` with legacy reads from `~/.claude/sessions/`. ## Usage `/sessions [list|load|alias|info|help] [options]` ## Actions ### List Sessions Display all sessions with metadata, filtering, and pagination. Use `/sessions info` when you need operator-surface context for a swarm: branch, worktree path, and session recency. ```bash /sessions # List all sessions (default) /sessions list # Same as above /sessions list --limit 10 # Show 10 sessions /sessions list --date 2026-02-01 # Filter by date /sessions list --search abc # Search by session ID ``` **Script:** ```bash node -e " const _r = (function(){var p=require('path'),f=require('fs'),o=require('os');var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var d=p.join(o.homedir(),'.claude');function L(x){try{return require(p.join(x,'scripts','lib','resolve-ecc-root')).resolveEccRoot()}catch(_){return null}}var r=L(d);if(r)return r;var s=['ecc','ecc@ecc','marketplaces/ecc','everything-claude-code','everything-claude-code@everything-claude-code','marketplaces/everything-claude-code'];for(var i=0;i # Load session /sessions load 2026-02-01 # By date (for no-id sessions) /sessions load a1b2c3d4 # By short ID /sessions load my-alias # By alias name ``` **Script:** ```bash node -e " const _r = (function(){var p=require('path'),f=require('fs'),o=require('os');var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var d=p.join(o.homedir(),'.claude');function L(x){try{return require(p.join(x,'scripts','lib','resolve-ecc-root')).resolveEccRoot()}catch(_){return null}}var r=L(d);if(r)return r;var s=['ecc','ecc@ecc','marketplaces/ecc','everything-claude-code','everything-claude-code@everything-claude-code','marketplaces/everything-claude-code'];for(var i=0;i 0) { console.log('Aliases: ' + aliases.map(a => a.name).join(', ')); console.log(''); } if (session.metadata.title) { console.log('Title: ' + session.metadata.title); console.log(''); } if (session.metadata.started) { console.log('Started: ' + session.metadata.started); } if (session.metadata.lastUpdated) { console.log('Last Updated: ' + session.metadata.lastUpdated); } if (session.metadata.project) { console.log('Project: ' + session.metadata.project); } if (session.metadata.branch) { console.log('Branch: ' + session.metadata.branch); } if (session.metadata.worktree) { console.log('Worktree: ' + session.metadata.worktree); } " "$ARGUMENTS" ``` ### Create Alias Create a memorable alias for a session. ```bash /sessions alias # Create alias /sessions alias 2026-02-01 today-work # Create alias named "today-work" ``` **Script:** ```bash node -e " const _r = (function(){var p=require('path'),f=require('fs'),o=require('os');var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var d=p.join(o.homedir(),'.claude');function L(x){try{return require(p.join(x,'scripts','lib','resolve-ecc-root')).resolveEccRoot()}catch(_){return null}}var r=L(d);if(r)return r;var s=['ecc','ecc@ecc','marketplaces/ecc','everything-claude-code','everything-claude-code@everything-claude-code','marketplaces/everything-claude-code'];for(var i=0;i '); process.exit(1); } // Get session filename const session = sm.getSessionById(sessionId); if (!session) { console.log('Session not found: ' + sessionId); process.exit(1); } const result = aa.setAlias(aliasName, session.filename); if (result.success) { console.log('✓ Alias created: ' + aliasName + ' → ' + session.filename); } else { console.log('✗ Error: ' + result.error); process.exit(1); } " "$ARGUMENTS" ``` ### Remove Alias Delete an existing alias. ```bash /sessions alias --remove # Remove alias /sessions unalias # Same as above ``` **Script:** ```bash node -e " const _r = (function(){var p=require('path'),f=require('fs'),o=require('os');var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var d=p.join(o.homedir(),'.claude');function L(x){try{return require(p.join(x,'scripts','lib','resolve-ecc-root')).resolveEccRoot()}catch(_){return null}}var r=L(d);if(r)return r;var s=['ecc','ecc@ecc','marketplaces/ecc','everything-claude-code','everything-claude-code@everything-claude-code','marketplaces/everything-claude-code'];for(var i=0;i'); process.exit(1); } const result = aa.deleteAlias(aliasName); if (result.success) { console.log('✓ Alias removed: ' + aliasName); } else { console.log('✗ Error: ' + result.error); process.exit(1); } " "$ARGUMENTS" ``` ### Session Info Show detailed information about a session. ```bash /sessions info # Show session details ``` **Script:** ```bash node -e " const _r = (function(){var p=require('path'),f=require('fs'),o=require('os');var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var d=p.join(o.homedir(),'.claude');function L(x){try{return require(p.join(x,'scripts','lib','resolve-ecc-root')).resolveEccRoot()}catch(_){return null}}var r=L(d);if(r)return r;var s=['ecc','ecc@ecc','marketplaces/ecc','everything-claude-code','everything-claude-code@everything-claude-code','marketplaces/everything-claude-code'];for(var i=0;i 0) { console.log('Aliases: ' + aliases.map(a => a.name).join(', ')); } " "$ARGUMENTS" ``` ### List Aliases Show all session aliases. ```bash /sessions aliases # List all aliases ``` **Script:** ```bash node -e " const _r = (function(){var p=require('path'),f=require('fs'),o=require('os');var e=process.env.CLAUDE_PLUGIN_ROOT;if(e&&e.trim())return e.trim();var d=p.join(o.homedir(),'.claude');function L(x){try{return require(p.join(x,'scripts','lib','resolve-ecc-root')).resolveEccRoot()}catch(_){return null}}var r=L(d);if(r)return r;var s=['ecc','ecc@ecc','marketplaces/ecc','everything-claude-code','everything-claude-code@everything-claude-code','marketplaces/everything-claude-code'];for(var i=0;i 30 ? a.sessionPath.slice(0, 27) + '...' : a.sessionPath).padEnd(30); const title = a.title || ''; console.log(name + ' ' + file + ' ' + title); } } " ``` ## Operator Notes - Session files persist `Project`, `Branch`, and `Worktree` in the header so `/sessions info` can disambiguate parallel tmux/worktree runs. - For command-center style monitoring, combine `/sessions info`, `git diff --stat`, and the cost metrics emitted by `scripts/hooks/cost-tracker.js`. ## Arguments $ARGUMENTS: - `list [options]` - List sessions - `--limit ` - Max sessions to show (default: 50) - `--date ` - Filter by date - `--search ` - Search in session ID - `load ` - Load session content - `alias ` - Create alias for session - `alias --remove ` - Remove alias - `unalias ` - Same as `--remove` - `info ` - Show session statistics - `aliases` - List all aliases - `help` - Show this help ## Examples ```bash # List all sessions /sessions list # Create an alias for today's session /sessions alias 2026-02-01 today # Load session by alias /sessions load today # Show session info /sessions info today # Remove alias /sessions alias --remove today # List all aliases /sessions aliases ``` ## Notes - Sessions are stored as markdown files in `~/.claude/session-data/` with legacy reads from `~/.claude/sessions/` - Aliases are stored in `~/.claude/session-aliases.json` - Session IDs can be shortened (first 4-8 characters usually unique enough) - Use aliases for frequently referenced sessions