@vectorize-io/opencode-hindsight
v0.2.5
Published
Hindsight memory plugin for OpenCode - Give your AI coding agent persistent long-term memory
Downloads
2,241
Readme
@vectorize-io/opencode-hindsight
Hindsight memory plugin for OpenCode — give your AI coding agent persistent long-term memory across sessions.
Features
- Custom tools:
hindsight_retain,hindsight_recall,hindsight_reflect— the agent calls these explicitly - Auto-retain: Captures conversation on
session.idleand stores to Hindsight - Memory injection: Recalls relevant memories when a new session starts
- Compaction hook: Injects memories during context compaction so they survive window trimming
Quick Start
The plugin defaults to Hindsight Cloud (https://api.hindsight.vectorize.io). Just enable it and provide your API key.
1. Enable the plugin
Add to your opencode.json (project) or ~/.config/opencode/opencode.json (global):
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["@vectorize-io/opencode-hindsight"]
}OpenCode auto-installs plugins listed here on startup — no npm install required.
2. Provide your Hindsight Cloud API key
Get an API key at ui.hindsight.vectorize.io/connect, then:
export HINDSIGHT_API_TOKEN="your-api-key"
# Optional: override the memory bank ID (defaults to "opencode")
export HINDSIGHT_BANK_ID="my-project"That's it — the plugin now reads/writes against your Cloud bank.
Using a self-hosted Hindsight instance
Point HINDSIGHT_API_URL at your server (the API key is then optional):
export HINDSIGHT_API_URL="http://localhost:8888"Or configure inline in opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"plugin": [
[
"@vectorize-io/opencode-hindsight",
{
"hindsightApiUrl": "http://localhost:8888"
}
]
]
}Configuration
Plugin Options
Pass options directly in opencode.json:
{
"plugin": [
[
"@vectorize-io/opencode-hindsight",
{
"hindsightApiUrl": "http://localhost:8888",
"bankId": "my-project",
"autoRecall": true,
"autoRetain": true,
"recallBudget": "mid"
}
]
]
}Config File
Create ~/.hindsight/opencode.json for persistent configuration:
{
"hindsightApiUrl": "http://localhost:8888",
"hindsightApiToken": "your-api-key",
"recallBudget": "mid",
"retainEveryNTurns": 3,
"debug": false
}Environment Variables
| Variable | Description | Default |
| ----------------------------- | ----------------------------------- | ------------------------------------- |
| HINDSIGHT_API_URL | Hindsight API base URL | https://api.hindsight.vectorize.io |
| HINDSIGHT_API_TOKEN | API key for authentication | (none — required for Hindsight Cloud) |
| HINDSIGHT_BANK_ID | Static memory bank ID | opencode |
| HINDSIGHT_AGENT_NAME | Agent name for dynamic bank IDs | opencode |
| HINDSIGHT_AUTO_RECALL | Auto-recall on session start | true |
| HINDSIGHT_AUTO_RETAIN | Auto-retain on session idle | true |
| HINDSIGHT_RETAIN_MODE | full-session or last-turn | full-session |
| HINDSIGHT_RECALL_BUDGET | Recall budget: low, mid, high | mid |
| HINDSIGHT_RECALL_MAX_TOKENS | Max tokens for recall results | 1024 |
| HINDSIGHT_DYNAMIC_BANK_ID | Enable dynamic bank ID derivation | false |
| HINDSIGHT_BANK_MISSION | Bank mission/context | (none) |
Debug logging is a config-only option (
"debug": trueinopencode.jsonplugin options or~/.hindsight/opencode.json) — there is intentionally noHINDSIGHT_DEBUGenv var, because environment variables are unreliable to set for OpenCode's plugin runtime (notably on Windows). Errors and the resolved API URL/bank are logged regardless of this setting;debugonly adds verbose tracing. All plugin logs go to OpenCode's log stream (service=hindsight), visible with--print-logsor in the OpenCode log files.
Configuration Priority
Settings are loaded in this order (later wins):
- Built-in defaults
~/.hindsight/opencode.json- Plugin options from
opencode.json - Environment variables
Tools
hindsight_retain
Store information in long-term memory. The agent uses this to save important facts, user preferences, project context, and decisions.
hindsight_recall
Search long-term memory. The agent uses this proactively before answering questions where prior context would help.
hindsight_reflect
Generate a synthesized answer from long-term memory. Unlike recall (raw memories), reflect produces a coherent summary.
Dynamic Bank IDs
For multi-project setups, enable dynamic bank ID derivation:
export HINDSIGHT_DYNAMIC_BANK_ID=trueThe bank ID is composed from granularity fields (default: agent::project). Supported fields: agent, project, gitProject, channel, user.
projectuses the working directory basename. With this field, separate git worktrees of the same repository end up with different bank IDs because their paths differ.gitProjectresolves to the main worktree's basename viagit rev-parse --git-common-dir, so all linked worktrees of the same repository share a single bank. Falls back to the working directory basename when git is unavailable or the directory is not a repo. Use this in place ofprojectif you want worktrees to share memory:
{
"dynamicBankId": true,
"dynamicBankGranularity": ["agent", "gitProject"]
}Note: The bank ID is derived once when the plugin loads, from environment variables set before OpenCode starts. These dimensions are process-scoped — they don't change per session within a running OpenCode process. For per-user isolation, set the env vars before launching each user's OpenCode instance:
export HINDSIGHT_CHANNEL_ID="slack-general"
export HINDSIGHT_USER_ID="user123"Development
npm install
npm test # Run tests
npm run build # Build to dist/License
MIT
