description: "The shared dsh core: model access, tools, durable sessions, and safety defaults for every dsh --profile surface, for users composing or customizing a profile."
English | 中文
Every base-backed dsh --profile surface runs on dsh-base, so those surfaces share a model connection, the full tool set, durable session history, and workspace safety defaults. The shipped sdk-minimal profile deliberately uses a complete standalone tree instead. You rarely touch this bundle directly — shipped base-backed profiles already include it, and a custom base-backed profile names it first. When you need different defaults, change your profile patch or add a later bundle; this package is not a library you import.
You get the dsh core automatically: the shipped web and headless profiles already include it, and a custom profile names it as its first bundle. After that, everything works with no further configuration.
To build a profile on the shared core, create a profile with a package.json that names @deepseek-ai/dsh-base first:
{
"name": "my-profile",
"private": true,
"dsh": {
"profile": {
"bundles": ["@deepseek-ai/dsh-base"]
}
}
}
Run dsh --profile my-profile "your task" and you get a working agent with model access, tools, persistence, and the default permission policy. The shipped web and headless profiles are created for you on first use. To add more bundles, run dsh plugin --profile <name> add <package>; in-box bundles resolve from the dsh installation. The profile contract is documented in the app-boot profile section.
Out of the box, every profile built on this core provides: a DeepSeek model connection (the provider and model are configurable, and you can enable extra providers from your settings), the full tool set — file editing, shell commands, web search, subagents, task and goal tracking — durable sessions that survive restarts, and the default permission policy that confines file writes to your workspace and asks before risky actions. Telemetry stays off unless you opt in.
On macOS and Linux you get the bash shell tools; on Windows you get the PowerShell twins instead, so exactly one shell stack is available per machine. The safety behavior is identical on every platform. A Windows host that prefers the unconfined PowerShell executor can switch the shell rows in its profile patch — the switch must disable both PowerShell rows and re-enable both bash rows, otherwise the profile fails to load.
To change what a profile built on this core provides — a different default model, a stricter permission mode, extra or fewer tools — edit your profile's cordis.patch.yml or add a later bundle. Each patch entry replaces the target's whole configuration, so restate every setting you want to keep. Keep the sandboxed filesystem provider as the single file-write path: adding the plain filesystem provider on top of it makes the profile fail to load.
Read these pages when you want to go deeper into profiles, the surfaces built on this core, or the exact composition.
Indirectly, through each inserted row's package, which owns that row's model-facing behavior.
The bundle itself adds no request prefix; each inserted row's package owns any cache effect.
These limits tell you when the core needs extra care or where an override must go. They are current package constraints, not a general comparison or a task backlog.
workspace-write confines writes to the workspace plus the session's own temp subdirectory (<temp>\dsh-<hash>, TMP/TEMP rewritten for confined children); read-only grants nothing. See @deepseek-ai/dsh-sandbox-windows-acl.