Special Topic · Inside DeepSeek Harness

Everything Is a Plugin: Announcement vs Source

Map the launch copy’s four modes, session log, and plugin ecosystem line by line onto the repo’s YAML presets and package layout

THE QUESTION THIS PAGE ANSWERS

ANSWER FIRST

What is the key idea behind “Everything Is a Plugin: Announcement vs Source”?

Map the launch copy’s four modes, session log, and plugin ecosystem line by line onto the repo’s YAML presets and package layout

DECISION RULE

Make the claim earn its place. Use this page as a decision aid, not a definition to memorize. Connect the idea to one real task, one observable result, and one failure that would change your mind.

TRY NEXT

Write one question you could answer with evidence after trying this idea.

WATCH FOR

A conclusion that sounds complete but leaves the key assumption untested.

Course goalAfter this lesson, you can turn the launch claims into two ideas: why DSH makes model adapters, tools, and even the agent loop plugins; and why the four announced modes are just four plugin lists in source. You’ll also know PTC mode’s real name in the code.
Interactive demo · Play first, then learn

The demo below turns the four plugin lists into a switchable panel. Hit the four mode buttons and watch cards light up or go dark: green means added, red means removed, amber means same name but different config. The caption at the bottom narrates each step. Play until it clicks — every idea later already ran once on this panel.

Added vs previous mode Removed vs previous mode Same plugin name, different config Enabled in this mode Not mounted in this mode
Plugin lists are from the four agent.cordis.yml files under apps/cli/config/agent-presets/ (verified on 2026-08-13); plugin ids and package names are real source names. macOS view — omits Windows-only tool-pwsh and two disabled delegation rows. On enter, it auto-cycles the four modes once; then you can click freely.
Idea 1 · The kernel only loads and unloads; business is all plugins

What problem it solves.Imagine a monolith Agent product where you want a different session-log format. You fork the repo, hunt the logging code across hundreds of thousands of lines, rebuild, then re-merge patches every upstream release. That’s just a side feature — swapping the agent loop is basically rewriting the product. Capabilities welded to product source turn every deep customization into long-term maintenance debt.

What the idea is.DSH shrinks the kernel to the minimum. The Cordis framework vendored into the repo does only three things: load plugins into a shared context, unload them, and record every registration as a reversible side effect that rolls back on unload. Zero business logic. Every capability moves into packages/ — 49 groups, 219 packages, all plugins: model adapters, tools, session logs, even the agent loop itself. Line 3 of the root AGENTS.md says in bold English “everything is a plugin.” The official docs put it this way:

Cordis is the framework under dsh: plugins contribute services, typed events, and reversible side effects to a shared context. Every part of the product is a plugin — model adapters, the tool registry, session logs, and the agent loop itself — so each part can be replaced from configuration.

There is no privileged kernel you have to patch: you extend dsh by mounting plugins beside other plugins, and every registration is a side effect that is undone when its plugin unloads.

docs/architecture.zh.md · lines 11, 13
vendor/ Cordis kernel plugin load / unload dependency resolution side-effect rollback, zero business logic packages/ · 49 groups · 219 packages · all plugins core/ product API backbone session · system-prompt · tools · agent-loop capability seam series llm · fs · shell · sandbox · web · compaction … sessions & data session · storage · settings · credentials … entry points & UI boot · host · client · api · acp · sdk composition & ecosystem bundle · preset · extensions · hooks agent-presets/ four plugin lists standard/ Standard code/ PTC minimal/ Minimal cordis/ Creative
Teaching diagram: grouping follows AGENTS.md “Repository layout” and packages/README.zh.md; content is course-adapted; package counts are a local tally from 2026-08-13.

You can add capabilities to DSH without touching its repo. Out-of-tree plugins (outside the official repo) install into a profile with dsh plugin --profile <name> add <package>, mount at runtime, and roll back registered side effects on unload. The README also asks plugin repos to tag the dsh-plugin topic so they’re discoverable. The launch post invites co-building the ecosystem — the mechanism is already there.

Source: packages/bundle/README.zh.md line 13; README.zh.md line 40; docs/architecture.zh.md line 13

Why it lasts.The microkernel idea is older than this codebase. Mach and L4 from OS class, browser extension systems, VS Code’s plugin ecosystem — same path: fast-changing capabilities on the outer ring, nearly fixed load/unload mechanics in the core. If DSH rewrites the agent loop next year, Cordis’s load/unload logic doesn’t move a line; rewrite the whole harness in another language and the layering still holds. So remembering this course’s structure beats memorizing its code — the code is just one implementation of the idea.

