Session Dir
Bind extra working directories to a single opencode session, durably across restarts. Other sessions never see them.
0
0
20.0
Multi-signal model
23 hours ago
2026-10-04
Install and configure
opencode.jsonWrites to this project's opencode.json — applies to this repository only.
opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["@jeffreyjyz/opencode-session-dir@0.1.0"]
}Writes to ~/.config/opencode/opencode.json — applies to every project.
~/.config/opencode/opencode.json
{
"$schema": "https://opencode.ai/config.json",
"plugin": ["@jeffreyjyz/opencode-session-dir@0.1.0"]
}If you want to modify the plugin locally, install it into the project and reference the local path.
shell
pnpm add -D @jeffreyjyz/opencode-session-dirOpenCode loads npm dependencies through its embedded runtime on startup and caches them locally — no manual global install needed.
Bind extra working directories to one opencode session — durably, across restarts. Other sessions never see them.
The agent already works in the session's own directory; anything outside it
needs external_directory approval. This plugin lets a session declare the
other directories it may work in, and remembers that binding for that session
alone. Open a different session and the same path is still gated by the normal
permission flow.
Install
Add it to the plugins array in ~/.config/opencode/opencode.json and restart
(or /reload) opencode:
{
"plugins": ["@jeffreyjyz/opencode-session-dir"]
}
For local development point at the checkout instead (an absolute path is treated as a local plugin):
{
"plugins": ["/Users/you/dev/cmdcode-tools/opencode-session-dir"]
}
After bun run build the root index.js / tui.js shims load dist/.
Commands
| Command | Behavior |
|---|---|
/session-dir |
Browse (or type) a directory and bind it to the current session. |
/session-dir-list |
Show the directories bound to the current session. |
/session-dir-remove |
Pick a bound directory and unbind it. |
All three require an open session; they act on the active session only.
How it works
Two halves of one package, because they run in different processes:
| half | file | job |
|---|---|---|
| server | src/index.ts |
permission.evaluate grants external_directory for the requesting session's bound dirs; session.context advertises them to the model |
| TUI | src/tui.tsx |
the three slash commands and their dialogs |
Both halves meet on the filesystem. Bindings live in
$XDG_DATA_HOME/opencode/session-dir/bindings.json (default
~/.local/share/opencode/session-dir/bindings.json) as a map from session id to
absolute paths:
{
"ses_abc123": ["/Users/you/other-project"]
}
The server reads it through a short mtime cache, so a binding added in the TUI
takes effect on the next permission check. A configured deny in your
permissions always wins — the hook only turns ask into allow.
Set OPENCODE_SESSION_DIR_INJECT_CONTEXT=1 to also fold each bound directory's
AGENTS.md / CLAUDE.md / .agents/AGENTS.md into the system prompt.
Difference from opencode-add-dir
opencode-add-dir offers "this session only" (a flat list, cleared when the
server restarts and shared by every session in that process) and "remember
across sessions" (persisted, but global to all sessions). This plugin is the
combination it does not offer: one session, durable.
Development
bun install
bun test
bun run typecheck
bun run build
Similar plugins
Add Dir
opencode-add-dir
Add working directories to your OpenCode session with auto-approved permissions
Auto Permissions
opencode-auto-permissions
Automatic, context-aware permission review for OpenCode
Session Namer
@maximtop/opencode-session-namer
opencode plugin that names sessions from PR links and project directories: [project] AG-123 Review pull/1226 <PR title>