CASS - Coding Agent Session Search
Unified, high-performance CLI/TUI to index and search your local coding agent history. Aggregates sessions from 11 agents: Codex, Claude Code, Gemini CLI, Cline, OpenCode, Amp, Cursor, ChatGPT, Aider, Pi-Agent, and Factory (Droid).
CRITICAL: Robot Mode Required for AI Agents
NEVER run bare cass - it launches an interactive TUI that blocks your session!
WRONG - blocks terminal
cass
CORRECT - JSON output for agents
cass search "query" --robot cass search "query" --json # alias
Always use --robot or --json flags for machine-readable output.
Quick Reference for AI Agents Pre-Flight Check
Health check (exit 0=healthy, 1=unhealthy, <50ms)
cass health
If unhealthy, rebuild index
cass index --full
Essential Commands
Search with JSON output
cass search "authentication error" --robot --limit 5
Search with metadata (elapsed_ms, cache stats, freshness)
cass search "error" --robot --robot-meta
Minimal payload (path, line, agent only)
cass search "bug" --robot --fields minimal
View source at specific line
cass view /path/to/session.jsonl -n 42 --json
Expand context around a line
cass expand /path/to/session.jsonl -n 42 -C 5 --json
Capabilities discovery
cass capabilities --json
Full API schema
cass introspect --json
LLM-optimized documentation
cass robot-docs guide cass robot-docs commands cass robot-docs schemas cass robot-docs examples cass robot-docs exit-codes
Why Use CASS Cross-Agent Knowledge Transfer
Your coding agents create scattered knowledge:
Claude Code sessions in ~/.claude/projects Codex sessions in ~/.codex/sessions Cursor state in SQLite databases Aider history in markdown files
CASS unifies all of this into a single searchable index. When you're stuck on a problem, search across ALL your past agent sessions to find relevant solutions.
Use Cases
"I solved this before..."
cass search "TypeError: Cannot read property" --robot --days 30
Cross-agent learning (what has ANY agent said about X?)
cass search "authentication" --robot --workspace /path/to/project
Agent-to-agent handoff
cass search "database migration" --robot --fields summary
Daily review
cass timeline --today --json
Command Reference Indexing
Full rebuild of DB and search index
cass index --full
Incremental update (since last scan)
cass index
Watch mode: auto-reindex on file changes
cass index --watch
Force rebuild even if schema unchanged
cass index --full --force-rebuild
Safe retries with idempotency key (24h TTL)
cass index --full --idempotency-key "build-$(date +%Y%m%d)"
JSON output with stats
cass index --full --json
Search
Basic search (JSON output required for agents!)
cass search "query" --robot
With filters
cass search "error" --robot --agent claude --days 7 cass search "bug" --robot --workspace /path/to/project cass search "panic" --robot --today
Time filters
cass search "auth" --robot --since 2024-01-01 --until 2024-01-31 cass search "test" --robot --yesterday cass search "fix" --robot --week
Wildcards
cass search "auth" --robot # prefix: authentication, authorize cass search "tion" --robot # suffix: authentication, exception cass search "config" --robot # substring: misconfigured
Token budget management (critical for LLMs!)
cass search "error" --robot --fields minimal # path, line, agent only cass search "error" --robot --fields summary # adds title, score cass search "error" --robot --max-content-length 500 # truncate fields cass search "error" --robot --max-tokens 2000 # soft budget (~4 chars/token) cass search "error" --robot --limit 5 # cap results
Pagination (cursor-based)
cass search "TODO" --robot --robot-meta --limit 20
Use _meta.next_cursor from response:
cass search "TODO" --robot --robot-meta --limit 20 --cursor "eyJ..."
Match highlighting
cass search "authentication error" --robot --highlight
Query analysis/debugging
cass search "auth*" --robot --explain # parsed query, cost estimates cass search "auth error" --robot --dry-run # validate without executing
Aggregations (server-side counts)
cass search "error" --robot --aggregate agent,workspace,date
Request correlation
cass search "bug" --robot --request-id "req-12345"
Source filtering (for multi-machine setups)
cass search "auth" --robot --source laptop cass search "error" --robot --source remote
Traceability (for debugging agent pipelines)
cass search "error" --robot --trace-file /tmp/cass-trace.json
Session Analysis
Export conversation to markdown/HTML/JSON
cass export /path/to/session.jsonl --format markdown -o conversation.md cass export /path/to/session.jsonl --format html -o conversation.html cass export /path/to/session.jsonl --format json --include-tools
Expand context around a line (from search result)
cass expand /path/to/session.jsonl -n 42 -C 5 --json
Shows 5 messages before and after line 42
View source at line
cass view /path/to/session.jsonl -n 42 --json
Activity timeline
cass timeline --today --json --group-by hour cass timeline --days 7 --json --agent claude cass timeline --since 7d --json
Find related sessions for a file
cass context /path/to/source.ts --json
Status & Diagnostics
Quick health (<50ms)
cass health cass health --json
Full status snapshot
cass status --json cass state --json # alias
Statistics
cass stats --json cass stats --by-source # for multi-machine
Full diagnostics
cass diag --verbose
Aggregation & Analytics
Aggregate search results server-side to get counts and distributions without transferring full result data:
Count results by agent
cass search "error" --robot --aggregate agent
→ { "aggregations": { "agent": { "buckets": [{"key": "claude_code", "count": 45}, ...] } } }
Multi-field aggregation
cass search "bug" --robot --aggregate agent,workspace,date
Combine with filters
cass search "TODO" --agent claude --robot --aggregate workspace
Aggregation Field Description agent Group by agent type (claude_code, codex, cursor, etc.) workspace Group by workspace/project path date Group by date (YYYY-MM-DD) match_type Group by match quality (exact, prefix, fuzzy)
Top 10 buckets returned per field, with other_count for remaining items.
Remote Sources (Multi-Machine Search)
Search across sessions from multiple machines via SSH/rsync.
Setup Wizard (Recommended) cass sources setup
The wizard:
Discovers SSH hosts from ~/.ssh/config Probes each for agent data and cass installation Optionally installs cass on remotes Indexes sessions on remotes Configures sources.toml Syncs data locally cass sources setup --hosts css,csd,yto # Specific hosts only cass sources setup --dry-run # Preview without changes cass sources setup --resume # Resume interrupted setup
Manual Setup
Add a remote machine
cass sources add user@laptop.local --preset macos-defaults cass sources add dev@workstation --path ~/.claude/projects --path ~/.codex/sessions
List sources
cass sources list --json
Sync sessions
cass sources sync cass sources sync --source laptop --verbose
Check connectivity
cass sources doctor cass sources doctor --source laptop --json
Path mappings (rewrite remote paths to local)
cass sources mappings list laptop cass sources mappings add laptop --from /home/user/projects --to /Users/me/projects cass sources mappings test laptop /home/user/projects/myapp/src/main.rs
Remove source
cass sources remove laptop --purge -y
Configuration stored in ~/.config/cass/sources.toml (Linux) or ~/Library/Application Support/cass/sources.toml (macOS).
Robot Mode Deep Dive Self-Documenting API
CASS teaches agents how to use itself:
Quick capability check
cass capabilities --json
Returns: features, connectors, limits
Full API schema
cass introspect --json
Returns: all commands, arguments, response shapes
Topic-based docs (LLM-optimized)
cass robot-docs commands # all commands and flags cass robot-docs schemas # response JSON schemas cass robot-docs examples # copy-paste invocations cass robot-docs exit-codes # error handling cass robot-docs guide # quick-start walkthrough cass robot-docs contracts # API versioning cass robot-docs sources # remote sources guide
Forgiving Syntax (Agent-Friendly)
CASS auto-corrects common mistakes:
What you type What CASS understands cass serach "error" cass search "error" (typo corrected) cass -robot -limit=5 cass --robot --limit=5 (single-dash fixed) cass --Robot --LIMIT 5 cass --robot --limit 5 (case normalized) cass find "auth" cass search "auth" (alias resolved) cass --limt 5 cass --limit 5 (Levenshtein <=2)
Command Aliases:
find, query, q, lookup, grep → search ls, list, info, summary → stats st, state → status reindex, idx, rebuild → index show, get, read → view docs, help-robot, robotdocs → robot-docs Output Formats
Pretty-printed JSON (default)
cass search "error" --robot
Streaming JSONL (header + one hit per line)
cass search "error" --robot-format jsonl
Compact single-line JSON
cass search "error" --robot-format compact
With performance metadata
cass search "error" --robot --robot-meta
Design principle: stdout = JSON only; diagnostics go to stderr.
Token Budget Management
LLMs have context limits. Control output size:
Flag Effect --fields minimal Only source_path, line_number, agent --fields summary Adds title, score --fields score,title,snippet Custom field selection --max-content-length 500 Truncate long fields (UTF-8 safe) --max-tokens 2000 Soft budget (~4 chars/token) --limit 5 Cap number of results
Truncated fields include *_truncated: true indicator.
Structured Error Handling
Errors are JSON with actionable hints:
{ "error": { "code": 3, "kind": "index_missing", "message": "Search index not found", "hint": "Run 'cass index --full' to build the index", "retryable": false } }
Exit Codes Code Meaning Action 0 Success Parse stdout 1 Health check failed Run cass index --full 2 Usage error Fix syntax (hint provided) 3 Index/DB missing Run cass index --full 4 Network error Check connectivity 5 Data corruption Run cass index --full --force-rebuild 6 Incompatible version Update cass 7 Lock/busy Retry later 8 Partial result Increase --timeout 9 Unknown error Check retryable flag Search Modes
Three search modes, selectable with --mode flag:
Mode Algorithm Best For lexical (default) BM25 full-text Exact term matching, code searches semantic Vector similarity Conceptual queries, "find similar" hybrid Reciprocal Rank Fusion Balanced precision and recall cass search "authentication" --mode lexical --robot cass search "how to handle user login" --mode semantic --robot cass search "auth error handling" --mode hybrid --robot
Hybrid combines lexical and semantic using RRF:
RRF_score = Σ 1 / (60 + rank_i)
Pipeline Mode (Chained Search)
Chain searches by piping session paths:
Find sessions mentioning "auth", then search within those for "token"
cass search "authentication" --robot-format sessions | \ cass search "refresh token" --sessions-from - --robot
Build a filtered corpus from today's work
cass search --today --robot-format sessions > today_sessions.txt cass search "bug fix" --sessions-from today_sessions.txt --robot
Use cases:
Drill-down: Broad search → narrow within results Cross-reference: Find sessions with term A, then find term B within them Corpus building: Save session lists for repeated searches Query Language Basic Queries Query Matches error Messages containing "error" (case-insensitive) python error Both "python" AND "error" "authentication failed" Exact phrase Boolean Operators Operator Example Meaning AND python AND error Both terms required (default) OR error OR warning Either term matches NOT error NOT test First term, excluding second - error -test Shorthand for NOT
Complex boolean query
cass search "authentication AND (error OR failure) NOT test" --robot
Exclude test files
cass search "bug fix -test -spec" --robot
Either error type
cass search "TypeError OR ValueError" --robot
Wildcard Patterns Pattern Type Performance auth Prefix Fast (edge n-grams) tion Suffix Slower (regex) config Substring Slowest (regex) Match Types
Results include match_type:
Type Meaning Score Boost exact Verbatim match Highest prefix Via prefix expansion High suffix Via suffix pattern Medium substring Via substring pattern Lower fuzzy Auto-fallback (sparse results) Lowest Auto-Fuzzy Fallback
When exact query returns <3 results, CASS automatically retries with wildcards:
auth → auth Results flagged with wildcard_fallback: true Flexible Time Input
CASS accepts a wide variety of time/date formats:
Format Examples Relative -7d, -24h, -30m, -1w Keywords now, today, yesterday ISO 8601 2024-11-25, 2024-11-25T14:30:00Z US Dates 11/25/2024, 11-25-2024 Unix Timestamp 1732579200 (seconds or milliseconds) Ranking Modes
Cycle with F12 in TUI or use --ranking flag:
Mode Formula Best For Recent Heavy relevance0.3 + recency0.7 "What was I working on?" Balanced relevance0.5 + recency0.5 General search Relevance relevance0.8 + recency0.2 "Best explanation of X" Match Quality Penalizes fuzzy matches Precise technical searches Date Newest Pure chronological Recent activity Date Oldest Reverse chronological "When did I first..." Score Components Text Relevance (BM25): Term frequency, inverse document frequency, length normalization Recency: Exponential decay (today ~1.0, last week ~0.7, last month ~0.3) Match Exactness: Exact phrase=1.0, Prefix=0.9, Suffix=0.8, Substring=0.6, Fuzzy=0.4 Blended Scoring Formula Final_Score = BM25_Score × Match_Quality + α × Recency_Factor
Mode α Value Effect Recent Heavy 1.0 Recency dominates Balanced 0.4 Moderate recency boost Relevance Heavy 0.1 BM25 dominates Match Quality 0.0 Pure text matching Supported Agents (11 Connectors) Agent Location Format Claude Code ~/.claude/projects JSONL Codex ~/.codex/sessions JSONL (Rollout) Gemini CLI ~/.gemini/tmp JSON Cline VS Code global storage Task directories OpenCode .opencode directories SQLite Amp ~/.local/share/amp + VS Code Mixed Cursor ~/Library/Application Support/Cursor SQLite (state.vscdb) ChatGPT ~/Library/Application Support/com.openai.chat JSON (v1 unencrypted) Aider ~/.aider.chat.history.md + per-project Markdown Pi-Agent ~/.pi/agent/sessions JSONL with thinking Factory (Droid) ~/.factory/sessions JSONL by workspace
Note: ChatGPT v2/v3 are AES-256-GCM encrypted (keychain access required). Legacy v1 unencrypted conversations are indexed automatically.
TUI Features (for Humans)
Launch with cass (no flags):
Keyboard Shortcuts
Navigation:
Up/Down: Move selection Left/Right: Switch panes Tab/Shift+Tab: Cycle focus Enter: Open in $EDITOR Space: Full-screen detail view Home/End: Jump to first/last result PageUp/PageDown: Scroll by page
Filtering:
F3: Agent filter F4: Workspace filter F5/F6: Time filters (from/to) Shift+F3: Scope to current result's agent Shift+F4: Clear workspace filter Shift+F5: Cycle presets (24h/7d/30d/all) Ctrl+Del: Clear all filters
Modes:
F2: Toggle theme (6 presets) F7: Context window size (S/M/L/XL) F9: Match mode (prefix/standard) F12: Ranking mode Ctrl+B: Toggle border style
Selection & Actions:
m: Toggle selection Ctrl+A: Select all A: Bulk actions menu Ctrl+Enter: Add to queue Ctrl+O: Open all queued y: Copy path/content Ctrl+Y: Copy all selected /: Find in detail pane n/N: Next/prev match
Views & Palette:
Ctrl+P: Command palette 1-9: Load saved view Shift+1-9: Save view to slot
Source Filtering (multi-machine):
F11: Cycle source filter (all/local/remote) Shift+F11: Source selection menu
Global:
Ctrl+C: Quit F1 or ?: Toggle help Ctrl+Shift+R: Force re-index Ctrl+Shift+Del: Reset all TUI state Detail Pane Tabs Tab Content Switch With Messages Full conversation with markdown [ / ] Snippets Keyword-extracted summaries [ / ] Raw Unformatted JSON/text [ / ] Context Window Sizing Size Characters Use Case Small ~200 Quick scanning Medium ~400 Default balanced view Large ~800 Longer passages XLarge ~1600 Full context, code review
Peek Mode (Ctrl+Space): Temporarily expand to XL without changing default.
Theme Presets
Cycle through 6 built-in themes with F2:
Theme Description Best For Dark Tokyo Night-inspired deep blues Low-light environments Light High-contrast light background Bright environments Catppuccin Warm pastels, reduced eye strain All-day coding Dracula Purple-accented dark theme Popular developer theme Nord Arctic-inspired cool tones Calm, focused work High Contrast Maximum readability Accessibility needs
All themes validated against WCAG contrast requirements (4.5:1 minimum for text).
Role-Aware Message Styling Role Visual Treatment User Blue-tinted background, bold Assistant Green-tinted background System Gray/muted background Tool Orange-tinted background Saved Views
Save filter configurations to 9 slots for instant recall.
What Gets Saved:
Active filters (agent, workspace, time range) Current ranking mode The search query
Keyboard:
Shift+1 through Shift+9: Save current view 1 through 9: Load view from slot
Via Command Palette: Ctrl+P → "Save/Load view"
Views persist in tui_state.json across sessions.
Density Modes
Control lines per search result. Cycle with Shift+D:
Mode Lines Best For Compact 3 Maximum results visible Cozy 5 Balanced view (default) Spacious 8 Detailed preview Bookmark System
Save important results with notes and tags:
In TUI: Press b to bookmark, add notes and tags.
Bookmark Structure:
title: Short description source_path, line_number, agent, workspace note: Your annotations tags: Comma-separated labels snippet: Extracted content
Storage: ~/.local/share/coding-agent-search/bookmarks.db (SQLite)
Optional Semantic Search
Local-only semantic search using MiniLM (no cloud):
Required files (place in data directory):
model.onnx tokenizer.json config.json special_tokens_map.json tokenizer_config.json
Vector index stored as vector_index/index-minilm-384.cvvi.
CASS does NOT auto-download models; you must manually install them.
Hash Embedder Fallback: When MiniLM not installed, CASS uses a hash-based embedder for approximate semantic similarity.
Watch Mode
Real-time index updates:
cass index --watch
Debounce: 2 seconds (wait for burst to settle) Max wait: 5 seconds (force flush during continuous activity) Incremental: Only re-scans modified files
TUI automatically starts watch mode in background.
Deduplication Strategy
CASS uses multi-layer deduplication:
Message Hash: SHA-256 of (role + content + timestamp) - identical messages stored once Conversation Fingerprint: Hash of first N message hashes - detects duplicate files Search-Time Dedup: Results deduplicated by content similarity
Noise Filtering:
Empty messages and pure whitespace System prompts (unless searching for them) Repeated tool acknowledgments Performance Characteristics Operation Latency Prefix search (cached) 2-8ms Prefix search (cold) 40-60ms Substring search 80-200ms Full reindex 5-30s Incremental reindex 50-500ms Health check <50ms
Memory: 70-140MB typical (50K messages) Disk: ~600 bytes/message (including n-gram overhead)
Response Shapes
Search Response:
{ "query": "error", "limit": 10, "count": 5, "total_matches": 42, "hits": [ { "source_path": "/path/to/session.jsonl", "line_number": 123, "agent": "claude_code", "workspace": "/projects/myapp", "title": "Authentication debugging", "snippet": "The error occurs when...", "score": 0.85, "match_type": "exact", "created_at": "2024-01-15T10:30:00Z" } ], "_meta": { "elapsed_ms": 12, "cache_hit": true, "wildcard_fallback": false, "next_cursor": "eyJ...", "index_freshness": { "stale": false, "age_seconds": 120 } } }
Aggregation Response:
{ "aggregations": { "agent": { "buckets": [ {"key": "claude_code", "count": 120}, {"key": "codex", "count": 85} ], "other_count": 15 } } }
Environment Variables Variable Purpose CASS_DATA_DIR Override data directory CHATGPT_ENCRYPTION_KEY Base64 key for encrypted ChatGPT PI_CODING_AGENT_DIR Override Pi-Agent sessions path CASS_CACHE_SHARD_CAP Per-shard cache entries (default 256) CASS_CACHE_TOTAL_CAP Total cached hits (default 2048) CASS_DEBUG_CACHE_METRICS Enable cache debug logging CODING_AGENT_SEARCH_NO_UPDATE_PROMPT Skip update checks Shell Completions cass completions bash > ~/.local/share/bash-completion/completions/cass cass completions zsh > "${fpath[1]}/_cass" cass completions fish > ~/.config/fish/completions/cass.fish cass completions powershell >> $PROFILE
API Contract & Versioning cass api-version --json
→
cass introspect --json
→ Full schema: all commands, arguments, response types
Guaranteed Stable:
Exit codes and their meanings JSON response structure for --robot output Flag names and behaviors _meta block format Integration with CASS Memory (cm)
CASS provides episodic memory (raw sessions). CM extracts procedural memory (rules and playbooks):
1. CASS indexes raw sessions
cass index --full
2. Search for relevant past experience
cass search "authentication timeout" --robot --limit 10
3. CM reflects on sessions to extract rules
cm reflect
Troubleshooting Issue Solution "missing index" cass index --full Stale warning Rerun index or enable watch Empty results Check cass stats --json, verify connectors detected JSON parsing errors Use --robot-format compact Watch not triggering Check watch_state.json, verify file event support Reset TUI state cass tui --reset-state or Ctrl+Shift+Del Installation
One-liner install
curl -fsSL https://raw.githubusercontent.com/Dicklesworthstone/coding_agent_session_search/main/install.sh \ | bash -s -- --easy-mode --verify
Windows
irm https://raw.githubusercontent.com/Dicklesworthstone/coding_agent_session_search/main/install.ps1 | iex
Integration with Flywheel Tool Integration CM CASS provides episodic memory, CM extracts procedural memory NTM Robot mode flags for searching past sessions Agent Mail Search threads across agent history BV Cross-reference beads with past solutions