Extensible All the Way Down
Operator Brief
DeepSeek open-sourced a harness in which every part is a replaceable plugin, including the approval path, and a rival maintainer said it made him revisit his own design. The week’s two other extension stories, a CVE fix lost inside Agent Zero’s plugin refactor and an OMP hook that brokers writes the OS refused, point the same way: the component that says no has to sit above the ones that can be swapped. The portable part of the stack grew too, as DeepSeek’s harness ran rival models and a plain AGENTS.md carried one maintainer between harnesses.
- Upgrade / check
- Agent Zero: upgrade to v2.9 if document query ever fetches a URL you did not choose. Every stable from v1.19 through v2.8 shipped without the CVE-2026-4308 fix. Signal
- Hermes Agent: if it ever ran against a Windows host, read those session transcripts. Fifteen of fifteen destructive Windows commands passed approval without a prompt before the fix in v2026.8.13. Signal
- Claude Code: check which channel your fleet follows. Stable, 2.1.226, lacks the fortnight’s permission and NTLM credential fixes. Signal
- OpenClaw: there is nothing to upgrade to. Until a tag carries the fix, treat allow-once on a command that runs a script as approving the path, not its contents. Signal
- OMP: if you embed it and register a write-fallback handler, review that handler’s allowlist as your filesystem policy. Only the Nix flake reaches the tags that carry it. Signal
- Try
- DeepSeek Harness, if you are evaluating it: read dsh --profile web --dump-config as a security document before installing a plugin, and keep the Web UI on a single-user machine. Signal
- Point a harness that claims to be model-agnostic at a competitor’s model on its supported path and see what breaks. DeepSeek’s own harness ships that path. Signal
- Codex: the 0.148.0 work installs by name with npm i @openai/codex@alpha; the default install does not have it. Compare
- Watch
- Uncertain
- Who decides what reaches DeepSeek Harness’s public repository. It is a mirror whose merge commits cite pull requests in a private organization, so a gap in its history proves nothing. Repository
- What an operator inherits from Cordis, the third-party framework the plugin model comes from, and who ships a fix when that layer breaks. Cordis
On 13 August DeepSeek open-sourced its own coding-agent harness under MIT. The
launch post was not the telling reaction. Armin Ronacher, a maintainer of Pi,
a different harness entirely, said it was
the first time I have been looking at something new in the space and felt quite inspired to revisit some of our choices
@mitsuhiko
What inspired him is stated plainly in the architecture page: the model adapter, the tools, the session log and the agent loop itself are plugins, “so every part is replaceable from configuration. There is no privileged core to patch.”
The approval path is one of those parts. It runs as a waterfall where the first
answer wins, so a plugin registered with prepend can answer every permission
question before the built-in gate is asked. The one hard stop is the never
policy, checked before the waterfall runs. And a plugin is an unsandboxed
TypeScript module in the harness process, with
no permission declaration.
That is a coherent design for a developer preview, not an oversight. It also
means installing a plugin is closer to curl | sh than to adding an editor
extension. The documented way to run it starts a Web UI on 127.0.0.1:3080
that nothing authenticates, and the
request-trust module
says so in its first comment: “this fence is not an auth layer.” On a shared
machine, port 3080 is a shell.
The field argued about who extends the harness
The most widely read response was a Chinese-language essay setting DeepSeek’s design against Pi’s:
DSH(DeepSeek Harness)和 Pi Agent,架构哲学其实是两条相反的路,越看越觉得值得拆开聊聊。 Pi 的哲学是做减法。Mario Zechner 做 Pi 就是烦透了 Claude Code 这类工具越堆越重,于是把核心砍到只剩 read/write/edit/bash 四个工具,系统提示词不到一千 token,没有 plan mode、没有 subagent、没有 MCP,甚至默认不做权限校验。这是一种克制的极简主义——核心足够薄,剩下的全交给外部扩展去做,让你自己决定要不要加回这些复杂度。 DSH 的哲学是做加法后再拆碎。它不是精简出一个薄核心,而是把整个 agent 系统的每一层——模型、工具、文件系统、Shell、沙箱、会话存储、Subagent,甚至 Agent Loop 本身——全部做成可替换的插件。官方那套 Coding Agent 只是 “用这些插件拼出来的一个默认答案”,不是唯一答案。这个模块化的颗粒度比 Pi 深了一层:Pi 是核心不变、外围可插拔,DSH 是没有不可替换的核心。 再往底层看,两者对 “谁该拥有系统控制权” 的答案也完全不同。Pi 的答案是开发者:极简是为了让你把每一步都看得清楚、改得动,它信任的是写代码的人,而不是运行时的 agent 本身——所以宁可不做的事就不做,也不让核心替你做决定。 DSH 的答案更像是把控制权逐步下放给运行时本身:连 Agent Loop 这种最核心的调度逻辑都能被换掉,意味着系统本身没有预设 “应该怎么跑” 的立场,一切规则都可以在运行时被重新定义。这其实是两种对复杂度截然不同的态度:Pi 认为复杂度是负担,要主动砍掉;DSH 认为复杂度应该被结构化、装进插件里,而不是消灭,因为消灭了就没法长出新东西。 真正拉开差距的是自进化这件事。DSH 已经能让 agent 在运行时检查自己的能力边界,现场写一个插件挂载上去,然后在后续任务里直接调用这个刚获得的能力——虽然现在还很实验性,动态插件只存在内存里,重启就没了,也不能自动沉淀成永久插件,但这个方向已经打开了。Pi 的扩展机制目前还是人写 TypeScript 扩展、显式安装,是静态的,agent 自己不会在任务执行中主动发现能力缺口然后现场造工具再用上。这也呼应了架构哲学上的分野:Pi 把 “谁来扩展系统” 这件事留给人,DSH 在尝试把这件事也交还给 agent 自己。 前景上我会更看多 DSH 一些。Pi 已经证明了极简可扩展这条路能跑通,也确实催出了 OpenClaw 这种一周冲到十几万 star 的衍生项目,说明这套思路有市场。但它的天花板相对清晰——核心哲学就是少管事,扩展权彻底交给社区和用户,DeepSeek 官方不会去碰那层。DSH 现在虽然早期、接口还在剧烈变化,插件生态刚起步,函数式编程风格也确实有上手门槛,但它把"agent 能自己长出新能力"这件事做成了架构里的一等公民,而不是靠外部工具拼出来的效果。如果这条线真的跑通,DSH 想象空间会比精简的可扩展 harness 大一个数量级——它赌的不是 “给你更好的积木” ,而是 “积木自己进化!”
It casts Pi as subtraction, four tools and a system prompt under a thousand tokens, and DeepSeek as addition followed by shattering. Its sharpest claim is that DeepSeek’s agent can spot its own capability gap and write a plugin on the spot, while Pi’s extensions are static code a human installs.
The same reading travelled faster as a parable, Pi the sage who finds a few
first principles and DSH the anxious packer:
DSH 像一个害怕遗漏的普通人:看见什么重要,就往行囊里再塞一样东西。最后拥有了所有装备,却仍然不知道自己要去哪里。
@alading22 In our rendering: whatever looks
important goes in the bag, until it holds all the gear and still does not know
where it is going. Someone who had spent the week writing up DSH’s internals
answered from inside the bag: 「复杂度不是消失了,而是转移进了系统内部」
@QuantumTransf, in
our rendering, complexity did not disappear, it moved into the system. The
same post says that for a plugin author it is not that complicated.
Pi’s author, Mario Zechner, answered that half directly:
i know of no single extension that was written by a human.
@badlogicgames Jeffrey Emanuel said the same thing the next
day about his own orchestrator, ntm: The human isn’t the target user, the user is another agent. Why would you want to be messing around with it yourself? Then you’re the bottleneck again, just in a different way.
@doodlestein
Back in the thread, an hour after his first reply, Zechner declined the fight
it wanted: both solve the same problem, just differently, with different trade-offs: self-modifying agents.
@badlogicgames
A DeepSeek engineer replied to Ronacher in the same key, with a thank-you and
a debt: DSH reused Pi's LLM adaptor package for connecting to non-DeepSeek models
@tianyi
So the public argument settled about where it should. Two designs, different trade-offs, some shared code. What nobody in the thread asked is whether the component that refuses sits inside the part that can be extended.
Two other projects answered that question this week
Neither was in the argument.
Agent Zero fixed CVE-2026-4308, an SSRF in document query, in April. On 29 May the refactor that moved document query into a plugin gave it its own fetch code, which called the network directly. The safe fetcher stayed in the tree, uncalled. Eleven stable releases, v1.19 through v2.8, shipped without the fix before v2.9 restored it with one line under “Fixes”. The repository has no security advisory for the regression.
OMP,
the Oh My Pi fork, made the point benignly. Its v17.3.6 tag lets an extension
supply a writer that is consulted when the OS refuses a write with a
permission error. The purpose is legitimate: a host that sandboxes the agent
but offers a privileged channel. The brokered path resolves symlinks and
identifies the session. Still, once a handler is registered, the OS denial is
a suggestion and the handler’s allowlist is the filesystem boundary. It is at
least a case somebody planned for. OMP’s maintainer, Can Bölük, who says he
runs agents unsupervised on most fixes, put the failures in the other kind:
slop mostly happens because you have bad fundamentals, i.e. an issue comes along and you need a whole refactor because it was not a scenario you thought of when actually architecting the thing and requires a lot of thinking which the agent decided to hack in instead.
@_can1357
One lost a security fix by becoming a plugin. The other moved a security decision into one on purpose.
What became possible
The same week made the stack more portable, and that is the other half of this story.
DeepSeek’s harness runs OpenAI and Anthropic models on a supported, CI-tested path, and drives Codex and Claude Code as subagents. A lab shipping a harness that does not assume its own model is a bet that the durable layer is not the model. The adapter underneath is Pi’s, which is the debt the DeepSeek engineer was acknowledging.
The people writing plugins read the unsandboxed module as the opposite of a
risk. One who had built some said that after a stretch of natural-language
programming and Skills, DSH 似乎又把开发者拉回了那个熟悉的代码战场
@verysmallwoods; in our
rendering, DSH seems to pull developers back onto the familiar battlefield of
code. Same surface, other half.
Claude Code
2.1.233 removed its todo
and task-tracking tools on Opus 4.8, Sonnet 5, Fable 5 and newer models. This
is Bitter Lesson Maxing, building where better models
compound rather than erase your work, done by a vendor to itself: scaffolding
the newer models no longer need, deleted. Anything that scored or watched
TodoWrite goes quiet rather than failing; CLAUDE_CODE_ENABLE_TODO_TOOLS=1
brings it back.
Google began merging agent-written pull requests into Gemini CLI’s main
branch. Eight titled [SSR Agent] Issue Fix merged in the window, with a
human approving at least one of them,
#28812. None is in a
tag yet.
And Ronacher, two days after the launch, deleted his vendor-specific
instruction files. Debugging a possible Pi regression in Claude Code, he found
that telling it to read AGENTS.md files is works good enough.
@mitsuhiko If a portable markdown file is what
survives a change of harness, the plugin system is not what you carry. The
file is.
The default install stopped moving
For operators, the week’s reference problem was which build they were
actually on. A Hermes maintainer, debugging one user’s install, found it split
in two: your hermes is v0.20.3 (today's release) but your gui is still on v0.17.0 version
@Teknium
Codex published no stable release for ten days. Its default npm install has been 0.147.0 since 7 August while 422 commits and nineteen alpha builds piled up on 0.148.0. The work installs by name on the alpha tag; nobody lands there by default. Claude Code’s stable channel is designed to lag about a week and sits seven releases behind latest. That is the sharper case: the team that chose the careful path is the one without the fortnight’s permission fixes.
Breaking changes and security notes
DeepSeek Harness warns in capitals that compatibility-breaking changes are coming, and ships to one channel, a release candidate.
eve 0.38.0 replaces frontend stop with turn-targeted cancel. 0.39.0
removes glob and grep from the default tool set. What stop should stop was a
live question that week. Peter Steinberger said he had just changed it in
OpenClaw’s harness, asking If you press stop and 64 subagents are happily coding and modifying files - is that really what you want?
@steipete
Paperclip changed its Docker latest tag from every default-branch merge
to stable only.
Provider notes
Paperclip. Its first stable in 26 days, v2026.817.0, carried 315 commits. Master was already 176 commits past it the day it shipped, including a sandbox capability contract that fails closed. A release this late is a snapshot, not a catch-up.
Omnigent. v0.9.0 reverted owner-only approval, a change its own PR labels a security regression. A shared editor can again authorize tool calls that run with the owner’s credentials, eight days after delegation was a headline.
Gemini CLI. The preview channel is not ahead of stable: v0.56.0-preview.1 is v0.55.1 minus one OAuth fix. Six days of main-branch work, including the agent-written pull requests, is in no tag.
OpenHands. Passed 1.11.0 a second time without a collision, because the
second one carries a v prefix.
DeepSeek Harness, Agent Zero, OMP, Codex, Claude Code, Hermes, OpenClaw, Pi. Covered above and in the brief. Antigravity, eve, heypi, Flue, Agent Flywheel. Nothing that changes the read.
Closing
Nobody needed to win the argument about plugins. On the last day of the
window Pi posted sample code for event-interception extensions,
adding guardrail permission gates that block or modify dangerous tool calls.
@pidotdev Its example makes the agent ask before
rm -rf. That is the question the week kept asking,
answered in about twenty lines. A builder of agent infrastructure gave the
operator’s version the same day: the number one rule is: never believe Agents will do as told.
@fagamericano An
instruction in AGENTS.md is not a vault. Extend everything, then decide
which part cannot be extended, and put the refusal there.
Top signals from this issue
- Agent Zero An SSRF fix was lost inside a plugin refactor and shipped broken through eleven stable releases
- Hermes Agent Fifteen out of fifteen destructive Windows commands passed approval silently
- Codex Two default install paths stopped carrying the work, in different ways and for different reasons
- OpenClaw Approved exec could run different bytes than the ones you approved
- omp A filesystem-write broker landed in two tags that no install path but Nix can reach
- deepseek-harness Everything is a plugin, including the components that enforce the limits
- deepseek-harness The lab's own harness ships a supported path to run rival models and drive rival harnesses
Noted, not headlined
Items checked this window that do not demand a decision from you this week -- listed so the restraint is visible, not silent.
- eveTraces stopped recording model and tool inputs and outputs by default: a privacy gain and a debugging loss. It matters to embedders, not to this week's argument.
- openhandsThe version collision an earlier issue flagged did not happen: the second 1.11.0 carries a v prefix. Nothing for an operator to do.
- paperclipA four-channel release train is good practice. It also corrects our earlier record, which called the canary lane dormant; the tags had moved to their own namespace. On the Paperclip profile.
Projects reviewed in this research run
Research artifacts and publication history are open in the repository.
Sources
Primary links, including exact changelog lines when available.