| name | cli-continues-session-transfer |
| description | Transfer AI coding sessions between tools (Claude, Cursor, Copilot, Gemini, etc.) with full context |
| triggers | ["continue this session in another AI tool","switch from Claude to Cursor with context","resume my Copilot session in Gemini","transfer this coding session to another assistant","hand off my AI session with full history","export my Claude session to Cursor","pick up where I left off in a different tool","migrate my coding context between AI tools"] |
cli-continues Session Transfer
Skill by ara.so — Devtools Skills collection.
cli-continues (aka continues) enables seamless session transfers between 16 different AI coding assistants. When you hit rate limits, want to try a different model, or need specialized capabilities from another tool, it extracts your full conversation history, file changes, tool activity, and working state from one AI assistant and injects it into another.
Supported tools (any-to-any handoff):
Claude Code · Codex · GitHub Copilot CLI · Gemini CLI · Cursor · Amp · Cline · Roo Code · Kilo Code · Kiro · Crush · OpenCode · Factory Droid · Antigravity · Kimi CLI · Qwen Code
Installation
npx continues
npm install -g continues
continues scan
Requirements:
- Node.js 22.5+ (uses native
node:sqlite for some parsers)
- At least one supported AI coding tool installed
How Session Transfer Works
- Discovery — Scans session directories for all 16 tools (
~/.claude/, ~/.cursor/, etc.)
- Parsing — Reads each tool's native format (JSONL, JSON, SQLite, YAML)
- Extraction — Pulls messages, file changes, shell commands, reasoning blocks
- Handoff — Generates structured context document and injects into target tool
All reads are read-only — your original sessions are never modified.
Interactive Session Selection
The default command launches an interactive TUI:
continues
Shows all sessions across all tools, prioritizing the current project directory:
┌ continues — pick up where you left off
│
│ Found 1842 sessions across 16 CLI tools
│
◆ Select a session
│ [claude] 2026-02-19 05:28 my-project Debugging SSH tunnel config 84a36c5d
│ [copilot] 2026-02-19 04:41 my-project Migrate presets from Electron c2f5974c
│ [codex] 2026-02-18 23:12 my-project Fix OpenCode SQLite parser a1e90b3f
│
◆ Continue in:
│ ○ Gemini ○ Codex ○ Amp ○ Kiro ...
Quick Resume (Same Tool)
Resume recent sessions without the TUI picker:
continues claude
continues cursor
continues codex
continues gemini
continues copilot
continues claude 3
continues codex 5
This performs native resume — same tool, full history preservation.
Cross-Tool Handoff
Transfer a session from one tool to another:
continues resume abc123 --in gemini
continues resume abc123 --in codex --yolo --search --add-dir /tmp
continues resume abc123 --in cursor --debug-prompt
Common flags mapped automatically:
--model → tool-specific model flag
--sandbox → sandbox/isolation mode
--yolo → auto-approve mode
--add-dir → additional directory context
Unknown flags pass through to destination tool unchanged.
Verbosity Control
Four presets control handoff detail level:
const presets = {
minimal: {
recentMessages: 3,
shell: { maxSamples: 0 },
edit: { maxSamples: 0 },
mcp: { maxSamples: 0 },
subagent: { maxDetailChars: 0 }
},
standard: {
recentMessages: 10,
shell: { maxSamples: 5, stdoutLines: 5 },
edit: { maxSamples: 5 },
mcp: { maxSamples: 5 },
subagent: { maxDetailChars: 500 }
},
verbose: {
recentMessages: 20,
shell: { maxSamples: 10, stdoutLines: 10 },
edit: { maxSamples: 10 },
mcp: { maxSamples: 10 },
subagent: { maxDetailChars: 2000 }
},
full: {
recentMessages: 50,
shell: { : - },
: { : - },
: { : - },
: { : - }
}
};
continues resume abc123 --preset full --in cursor
cat > .continues.yml <<EOF
preset: verbose
recentMessages: 15
shell:
maxSamples: 10
stdoutLines: 20
EOF
Configuration resolution order:
--config <path> CLI flag
.continues.yml in current directory
~/.continues/config.yml
standard preset (default)
Listing and Inspecting Sessions
continues list
continues list --source claude
continues list --json
continues list --jsonl
continues list -n 10
continues inspect abc123
continues inspect abc123 --preset full --write-md handoff.md
continues inspect abc123 --truncate 50
Bulk Export
Export all sessions or specific tool's sessions:
continues dump all ./sessions
continues dump claude ./sessions/claude
continues dump gemini ./sessions/gemini
continues dump all ./sessions --json
continues dump all ./sessions --preset full
continues dump all ./sessions --limit 50
Files named: {source}_{id}.md or {source}_{id}.json
Session Data Sources
Each tool stores sessions differently:
const toolPaths = {
claude: '~/.claude/projects/',
codex: '~/.codex/sessions/',
copilot: '~/.copilot/session-state/',
gemini: '~/.gemini/tmp/*/chats/',
cursor: '~/.cursor/projects/*/agent-transcripts/',
opencode: '~/.local/share/opencode/storage/',
crush: '~/.crush/crush.db',
amp: '~/.local/share/amp/threads/',
kiro: '~/Library/Application Support/Kiro/workspace-sessions/',
antigravity: '~/.gemini/antigravity/',
factory: '~/.factory/sessions/',
cline: 'VS Code globalStorage/saoudrizwan.claude-dev/tasks/',
roocode: 'VS Code globalStorage/rooveterinaryinc.roo-cline/tasks/',
kilocode: 'VS Code globalStorage/kilocode.kilo-code/tasks/',
kimi: '~/.kimi/sessions/',
:
};
Environment variable overrides:
export CLAUDE_CONFIG_DIR=~/custom/claude
export CODEX_HOME=~/custom/codex
export GEMINI_CLI_HOME=~/custom/gemini
export XDG_DATA_HOME=~/custom/data
Handoff Document Structure
Generated handoff documents include:
## Session Metadata
- **Source**: claude-code
- **Session ID**: 84a36c5d
- **Project**: my-project
- **Started**: 2026-02-19 05:28
- **Model**: claude-sonnet-4
- **Tokens**: 45,230 in / 12,847 out
## Recent Conversation
[Last 10-50 messages depending on preset]
## Tool Activity
- **Bash** (×47): `$ npm test → exit 0` · `$ git status → exit 0`
- **Edit** (×12): `edit src/auth.ts` · `edit src/api/routes.ts`
- **Grep** (×8): `grep "handleLogin" src/` · `grep "JWT_SECRET"`
## File Changes
- `src/auth.ts` (edited 3 times)
- `tests/auth.test.ts` (created)
- `package.json` (edited)
## Key Decisions
- Switched from bcrypt to argon2 for password hashing
- Added Redis session store
- Implemented JWT refresh token rotation
## Session Notes
💭 Need to handle edge case where token refresh races with logout
Scripting and CI Usage
if continues list --source claude --json | jq -e '.[0]' > /dev/null; then
echo "Claude sessions found"
fi
SESSION_ID=$(continues list --source claude -n 1 --json | jq -r '.[0].id')
continues inspect "$SESSION_ID" --write-md "archive/session-$(date +%Y%m%d).md"
continues rebuild
Discovery and Indexing
continues scan
continues scan --rebuild
Common Workflows
Hit Rate Limit Mid-Session
continues
continues claude --in gemini
Resume Yesterday's Work
cd my-project
continues list -n 5
continues resume abc123
Archive Completed Sessions
continues dump all ./session-archive --preset full
continues dump claude ./claude-sessions --limit 20
Debug Handoff Issues
continues resume abc123 --in cursor --debug-prompt > handoff.txt
continues inspect abc123 --truncate 100
Parser Development
Add support for a new tool:
import { ParsedSession } from '../types/session';
export function parseMyToolSessions(dataDir: string): ParsedSession[] {
const sessions = readMyToolFormat(dataDir);
return sessions.map(s => ({
id: s.sessionId,
source: 'mytool',
projectPath: s.workingDir,
messages: s.history.map(m => ({
role: m.sender === 'user' ? 'user' : 'assistant',
content: m.text,
timestamp: new Date(m.time)
})),
summary: {
subject: s.title,
model: s.modelName,
tokensIn: s.usage?.input,
tokensOut: s.usage?.
},
: (s),
: {
: (s.),
: (s.),
: ,
: s.
}
}));
}
Register in src/parsers/registry.ts:
import { parseMyToolSessions } from './mytool-parser';
export const PARSERS: ParserRegistry = {
mytool: {
parse: parseMyToolSessions,
getPaths: () => ['~/.mytool/sessions']
}
};
Add to src/types/tool-names.ts:
export const TOOL_NAMES = [
'mytool'
] as const;
Troubleshooting
No sessions found:
continues scan
ls -la ~/.claude/projects/
ls -la ~/.cursor/projects/
continues rebuild
Symlink directories not discovered:
Fixed in recent versions. If you encounter this:
ls -la ~/.claude
node -e "require('./dist/parsers/claude-parser.js').parseClaudeSessions('~/.claude/projects')"
Zero tokens showing:
Some sessions don't track tokens — this is expected, not a bug.
Cross-tool flags not working:
Use --debug-prompt to see what flags get passed:
continues resume abc123 --in codex --my-flag --debug-prompt
VS Code extension sessions not found:
ls ~/Library/Application\ Support/Code/User/globalStorage/saoudrizwan.claude-dev/tasks/
Advanced Configuration
Full .continues.yml example:
preset: verbose
recentMessages: 15
maxKeyDecisions: 8
shell:
maxSamples: 10
stdoutLines: 20
stderrLines: 10
edit:
maxSamples: 10
grep:
maxSamples: 8
mcp:
maxSamples: 10
subagent:
maxDetailChars: 2000
paths:
claude: ~/custom/claude
cursor: ~/custom/cursor
Performance Notes
- Index cache: 5-minute TTL, stored at
~/.continues/sessions.jsonl
- Scan time: ~100-500ms for typical setups (thousands of sessions)
- Memory: Parsers stream large files, minimal memory footprint
- Concurrency: All parsers run in parallel during discovery
Security Considerations
- All session reads are read-only — original files never modified
- Handoff documents may contain sensitive code/data — review before sharing
- API keys in session history are preserved as-is — sanitize if needed
--debug-prompt writes to disk — ensure secure file permissions