Skip to main content

AI Memory Switcher โ€” Save, compress, and transfer context between AI agents

Project description

๐Ÿง  AiMem โ€” AI Memory Switcher

AiMem - Transfer context between AI agents

PyPI Python License GitHub stars

Transfer context seamlessly between AI agents (Claude, Gemini, Qwen, OpenCode, Codex...)

When Claude hits rate-limits or you need to switch to another AI, AiMem helps you continue without losing your train of thought.

If this project helps you, please give it a โญ on GitHub!


๐Ÿค” The Problem

You: "Claude is running out of tokens..."
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
โ”‚ Claude: Fixing authentication bug...            โ”‚
โ”‚ 11PM - Claude hits rate limit!                โ”‚
โ”‚                                              โ”‚
โ”‚ NOW WHAT?                                    โ”‚
โ”‚ โ†’ Copy all chat history? Tedious             โ”‚
โ”‚ โ†’ Start from scratch? 30+ minutes lost      โ”‚
โ”‚ โ†’ Lose context? Devastating                 โ”‚
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

โ†’ With AiMem: 3 seconds to transfer
$ aimem save --from claude
$ aimem load sess-abc --to gemini
# Paste into Gemini - full context transferred!

๐Ÿš€ Install

pip install aimem-cli

Or from source:

git clone https://github.com/ThangTo/AiMem.git
cd AiMem
pip install -e .

โœจ Features

  • ๐Ÿ“ค Save sessions from Claude, Gemini, Qwen, OpenCode, Codex, Aider, Continue.dev
  • ๐Ÿ“ฅ Load to any AI agent with proper format
  • ๐Ÿ’‰ Inject directly into agent storage (no copy-paste!)
  • ๐Ÿ“Š Analyze if session fits target model context limit
  • โœ‚๏ธ Chunk large sessions automatically
  • ๐Ÿ—œ๏ธ Compress sessions with LLM (95% reduction)
  • ๐Ÿ”€ Merge multiple sessions

โšก Quick Start

Transfer from Claude to OpenCode (Recommended)

# Save current Claude session
aimem-cli save --from claude

# Inject directly into OpenCode
aimem-cli load <session-id> --to opencode --inject

# Open the session in OpenCode
opencode -s <session-id-from-output>

Transfer to Markdown (for any AI)

aimem-cli save --from claude
aimem-cli load <session-id> --to markdown
# Content copied to clipboard - paste anywhere

๐Ÿ“– All Commands

aimem-cli init

Initialize config file at ~/.aimem/config.json.

aimem-cli init
aimem-cli init --force    # Overwrite existing config

aimem-cli save --from <agent>

Save a session from an agent to AiMem storage.

# From Claude
aimem-cli save --from claude
aimem-cli save --from claude --session-id <id>

# From Gemini
aimem-cli save --from gemini

# From Qwen
aimem-cli save --from qwen

# From OpenCode
aimem-cli save --from opencode

# From Codex
aimem-cli save --from codex

# From Aider
aimem-cli save --from aider

# From Continue.dev
aimem-cli save --from continue

# From Clipboard
aimem-cli save --from clipboard

# With LLM compression (requires API key)
aimem-cli save --from claude --compress

aimem-cli load <session-id> --to <format>

Load a saved session to target format.

# To Markdown (copy to clipboard)
aimem-cli load <session-id> --to markdown

# To Claude (markdown format)
aimem-cli load <session-id> --to claude

# To Gemini
aimem-cli load <session-id> --to gemini

# To Qwen
aimem-cli load <session-id> --to qwen

# To Prompt (for API calls)
aimem-cli load <session-id> --to prompt

# To OpenCode
aimem-cli load <session-id> --to opencode

# To Codex
aimem-cli load <session-id> --to codex

# To Continue.dev
aimem-cli load <session-id> --to continue

aimem-cli load <session-id> --to <agent> --inject

Inject directly into agent storage - no copy-paste needed!

# Inject into OpenCode (RECOMMENDED)
aimem-cli load <session-id> --to opencode --inject
opencode -s <session-id>

# Inject into Claude
aimem-cli load <session-id> --to claude --inject
claude --resume

# Inject into Gemini
aimem-cli load <session-id> --to gemini --inject

# Inject into Qwen
aimem-cli load <session-id> --to qwen --inject

# Inject into Codex
aimem-cli load <session-id> --to codex --inject

aimem-cli list

List all saved sessions.

# List all saved sessions
aimem-cli list

# List sessions from specific agent
aimem-cli list --from claude
aimem-cli list --from gemini
aimem-cli list --from qwen

