CodeCompanion Memory Skill
This skill provides access to a searchable history of previous conversations stored in a ChromaDB vector database. It supports both retrieving past conversations via semantic search and saving new conversation summaries.
The same database is shared between:
- Neovim (via codecompanion-history.nvim plugin)
- OpenCode (via this skill and the
/sumcommand)
When to Use This Skill
Invoke this skill when:
- User references past conversations: Phrases like "we discussed this before", "remember when", "last time we talked about"
- Recurring problems: The user encounters an issue that might have been solved previously
- Context would be helpful: Previous solutions, decisions, or architectural discussions could inform the current task
- User asks about their codebase: Questions about past work, project history, or previous implementations
- Building on previous work: Extending or modifying solutions from past conversations
Querying Memories
~/.config/opencode/skills/codecompanion-memory/query.sh --query "your search query"
Query Parameters
-
--query TEXTor-q TEXT: The search query (required)- Use natural language
- Be specific but not too narrow
- Examples: "fixing Docker networking", "Go error handling patterns", "setting up ChromaDB"
-
--count NUMBERor-n NUMBER: Number of results to return (default: 5)- More results = more context but also more noise
- Recommended: 3-5 for focused queries, 10+ for exploratory searches
-
--verboseor-v: Show full document content- Without this flag, only previews (first 200 chars) are shown
- Use when you need to read the full conversation summary
-
--project PATHor-p PATH: Override default project root (default: ~/codecompanion-history/summaries) -
--helpor-h: Show help message
Saving Memories
To save a new conversation summary:
echo 'YOUR_SUMMARY_MARKDOWN' | ~/.config/opencode/skills/codecompanion-memory/save-summary.sh --title "Title"
Save Parameters
--title TEXTor-t TEXT: Title for the summary (optional but recommended)--dir PATHor-d PATH: Override summaries directory (default: ~/codecompanion-history/summaries)--helpor-h: Show help message
The summary should be passed via stdin as markdown content.
Summary Format
When saving a summary, use this structure:
# Descriptive Title
## Date
YYYY-MM-DD
## Project Context
- **Working Directory**: /path/to/project
- **Project Root**: /path/to/project
## Summary
2-3 paragraph summary of what was discussed and key decisions made.
## Key Topics
- Topic 1
- Topic 2
## Technical Details
Important technical information, code patterns, or solutions.
## Code Changes
List of files modified with brief descriptions.
## Outcome
What was the result? Was the problem solved?
## Tags
python, docker, authentication, bug-fix
Example Queries
Finding Past Solutions
# User: "I'm getting a CORS error, have we dealt with this before?"
~/.config/opencode/skills/codecompanion-memory/query.sh \
--query "CORS error HTTP request" \
--count 3
Architectural Decisions
# User: "What database did we choose for the user service?"
~/.config/opencode/skills/codecompanion-memory/query.sh \
--query "database choice user service" \
--count 5 \
--verbose
Code Patterns
# User: "How did I implement authentication last time?"
~/.config/opencode/skills/codecompanion-memory/query.sh \
--query "authentication implementation pattern" \
--count 3 \
--verbose
Output Format
Query results are displayed in order of relevance:
Searching in: /home/user/codecompanion-history/summaries
Query: Arduino
--- Result 1 ---
Path: 1759511459.md
Preview: ## Code Context
**Files Modified**: ardoise.ino (main focus: refactoring BLE write logic)...
--- Result 2 ---
Path: 1759512219.md
Preview: ## Code Context
**Files Modified**: ardoise.ino (main Arduino sketch)...
Each result includes:
- Path: The markdown file containing the full conversation summary
- Preview/Document: Either a short preview or full content (with
--verbose)
You can read the full conversation summary files at:
~/codecompanion-history/summaries/<chat_id>.md
How It Works
User Query
|
Bash Script (query.sh)
|
VectorCode CLI
|
ChromaDB (local instance)
|
Semantic Search Results
The skill:
- Wraps the VectorCode CLI tool
- Queries a local ChromaDB database
- Uses semantic embeddings (SentenceTransformer)
- Returns results sorted by relevance
Database Information
- Database Location:
~/.local/share/vectorcode/chromadb/chroma.sqlite3 - Summaries:
~/codecompanion-history/summaries/*.md - Embedding Model: SentenceTransformer (all-MiniLM-L6-v2)
The database uses semantic embeddings, meaning:
- Queries find conceptually similar content, not just keyword matches
- Synonyms and related terms are automatically understood
- Context and meaning are preserved across different phrasings
Shared Between Neovim and OpenCode
Summaries from both sources are stored in the same location:
- Neovim (codecompanion-history.nvim): Uses the
gcskeymap to generate summaries - OpenCode: Uses the
/sumcommand to generate summaries
Both are indexed by VectorCode and searchable from either environment.
Dependencies
bash: Shell interpreterpython3: For JSON parsing in the query scriptvectorcode: CLI tool for querying/indexing ChromaDB
Installing VectorCode
If VectorCode is not installed:
# Using pipx (recommended)
pipx install vectorcode
# Or using uv
uv tool install vectorcode
# Or using pip
pip install --user vectorcode
# Verify installation
which vectorcode
Troubleshooting
"vectorcode command not found"
# Install VectorCode
pipx install vectorcode
# Or check installation
which vectorcode
"No results found"
- Try broader queries: "Docker" instead of "Docker Compose networking with custom bridge"
- Check if conversations are indexed:
ls ~/codecompanion-history/summaries/ - Verify database exists:
ls ~/.local/share/vectorcode/chromadb/ - Re-index summaries:
cd ~/codecompanion-history/summaries && vectorcode vectorise --pipe *.md
VectorCode configuration
If you have a ChromaDB Docker container and want VectorCode to use it, create:
# ~/codecompanion-history/summaries/.vectorcode.toml
[default]
db_url = "http://localhost:8001"
db_path = ""
Note: The skill works fine with VectorCode's default local database.
Best Practices
- Start broad, then narrow: Begin with general queries, then refine based on results
- Use verbose mode selectively: Only when you need full context to answer the user's question
- Combine with code search: This skill finds conversations; use code search tools to find actual implementations
- Cite your sources: Tell the user which conversation(s) you found the information in
- Verify information: Past solutions might be outdated; always validate before applying
Example Workflow
User: "I'm stuck on the same authentication bug we had last month"
Step 1: Search for relevant conversations
$ ./query.sh --query "authentication bug fix" --count 5
Step 2: Review results, identify the most relevant conversation
> Result 3 seems most relevant (Path: 1763841695.md)
Step 3: Read full summary if needed
$ cat ~/codecompanion-history/summaries/1763841695.md
Step 4: Apply the solution or adapt it to current context
Step 5: Inform user
> "I found a similar issue we solved in conversation 1763841695.
The problem was related to session token expiration.
Here's what we did..."
Status: Production ready
Location: ~/.config/opencode/skills/codecompanion-memory/
Last Updated: 2026-01-20
Scan to join WeChat group