Skip to content
    ↑↓ select↵ openesc close
    JeffreyJYZ

    Session Dir

    @jeffreyjyz/opencode-session-dir·v0.1.0·Other

    Bind extra working directories to a single opencode session, durably across restarts. Other sessions never see them.

    GitHub stars

    0

    Monthly installs

    0

    Composite score

    20.0

    Multi-signal model

    Last commit

    23 hours ago

    2026-10-04

    Install and configure

    opencode.json

    Writes 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"]
    }

    OpenCode 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