Fast-changing capabilities live in plugins; nearly fixed load/unload lives in the kernel.
Idea 2 · A mode is just a list

What problem it solves.Most products hard-code modes: scattered branches like if (mode === 'lite'), with the mode count frozen the day the code is written. Adding a mode means change code, pass tests, wait for a release; tweaking one capability inside a mode is the same pipeline. Users get even less choice — pick among a few official packages.

What the idea is.In DSH a mode is a directory under apps/cli/config/agent-presets/ with two files. preset.yml is just 3 lines for UI display name and sort order; agent.cordis.yml is the plugin list — at boot Cordis mounts it line by line and outputs an assembled Agent. Switching modes means swapping lists and reassembling; there are no mode branches in source. The four-mode differences fit on four cards:

Standard mode

agent-presets/standard/ · 251 lines
Who it's for
People who write code day to day — this is the default tier.
Relation to other modes
It’s the baseline: 23 plugins fully on (macOS view) — file edit, shell, search, plan, subagents, workflows. The other three modes are all described as add/drop relative to it.
The idea behind it
Define a full-capability reference first; only then can other combos explain themselves in one sentence.
Source: standard/agent.cordis.yml in full

PTC mode

agent-presets/code/ · 262 lines
Who it's for
People running long multi-step tasks who find one tool-call round-trip at a time too slow.
What it adds or drops vs standard
standard untouched; append one tool-presentation with mode: code. The model writes a small TypeScript program; one run_code executes what used to take five round-trips.
The idea behind it
Only how tools are presented changes — capabilities stay the same — so the delta only deserves one line.
Source: code/agent.cordis.yml lines 259–262; line 3 comment states standard is fully untouched

Minimal mode

agent-presets/minimal/ · 62 lines
Who it's for
People running model benchmarks.
What it adds or drops vs standard
Only 6 plugins left. persona is locked in one sentence (complete: true — other plugins can’t append prompts), tools are only persistent bash and str_replace_editor, no compaction (context compression).
The idea behind it
Strip harness variables clean; what’s left is the model itself.
Source: minimal/agent.cordis.yml all 62 lines; persona at lines 8–13

Creative mode

agent-presets/cordis/ · 262 lines
Who it's for
People who want Agents to build Agents.
What it adds or drops vs standard
On top of the full standard set: the tool-cordis toolset, a skill that teaches composition, and a different persona version. The Agent can inspect and mount its own plugins at runtime; compositions can be saved as new presets.
The idea behind it
The assembler is itself a plugin, so it can be opened to the Agent. The file-header comment warns you to treat sessions in this mode like shell privileges.
Source: cordis/agent.cordis.yml lines 245–246; privilege warning at lines 9–12

One marketing word to puncture. Line 1 of code/preset.yml says name: PTC 模式, but the directory is code; source comments and docs call the mechanism Code Mode, and there’s no PTC-named implementation anywhere in the repo. PTC lives only in UI copy — when you talk source, say Code Mode so it lines up.

Switching modes means swapping a list and reassembling.

Why it lasts.This idea has a common name: configuration as architecture. Fold behavioral differences between systems into a declarative list, and architecture problems shrink into text problems. Diff two YAMLs to see how modes differ; copy a directory and tweak a few lines for a new mode; roll back the list when things break. Kubernetes declares clusters in YAML, Docker declares images with Dockerfiles — same idea at different layers. Even if every DSH plugin implementation is rewritten someday, the list abstraction still holds.

Side-by-side · Do you need to change repo source to add a capability

Everything-is-a-plugin only clicks when you put peers beside it. Same question — add a new capability to an Agent, do you need to touch its repo source — three answers from three shops:

DSH: plugin tree

No repo change needed

A capability is an out-of-tree npm package. dsh plugin --profile <name> add <package> installs into a profile, mounts at runtime, rolls back registered side effects on unload. Mode-level differences are just a few YAML lines added or removed.

Source: packages/bundle/README.zh.md line 13; docs/architecture.zh.md line 13

Claude Code: product monolith

It depends

The restored source is a TypeScript monolith tree (restored-src/src/, entry main.tsx) — changing built-ins means touching product source. It exposes hooks, MCP, Skills as extension points: you can add tools and interceptors, but you can’t swap deep implementations like session logs. Based on public evidence (restored source layout).

Grok Build: Cargo Workspace

Repo change required

The root Cargo.toml members array lists 79 workspace members (local count); capabilities are split by crate and composed at compile time. Adding a capability means a new crate, editing the root list, and recompiling. Split details: 12-1 · How 79 Workspace Members Compose the Product.

