Delorun documentation

Parity checklist

English | 中文

The parity checklist records, for each stock DeepSeek Harness (DSH) area that Delorun is compared against and for each deliberate difference, the status of that area in this tree and one piece of evidence. Every row names its baseline, the recorded upstream tag dsh-v0.2.2-rc.3, which the delorun/docs/contracts/c16-parity-composition.md replays. The page covers the areas below, the switches and changed defaults that the parity composition contract lists, and the differences that the comparison page names. It does not inventory every stock feature.

How rows are judged

The status column states what this tree does. built means the change is in the tree: the row names its switch ID, or, for a Delorun change that has no switch, says no switch and names its ledger entry. planned means the change is not in the tree: the row names the switch ID and work package from the registry or, where the registry has no entry, the C16 changed default or the contract that defines it. stock means upstream's behaviour at the baseline is unchanged in the area.

Each row gives one evidence. A check name, such as parity-switches, runs node_modules/.bin/tsx delorun/apps/tools/src/parity/composition/check-parity-switches.ts, which reads the switch registry, the switch fields and the parity overlay. A spec path names a test file that asserts the row. An entry that begins with Manual check: names the source lines that a reviewer reads to confirm the row.

Eleven built switches have a switch-on scenario that is pending recording: main_chat, rename_workspace_tool, permission_defaults, fetch_guard, scheduled_task_consent, instruction_layer_consent, mcp_add_consent, external_agent_consent, sandbox_protected_reads, update_turn_refusal and default_workspace_directory. parity-switches reports each one as pending, not as passing, so this page claims no replay result for them. The model-visible switches preset_inspect, plugin_manager_read_exemption, profile_history and container_denial_marker have a recorded scenario under snapshots/, which the parity replay runs under the overlay.

Liveshare

Liveshare is upstream's experimental share feature. This tree keeps it with one Delorun change.

ItemBaseline and this treeStatusEvidence
Owner surfaces refused to share viewersdsh-v0.2.2-rc.3: a share viewer is refused owner surfaces, such as pluginManager/listPlugins; this tree keeps that liststockpackages/experimental/liveshare/tests/viewer-access-policy.spec.ts
Plugin-manager history, restore and undodsh-v0.2.2-rc.3: the endpoint classification lacks pluginManager/history, pluginManager/restore and pluginManager/undo; this tree classifies each as owner-only in packages/experimental/liveshare/src/endpoint-classification.ts at lines 145, 155 and 159built: no switch; security ledger entryManual check: the three lines are absent at dsh-v0.2.2-rc.3 and present in the tree, and the ledger entry records the lead's verdict.

Desktop app payload

The desktop app's Python, Node and Office payload has no Delorun change in this tree.

ItemBaseline and this treeStatusEvidence
Python runtimedsh-v0.2.2-rc.3: the desktop payload carries a Python interpreter and rejects a payload that lacks node and pnpm; this tree has no Delorun change under apps/desktopstockapps/desktop/tests/primary-runtime-preparation.spec.ts
Node runtimedsh-v0.2.2-rc.3: the prepared runtime includes bin/node and one pnpm distribution; this tree has no Delorun change under apps/desktopstockapps/desktop/tests/runtime-preparation.spec.ts
Office enginedsh-v0.2.2-rc.3: each platform's payload keeps only its selected Office engine; this tree has no Delorun change under apps/desktopstockapps/desktop/tests/runtime-file-policy.spec.ts

SDK runtime selection

Delorun keeps upstream's SDK and its documented runtime selection.

ItemBaseline and this treeStatusEvidence
Runtime selectiondsh-v0.2.2-rc.3: the Python SDK starts the bundled dsh --profile sdk runtime unless the caller selects another dsh executable or profile (Python README); this tree has no Delorun change in python/ or packages/sdk/stockpython/sdk/tests/test_bundled_runtime.py

Deliberate differences

Each difference below is one that Delorun's documents name or that C16 lists. The rows are grouped by topic.

