Multi-folder workspace: a durable global linked-folders list plus per-session on-the-fly linking (link_folder/unlink_folder), managed from the Web sidebar with a native folder picker.
Install
# from npm (prebuilt)
dsh plugin --profile web add @steven-wu/dsh-linked-folders
# from GitHub (first run asks for allowBuilds approval — follow the hint, retry)
dsh plugin --profile web add github:Sttrevens/dsh-linked-folders
Any plugin you install runs third-party code with your own permissions — it can read your files, use your credentials, and reach the network, and tool approvals don’t sandbox it. GitHub-sourced plugins also run build scripts at install time — pnpm blocks those until you allow them, so an install can stop with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED or ERR_PNPM_IGNORED_BUILDS; dsh prints the exact key to add under allowBuilds in your profile’s pnpm-workspace.yaml, and the install works on the next run. Allowing a build is a trust decision: only install sources you trust, and pin a commit (github:owner/repo#sha).
README
Out-of-tree dsh plugin that gives a session multi-folder workspace access — like Codex's linked folders.
- A global linked-folders list (durable, cross-session) — your "global workspace".
- Per-session temporary links the model adds/removes on the fly with
link_folder/unlink_folder.
Both lists are injected into the system prompt, so the model knows which extra
roots it may cd into and work across.
Install
The package declares a dsh.bundle manifest, so dsh plugin add installs it
and adds it to the profile's bundle layers automatically:
dsh plugin --profile web add @steven-wu/dsh-linked-folders
# restart the web profile, then refresh the page
Use
- Composer → the 📁 button on the left of the input bar. Click it to open the panel: manage the global list (add by absolute path or Browse…, remove with ×) and see this session's temporary links.
- Model: say "link folder /path/to/foo" — the agent calls
link_folder; "unlink /path/to/foo" callsunlink_folder. Session links appear in the prompt as(this session).
Workspace-picker entry (optional Tier-2 patch)
The official workspace-picker menu is inline (not a slot), so the plugin can't
add to it. scripts/patch-workspace-picker.py patches the compiled
dsh-client-ui-workspace bundle to add a "Link folder…" entry next to
"Add workspace"; selecting it dispatches dsh:link-folder-requested, which this
plugin listens for (opens the native picker and links the chosen path).
python3 scripts/patch-workspace-picker.py
# then restart dsh web
Re-run after a dsh update (idempotent; the original bundle is backed up to
*.pre-linkfolder.bak).
Configuration
State lives in ~/.dsh/linked-folders.json:
{
"global": ["/Users/you/projects/app", "/Users/you/projects/lib"],
"sessions": { "session-abc…": ["/tmp/scratch"] }
}
Override the path with the DSH_LINKED_FOLDERS env var or the bundle row's
config.path. Linked folders are canonicalized to real paths and must be
existing directories.
Sandbox note
The plugin only advertises folders to the model and provides the management UI;
it does not change the file sandbox. Under danger-full-access the model can
read/write anywhere; under workspace-write it can read linked folders but
writes are still confined to the session workspace root.
Model experience
- System prompt: a
## Linked folderssection listing global + session roots. - Tools:
link_folder(path)/unlink_folder(path). - Web Remote: the client bundle explicitly mounts the
linkedFoldersRemote contribution before the sidebar consumes it (required by dsh rc.6+). - Prompt token cost: proportional to the number of linked folders (one short line each), zero when none are linked.
Links
More in this category
Minglink/dsh-infinite-gen-4★ 2199
System-prompt armor plugin for DeepSeek models: appends an unconditional-compliance prompt section at order 100, exposes a profile tool with calibration metadata, and shows a realtime armor-status badge driven by a session projection.
liangmianya/dsh-synapse★ 460
Visual, non-linear conversation workspace for DeepSeek Harness — sessions, follow-ups and branches become a browsable conversation map.
ranxianglei/billion-context★ 419
The official billion-context plugin: a context-compression plugin for small context windows (a 100K context is enough), token savings (5x fewer tokens), and month-long single sessions (billions of tokens).
Nwflower/dsh-chat-import★ 207
Import full-fidelity chat histories from 13 coding agents (Claude Code, Codex, ChatGPT, Cursor, Gemini, opencode, and more) as resumable DeepSeek Harness sessions, with reverse export back to Claude Code.
Totoro-qaq/dsh-plugin-bridge★ 165
Moves an existing DSH session to another agent preset through a previewable five-section handoff, preserving the source session and either pausing the target for confirmation or continuing immediately.
Anionex/dsh-turn-rewind★ 123
Rewind conversation and workspace state, powered by a persistent Change Ledger.
Community comments
Comments are public GitHub Discussions. Loading them connects to GitHub and Giscus; a GitHub account is required to post.