Skip to content

CarryMem V0.1.2

Choose a tag to compare

@lulin70 lulin70 released this 29 Apr 09:26
· 128 commits to new-main since this release

CarryMem v0.1.2 — First Public Release

🚀 What is CarryMem?

CarryMem is a portable AI memory layer that makes AI agents remember users across tools, sessions, and models.

pip install carrymem

carrymem init
carrymem add "I prefer dark mode"
carrymem search "dark" # Finds "dark mode", "深色模式", "ダークモード"

✨ Key Features

  • 7 Memory Types: Auto-classify user preferences, corrections, decisions, facts, relationships, task patterns, sentiments
  • 4-Tier Memory Hierarchy: Working → Procedural → Episodic → Semantic
  • Cross-Language Semantic Recall: Search in English, find Chinese/Japanese memories (and vice versa)
  • MCP Protocol Integration: Works with Cursor, Claude Code, Windsurf, and any MCP-compatible tool
  • AI Identity Layer: carrymem whoami shows your AI identity portrait
  • Security: AES encryption, input validation (SQL injection / XSS / path traversal), audit logging
  • Zero-config: pip install carrymem → ready to use

📦 Installation

# From PyPI (after publish)
pip install carrymem

# From source
pip install git+https://github.com/lulin70/carrymem.git

