Skip to content
Tutorial / Step 6

Profiles and Bundles

Understand how dsh composes the plugin tree layer by layer at startup, and the difference between web and headless.

Answer in brief

Understand how dsh composes the plugin tree layer by layer at startup, and the difference between web and headless.

A running dsh can be seen as a plugin tree composed at startup. A Profile describes “which layers to use,” while a Bundle distributes a set of configuration and code.

Profile

A Profile is a named composition stored in the Harness Home. The officially provided templates include web and headless:

  • web adds the browser app and interactive interface;
  • headless targets one-shot execution without starting a server.

A Profile can also store external Plugins and the user’s own patch configuration.

Bundle

A Bundle packages Cordis config lines together with the corresponding code. The base Bundle provides capabilities such as model adapters, tools, persistence, sandboxing, approvals, settings, and credentials; other Bundles layer Web or Headless behavior on top.

Inspecting the Actual Startup Configuration

The official architecture documentation provides a command to view the current configuration tree:

dsh --profile web --dump-config

Commands may change during the Developer Preview — check the current version’s help output before running.

Why Order Matters

Bundles, Profile patches, Home patches, and command-line overlays are applied in sequence. Later layers can replace or add configuration, so when two Plugins compete for the same capability, load position may determine the final behavior.

Export the current configuration before making changes, and keep your customizations under version control or in a backable location. Don’t modify files inside dependency packages directly.

Run a Reversible Configuration Experiment

  1. Record dsh version, profile, and launch command.
  2. Save the resolved before tree with --dump-config.
  3. Add one Plugin or overlay.
  4. Export again and compare.
  5. Start, create a session, call one read-only tool, and exit.
  6. Remove the layer and confirm the base profile recovers.

Cordis rows can start concurrently. Dependencies are expressed through inject, not visual YAML order. A consumer stuck in PENDING often lacks a service provider; moving its row does not repair the missing dependency.

Primary sources