Skip to main content

continues-ai-session-transfer

Resume AI coding sessions across Claude Code, Cursor, Copilot, Gemini, Codex, and 11+ other tools

Ir para a instalação

Informações da origem

Repositório
reason-machines/devtools-skills
Última atividade na origem
2 de junho de 2026 às 09:35
Idioma detectado do SKILL.md
inglês
Estrelas
4
Forks
0

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
continues-ai-session-transfer
description
Resume AI coding sessions across Claude Code, Cursor, Copilot, Gemini, Codex, and 11+ other tools
triggers
["switch my AI session to another tool","transfer this conversation to gemini","continue this session in cursor","hit the rate limit need to switch tools","export my claude session to copilot","resume my coding session in another AI","hand off this context to codex","migrate my AI conversation between tools"]
# continues-ai-session-transfer > Skill by [ara.so](https://ara.so) — Devtools Skills collection ## What it does `continues` solves the context-switching problem when AI coding tools hit rate limits or need to be switched mid-session. It extracts conversation history, file changes, tool activity, and working state from one AI coding assistant and transfers it to another. Supports 16 tools with 240+ cross-tool handoff paths. **Supported tools**: 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 No installation required with `npx`: ```bash npx continues ``` For permanent installation: ```bash npm install -g continues ``` This gives you both `continues` and `cont` as global commands. **Requirements**: Node.js 22.5+ (uses built-in `node:sqlite`) ## Core commands ### Interactive session picker Launch the TUI to select any session across all tools: ```bash continues ``` Automatically prioritizes sessions from the current project directory. ### Quick resume in same tool Resume the most recent (or Nth most recent) session from a specific tool: ```bash continues claude # Latest Claude Code session continues codex 3 # 3rd most recent Codex session continues cursor # Latest Cursor session continues gemini # Latest Gemini CLI session continues cline # Latest Cline session continues amp # Latest Amp session ``` Works for all 16 supported tools. Uses native resume with full history. ### Cross-tool handoff Transfer a session from one tool to another: ```bash # Basic handoff by session ID continues resume abc123 --in gemini # With tool-specific flags continues resume abc123 --in codex --yolo --search # Pass extra directories to the target tool continues resume abc123 --in cursor --add-dir /tmp/shared # Inspect the handoff prompt without launching the tool continues resume abc123 --in gemini --debug-prompt ``` ### List sessions ```bash # Table view continues list # Filter by source tool continues list --source claude # JSON output for scripting continues list --json # JSONL output (one session per line) continues list --jsonl # Limit results continues list -n 10 ``` ### Inspect session details View detailed diagnostic information about a session: ```bash # Full diagnostic view continues inspect abc123 # Export to markdown continues inspect abc123 --preset full --write-md handoff.md # Compact one-liner view continues inspect abc123 --truncate 50 ``` ### Bulk export sessions Export all sessions to files for backup or analysis: ```bash # Export all sessions to markdown continues dump all ./sessions # Export specific tool's sessions continues dump claude ./sessions/claude continues dump cursor ./sessions/cursor # Export as JSON continues dump all ./sessions --json # Control detail level continues dump all ./sessions --preset full # Limit number of exports continues dump all ./sessions --limit 50 ``` Output files: `{source}_{id}.md` or `{source}_{id}.json` ### Scan and rebuild index ```bash # Show discovery stats continues scan # Force rebuild session index continues rebuild continues scan --rebuild ``` Session index cached at `~/.continues/sessions.jsonl` (5-minute TTL). ## Configuration ### Verbosity presets Control how much context gets transferred: | Preset | Messages | Tool samples | Use case | |--------|----------|--------------|----------| | `minimal` | 3 | 0 | Token-constrained transfers | | `standard` | 10 | 5 | Default balanced handoff | | `verbose` | 20 | 10 | Complex multi-file tasks | | `full` | 50 | All | Complete session capture | ```bash continues resume abc123 --preset verbose --in gemini continues inspect abc123 --preset full continues dump all ./backup --preset minimal ``` ### YAML configuration Create `.continues.yml` in your project root: ```yaml preset: verbose recentMessages: 15 shell: maxSamples: 10 stdoutLines: 20 files: maxSamples: 8 thinking: maxChars: 2000 keyDecisions: maxCount: 5 ``` Configuration resolution order: 1. `--config <path>` flag 2. `.continues.yml` in current directory 3. `~/.continues/config.yml` (global) 4. `standard` preset (default) ### Environment variable overrides Customize tool data directories: ```bash export CLAUDE_CONFIG_DIR="$HOME/.config/claude" export CODEX_HOME="$HOME/.local/codex" export GEMINI_CLI_HOME="$HOME/.gemini-custom" export XDG_DATA_HOME="$HOME/.local/share" ``` ## Code examples ### TypeScript: Programmatic session access ```typescript import { SessionRegistry } from 'continues'; import { ClaudeParser } from 'continues/parsers'; // Initialize registry const registry = new SessionRegistry(); await registry.scan(); // Get all sessions from Claude Code const claudeSessions = registry.getSessions('claude'); // Find sessions for current project const projectSessions = registry.getSessionsForProject(process.cwd()); // Parse a specific session const parser = new ClaudeParser(); const sessionData = await parser.parse('~/.claude/projects/abc123/session.jsonl'); console.log(`Messages: ${sessionData.messages.length}`); console.log(`Files touched: ${sessionData.files.length}`); console.log(`Shell commands: ${sessionData.shell.length}`); ``` ### TypeScript: Custom handoff generation ```typescript import { HandoffGenerator } from 'continues/handoff'; import { SessionParser } from 'continues/parsers'; // Parse source session const parser = SessionParser.forTool('claude'); const session = await parser.parse(sessionPath); // Generate handoff with custom config const generator = new HandoffGenerator({ preset: 'verbose', recentMessages: 20, shell: { maxSamples: 15 } }); const handoffDoc = generator.generate(session, { sourceId: 'abc123', sourceTool: 'claude', targetTool: 'gemini' }); // Write handoff file await fs.writeFile('handoff.md', handoffDoc); ``` ### TypeScript: Adding a custom parser ```typescript // src/parsers/mytool.ts import type { SessionData, BaseParser } from '../types'; export class MyToolParser implements BaseParser { readonly name = 'mytool'; readonly format = 'json'; getSessionPaths(): string[] { return [`${process.env.HOME}/.mytool/sessions/*.json`]; } async parse(filePath: string): Promise<SessionData> { const raw = JSON.parse(await fs.readFile(filePath, 'utf-8')); return { id: raw.id, source: 'mytool', projectPath: raw.workspace, timestamp: new Date(raw.created_at), messages: raw.chat.map(msg => ({ role: msg.role, content: msg.text, timestamp: new Date(msg.ts) })), files: raw.files.map(f => ({ path: f.path, operation: f.op, content: f.content })), shell: raw.commands.map(cmd => ({ command: cmd.exec, output: cmd.stdout, exitCode: cmd.exit, timestamp: new Date(cmd.ts) })), metadata: { model: raw.model, tokensIn: raw.usage?.input, tokensOut: raw.usage?.output } }; } } ``` ```typescript // src/parsers/registry.ts import { MyToolParser } from './mytool'; export const PARSERS = { // ... existing parsers mytool: MyToolParser, } as const; ``` ```typescript // src/types/tool-names.ts export const TOOL_NAMES = [ 'claude', 'codex', 'cursor', 'gemini', 'copilot', // ... other tools 'mytool' ] as const; ``` ## Session storage locations Where `continues` looks for session data: ```typescript // Claude Code ~/.claude/projects/*/session.jsonl // Codex ~/.codex/sessions/*.jsonl // Cursor ~/.cursor/projects/*/agent-transcripts/*.jsonl // Gemini CLI ~/.gemini/tmp/*/chats/*.json // Copilot ~/.copilot/session-state/*.{yaml,jsonl} // OpenCode (SQLite) ~/.local/share/opencode/storage/sessions.db // Crush (SQLite) ~/.crush/crush.db // Amp ~/.local/share/amp/threads/*.json // Kiro ~/Library/Application Support/Kiro/workspace-sessions/*.json // Cline (VS Code extension) <vscode-data>/globalStorage/saoudrizwan.claude-dev/tasks/*/ // Roo Code (VS Code extension) <vscode-data>/globalStorage/rooveterinaryinc.roo-cline/tasks/*/ // Kilo Code (VS Code extension) <vscode-data>/globalStorage/kilocode.kilo-code/tasks/*/ ``` All reads are **read-only** — `continues` never modifies source session files. ## Common patterns ### Rate limit recovery workflow ```bash # Hit Claude rate limit mid-session # Switch to Gemini with full context continues resume $(continues list --source claude -n 1 --json | jq -r '.[0].id') --in gemini --preset verbose # Or use interactive picker continues # Select your Claude session, choose Gemini as target ``` ### Daily session backup ```bash #!/bin/bash # Backup all sessions daily DATE=$(date +%Y-%m-%d) continues dump all "./backups/$DATE" --preset full --json ``` ### Project-specific handoff script ```bash # .continues.yml in your project preset: verbose recentMessages: 25 shell: maxSamples: 15 # Quick handoff script #!/bin/bash # switch-to-codex.sh LAST_SESSION=$(continues list -n 1 --json | jq -r '.[0].id') continues resume "$LAST_SESSION" --in codex --yolo ``` ### Cross-tool testing ```bash # Start in Claude claude start "Implement auth middleware" # After some work, transfer to Cursor to test continues resume $(continues list --source claude -n 1 --json | jq -r '.[0].id') --in cursor # Verify in Gemini continues resume $(continues list --source cursor -n 1 --json | jq -r '.[0].id') --in gemini --debug-prompt ``` ## What gets transferred Every handoff document includes: - **Recent messages**: User/assistant conversation (3-50 messages based on preset) - **File changes**: Edits, reads, writes with full paths - **Tool activity**: Shell commands with output/exit codes, grep/glob results, MCP calls - **Key decisions**: Architectural notes, debugging insights from thinking blocks - **Session metadata**: Model, tokens, cache usage, timestamps - **Original session path**: Full file path for traceability Example handoff structure: ```markdown ## Session Context **Source**: claude (session: abc123) **Project**: ~/dev/my-app **Started**: 2026-02-19 05:28 **Model**: claude-sonnet-4 **Tokens**: 45,230 in / 12,847 out ## Recent Conversation [Last 10 messages with timestamps and roles] ## Tool Activity - **Bash** (×47): `npm test → exit 0`, `git status → exit 0` - **Edit** (×12): `edit src/auth.ts`, `edit tests/auth.test.ts` - **Grep** (×8): `grep "handleLogin" src/` ## Key Decisions - Need to handle token refresh race with logout - Using JWT short-lived tokens (15min) + refresh tokens - Middleware order: auth → rate-limit → routes ## Files Modified - src/auth.ts (edited) - src/api/routes.ts (edited) - tests/auth.test.ts (created) ``` ## Troubleshooting ### No sessions found ```bash # Check discovery continues scan # Verify tool installation which claude codex cursor gemini # Force index rebuild continues rebuild ``` ### Session parsing fails ```bash # Inspect raw session continues inspect abc123 --verbose # Check for corrupt files file ~/.claude/projects/abc123/session.jsonl # Try with minimal preset continues resume abc123 --in gemini --preset minimal ``` ### Target tool doesn't receive context ```bash # Debug the handoff prompt continues resume abc123 --in cursor --debug-prompt # Check handoff file location ls -la ~/.continues/handoffs/ # Verify target tool accepts stdin echo "test" | cursor ```
Ver no GitHub
Este SKILL.md e muito grande, entao o SkillsMP mostra aqui apenas a primeira secao. Ver no GitHub