None of the three is absolutely better. Grok trades compile-time composition for Rust’s type and performance guarantees; Claude Code trades a monolith for product iteration speed; DSH trades a plugin tree for runtime swappability. If you want a replaceable, auditable runtime, DSH is the only one of the three that lets a third party replace deep capabilities without forking the repo.

Classroom Exercise
01

Infer behavioral differences from the list

Delete the whole id: compaction group in standard/agent.cordis.yml (lines 137–155). Is the resulting session equivalent to Minimal mode under context pressure? Then check the three persona fields in minimal/agent.cordis.yml (lines 8–13) and name the two other gaps besides compression.

Takeaway:DSH’s kernel only handles plugin load, unload, and dependencies — every capability is a plugin under packages/. The four announced modes are four agent-presets plugin lists in source; switching modes means swapping lists and reassembling. The name PTC lives only as the display name in preset.yml; the mechanism’s real name is Code Mode.

The handoffs inside “Interactive demo · Play first, then learn”

“The demo below turns the four plugin lists into a switchable panel.” shows that an Agent is not defined by the model alone. Each handoff between model, context, tools, state, permissions, and people affects both progress and recovery.

Write the state before adding capability

Starting from “What problem it solves.”, split the workflow into starting state, next action, tool result, state update, and stop condition. Debugging then means finding the first lost piece of information or authority instead of saying vaguely that the model “got worse”.

A happy path is not reliability

Use “Delete the whole id: compaction group in standard/agent.cordis.yml (lines 137–155).” to replay one successful and one failed run. Record the context, tool result, and owner at each turn; the workflow is maintainable when a second person can follow it without the original builder.

From “Interactive demo · Play first, then learn” to “Idea 1 · The kernel only loads and unloads; business is all plugins”

“Interactive demo · Play first, then learn” grounds the problem in “The demo below turns the four plugin lists into a switchable panel. Hit the four mode buttons and watch cards light up or go dark: green means added, red means removed, amber means same name but different confi…”. “Idea 1 · The kernel only loads and unloads; business is all plugins” then moves it toward “What problem it solves. Imagine a monolith Agent product where you want a different session-log format. You fork the repo, hunt the logging code across hundreds of thousands of lines, rebuild, then re-merge pat…”. Together, they show that the lesson is not just a conclusion to remember, but a claim with conditions.

Carry the judgment into the next situation

When analyzing an Agent, trace state, action, tool result, and next step in order. Each handoff should explain where information came from, who confirmed it, and where failure stops.

  • “Interactive demo · Play first, then learn”: The demo below turns the four plugin lists into a switchable panel. Hit the four mode buttons and watch cards light up or go dark: green means added, red means removed, amber means same name but different confi…
  • “Idea 1 · The kernel only loads and unloads; business is all plugins”: What problem it solves. Imagine a monolith Agent product where you want a different session-log format. You fork the repo, hunt the logging code across hundreds of thousands of lines, rebuild, then re-merge pat…
  • “The closing point”: What problem it solves. Most products hard-code modes: scattered branches like if (mode === 'lite') , with the mode count frozen the day the code is written. Adding a mode means change code, pass tests, wait fo…

The final “The closing point” brings the discussion to “What problem it solves. Most products hard-code modes: scattered branches like if (mode === 'lite') , with the mode count frozen the day the code is written. Adding a mode means change code, pass tests, wait fo…”. The useful thing to carry forward is knowing which judgments must be revisited when input, scale, or risk changes.

Mark as learned Your reading progress updates automatically
← PreviousNext →

Keep reading

The next useful article in the thread.

ARTICLE DISCUSSION

Leave one useful thought here.

Keep the idea that clicked, the question that stayed open, or a small note for the next learner.

Discussing Everything Is a Plugin: Announcement vs Source Inside DeepSeek Harness
3discussionsArticle discussion · synced with the Circle
View in the learning circle
AM
Asha MorganContent editor
INSIGHTField note

I turned one judgment from this article into a small experiment I could run today. Knowing what to observe next is more useful than simply remembering the conclusion.

ARTICLE DISCUSSION7 helpful
LH
Lin HarperIndie developer
INSIGHTInsight

After reading this, I first looked for the conditions behind the idea instead of copying the method into a project. That order made the later trade-offs much clearer.

ARTICLE DISCUSSION5 helpful
KM
Kiki MooreProduct operations
QUESTIONQuestion

When this judgment reaches real work, which constraint should be added first? I am curious which step matters most between reading and the first practical attempt.

ARTICLE DISCUSSION4 helpful