CEO Brain for AI coding agents — local-first, persistent, LAN-shareable.
AI coding assistants forget everything between sessions. ClickMem extracts structured knowledge from your conversations — decisions with reasoning, reusable principles, project context — and injects it back when you start a new session. Your agents inherit your thinking patterns, not just raw facts.
pip install clickmem memory service install # start background server memory hooks install # install hooks for Claude Code, Cursor, OpenClaw memory import # import existing conversation historyAfter this, every Claude Code and Cursor session automatically recalls relevant context on start and captures knowledge on completion.
flowchart TD subgraph agents [AI Agents] CC[Claude Code] CR[Cursor] OC[OpenClaw] CLI[CLI / API] end subgraph server [ClickMem Server — port 9527] REST["/v1/* REST API"] MCP["/sse MCP SSE"] Hooks["/hooks/claude-code"] end subgraph brain [CEO Brain — chDB] Projects["projects\n(name, vision, repo, status)"] Decisions["decisions\n(title, choice, reasoning, alternatives)"] Principles["principles\n(content, confidence, evidence_count)"] Episodes["episodes\n(content, user_intent, key_outcomes, TTL 180d)"] Raw["raw_transcripts\n(append-only, source of truth)"] end CC -->|HTTP hooks| Hooks CR -->|Plugin hooks| REST OC -->|Plugin| REST CLI --> REST CC & CR -->|MCP stdio/SSE| MCP REST --> brain Hooks --> brain One server, all your tools. A single process serves REST API + MCP SSE on port 9527. Every agent on the LAN shares the same knowledge base.
When a conversation ends, ClickMem runs CEO-perspective extraction via a local LLM:
| Entity | What it captures | Lifecycle |
|---|---|---|
| Decision | Choice + reasoning + alternatives + context | Permanent; outcome tracked |
| Principle | Reusable rule or preference | Permanent; evidence accumulates via dedup |
| Episode | What happened + user intent + key outcomes | TTL 180 days; time-decayed |
| Project | Name, repo URL, status, vision, tech stack | Auto-created from cwd |
For long conversations (50+ turns), the extractor segments the text into chunks and processes each one. Built-in dedup prevents duplicate principles across segments and sessions — instead, the evidence count increases.
On SessionStart, ClickMem assembles a structured CEO context (~1700 tokens) and injects it:
## Principles - [95%] User correction > AI inference: never overwrite user-modified data - [90%] Edit source files, not compiled output ## Recent Decisions - Tag Normalization Strategy: Two-phase extraction with global registry - Speaker Protection: isUserRenamed flag to protect corrections ## Recent Activity - Implemented Welcome Sheet onboarding flow for AiNote memory recall searches both legacy memories and CEO Brain entities via hybrid search:
- Vector similarity (256-dim Qwen3 embeddings)
- Keyword matching on content, tags, entities
- Type-specific scoring (validated decisions boosted, principles weighted by confidence)
- MMR diversity re-ranking
ClickMem auto-selects a local LLM based on available hardware:
| Hardware | Model | Speed |
|---|---|---|
| Apple Silicon 32GB | Qwen3.5-9B-4bit (MLX) | ~15s/extraction |
| Apple Silicon 16GB | Qwen3.5-4B-4bit (MLX) | ~8s/extraction |
| Apple Silicon 8GB | Qwen3.5-2B-4bit (MLX) | ~4s/extraction |
| NVIDIA GPU | Qwen3.5 (transformers) | varies |
| CPU-only | Remote API fallback | depends on provider |
Override with CLICKMEM_LOCAL_MODEL. Thinking mode is disabled (enable_thinking=False) for structured JSON output.
# Global memory help [subcmd] # Help for any command memory status # Memory stats + CEO entities + import progress memory discover # Detect installed agents and session counts # Import & Hooks memory import [--agent all] [--path /dir] [--remote URL] [--foreground] memory hooks install [--agent all] memory hooks status # Memory Operations memory recall "query" # Hybrid search (legacy + CEO) memory remember "fact" --category preference memory ingest "conversation..." --source cursor memory forget "memory ID or query" memory review --layer semantic memory maintain # Cleanup + CEO dedup + episode expiry # CEO Brain memory portfolio # All projects overview memory brief [--project-id X] # Detailed project briefing memory projects # List projects memory decisions # List decisions memory principles # List principles # Service memory serve [--host 0.0.0.0] # Start server (REST + MCP SSE) memory mcp # MCP stdio (for Claude Code / Cursor) memory service install|start|stop|status|logsmemory import discovers conversation history from all installed agents and ingests it into ClickMem:
memory discover # See what's available # Agent Sessions Docs Hook # claude-code 140 0 installed # cursor 2 0 not installed # openclaw 26 0 installed memory import --agent all # Import all (runs in background) memory status # Check progressWhat gets imported:
- Transcripts: Claude Code JSONL (
~/.claude/projects/), Cursor agent-transcripts (~/.cursor/projects/) - Knowledge docs: CLAUDE.md, AGENTS.md from each project directory
- Metadata preserved: project name, git remote URL, hostname, branch, timestamps
Import is incremental — re-running skips already-imported sessions (tracked in ~/.clickmem/import-state.json). Sessions are processed newest-first.
Import a specific project directory:
memory import --path ~/Projects/my-app # Scans for CLAUDE.md, AGENTS.mdmemory hooks install # install hooks for Claude Code, Cursor, OpenClaw memory hooks status # check which hooks are installed# Add to ~/.claude.json cat ~/.claude.json | python3 -c " import sys,json; d=json.load(sys.stdin) d.setdefault('mcpServers',{})['clickmem']={'command':'clickmem-mcp'} json.dump(d,sys.stdout,indent=2)" > /tmp/claude.json && mv /tmp/claude.json ~/.claude.json# Add to .cursor/mcp.json in project root mkdir -p .cursor && echo '{"mcpServers":{"clickmem":{"command":"clickmem-mcp"}}}' > .cursor/mcp.json# Server memory serve --host 0.0.0.0 # Client export CLICKMEM_REMOTE=http://mini.local:9527 memory recall "query" memory import --remote http://mini.local:9527 # Client MCP (Claude Code / Cursor) # Set mcpServers.clickmem to: # {"url": "http://mini.local:9527/sse"}| Variable | Default | Description |
|---|---|---|
CLICKMEM_SERVER_HOST | 127.0.0.1 | Server bind address |
CLICKMEM_SERVER_PORT | 9527 | Server port |
CLICKMEM_REMOTE | — | Remote server URL (makes CLI/MCP act as client) |
CLICKMEM_API_KEY | — | Bearer token for auth |
CLICKMEM_DB_PATH | ~/.openclaw/memory/chdb-data | chDB data directory |
CLICKMEM_LLM_MODE | auto | auto / local / remote |
CLICKMEM_LOCAL_MODEL | auto-selected | Override local LLM model |
CLICKMEM_LLM_MODEL | — | Remote LLM model name |
CLICKMEM_REFINE_THRESHOLD | 1 | Trigger refinement after N unprocessed raws |
CLICKMEM_LOG_LEVEL | WARNING | Log verbosity |
make test # Full test suite make test-fast # Skip semantic tests make deploy # rsync to remote + setupRequirements: Python >= 3.10, macOS or Linux (chDB), ~1 GB disk for models + data.
# On Mac Mini git clone https://github.com/auxten/clickmem && cd clickmem && ./setup.sh # setup.sh handles: # 1. Python + uv setup # 2. Service install (launchd with auto-restart) # 3. Hook installation for all detected agents # 4. First-time conversation history importThe server runs as a launchd service with KeepAlive, auto-restarting on crash. Access from other machines via Tailscale or LAN.
