DeepSeek Harness Is a Runtime You Assemble, Not a Chatbot You Launch
Agent frameworks that treat the runtime as a fixed product force developers to work around built-in assumptions. Harness makes the runtime itself the thing you compose, which means security policies, tool access, and model behavior can be swapped per task without forking the project.
The tool separates credentials from configuration, enforces a workspace selection step before any file access, and logs every turn, tool call, and approval as replayable session events. A permission pipeline sits between model output and filesystem access, making policy the real security boundary rather than prompt instructions. Custom models require explicit capability declarations, and misconfigured multimodal settings can corrupt session logs in ways that a config change alone won't fix. Web and headless modes share the same core, differentiated only by which Bundles load at startup. Patches let developers experiment without touching source code, and custom Profiles turn a set of plugins into a persistent, purpose-built agent for code review, writing, or sandboxed execution.
The workspace selection gate is a deliberate design choice that makes the agent's filesystem scope explicit, rejecting the common pattern of inheriting the launch directory as an implicit working context.
Separating credentials from configuration into a dedicated YAML file with desensitized reads is a practical defense against accidental key leakage in config diffs and logs—more agent runtimes should adopt this.
The session-as-event-log architecture means Harness can replay, fork, and resume sessions deterministically, but it also creates a footgun: stale multimodal declarations persist in the log and can't be fixed by editing current config alone.
Patch-based experimentation and Profile-based persistence together form a plugin development workflow that doesn't require forking or rebuilding the core project, lowering the barrier to custom agent tooling.
The permission pipeline that intercepts tool calls before execution is architecturally more honest than prompt-based guardrails; it acknowledges that model output is untrusted input to a policy engine.