# List available agents
aimem-cli list --agents

aimem-cli merge <session-id-1> <session-id-2>

Merge multiple sessions into one.

# Simple merge (concatenate)
aimem-cli merge sess-abc sess-def

# Smart merge (deduplicate, combine goals, merge todos)
aimem-cli merge sess-abc sess-def --smart

# Smart merge with target format
aimem-cli merge sess-abc sess-def --smart --to gemini

aimem-cli config

View or update configuration.

# Show current config
aimem-cli config

# Set config values
aimem-cli config set compression.enabled true
aimem-cli config set compression.api_key YOUR_API_KEY
aimem-cli config set compression.provider groq
aimem-cli config set output.format markdown
aimem-cli config set output.clipboard_auto true

aimem-cli delete <session-id>

Delete a saved session.

aimem-cli delete <session-id>

Analyze context before loading

Check if a session fits in target model's context limit.

# Analyze if session fits in Qwen's 32K context
aimem-cli load <session-id> --to qwen --analyze

# Output example:
# โš ๏ธ Session EXCEEDS Qwen limit (50K tokens vs 32K limit)
# ๐Ÿ’ก Try: aimem load <session-id> --to qwen --chunk

Chunk large sessions

Automatically split session into smaller chunks if too large for target.

# Auto-chunk for Qwen (32K limit)
aimem-cli load <session-id> --to qwen --chunk

# Output:
# ๐Ÿ“ฆ CHUNK 1/2 (25K tokens)
# [content of chunk 1]
# โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
# ๐Ÿ“ฆ CHUNK 2/2 (25K tokens)
# [content of chunk 2]

Compress session with LLM

Reduce session size using LLM compression (requires API key).

# Compress on save
aimem-cli save --from claude --compress

# Compress on load
aimem-cli load <session-id> --compress

# Result: ~95% size reduction
# Output: {
#   "current_goal": "Fix authentication bug",
#   "latest_code": [{"path": "auth.py", "content": "..."}],
#   "current_errors": ["TypeError: undefined"],
#   "key_decisions": ["Used JWT instead of session"],
#   "todo_list": ["Write tests", "Deploy to staging"]
# }

๐Ÿ”ง Supported Agents

Source (--from)