Setup's prompts answer sets four of the switches below: permission_defaults, instruction_layer_consent, mcp_add_consent and scheduled_task_consent. "Ask me first", the default, turns them on in the profile, and "Ask less (like DeepSeek Harness)" turns them off there, which is each one's parity value. fetch_guard and external_agent_consent stay on whichever answer is given (apps/cli/src/setup/prompt-switches.ts).

Home and account

ItemBaseline and this treeStatusEvidence
Home directorydsh-v0.2.2-rc.3: the home is ~/.dsh, named by DSH_HOME_DIR_NAME in packages/util/home-paths/src/index.ts at line 12. This tree: delorun resolves its home from DELORUN_HOME or ~/.delorun through delorun/packages/home/README.md, refuses ~/.dsh and paths inside it, and sets DSH_HOME to the Delorun home for every runtime process it starts; upstream's own dsh command still uses ~/.dshbuilt: contract delorun/docs/contracts/c01-home-layout.md, no switch IDdelorun/packages/home/tests/home.integration.spec.ts
DeepSeek account and Platformdsh-v0.2.2-rc.3: packages/credentials/deepseek-account and packages/llm/llm-deepseek-account are in the tree, and deepseek-account itself serves the Platform sign-in, Usage and Top-up pages, because rc.3 removed the separate packages/credentials/deepseek-account-platform package. This tree's Delorun CLI profiles compose deepseek-account disabled, where delorun/packages/bundle-local/README.md sets it as a C16 changed default, so no Platform sign-in, Usage or Top-up page is served and llm-deepseek-account stays inert; the parity composition keeps upstream's row, which the overlay leaves outbuilt: C16 changed default, no switch IDdelorun/packages/bundle-local/tests/composition.integration.spec.ts (no enabled deepseek-account row)

Setup and model providers

ItemBaseline and this treeStatusEvidence
Model provider at first rundsh-v0.2.2-rc.3: no terminal setup. The studio's Settings → Models page lists every provider the adapters serve, and while no provider can serve requests a first-run dialog asks for a DeepSeek key only (packages/client/ui-settings-models/src/client/DeepSeekOnboardingDialog.tsx). This tree: delorun setup asks which of eleven providers to use, listed by name, or none, and writes the rows the Models page and the model picker save (delorun/docs/contracts/c11-setup-answers.md); DeepSeek with DEEPSEEK_API_KEY and its default model writes no provider row, so the profile is composed as stock composes it, and --yes without --provider writes none. The prompts answer "Ask less (like DeepSeek Harness)" covers the prompt switches only, not this question. The parity composition runs no setupbuilt: no switch; no ledger entry, as the change is under delorun/delorun/apps/cli/tests/setup/providers.spec.ts

Permissions

