Per-session notes for OpenCode V2, in the terminal.
Notes are plain Markdown, stored outside your repo, and never injected into model context — the agent cannot see them unless you paste them in. That is the point: a scratch space that costs zero tokens.
Sessions end, context gets compacted, and the thing you meant to do next disappears with them. opencode-notes gives every session one private note that survives restarts and lives in the sidebar where you actually see it.
It is deliberately not a memory plugin: nothing is added to prompts, nothing is sent anywhere, no embeddings, no database. One Markdown file per session.
opencode plugin add opencode-notesOr add it to ~/.config/opencode/opencode.json:
To pin a commit or branch instead of the published release:
opencode plugin add 'github:mmhlego/opencode-notes#main'Requires OpenCode V2. The plugin is TUI-only; the server part is an intentional no-op.
| Action | Key |
|---|---|
/notes |
open the editor for the current session |
/notes <text> |
append a line without opening the editor |
Esc |
save and close |
<leader>e |
edit in $VISUAL / $EDITOR |
Enter |
insert a newline |
The session sidebar shows a collapsible Notes section with a read-only preview (first 20 lines). When it is collapsed and the session has no note, the header reads No notes yet. Select text normally in the terminal to copy it.
~/.local/share/opencode/notes/<sessionID>.md
Set OPENCODE_DATA_DIR to change the base data directory, or pass a dataDir option:
{
"plugins": [{ "package": "opencode-notes", "options": { "dataDir": "/path/to/data" } }]
}One file per session. Delete a file to delete that session's notes; back up the directory to keep them. Nothing is written into your project or your git repo.
bun install
bun run typecheckLoad the local checkout by pointing plugins at the directory:
{
"plugins": ["/absolute/path/to/opencode-notes"]
}MIT
{ "$schema": "https://opencode.ai/config.json", "plugins": ["opencode-notes"] }