Skip to content

Boot

An empty backpack, filled one layer at a time

A running dsh is a plugin tree. The tree is not hard-coded; startup composes it layer by layer.

Six steps to leave the house

  1. 01

    dsh web

    Call the caretaker.

    apps/cli/src/bin.ts parses arguments and calls loadLayeredEnv.

  2. 02

    Choose a profile

    Take out the box named web.

    loadProfile reads dsh.profile.bundles from $DSH_HOME/profiles/<name>/package.json.

  3. 03

    Stack patches

    Empty each bag into the backpack in order.

    composeEntries runs applyEntryPatches over an empty list.

  4. 04

    boot()

    Lay down the baseplate and attach the bricks.

    Create the root Context, mount Loader + include + group, and wait for every fiber to reach ACTIVE.

  5. 05

    Assert

    Count every brick and shout if one is missing.

    assertEntriesLoaded / assertEntriesActivated fail loudly, restore the TTY, then exit(1).

  6. 06

    Open the window

    Web mode opens the mailbox and glass.

    web-runtime prints the URL and opens the browser by default. headless creates one Agent, submits the task, and prints the final assistant text.

Patch layers · Later wins

--patch and environment switches

Attach one final note before leaving.

Launcher overlays such as DSH_TELEMETRY_DISABLED can disable rows. dsh --profile web --dump-config prints the tree that actually boots on your machine.

$DSH_HOME/cordis.patch.yml

A higher-priority note that applies to every box on this machine.

The home layer overrides the profile layer. watchUserPatches watches both files and transactionally recomposes them through HMR.

profiles/<name>/cordis.patch.yml

Your own note attached to this box.

It replaces a whole config row by id or inserts a new row. There is no deep merge; every field you keep must be restated.

dsh-web-app or dsh-headless

Choose the box with a window, or the one that goes home after one task.

web-app inserts webserver, apiproxy, the client plugin roster, workspace, and storage. headless inserts a one-shot runner.

dsh-base

The largest bag: brain, hands, journal, fence, and keys.

The first layer of every shipped profile. It inserts llm, session, agent, tools, sandbox, fs, shell, skills, subagents, and more—about 70 lines—with bash / pwsh gated by platform.

Empty root []

An empty backpack. No bricks have been packed yet.

The profile's cordis.yml is written as an empty array on every startup. The tree is built entirely from patches, so dump-config cannot drift from the real boot.

One process, different outfits

A Profile decides how the whole city is assembled. An agent preset decides what one agent wears by mounting a smaller tree inside an isolate realm.

standard

Standard mode

A complete coding agent: edit files, run commands, browse, use skills, plan, and ask helpers.

The full toolset and coding persona. Official Standard mode.

code

PTC Mode

The standard kit plus a lab where TypeScript orchestrates multiple tool rounds.

The UI label is now PTC Mode; the internal code preset and Code Mode SDK names remain.

minimal

Minimal mode

Only a mouth and eraser, useful for evaluating models.

Persistent bash plus str_replace_editor. Official Minimal mode.

cordis

Creator mode

The agent may inspect attached bricks and add another one itself.

standard plus runtime introspection, in-memory plugin trials, and preset composition. Official Creator mode.