Agent Storage Location Inject?
claude ~/.claude/projects/*/*.jsonl โœ…
gemini ~/.gemini/tmp/*/chats/*.json โœ…
qwen ~/.qwen/tmp/*/logs.json โœ…
opencode ~/.opencode/sessions/*.json โœ…
codex ~/.codex/sessions/*.jsonl โœ…
aider ~/.aider.chat.history.md โŒ
continue ~/.continue/sessions.db โŒ
clipboard System clipboard โŒ

Target (--to)

Format Best for Inject?
markdown Paste anywhere โŒ
claude Claude Code CLI โœ…
gemini Gemini CLI โœ…
qwen Qwen CLI โœ…
opencode OpenCode CLI โœ…
codex Codex CLI โœ…
prompt API calls โŒ

โš™๏ธ Configuration

Config file: ~/.aimem/config.json

# Show config
aimem-cli config

# Enable LLM compression (opt-in)
aimem-cli config set compression.enabled true
aimem-cli config set compression.api_key YOUR_GROQ_KEY
aimem-cli config set compression.provider groq

# Auto-copy to clipboard
aimem-cli config set output.clipboard_auto true

Config Options

Option Default Description
compression.enabled false Enable LLM compression
compression.provider "groq" Compression provider (groq, gemini)
compression.api_key "" API key for compression
output.format "markdown" Default output format
output.clipboard_auto true Auto-copy to clipboard
storage.path "~/.aimem/sessions" Session storage path

๐Ÿ“ Examples

Example 1: Transfer Claude session to OpenCode

$ aimem-cli save --from claude
[i] Found 5 Claude sessions. Select one:
  [1] 2026-04-20 | Fix authentication bug
  [2] 2026-04-19 | Add user login feature
  [3] 2026-04-18 | Research API design
Enter number (default=1): 1
[OK] Saved session: claude-abc123

$ aimem-cli load claude-abc123 --to opencode --inject
[OK] Injected into OpenCode
    Session ID: ses_xyz789
Resume with: opencode -s ses_xyz789

$ opencode -s ses_xyz789
# Continue with full context in OpenCode!

Example 2: Transfer to any AI via Markdown

$ aimem-cli save --from claude
[OK] Saved session: claude-abc123

$ aimem-cli load claude-abc123 --to markdown
[OK] Content copied to clipboard!

# Paste into any AI: Gemini, ChatGPT, Qwen, etc.

Example 3: Merge multiple sessions

$ aimem-cli merge claude-abc claude-def claude-ghi
[i] Merging 3 sessions...
[OK] Merged session: merged-xyz123
    Total messages: 156

$ aimem-cli load merged-xyz123 --to gemini --inject

๐Ÿ—๏ธ Architecture

aimem-cli/
โ”œโ”€โ”€ aimem/
โ”‚   โ”œโ”€โ”€ cli.py                 # CLI interface
โ”‚   โ”œโ”€โ”€ models.py              # UniversalSession model
โ”‚   โ”œโ”€โ”€ storage.py             # File storage
โ”‚   โ”œโ”€โ”€ compression.py         # LLM compression
โ”‚   โ”œโ”€โ”€ context_manager.py     # Context management
โ”‚   โ””โ”€โ”€ adapters/
โ”‚       โ”œโ”€โ”€ claude.py          # Claude Code adapter
โ”‚       โ”œโ”€โ”€ gemini.py          # Gemini CLI adapter
โ”‚       โ”œโ”€โ”€ qwen.py             # Qwen CLI adapter
โ”‚       โ”œโ”€โ”€ opencode.py         # OpenCode adapter
โ”‚       โ”œโ”€โ”€ codex.py            # Codex adapter
โ”‚       โ”œโ”€โ”€ aider.py            # Aider adapter
โ”‚       โ”œโ”€โ”€ continue_dev.py     # Continue.dev adapter
โ”‚       โ”œโ”€โ”€ clipboard.py        # Clipboard adapter
โ”‚       โ””โ”€โ”€ output/             # Output formatters
โ”‚           โ”œโ”€โ”€ __init__.py
โ”‚           โ”œโ”€โ”€ markdown.py
โ”‚           โ”œโ”€โ”€ claude.py
โ”‚           โ”œโ”€โ”€ gemini.py
โ”‚           โ”œโ”€โ”€ qwen.py
โ”‚           โ”œโ”€โ”€ prompt.py
โ”‚           โ”œโ”€โ”€ continue.py
โ”‚           โ”œโ”€โ”€ codex.py
โ”‚           โ””โ”€โ”€ opencode.py


๐Ÿ“‹ Supported Agents

Source Storage Inject?
Claude ~/.claude/projects/*/*.jsonl โœ…
Gemini ~/.gemini/tmp/*/chats/*.json โœ…
Qwen ~/.qwen/tmp/*/logs.json โœ…
OpenCode ~/.opencode/sessions/*.json โœ…
Codex ~/.codex/sessions/*.jsonl โœ…
Aider ~/.aider.chat.history.md โŒ
Continue ~/.continue/sessions.db โŒ
Clipboard System clipboard โŒ

๐Ÿš€ Roadmap

  • Add more adapters ( Zed, Cursor )
  • Docker support
  • WebUI for session management
  • VS Code extension

๐Ÿ“ License

MIT License - See LICENSE


๐Ÿ‘ Contributing

See CONTRIBUTING.md for how to contribute.


๐Ÿ‘ Acknowledgments

  • Claude Code for the great developer experience
  • All open source contributors

Made with โค๏ธ by ThangTo

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

aimem_cli-0.2.3.tar.gz (50.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aimem_cli-0.2.3-py3-none-any.whl (55.9 kB view details)

Uploaded Python 3

File details

Details for the file aimem_cli-0.2.3.tar.gz.

File metadata

  • Download URL: aimem_cli-0.2.3.tar.gz
  • Upload date:
  • Size: 50.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.0

File hashes

Hashes for aimem_cli-0.2.3.tar.gz
Algorithm Hash digest
SHA256 6ec355ce0b0af4f8055400c455c4c685e41305b7d8e46d725e897cc870229610
MD5 342a475c03745b266dedd37db7e8e84b
BLAKE2b-256 90b274edb14653a8e4ca61dc069527e4d2ba6ab70ab50ca5b617e257a083b64a

See more details on using hashes here.

File details

Details for the file aimem_cli-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: aimem_cli-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 55.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.0

File hashes

Hashes for aimem_cli-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 18ebf2bdaba52a7efd155b9199936f90377743cb9200ca8bc950aaea344fe288
MD5 7b8aed51b3a0e1a138f5b7e9b0ffebf7
BLAKE2b-256 0aa393e9dbf75ced8d86a9d92a6eaa10990c266b290707c026769b6d01a1b971

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page