OpenCode - Managing and Searching Conversations
OpenCode - Managing and Searching Conversations
What It Does
OpenCode provides multiple ways to navigate, search, and resume previous conversations (called "sessions"). You can access past conversations through the built-in /sessions command, CLI flags, or by directly searching session data.
How to Use It
Method 1: Interactive Session Browser (Recommended)
Inside OpenCode TUI:
/sessions
Keyboard shortcut: Ctrl+X then L (two-key sequence - press Ctrl+X, release, then press L)
β οΈ Important: This is a two-step sequence, not simultaneous keys:
- Press
Ctrl+X(you'll see a prompt waiting for next key) - Then press
L(lowercase letter L)
Aliases: /resume, /continue
Recommended: Use /sessions command if keyboard shortcuts are confusing
This opens an interactive picker showing all your previous conversations with:
- Session nicknames (if set)
- Recent message previews
- Timestamps
- Current working directory
Use arrow keys to navigate and Enter to load a session.
Method 2: Resume Last Session (Quick Method)
From terminal (before starting OpenCode):
bashopencode -c # or opencode --continue
This instantly loads your most recent conversation in the current directory.
Method 3: Resume Specific Session by ID
From terminal:
bashopencode -s <session-id> # or opencode --session <session-id>
Example:
bashopencode -s 4XP1fce5
Method 4: Export and Search (Advanced)
Export a specific session:
bashopencode export <sessionID>
This outputs the session as JSON, which you can:
- Pipe to
jqfor JSON parsing - Grep for specific content
- Archive for documentation
Export current session (from within OpenCode TUI):
/export
This opens your default editor ($EDITOR) with the conversation in Markdown format.
When to Use It
Use /sessions when:
- You remember working on something recently but can't recall exact details
- You want to browse multiple conversations to find the right one
- You need to see context (directory, recent messages) before choosing
Use --continue when:
- You just closed OpenCode and want to resume immediately
- You're actively iterating on a single project
Use --session <id> when:
- You have the exact session ID (from shared links or logs)
- Scripting OpenCode workflows
Use export when:
- Creating documentation from conversations
- Searching conversation content with external tools
- Archiving important sessions
How It Works
Session Storage
OpenCode stores each conversation as a session with:
- Session ID: Unique identifier (like
4XP1fce5) - Working directory: Where the session was started
- Timestamps: Creation and last update
- Messages: Full conversation history including tool calls
- Optional nickname: Custom label you can set
Session Persistence
- Sessions are stored locally on your machine
- Each working directory can have multiple sessions
- Sessions persist across OpenCode restarts
- Shared sessions (via
/share) get a public URL but remain private by default
The /sessions Command
When you run /sessions:
- OpenCode scans all stored sessions
- Groups them by recency and working directory
- Shows preview text from recent messages
- Allows fuzzy search by typing to filter
Where It Appears
Configuration location:
- Session data stored in OpenCode's data directory
- On macOS/Linux: Typically
~/.config/opencode/or~/.opencode/ - On Windows:
%APPDATA%\opencode\
Access points:
/sessionscommand within TUI--continue/-cflag when launching--session/-sflag with session IDopencode exportCLI command
Pro Tips
1. Set Session Titles Programmatically
Using opencode run with --title flag:
bash# Set custom title when starting session opencode run --title "Authentication Implementation" "Add OAuth to user management" # Title is searchable in /sessions browser opencode run --title "Bug Fix: Login Timeout" "Fix the session timeout issue" # Use descriptive titles for scripted sessions opencode run --title "Daily Code Review $(date +%Y-%m-%d)" "Review changes in src/"
Alternative: Use descriptive first message (in TUI):
Let's add authentication to the user management system
Both approaches create better previews in /sessions browser.
Note: The --title flag only works with opencode run (CLI mode), not in the TUI. For interactive sessions, your first message becomes the de facto title.
2. Combine with /share for Collaboration
/share
Copy the URL, share with teammates, then use --session <id> to resume the exact conversation later.
3. Semantic Search with Export + Grep
bash# Export all sessions and search opencode export <session-id> | grep -i "authentication" # Or use jq for structured search opencode export <session-id> | jq '.messages[] | select(.content | contains("database"))'
4. Clean Workspace with /new
If /sessions gets cluttered, start fresh:
/new
This keeps your session list manageable.
5. Use /compact for Long Sessions
Before exporting or sharing long conversations:
/compact
This summarizes the session, making it easier to search and share.
Current Limitations
No built-in semantic search: OpenCode doesn't currently offer vector-based search across conversations. You'll need to:
- Use
/sessionsinteractive browser (filters by text matching) - Export and use external tools like
grep,rg, orjq - Rely on descriptive session starts for better previews
Workaround for semantic search:
- Export sessions as JSON:
opencode export <id> - Use external semantic search tools (like local vector DB)
- Or integrate with MCP servers that provide search capabilities
Session Deletion and Recovery
Understanding Session Deletion
Common keyboard shortcut confusion:
Ctrl+X L(two-key sequence) - Opens session browser βCtrl+XorCmd+X(single key) - May delete current session β οΈ
Important: On Mac, if you press Cmd+X instead of the full Ctrl+X L sequence, you might trigger session deletion instead of opening the session browser.
Where Sessions Are Stored
OpenCode stores sessions in your local filesystem:
bash# Session storage location (macOS/Linux) ~/.local/share/opencode/storage/session/
Each project has its own session subdirectory identified by a hash of the working directory path.
Example structure:
~/.local/share/opencode/storage/session/
βββ 1e1209d1288cb1223a2070e8179f68bbbce051d4/ # Project hash
β βββ ses_5995ba4b5ffeZCMdxwHh3clJ5D.json
β βββ ses_59975f69bffelDux6q760oC14U.json
β βββ ...
βββ global/ # Sessions not tied to specific directory
βββ ...
Recovering Accidentally Deleted Sessions
Method 1: Check macOS Trash (if deleted via Finder)
If you accidentally deleted session files through Finder:
bash# Open Trash in Finder open ~/.Trash # Search for session files # Look for files starting with "ses_" and ending in ".json"
Then drag them back to ~/.local/share/opencode/storage/session/[project-hash]/
Method 2: Restore from Time Machine (macOS)
bash# Open Time Machine for session directory tmutil listlocalsnapshotdates / | tail -5 # Check recent snapshots # Or use Time Machine GUI open -a "Time Machine" # Navigate to ~/.local/share/opencode/storage/session/
Method 3: Check if Session Was Exported
If you previously exported the session:
bash# Search for exported markdown files find ~ -name "*.md" -type f -exec grep -l "opencode export" {} \; 2>/dev/null # Or check common export locations ls ~/Downloads/*.md ls ~/Documents/*.md
Method 4: Verify Sessions Still Exist
Before panicking, verify the session is actually deleted:
bash# List all sessions for current project PROJECT_HASH=$(echo -n "$(pwd)" | shasum -a 1 | cut -d' ' -f1) ls -lth ~/.local/share/opencode/storage/session/$PROJECT_HASH/ # Or list all sessions across all projects find ~/.local/share/opencode/storage/session -name "ses_*.json" -type f | head -20
Preventing Accidental Deletion
1. Backup Sessions Regularly
Create a backup script (~/bin/backup-opencode-sessions):
bash#!/bin/bash # Backup OpenCode sessions daily BACKUP_DIR="$HOME/Documents/opencode-backups" SESSION_DIR="$HOME/.local/share/opencode/storage/session" TIMESTAMP=$(date +%Y%m%d_%H%M%S) mkdir -p "$BACKUP_DIR" # Create timestamped backup tar -czf "$BACKUP_DIR/sessions_$TIMESTAMP.tar.gz" -C "$SESSION_DIR" . # Keep only last 30 days of backups find "$BACKUP_DIR" -name "sessions_*.tar.gz" -mtime +30 -delete echo "β Backed up sessions to: $BACKUP_DIR/sessions_$TIMESTAMP.tar.gz"
Make it executable and run via cron:
bashchmod +x ~/bin/backup-opencode-sessions # Add to crontab (run daily at 2am) crontab -e # Add line: 0 2 * * * /Users/yourusername/bin/backup-opencode-sessions
2. Export Important Sessions Immediately
After completing important work:
bash# From within OpenCode TUI /export # Or from terminal opencode export ses_5995ba4b5ffeZCMdxwHh3clJ5D > ~/Documents/important-session.md
3. Use Version Control for Session Exports
bash# Create a git repo for session archives mkdir -p ~/opencode-archives cd ~/opencode-archives git init # Export and commit important sessions opencode export ses_abc123 > authentication-work.md git add . git commit -m "Session: Authentication implementation"
Restoring a Deleted Session
If you have a backup:
bash# Extract specific session from backup BACKUP_FILE="$HOME/Documents/opencode-backups/sessions_20251108_140000.tar.gz" SESSION_DIR="$HOME/.local/share/opencode/storage/session" # Extract to temporary location first mkdir -p /tmp/session-restore tar -xzf "$BACKUP_FILE" -C /tmp/session-restore # Copy specific session back PROJECT_HASH="1e1209d1288cb1223a2070e8179f68bbbce051d4" cp /tmp/session-restore/$PROJECT_HASH/ses_*.json "$SESSION_DIR/$PROJECT_HASH/" # Clean up rm -rf /tmp/session-restore
If you have an exported markdown file:
Unfortunately, OpenCode doesn't have a built-in "import" feature to recreate sessions from markdown exports. However, you can:
- Start a new OpenCode session
- Reference the exported markdown file
- Ask OpenCode to continue from that context
bashopencode run --title "Restored: [Original Title]" "Continue from this exported session: @path/to/exported-session.md"
Keyboard Shortcut Reference (Corrected)
Session management shortcuts:
Ctrl+XthenL(two separate keys) - Open session browser/sessions- Command alternative to keyboard shortcut/new- Start new session (current auto-saved)
β οΈ Avoid:
Cmd+Xon Mac - May trigger deletion or cut operation- Single
Ctrl+Xwithout follow-up key - Incomplete shortcut
Pro tip: If you're unsure about keyboard shortcuts, use the slash commands instead:
- Type
/sessionsto browse - Type
/newto start fresh - Type
/exportto backup current session
Related Commands
/new- Start fresh session (current one saved automatically)/export- Export current session to Markdown/share- Share session publicly/compact- Summarize long sessions/undo- Revert last message in current session
Common Workflows
"I was working on auth yesterday..."
- Press
Ctrl+X L(or type/sessions) - Type "auth" to filter
- Select the matching session
"What did I do in that Australia planning conversation?"
- Press
Ctrl+X L - Type "Australia" or "travel"
- Review the preview
- Hit Enter to load
"Share conversation with teammate, then resume later"
- In conversation:
/share - Copy URL, send to teammate
- Later:
opencode --session <id>(extract from URL)
Technical Details
Session continuity:
- Sessions are tied to working directory by default
- Use
-sflag to load session from any directory - File references (
@file.ts) resolve relative to original working directory
Performance:
/sessionsbrowser loads metadata only (fast even with many sessions)- Full session data loaded only when selected
- Export can be slow for very long conversations (1000+ messages)
Advanced: External Semantic Search Integration
While OpenCode doesn't have built-in semantic search, you can build powerful search workflows using external tools.
Option 1: Simple Text Search with ripgrep
Find sessions mentioning specific topics:
bash# Search all session exports for "authentication" for session in $(ls ~/.config/opencode/sessions/*.json 2>/dev/null); do opencode export $(basename $session .json) | rg -i "authentication" && echo "Found in: $session" done
Create searchable archive:
bash# Export all sessions to markdown files mkdir -p ~/opencode-archive for session in ~/.config/opencode/sessions/*.json; do id=$(basename $session .json) opencode export $id > ~/opencode-archive/$id.md done # Search the archive rg -i "database migration" ~/opencode-archive/
Option 2: Structured Search with jq
Find sessions by tool usage:
bash# Find all sessions where you used the Edit tool opencode export <session-id> | jq '.messages[] | select(.tool_calls[]?.name == "edit")' # Extract all file paths edited in a session opencode export <session-id> | jq -r '.messages[].tool_calls[]? | select(.name == "edit") | .parameters.filePath' # Find sessions with errors opencode export <session-id> | jq '.messages[] | select(.role == "tool" and .error != null)'
Search across session metadata:
bash# Find sessions in specific directory opencode export <session-id> | jq 'select(.working_directory | contains("/path/to/project"))' # Find sessions by date opencode export <session-id> | jq 'select(.created_at > "2025-11-01")'
Option 3: Semantic Search with Embeddings
Using Python + sentence-transformers:
python#!/usr/bin/env python3 """ OpenCode Session Semantic Search Requires: pip install sentence-transformers numpy """ import json import subprocess from pathlib import Path from sentence_transformers import SentenceTransformer import numpy as np # Load model model = SentenceTransformer('all-MiniLM-L6-v2') # Get all session IDs session_dir = Path.home() / '.config' / 'opencode' / 'sessions' sessions = [f.stem for f in session_dir.glob('*.json')] # Export and embed all sessions embeddings = [] session_texts = [] for session_id in sessions: result = subprocess.run( ['opencode', 'export', session_id], capture_output=True, text=True ) if result.returncode == 0: data = json.loads(result.stdout) # Combine all message content text = ' '.join([ msg.get('content', '') for msg in data.get('messages', []) if isinstance(msg.get('content'), str) ]) session_texts.append(text) embeddings.append(model.encode(text)) # Search function def search_sessions(query, top_k=5): query_embedding = model.encode(query) # Calculate cosine similarity scores = [ np.dot(query_embedding, emb) / (np.linalg.norm(query_embedding) * np.linalg.norm(emb)) for emb in embeddings ] # Get top results top_indices = np.argsort(scores)[-top_k:][::-1] results = [] for idx in top_indices: results.append({ 'session_id': sessions[idx], 'score': scores[idx], 'preview': session_texts[idx][:200] }) return results # Example usage if __name__ == '__main__': results = search_sessions("authentication and user management") for r in results: print(f"Session: {r['session_id']}") print(f"Score: {r['score']:.3f}") print(f"Preview: {r['preview']}...") print()
Usage:
bashpython opencode_search.py "implement OAuth flow"
Option 4: SQLite Full-Text Search
Index sessions in SQLite:
bash#!/bin/bash # create_session_db.sh DB="$HOME/.opencode_search.db" # Create database sqlite3 "$DB" <<EOF DROP TABLE IF EXISTS sessions; CREATE VIRTUAL TABLE sessions USING fts5( session_id, working_dir, created_at, content ); EOF # Index all sessions for session_file in ~/.config/opencode/sessions/*.json; do session_id=$(basename "$session_file" .json) # Export and extract data export_data=$(opencode export "$session_id") working_dir=$(echo "$export_data" | jq -r '.working_directory // ""') created_at=$(echo "$export_data" | jq -r '.created_at // ""') content=$(echo "$export_data" | jq -r '.messages[].content // "" | select(. != "")') # Insert into database sqlite3 "$DB" <<SQL INSERT INTO sessions (session_id, working_dir, created_at, content) VALUES ( '$session_id', '$working_dir', '$created_at', '$(echo "$content" | sed "s/'/''/g")' ); SQL done echo "Indexed $(sqlite3 "$DB" 'SELECT COUNT(*) FROM sessions;') sessions"
Search the database:
bash# Search for specific terms sqlite3 ~/.opencode_search.db \ "SELECT session_id, snippet(sessions, 3, '**', '**', '...', 50) FROM sessions WHERE content MATCH 'authentication OR oauth' ORDER BY rank LIMIT 5;" # Search by directory sqlite3 ~/.opencode_search.db \ "SELECT session_id, created_at FROM sessions WHERE working_dir LIKE '%/myproject%' ORDER BY created_at DESC;"
Option 5: MCP Server Integration (Future)
Concept: Create an MCP server that provides semantic search:
json{ "mcpServers": { "opencode-search": { "command": "npx", "args": ["-y", "opencode-search-server"], "env": { "OPENCODE_SESSION_DIR": "~/.config/opencode/sessions" } } } }
This would enable:
- Real-time semantic search within OpenCode TUI
- Natural language queries: "Find where I implemented the login system"
- Context-aware search based on current project
Note: This is a potential future enhancement. Would require custom MCP server development.
Programmatic Session Naming
Built-in: --title Flag (CLI Mode)
The opencode run command accepts a --title flag to set session names programmatically:
bashopencode run --title "Feature: Add Dark Mode" "Implement dark mode toggle in settings"
Advantages:
- Searchable in
/sessionsbrowser - Appears in session metadata
- Scriptable for automation
Limitations:
- Only works with
opencode run(not in TUI) - Cannot rename existing sessions via CLI
- No built-in command to rename after creation
Renaming Existing Sessions (Direct File Editing)
Since OpenCode stores sessions as JSON files, you can rename them by editing the session file directly.
β οΈ Warning: Direct file editing is not officially supported and may break in future OpenCode versions. Always backup sessions first.
Method 1: Manual JSON Edit
bash# 1. Find session file location (varies by OS/install method) # Common locations: # - ~/.config/opencode/sessions/ # - ~/.local/share/opencode/sessions/ # - ~/Library/Application Support/opencode/sessions/ # 2. List sessions to find the one to rename ls ~/.config/opencode/sessions/ # 3. Edit the session file # Look for a "title" or "nickname" field in the JSON structure nano ~/.config/opencode/sessions/abc123xyz.json # 4. Modify the appropriate field (structure may vary) # Example structure (verify with actual file): { "id": "abc123xyz", "title": "Old Name", // Change this "metadata": { "nickname": "Old Name" // Or this, depending on structure } }
Method 2: Script-Based Renaming
Save as ~/bin/opencode-rename-session:
bash#!/bin/bash # opencode-rename-session - Rename an OpenCode session # Usage: opencode-rename-session <session-id> "New Title" SESSION_ID="$1" NEW_TITLE="$2" # Detect session directory (try common locations) for dir in \ "$HOME/.config/opencode/sessions" \ "$HOME/.local/share/opencode/sessions" \ "$HOME/Library/Application Support/opencode/sessions"; do if <span class="wikilink-broken" title="Page not found: -d "$dir" "> -d "$dir" </span>; then SESSION_DIR="$dir" break fi done if <span class="wikilink-broken" title="Page not found: -z "$SESSION_DIR" "> -z "$SESSION_DIR" </span>; then echo "Error: Could not find OpenCode sessions directory" exit 1 fi SESSION_FILE="$SESSION_DIR/$SESSION_ID.json" if <span class="wikilink-broken" title="Page not found: ! -f "$SESSION_FILE" "> ! -f "$SESSION_FILE" </span>; then echo "Error: Session $SESSION_ID not found" exit 1 fi if <span class="wikilink-broken" title="Page not found: -z "$NEW_TITLE" "> -z "$NEW_TITLE" </span>; then echo "Usage: opencode-rename-session <session-id> \"New Title\"" exit 1 fi # Backup original cp "$SESSION_FILE" "$SESSION_FILE.backup" # Attempt to update title field (adjust based on actual structure) # This assumes a "title" field exists - verify with actual session files if command -v jq &> /dev/null; then # Use jq if available jq --arg title "$NEW_TITLE" '.title = $title' "$SESSION_FILE" > "$SESSION_FILE.tmp" mv "$SESSION_FILE.tmp" "$SESSION_FILE" echo "β Renamed session $SESSION_ID to: $NEW_TITLE" echo " Backup saved: $SESSION_FILE.backup" else echo "Error: jq not found. Install jq to use this script." exit 1 fi
Make it executable:
bashchmod +x ~/bin/opencode-rename-session
Usage:
bash# List sessions to get ID opencode export | head -20 # Or check /sessions in TUI # Rename session opencode-rename-session abc123xyz "Authentication Feature Implementation"
Method 3: Export, Edit, Re-import (Safest)
Currently, OpenCode doesn't have a built-in "import" feature, but you can:
- Export session to Markdown
- Edit the title/content
- Start a new session with the edited content
- Archive the old session
bash# Export session opencode export abc123xyz > session-backup.md # Edit the exported file (add title at top, edit content) nano session-backup.md # Create new session with content (manual process) # Start OpenCode and paste/reference the edited content opencode --title "Renamed Session" --prompt "Continue from previous work..."
Automated Session Organization
Auto-title sessions by git branch:
bash#!/bin/bash # opencode-smart - Start OpenCode with auto-generated title BRANCH=$(git branch --show-current 2>/dev/null || echo "no-branch") DATE=$(date +%Y-%m-%d) TITLE="[$BRANCH] Session $DATE" opencode run --title "$TITLE" "$@"
Usage:
bashopencode-smart "Add user authentication" # Creates session titled: "[feature/auth] Session 2025-11-08"
Auto-title by directory:
bash#!/bin/bash # opencode-dir-title - Start session titled by project name PROJECT_NAME=$(basename "$(pwd)") TIMESTAMP=$(date +"%Y-%m-%d %H:%M") TITLE="$PROJECT_NAME - $TIMESTAMP" opencode run --title "$TITLE" "$@"
Usage:
bashcd ~/projects/myapp opencode-dir-title "Fix the login bug" # Creates session titled: "myapp - 2025-11-08 18:30"
Feature Request: Native Rename Command
Current status: No built-in /rename command exists in OpenCode TUI.
Workaround: Use --title flag with opencode run or direct JSON editing.
Potential future commands:
bash# Hypothetical future syntax /rename "New Session Title" # Or via CLI opencode session rename <session-id> "New Title"
If this is important to you, consider requesting it on the OpenCode GitHub.
Searching Sessions vs Searching Your Knowledge Base
The Real Question: Do You Need to Search Sessions?
Consider this workflow instead:
- β
OpenCode conversations β Good insights β
/exportβ Create article - β Search your curated articles (not messy session logs)
- β
Use
/sessionsonly to resume recent work
Your knowledge base is your articles, not your session history.
If You Do Need to Search Sessions
Simple approach:
bash# Find sessions in current project ls -lth ~/.local/share/opencode/storage/session/*/ # Search session files directly with grep grep -r "search term" ~/.local/share/opencode/storage/session/
bash# Use jq to parse session JSON cat ~/.local/share/opencode/storage/session/*/ses_*.json | jq '.messages[].content' | grep -i "search term"
Personal automation note: I maintain search scripts in my private Coding Actions folder for more complex session searching workflows. The examples above show the core concepts.
Advanced: Session Storage Format
Session file location:
~/.config/opencode/sessions/<session-id>.json
Typical structure:
json{ "id": "abc123xyz", "created_at": "2025-11-08T18:30:00-08:00", "updated_at": "2025-11-08T19:15:00-08:00", "working_directory": "/path/to/project", "model": "opencode/claude-sonnet-4-5", "messages": [ { "role": "user", "content": "Add authentication to the app", "timestamp": "2025-11-08T18:30:00-08:00" }, { "role": "assistant", "content": "I'll help you add authentication...", "tool_calls": [ { "id": "call_123", "name": "read", "parameters": { "filePath": "/path/to/project/src/auth.ts" } } ], "timestamp": "2025-11-08T18:30:15-08:00" }, { "role": "tool", "tool_call_id": "call_123", "name": "read", "result": "file contents...", "timestamp": "2025-11-08T18:30:16-08:00" } ], "metadata": { "nickname": "Add authentication feature", "tags": ["auth", "security"], "total_tokens": 15420, "total_cost": 0.75 } }
Key fields for automation:
id- Session identifierworking_directory- Where session was startedmessages[].role- "user", "assistant", or "tool"messages[].tool_calls- Tools invoked by assistantmetadata- Custom fields (may vary by OpenCode version)
Direct file access:
bash# List all sessions ls ~/.config/opencode/sessions/ # Read session directly cat ~/.config/opencode/sessions/abc123xyz.json | jq '.messages[0]' # Extract working directory cat ~/.config/opencode/sessions/abc123xyz.json | jq -r '.working_directory'
Automation possibilities:
- Build custom session browsers
- Generate session reports
- Integrate with project management tools
- Create session backups
- Analyze tool usage patterns
Pro Automation Workflows
1. Auto-Archive Completed Sessions
bash#!/bin/bash # Auto-archive sessions older than 30 days ARCHIVE_DIR="$HOME/Documents/opencode-archives" SESSION_DIR="$HOME/.config/opencode/sessions" CUTOFF_DATE=$(date -d '30 days ago' +%s 2>/dev/null || date -v-30d +%s) mkdir -p "$ARCHIVE_DIR" for session_file in "$SESSION_DIR"/*.json; do session_id=$(basename "$session_file" .json) # Get session creation date created=$(cat "$session_file" | jq -r '.created_at') created_ts=$(date -d "$created" +%s 2>/dev/null || date -j -f "%Y-%m-%dT%H:%M:%S%z" "$created" +%s) if <span class="wikilink-broken" title="Page not found: $created_ts -lt $CUTOFF_DATE "> $created_ts -lt $CUTOFF_DATE </span>; then echo "Archiving: $session_id" opencode export "$session_id" > "$ARCHIVE_DIR/$session_id.md" fi done
2. Session Cost Tracking
bash#!/bin/bash # Track total OpenCode usage costs TOTAL_COST=0 for session_file in ~/.config/opencode/sessions/*.json; do cost=$(cat "$session_file" | jq -r '.metadata.total_cost // 0') TOTAL_COST=$(echo "$TOTAL_COST + $cost" | bc) done echo "Total OpenCode cost: \$$TOTAL_COST"
3. Project Session Browser
bash#!/bin/bash # List all sessions for current project PROJECT_DIR=$(pwd) echo "Sessions for: $PROJECT_DIR" echo "" for session_file in ~/.config/opencode/sessions/*.json; do working_dir=$(cat "$session_file" | jq -r '.working_directory') if <span class="wikilink-broken" title="Page not found: "$working_dir" == "$PROJECT_DIR" "> "$working_dir" == "$PROJECT_DIR" </span>; then session_id=$(basename "$session_file" .json) created=$(cat "$session_file" | jq -r '.created_at') nickname=$(cat "$session_file" | jq -r '.metadata.nickname // "Untitled"') echo "[$session_id] $nickname" echo " Created: $created" echo " Resume: opencode -s $session_id" echo "" fi done