Chapter 8 — Plugins, Bundles, and Profiles: Giving DSH New Powers
What You Will Learn
- Distinguish Plugin, Bundle, and Profile;
- Understand how a plugin gets installed;
- Use Plugin Manager to install, enable, disable, and remove;
- Understand the trust boundary of third-party plugins;
- Troubleshoot "installed but not working."
8.1 Three Words, Three Layers
Plugin is capability. Bundle is the installer package. Profile is the environment.
| Term | Think of it as | Answers |
|---|---|---|
| Plugin | A pluggable capability module | What runs? |
| Bundle | An installable patch package | What configuration and code ship together? |
| Profile | An installation environment | Which Bundles are installed here? |
Plugin
A Plugin is the runtime unit. It can:[1]
- Register tools;
- Register services;
- Register Skills;
- Add UI;
- Listen to events;
- Change Agent behavior.
Bundle
A Bundle is an npm package that usually contains:[2]
- A
cordis.patch.yml, or a list of patch files; - Plugin code;
- Possibly Skills, UI assets, or icons.
It packages "which plugins to add and how to configure them" so a user can install it in one step. Its rows remain patchable by higher layers.
One Bundle can mount many Plugins; one Plugin can be referenced by different Bundles.
Profile
A Profile is an installation environment:[3]
desktop: the desktop app;web: the browser;headless: a one-shot command-line run.
It contains:
- Installed Bundle list;
- Its own
cordis.patch.yml; - Third-party plugin dependencies.
The Profile decides what this environment installs; the Bundle decides what the installation contains; the Plugin decides what actually runs.
8.2 How They Relate to Presets
Profile (desktop)
├─ Bundle A (dsh-base)
├─ Bundle B (dsh-web-app)
│ └─ declares Presets: standard / creator / ...
└─ Bundle C (your plugin)
└─ mounts Plugin: your tools
Preset (standard / creator)
└─ selects a set of Plugins for one Agent
- A Bundle can declare Presets;
- A Preset chooses which Plugins an Agent gets;
- A Profile chooses which Bundles the environment installs;
- A Plugin is the capability that runs.
8.3 Installing with Plugin Manager
In Desktop, open the Plugin Manager (or Plugins page).
Typical flow:
- Open the plugin page;
- Search or select a Bundle;
- Read the description, permissions, and dependencies;
- Confirm install;
- Restart or reload if prompted;
- Check whether tools, Skills, or UI appeared.
Before installing
- Is the source trustworthy?
- What permissions does it request?
- Does it depend on an external CLI or service?
- Does it run install scripts?
- Does it conflict with an existing plugin?
- Can it be uninstalled?
After installing
- Is it enabled?
- Are the new tools present?
- Are the new Skills visible?
- Are there errors or warnings?
- Does it require a restart?
8.4 Why "Installed but Not Working"
| Symptom | Possible cause |
|---|---|
| Listed but no tools | Not enabled; restart required; missing dependency |
| Startup error | Version mismatch; missing peer dependency; bad config |
| Tool name conflict | Another plugin uses the same name |
| Needs login/CLI | External dependency missing or not authenticated |
| Only in some modes | Tool is preset-scoped, not global |
| Code changes do nothing | Server plugin needs a reload; HMR may not apply |
Troubleshooting order
- Check Plugin Manager status and errors;
- Check whether a restart is needed;
- Check dependencies and versions;
- Check for conflicts;
- Check whether the tool is scoped to a Preset;
- Check logs and diagnostics.
8.5 Configuring a Plugin
Many plugins expose settings:
- Binary path;
- API URL;
- Timeout;
- Output limit.
DSH plugins usually declare these with a Config schema; Plugin Manager renders a form.
Rules:
- Prefer the UI;
- Do not hand-edit the profile's
package.json; - Do not hand-edit
cordis.patch.ymlunless you understand layer order; - Reload/restart after changes;
- Store secrets safely.
8.6 The Trust Boundary
This is the most important section.
A plugin is not just configuration. It may execute code.
Installing a third-party plugin means letting someone else's code run inside your DSH process. It may:
- Read files;
- Access the network;
- Execute commands;
- Modify configuration;
- Install dependencies;
- Run install scripts.
Therefore:
- Install only trusted sources;
- Review permissions and code;
- Do not grant unnecessary full access;
- Test in a scratch workspace first;
- Make sure you can uninstall or roll back;
- Do not give secrets to an untrusted plugin.
8.7 Uninstall and Rollback
Before installing, know how to remove it:
- Can Plugin Manager disable/remove it?
- Does it leave configuration or data?
- Does it change the profile's bundle list?
- Does it require a restart?
- Can you roll back the version?
Back up the profile, or at least record the state before installation.
Try It
- Open Plugin Manager and inspect the installed Bundles;
- Find the difference between enabled and disabled;
- Do not install anything yet; read one plugin's permissions;
- Pick a plugin you use and see which tools/Skills it registers;
- Write down how you would disable it if it broke.
Common Pitfalls
- Confusing Plugin and Bundle: capability vs. installer package.
- Assuming a Bundle is enabled after install: check selection, reload, and dependencies.
- Hand-editing profile config: easy to break layer order.
- Ignoring permissions: plugins can execute code.
- Not restarting: many plugins need a reload.
Summary
- Plugin = capability, Bundle = installer package, Profile = environment.
- A Preset chooses which Plugins an Agent uses.
- Install/enable/remove through Plugin Manager; do not hand-edit the profile.
- Third-party plugins are code, not pure configuration.
- If it does not work, check status, reload, dependencies, conflicts, and Preset scope.
Part III Exercises
- Explain Plugin, Bundle, and Profile to a friend in one sentence each.
- Open Plugin Manager and count the enabled Bundles.
- Read one plugin's permissions and dependencies; decide whether you would install it.
- Explain why a Preset is not a security sandbox.
- Write a rollback checklist for a broken plugin.
References
All links are public sources; product behavior may change between versions.