docs/public/gemini-cli/setup.mdx
Give Gemini CLI persistent memory across sessions.
Gemini CLI starts every session from scratch. Claude-mem changes that by capturing observations, decisions, and patterns — then injecting relevant context into each new session.
<Info> **How it works:** Claude-mem installs lifecycle hooks into Gemini CLI that capture tool usage, agent responses, and session events. A local worker service extracts semantic observations and injects relevant history at session start. </Info>~/.gemini directory must exist (created by Gemini CLI on first run)npx claude-mem install
The installer will:
~/.gemini directory)~/.gemini/settings.json~/.gemini/GEMINI.mdClaude-mem needs an AI provider to extract observations from your sessions. Choose one:
<Tabs> <Tab title="Gemini API (Free)"> The simplest option — use Gemini's own API for observation extraction:1. Get a free API key from [Google AI Studio](https://aistudio.google.com/apikey)
2. Add it to your settings:
```bash
mkdir -p ~/.claude-mem
cat > ~/.claude-mem/settings.json << 'EOF'
{
"CLAUDE_MEM_PROVIDER": "gemini",
"CLAUDE_MEM_GEMINI_API_KEY": "YOUR_API_KEY"
}
EOF
```
<Tip>
**Free tier:** 1,500 requests/day with `gemini-2.5-flash-lite`. Enable billing on Google Cloud for 4,000 RPM without charges.
</Tip>
```bash
mkdir -p ~/.claude-mem
cat > ~/.claude-mem/settings.json << 'EOF'
{
"CLAUDE_MEM_PROVIDER": "claude"
}
EOF
```
Set your API key via environment variable:
```bash
export ANTHROPIC_API_KEY="your-key"
```
```bash
mkdir -p ~/.claude-mem
cat > ~/.claude-mem/settings.json << 'EOF'
{
"CLAUDE_MEM_PROVIDER": "openrouter",
"CLAUDE_MEM_OPENROUTER_API_KEY": "YOUR_KEY"
}
EOF
```
# Check worker is running
npx claude-mem status
# Check hooks are installed — look for claude-mem entries
cat ~/.gemini/settings.json | grep claude-mem
Open http://localhost:37777 to see the memory viewer.
Launch Gemini CLI normally. Claude-mem works in the background:
gemini
On session start, you'll see claude-mem context injected with your recent observations and project history.
Claude-mem registers 8 of Gemini CLI's 11 lifecycle hooks:
| Hook | Purpose |
|---|---|
| SessionStart | Injects memory context into the session |
| SessionEnd | Marks session complete, triggers summary |
| PreCompress | Captures session summary before compression |
| Notification | Records system events (permissions, etc.) |
| BeforeAgent | Captures user prompts |
| AfterAgent | Records full agent responses |
| BeforeTool | Logs tool invocations before execution |
| AfterTool | Captures tool results after execution |
Three model-level hooks (BeforeModel, AfterModel, BeforeToolSelection) are intentionally skipped — they fire per-LLM-call and are too noisy for memory capture.
Verify hooks exist in settings:
cat ~/.gemini/settings.json
You should see entries like "SessionStart", "AfterTool", etc. with claude-mem commands.
Restart Gemini CLI after installation.
Re-run the installer:
npx claude-mem install
# Check status
npx claude-mem status
# View logs
npx claude-mem logs
# Restart worker
npx claude-mem restart
~/.claude-mem/settings.jsonIf you see characters like [31m or [0m in the session context, your claude-mem version may need updating:
npx claude-mem install
This was fixed in v10.6.3+ — the Gemini CLI adapter now strips ANSI color codes automatically.
npx claude-mem uninstall
This removes hooks from ~/.gemini/settings.json and cleans up ~/.gemini/GEMINI.md.