# One-click install script
bash <(curl -sL https://raw.githubusercontent.com/lulin70/carrymem/main/install.sh)

<clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w" value="# From PyPI (after publish)
pip install carrymem

From source

pip install git+https://github.com/lulin70/carrymem.git

One-click install script

bash <(curl -sL https://raw.githubusercontent.com/lulin70/carrymem/main/install.sh)" tabindex="0" role="button" style="box-sizing: border-box; margin: var(--base-size-8,8px) !important; padding: 0px !important; font-size: 14px; font-weight: var(--base-text-weight-medium,500); white-space: nowrap; vertical-align: middle; cursor: pointer; -webkit-user-select: none; appearance: none; border-width: 1px; border-style: solid; border-color: var(--button-default-borderColor-rest,var(--color-btn-border)); border-image: none; border-radius: 6px; line-height: 20px; display: inline-block; position: relative; color: var(--button-default-fgColor-rest,var(--color-btn-text)); background-color: var(--button-default-bgColor-rest,var(--color-btn-bg)); box-shadow: var(--button-default-shadow-resting,var(--color-btn-shadow)),var(--button-default-shadow-inset,var(--color-btn-inset-shadow)); transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color 80ms cubic-bezier(0.33, 1, 0.68, 1), box-shadow 80ms cubic-bezier(0.33, 1, 0.68, 1), border-color 80ms cubic-bezier(0.33, 1, 0.68, 1);">

🔧 Quick Start

carrymem init
carrymem add "I prefer dark mode for coding"
carrymem add "We decided to use PostgreSQL"
carrymem add "Sarah is my project manager"

carrymem list # List all memories
carrymem search "database" # Semantic search
carrymem whoami # Your AI identity
carrymem stats # Statistics
carrymem doctor # Diagnostics

<clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w" value="carrymem init
carrymem add "I prefer dark mode for coding"
carrymem add "We decided to use PostgreSQL"
carrymem add "Sarah is my project manager"

carrymem list # List all memories
carrymem search "database" # Semantic search
carrymem whoami # Your AI identity
carrymem stats # Statistics
carrymem doctor # Diagnostics" tabindex="0" role="button" style="box-sizing: border-box; margin: var(--base-size-8,8px) !important; padding: 0px !important; font-size: 14px; font-weight: var(--base-text-weight-medium,500); white-space: nowrap; vertical-align: middle; cursor: pointer; -webkit-user-select: none; appearance: none; border-width: 1px; border-style: solid; border-color: var(--button-default-borderColor-rest,var(--color-btn-border)); border-image: none; border-radius: 6px; line-height: 20px; display: inline-block; position: relative; color: var(--button-default-fgColor-rest,var(--color-btn-text)); background-color: var(--button-default-bgColor-rest,var(--color-btn-bg)); box-shadow: var(--button-default-shadow-resting,var(--color-btn-shadow)),var(--button-default-shadow-inset,var(--color-btn-inset-shadow)); transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color 80ms cubic-bezier(0.33, 1, 0.68, 1), box-shadow 80ms cubic-bezier(0.33, 1, 0.68, 1), border-color 80ms cubic-bezier(0.33, 1, 0.68, 1);">

🌐 Internationalization

  • Codebase: 100% English comments and docstrings
  • Documentation: English primary + Chinese (-CN) + Japanese (-JP) versions
  • Test coverage: EN/ZH/JP trilingual (133+ multilingual test cases)

📋 Changelog since v0.1.0

Added

  • carrymem whoami — AI identity portrait showing preferences, decisions, corrections
  • carrymem profile export — Export identity as JSON for cross-AI portability
  • Internationalization: English-primary codebase with CN/JP documentation
  • Sentiment keywords expanded: slow, too slow, painful, annoying, clunky, laggy

Fixed

  • CRITICAL conflict_detector: offset-naive vs offset-aware datetime crash in carrymem check
  • CRITICAL Missing init.py in utils/ and layers/ packages (wheel install broken)
  • All GitHub URLs updated from old repo to lulin70/carrymem
  • install.sh: Added pip upgrade step for Python 3.9 compatibility
  • All code comments translated to English (77 mangled comments removed)
  • Hardcoded Chinese user-facing strings converted to English default
  • README.md memory type table corrected
  • PatternAnalyzer: Pre-compiled 4 hot-path regex patterns for performance
  • _semantic_recall: Added early exit when limit reached
  • classify_and_remember(): Per-entry error handling prevents batch crash
  • MCP HTTP server: Added security headers (X-Content-Type-Options, X-Frame-Options)
  • sqlite_adapter.del: Changed bare except: to except Exception:

🧪 Test Results

490 tests passed ✅
Coverage: 60.77%
Python: 3.9, 3.10, 3.11, 3.12

📚 Documentation

Document Language Link
README English README.md
README 中文 README-CN.md
README 日本語 README-JP.md
Quick Start English QUICK_START_GUIDE.md
Architecture English ARCHITECTURE.md
API Reference English API_REFERENCE.md
Contributing English CONTRIBUTING.md

📄 License

MIT License — see LICENSE

👥 Credits

Built by the CarryMem Team. Powered by community contributions.

CarryMem v0.1.2 — First Public Release

🚀 What is CarryMem?

CarryMem is a portable AI memory layer that makes AI agents remember users across tools, sessions, and models.

pip install carrymem
carrymem init
carrymem add "I prefer dark mode"
carrymem search "dark" # Finds "dark mode", "深色模式", "ダークモード"
✨ Key Features

7 Memory Types: Auto-classify user preferences, corrections, decisions, facts, relationships, task patterns, sentiments
4-Tier Memory Hierarchy: Working → Procedural → Episodic → Semantic
Cross-Language Semantic Recall: Search in English, find Chinese/Japanese memories (and vice versa)
MCP Protocol Integration: Works with Cursor, Claude Code, Windsurf, and any MCP-compatible tool
AI Identity Layer: carrymem whoami shows your AI identity portrait
Security: AES encryption, input validation (SQL injection / XSS / path traversal), audit logging
Zero-config: pip install carrymem → ready to use
📦 Installation

From PyPI (after publish)

pip install carrymem

From source

pip install git+https://github.com/lulin70/carrymem.git

One-click install script

bash <(curl -sL https://raw.githubusercontent.com/lulin70/carrymem/main/install.sh)
🔧 Quick Start

carrymem init
carrymem add "I prefer dark mode for coding"
carrymem add "We decided to use PostgreSQL"
carrymem add "Sarah is my project manager"

carrymem list # List all memories
carrymem search "database" # Semantic search
carrymem whoami # Your AI identity
carrymem stats # Statistics
carrymem doctor # Diagnostics
🌐 Internationalization

Codebase: 100% English comments and docstrings
Documentation: English primary + Chinese (-CN) + Japanese (-JP) versions
Test coverage: EN/ZH/JP trilingual (133+ multilingual test cases)
📋 Changelog since v0.1.0

Added

carrymem whoami — AI identity portrait showing preferences, decisions, corrections
carrymem profile export — Export identity as JSON for cross-AI portability
Internationalization: English-primary codebase with CN/JP documentation
Sentiment keywords expanded: slow, too slow, painful, annoying, clunky, laggy
Fixed

CRITICAL conflict_detector: offset-naive vs offset-aware datetime crash in carrymem check
CRITICAL Missing init.py in utils/ and layers/ packages (wheel install broken)
All GitHub URLs updated from old repo to lulin70/carrymem
install.sh: Added pip upgrade step for Python 3.9 compatibility
All code comments translated to English (77 mangled comments removed)
Hardcoded Chinese user-facing strings converted to English default
README.md memory type table corrected
PatternAnalyzer: Pre-compiled 4 hot-path regex patterns for performance
_semantic_recall: Added early exit when limit reached
classify_and_remember(): Per-entry error handling prevents batch crash
MCP HTTP server: Added security headers (X-Content-Type-Options, X-Frame-Options)
sqlite_adapter.del: Changed bare except: to except Exception:
🧪 Test Results

490 tests passed ✅
Coverage: 60.77%
Python: 3.9, 3.10, 3.11, 3.12
📚 Documentation

Document Language Link
README English README.md
README 中文 README-CN.md
README 日本語 README-JP.md
Quick Start English QUICK_START_GUIDE.md
Architecture English ARCHITECTURE.md
API Reference English API_REFERENCE.md
Contributing English CONTRIBUTING.md
📄 License

MIT License — see LICENSE

👥 Credits

Built by the CarryMem Team. Powered by community contributions.