ItemBaseline and this treeStatusEvidence
Full access consent per workspacedsh-v0.2.2-rc.3: full access needs no consent, as C16's parity column states. This tree: delorun/packages/plugin-permission-defaults/README.md refuses a switch to full access in a workspace without a recorded consent, which the person gives at the home's computer: in the studio (picking full access in a chat, the approval card's "Allow for this chat", or Settings → Permissions) or with delorun workspace full-access; a per-call escalation still goes through upstream's approval. Mounted on in Delorun's CLI profiles and in the profile delorun headless boots, where a full-access request is also refused before boot for a working directory without a recorded grantbuilt: permission_defaultsdelorun/packages/plugin-permission-defaults/tests/permission-defaults.spec.ts, delorun/packages/plugin-permission-defaults/tests/surfaces.spec.ts and parity-switches
New workspace defaultdsh-v0.2.2-rc.3 and this tree: a new workspace starts on workspace-write, and the approval policy is ask unless the mode is danger-full-access (packages/bundle/base/cordis.patch.yml at lines 246 and 262)stockManual check: lines 246 and 262 set those defaults, and the file has no ledger entry.
sdk-minimal sandbox modedsh-v0.2.2-rc.3 and this tree: the sdk-minimal profile sets sandbox-policy mode danger-full-access (packages/bundle/sdk-minimal/cordis.patch.yml at line 73)stockManual check: line 73 sets that mode, and the file has no ledger entry.
Workspace networkdsh-v0.2.2-rc.3 and this tree's upstream profiles: commands the model runs in the sandbox, and web_fetch, reach the host's network. This tree: delorun/packages/plugin-permission-defaults/README.md gives each workspace a network setting, open (the default, as stock), allowlist or off, which the studio changes at the home's computer; it is part of the permission_defaults switch, so Delorun's CLI profiles carry it and "Ask less (like DeepSeek Harness)" in setup's prompts turns it offbuilt: permission_defaultsdelorun/packages/plugin-permission-defaults/tests/command-network.spec.ts, egress-proxy.spec.ts and network.spec.ts

Model-visible tools

ItemBaseline and this treeStatusEvidence
preset_inspectdsh-v0.2.2-rc.3: no preset_inspect tool. This tree registers it only when presetInspect is on, and the switch defaults to off. The shipped Standard, PTC and Cordis presets mount the tool row without the switch, so no shipped preset in this tree lists the toolbuilt: preset_inspect, with a recorded scenariopackages/preset/agent-preset-registry/tests/tools.spec.ts
Only new model-visible Delorun tooldsh-v0.2.2-rc.3: no preset_inspect tool. In this tree, preset_inspect is the only tool with a new name among Delorun's registrations; the plugin_manager registration is edited, not addedbuilt: preset_inspectManual check: git diff --unified=0 dsh-v0.2.2-rc.3 -- packages apps scripts delorun adds one tool registration with a new name, preset_inspect, in packages/preset/agent-preset-registry/src/tools.ts.

Data sharing

ItemBaseline and this treeStatusEvidence
Desktop analytics, upstream's defaultdsh-v0.2.2-rc.3 and this tree's upstream profiles: on by default. The product-analytics config defaults enabled to true in packages/client/product-analytics/src/index.ts at line 36, and the desktop profile sets it to true in packages/bundle/web-app/cordis.patch.yml at line 53. The desktop shell's own flag starts false until the Host policy arrives (apps/desktop/src/main.ts at line 480)stockManual check: the three lines match this description, and none of the files has a ledger entry.
Desktop analytics, Delorun's defaultdsh-v0.2.2-rc.3: on. This tree: off in Delorun's CLI profiles, where delorun/packages/bundle-local/README.md sets C16's changed default product-analytics.config.enabled to false and its Privacy section turns it on after consent; upstream's own profiles keep truebuilt: C16 changed default, no switch IDdelorun/packages/bundle-local/tests/privacy-defaults.spec.ts and privacy-section.client.spec.tsx
Session-log upload, upstream's defaultdsh-v0.2.2-rc.3 and this tree's upstream profiles: on by default. session-log-deepseek defaults enabled to true in packages/session/session-log-deepseek/src/index.ts at line 60, and the base bundle mounts the plugin in packages/bundle/base/cordis.patch.yml at line 43stockManual check: the two lines match this description, and neither file has a ledger entry.
Session-log upload, Delorun's defaultdsh-v0.2.2-rc.3: on. This tree: off in Delorun's CLI profiles, where delorun/packages/bundle-local/README.md sets C16's changed default session-log-deepseek.config.enabled to false and its Privacy section turns it on after consent; @delorun/bundle-headless sets the same value in the profile delorun headless boots; upstream's own profiles, and so the recorded-session replay, keep the plugin's default truebuilt: C16 changed default, no switch IDdelorun/packages/bundle-local/tests/privacy-defaults.spec.ts, privacy-section.client.spec.tsx and apps/web/tests/delorun-privacy-consent.e2e.ts
Feedback-gated OTel session uploaddsh-v0.2.2-rc.3 and this tree's upstream profiles: the base bundle includes a feedback-gated OTel session upload for every person and provider (CLI reference). This tree's Delorun CLI profiles compose session-telemetry-otel, command-feedback, ui-message-feedback disabled or hidden, so no feedback leaves the machine; delorun/packages/bundle-local/README.md sets them as C16 changed defaultsbuilt: C16 changed default, no switch IDdelorun/packages/bundle-local/tests/composition.integration.spec.ts (no enabled feedback exporter or feedback surface)

web_fetch

ItemBaseline and this treeStatusEvidence
Loopback and non-public targetsdsh-v0.2.2-rc.3 and this tree: web_fetch fetches loopback and other non-public destinations, with no guardstockpackages/web/web-fetch-http/tests/fetch-http.spec.ts
Fetch guarddsh-v0.2.2-rc.3: no guard. This tree: delorun/packages/plugin-fetch-guard/README.md makes the HTTP fetch provider refuse loopback, link-local, private-network and cloud metadata targets before it connects; @delorun/bundle-local mounts it on in Delorun's CLI profiles and @delorun/bundle-headless in the profile delorun headless boots; upstream's profiles do not mount itbuilt: fetch_guarddelorun/packages/plugin-fetch-guard/tests/guard.spec.ts, provider-guard.spec.ts and parity-switches

Consents

ItemBaseline and this treeStatusEvidence
Scheduled-task consentdsh-v0.2.2-rc.3: one approved call creates turns that recur unattended. This tree: delorun/packages/plugin-schedule-consent/README.md makes creating or editing a task ask with the recurrence, the target and its preset, and refuses a due delivery when the target chat left the preset the approval named; mounted on in Delorun's CLI profiles and in the profile delorun headless boots, whose template mounts no schedule runtime or MCP client, so there it guards only one that the person's own profile patch addsbuilt: scheduled_task_consentpackages/schedule/tool-schedule/tests/consent.spec.ts, packages/schedule/schedule/tests/consent.spec.ts and parity-switches
Instruction-layer consentdsh-v0.2.2-rc.3: a model-authored write to a skill, a preset or an AGENTS.md is approved, if at all, as a file write. This tree: delorun/packages/plugin-instruction-consent/README.md makes such a write through the file tools ask, naming the effect and showing the diff; a shell command's write is not reviewed; mounted on in Delorun's CLI profiles and in the profile delorun headless boots, where the write is refused because no one can answerbuilt: instruction_layer_consentdelorun/packages/plugin-instruction-consent/tests/consent.spec.ts, packages/fs/tool-fs/tests/tools.spec.ts and parity-switches
Approved-plugin write consentdsh-v0.2.2-rc.3: the agent writes to the folder of an installed plugin as to any other file; this tree's approvedPluginWrites switch of @delorun/plugin-instruction-consent is on in Delorun's CLI profiles, and asks before the agent's first write in a chat to the folder of a plugin the person approved under Changes, naming the plugin, with the diffbuilt: approved_plugin_write_consent (switch-on scenario pending recording)delorun/packages/plugin-instruction-consent/tests/plugin-folders.spec.ts
MCP add-time consentdsh-v0.2.2-rc.3: each MCP server command runs as trusted code outside the agent sandbox. This tree: delorun/packages/plugin-mcp-consent/README.md keeps a stdio server stopped, with a refusal naming its command and arguments, until the acceptance store holds that start (the command, its arguments, folder and environment variable names, and the executable file and folder they resolve to, so a changed file asks again), which the person accepts at the home's computer in the studio or with delorun mcp accept; mounted on in Delorun's CLI profiles and in the profile delorun headless boots, whose template mounts no schedule runtime or MCP client, so there it guards only one that the person's own profile patch addsbuilt: mcp_add_consentpackages/mcp/mcp-client/tests/consent.spec.ts, delorun/packages/plugin-mcp-consent/tests/consent.spec.ts, delorun/packages/plugin-mcp-consent/tests/reviews.spec.ts and parity-switches
External-agent consentdsh-v0.2.2-rc.3: the model can start an external agent such as Claude Code or Codex, which runs outside the sandbox on the person's account, without asking. This tree: delorun/packages/plugin-delegation-consent/README.md asks at the home's computer before each run, offers "Allow once" and "Allow for this workspace", refuses a chat on Read Only, limits each run (30 minutes by default) and refuses a plugin_manager call that brings such an agent in; mounted on in Delorun's CLI profiles and in the profile delorun headless boots, whichever answer setup's prompts question gotbuilt: external_agent_consent (switch-on scenario pending recording)delorun/packages/plugin-delegation-consent/tests/consent.spec.ts and parity-switches

Confinement and containers

ItemBaseline and this treeStatusEvidence
Confinement rulesdsh-v0.2.2-rc.3: the sandbox confines file writes, and reads, Unix sockets and the network stay open. This tree: upstream's local sandbox provider takes a protected home, its readable entries and denied sockets, and Delorun's CLI profiles set them (delorun/docs/contracts/c01-home-layout.md): bwrap and Seatbelt deny reads and writes under the home and connections to the denied sockets, Landlock denies reads and writes under the home and no socket connection, and the Windows runner confines writes only. Upstream's profiles set none of them; delorun headless sets them through the sandbox overlaybuilt: sandbox_protected_reads on @deepseek-ai/dsh-sandbox-local protectedHome (switch-on scenario pending recording)packages/sandbox/sandbox-local/tests/protected-home.spec.ts, delorun/packages/bundle-local/tests/confinement.integration.spec.ts
Container denial markerdsh-v0.2.2-rc.3: a denial inside a container carries no environment marker; this tree's containerDenialMarker in packages/sandbox/sandbox-policy/src/index.ts at line 155 is off by default, and no shipped row sets itbuilt: container_denial_marker, with a recorded scenariopackages/sandbox/sandbox-policy/tests/policy.spec.ts

Studio and other C16 switches

ItemBaseline and this treeStatusEvidence
Preview noticedsh-v0.2.2-rc.3: upstream's Web preview notice names DeepSeek Harness. This tree's Delorun CLI profiles turn it off (welcomeNotice) and show Delorun's own notice from delorun/packages/bundle-local/README.md, which states that Delorun is a pre-release community forkbuilt: C16 changed default ui-settings-models.config.welcomeNotice and composition row delorun-privacy, no switch IDdelorun/packages/bundle-local/tests/notice.client.spec.tsx and composition.integration.spec.ts
Sidebar branddsh-v0.2.2-rc.3: the sidebar's default brand is upstream's mark and name (DSH Local Build with the build version). This tree's Delorun CLI profiles show the hex jack mark and the product name, through the delorun-privacy row of delorun/packages/bundle-local/README.md, which the parity composition leaves disabled; the document title is a build setting (DSH_CLIENT_TITLE), which Delorun's build sets and the parity build does notbuilt: C16 composition row delorun-privacy, no switch IDdelorun/packages/bundle-local/tests/privacy-section.client.spec.tsx (occupant registration) and parity-switches (the row stays disabled)
Studio additionsdsh-v0.2.2-rc.3: the stock look, with no Delorun studio package; this tree mounts the theme, sidebar, chat states, settings layout and onboarding through @delorun/bundle-studio in every Delorun CLI profile, with the switch on, and the replay mounts none of thembuilt: studio_additions, a feature switch on @delorun/plugin-themeparity-switches
Default workspace folderdsh-v0.2.2-rc.3: the first-use workspace goes to <Documents>/deepseek-harness/default-workspace, and to no folder where the platform reports no documents folder, as on Linux and WSL without an XDG Documents folder. This tree: delorun start resolves <documents>/Delorun/default-workspace, or <home>/Delorun/default-workspace where the platform reports none, and delorun/packages/bundle-local/README.md's workspace-controller row sets it as defaultWorkspaceDirectory; the replay leaves the row to upstreambuilt: default_workspace_directory, a presence switch on @deepseek-ai/dsh-api-workspace-controller (switch-on scenario pending recording)delorun/apps/cli/tests/default-workspace.spec.ts and parity-switches
Workspace rename tooldsh-v0.2.2-rc.3: no rename_workspace tool; @delorun/bundle-local mounts it through its delorun-workspace-rename rowbuilt: rename_workspace_tool (switch-on scenario pending recording)delorun/packages/bundle-local/tests/workspace-rename.spec.ts
Main chatdsh-v0.2.2-rc.3: no main chat; this tree has @delorun/plugin-main-chat, an experimental plugin that no bundle mountsbuilt: main_chat (switch-on scenario pending recording)parity-switches
Onboarding presetdsh-v0.2.2-rc.3 and this tree: standard is the default preset (packages/bundle/web-app/cordis.patch.yml at line 620). Planned: ptc, as C16's changed default agent-preset-registry.config.defaultplanned: C16 changed default; no switch ID or work packageManual check: line 620 sets standard, and C16's changed-defaults table names the planned value.
plugin_manager read exemptiondsh-v0.2.2-rc.3: every plugin_manager action needs the danger-full-access escalation; this tree's readActionsExempt switch is off by default, and no shipped row sets itbuilt: plugin_manager_read_exemption, with a recorded scenariopackages/boot/plugin-manager/tests/tools.spec.ts
profile_historydsh-v0.2.2-rc.3: no history, read_config, configure, undo or restore action; this tree's profileHistory switch is off by default, and no shipped row sets itbuilt: profile_history, with a recorded scenariopackages/boot/plugin-manager/tests/tools.spec.ts
Plugin changes held for reviewdsh-v0.2.2-rc.3: an agent's plugin_manager install_bundle or remove_bundle runs once its full-access approval is given; this tree's @delorun/plugin-changes switch is off by default, and on it records the call as a pending change in the profile's change log and denies it, so nothing is installed or removed until the person applies it with delorun changesbuilt: plugin_changes_pending (switch-on scenario pending recording)delorun/packages/plugin-changes/tests/plugin-changes.spec.ts
Doctordsh-v0.2.2-rc.3: no doctor app; this tree's doctor switch is off by default, so the app runs no check, and no model sees it. delorun doctor is a separate Delorun command that runs its own checks and reaches no modelbuilt: doctor (feature switch; no switch-on scenario)packages/boot/doctor/tests/app.spec.ts
Update gatedsh-v0.2.2-rc.3: no update handshake; a turn starts whenever a person sends one. This tree's Delorun CLI profiles mount delorun-update-gate from delorun/packages/bundle-local/README.md, which refuses the first step of a new turn with UPDATE_PENDING while an update or stop waits for running chats, and holds the first step of every turn until delorun has checked the booted Host; delorun headless mounts it for the check onlybuilt: update_turn_refusal (switch-on scenario pending recording)delorun/packages/bundle-local/tests/update-gate.spec.ts and parity-switches
Update checkdsh-v0.2.2-rc.3: no request for a newer release. This tree's Delorun CLI profiles mount delorun-update-check, which fetches and verifies the release channel's newest release every 24 hours by default and shows a notice; Settings → General → Updates turns it offbuilt: update_check (feature switch; no switch-on scenario)delorun/packages/bundle-local/tests/update-check.spec.ts
Studio sign-in linksdsh-v0.2.2-rc.3: the studio's launch token can be used again. This tree's Delorun CLI profiles set oneTimeLaunchTokens on the connection row, so each link expires after 60 seconds and its first use consumes itbuilt: one_time_launch_tokens (feature switch; no switch-on scenario)packages/client/connection/tests/browser-auth.host.spec.ts and parity-switches
Remote accessdsh-v0.2.2-rc.3: no reach service, and upstream's own authenticator. This tree's Delorun CLI profiles mount delorun-home-auth and delorun-reach; every reach option stays off until the person turns one on with delorun reach on tailscalebuilt: reach (feature switch; no switch-on scenario)delorun/packages/reach/tests/service.spec.ts and parity-switches

Where to go next

The glossary defines the terms this page uses. The divergence index lists the upstream files behind each difference, and the parity baseline records upstream's own test results. For the same differences in plain words, read Delorun and stock DeepSeek Harness.

This page describes Delorun 0.0.0.

中文

On this page