AllDSH
中文

Sandbase Harness

sandbaseai · sandbaseai/sandbase-harness

Local-first self-hosted agent runtime and MCP bridge with sandboxed sessions and audit replay.

Sandbase Harness is a DSH plugin by sandbaseai. Local-first self-hosted agent runtime and MCP bridge with sandboxed sessions and audit replay. It is filed under Development & Operations and Integrations & Connections, for Database. Verification level L2 (Structured), an automated security scan has not run yet, and it declares no specific compatibility target; the listing was last checked on 2026-09-18 and is published under the Apache-2.0 licence. Install it with dsh plugin --profile web add git+https://github.com/sandbaseai/sandbase-harness.git

Listing checked by Chiyu , data updated · How to cite

L2active
Sandbase Harness verification panel: level L2 of 5 (Structured) — Manifest valid, key fields complete. Security scan: unverified — no scan has run. Compatibility target: DeepSeek Harness not declared. Licence: Apache-2.0. GitHub stars: 646. Listing last checked 2026-09-18.
Verification panel for Sandbase Harness. The listing holds level L2 of 5 — Structured: Manifest valid, key fields complete. Security scan: unverified — no scan has run. Compatibility target: DeepSeek Harness not declared. Licence: Apache-2.0. Listing last checked 2026-09-18. How verification works

Install command

dsh plugin --profile web add git+https://github.com/sandbaseai/sandbase-harness.git

Requires a running harness: start it withnpx @deepseek-ai/dsh webthen run the command above.New to this? See the installation guide.

What it actually is

SandBase Harness is a separate self-hosted runtime, not a plugin that only decorates the harness. Its README calls it “a local-first runtime for AI agents. Sessions, sandboxed tools, memory, credentials, audit trails, and a built-in Console”, and its Why section is explicit that it is “that runtime layer — not a visual workflow builder and not another model SDK”. The published package is managed-agents version 0.3.8 under Apache-2.0, written in TypeScript.

It reaches you through two distinct surfaces, and conflating them is the easiest mistake to make. The first is the runtime itself: a Hono-based HTTP service with a /v1 API, a local Console at /dashboard, a CLI, environment storage, and a TypeScript SDK exported at managed-agents/sdk. The second is managed-agents-mcp: a six-tool MCP bridge, published as a multi-architecture OCI image, that speaks stdio to a client and HTTP to a runtime. The DSH integration is the second surface wearing a bundle costume — the package declares dsh.bundle.patch: ./examples/deepseek-harness/cordis.yml, and once the profile builds, that patch “starts the bundled MCP entry over stdio”. DSH then drives the remote runtime through native mcp__sandbase__* tools, which the README says can “list agents, create and run sessions, inspect results and artifacts, and stop work”. The container “contains only the MCP bridge; agent sessions and sandbox work remain in the connected Harness runtime” — so the bridge is inert without a running runtime behind it.

What you run and where it lives

You install from a tagged GitHub source release: clone the v0.3.8 tag, npm ci, npm run build, then init and start from a workspace directory you create. That workspace holds agents/ (YAML definitions), skills/, and a gitignored .managed-agents/ state directory containing config.yaml, data.db (SQLite metadata), logs, uploaded file and skill bytes, session workspace snapshots, and local session sandboxes. The server binds 127.0.0.1:3000, adjustable with --host and --port.

Three dependencies are worth naming precisely. No account and no hosted control plane are required: the README’s own table promises “Local-first SQLite and file storage with no required hosted control plane”, and a companion Skill install is described as needing “no SandBase account when DSH already provides web/search tools”. SQLite is the default metadata store, with a local artifacts provider holding file bytes, so there is no external database to stand up. Docker is optional for sandboxes but not for the bridge — Docker-backed environments need it, and the six-tool bridge ships only as a container image, so that path effectively requires Docker. A Kubernetes backend additionally shells out through kubectl exec/cp.

The README also warns, in bold terms, that the unscoped managed-agents name on npm is not this project: “Do not run npx managed-agents or npm install managed-agents.” Install only from the tagged source release or the published OCI image.

The capability areas, and which are shipped

The README’s feature list is the authoritative inventory, and it is more modest than the marketing sentences around it. Shipped, per that list and the API examples:

  • Sessions and environments — /v1/agents, /v1/environments, /v1/sessions, /v1/sessions/{id}/messages, with resumable Server-Sent Events at /v1/sessions/{id}/events/stream honoring Last-Event-ID.
  • Storage — “SQLite-backed agents, sessions, environments, credential vaults, memory stores, files, skills, and API keys”, with “local file/skill bytes stored in the workspace state directory”.
  • A single model-provider boundary — “One active model provider boundary configured through Settings V2”, reaching OpenAI, Anthropic, MiniMax, or an OpenAI-compatible endpoint. Agents pick concrete model IDs; the workspace config only says how to reach the service.
  • Tool governance — “MCP toolsets, permission policies, built-in tools, and skill packages”. The documented agent YAML shows the shape: an agent_toolset_20260401 with default_config.permission_policy: { type: always_ask } plus per-tool configs.
  • Four sandbox backends — local process, Docker with per-session containers, Kubernetes (kubectl exec/cp), and a self-hosted worker queue.
  • The DSH bridge — six tools over MCP stdio for agents, sessions, streamed turns, artifacts, and cancellation.
  • A TypeScript SDK, plus a /v1 API that “follows Claude Managed Agents resource shapes”, so the Anthropic SDK can be pointed at the local runtime.

What is not a published feature matrix is the tidy phrase you will see quoted around the web. The README’s pending-directory entries cite an external proposal (Nexu Harness Engineering Guide issue #70) describing the project as “covering sessions, tool governance, approvals, credentials, memory, artifacts, audit/replay, and selectable backends”. That is a submission the project wrote to a third-party directory, not the project’s own specification. The repository never publishes an audit-record schema, an artifact lifecycle, or a memory API contract. If you need to know what the memory store does with a value, what retention applies to artifacts, or exactly which events the audit trail captures, this README does not say — check docs/ and the code before designing around it.

The security model, in the source’s own words

Read this section as boundaries, not assurances, because that is how the source frames it.

Authentication is open by default. The README’s Authentication section opens with “Open by default. Authentication activates when at least one API key exists” — via MANAGED_AGENTS_API_KEY or a key created at POST /v1/api-keys. Clients then send Authorization: Bearer <key>. The bridge container accepts MANAGED_AGENTS_API_KEY for “an authenticated remote runtime”, and the Agent Plugin “does not store a key in plugin.json, mcp.json, or the installed plugin files”. Nothing in the README documents key scoping, rotation, or expiry.

Credentials. The runtime keeps “credential vaults” in its SQLite metadata store, and the /v1 surface covers them alongside agents and sessions. That is the whole of what the README states about them.

Isolation is deployment-dependent, and the source says so repeatedly. The four backends are not equivalent: "sandbox_provider": "local" creates “local sandboxes” as a workspace subdirectory running with the operator’s own privileges, while "sandbox_provider": "docker" spawns per-session containers with declared image, memory, and CPU. Every third-party directory entry the README celebrates is qualified the same way — “backend-dependent isolation”, “deployment-dependent isolation”, “non-universal isolation scope”, “explicit deployment/backend limits”. The project itself never claims universal isolation.

Approval gates. permission_policy: { type: always_ask } appears in the documented agent definition, so a tool call can be gated on a human. The README does not enumerate the available policy types or describe the approval surface in the Console.

What the audit trail records. The concrete mechanism the README describes is a resumable event stream: SSE with Last-Event-ID, for “session replay and debugging”, in a workspace that also keeps logs/runtime.log and snapshots/. The event stream is the durable record you can re-attach to. There is no stated tamper-evidence property, no stated retention or export policy, and no external audit system. Presented as “audit trails” and “audit and replay”, it is best understood as a replayable event log.

Local-first, concretely

“Local-first” here means something checkable: the runtime process, its SQLite database, its uploaded bytes, and its sandboxes all live in a directory you chose, and the quick start needs no hosted control plane and no account. The default bind address is 127.0.0.1, so the Console and API are not exposed unless you pass --host 0.0.0.0 or front it with a reverse proxy.

What still leaves the machine is exactly what you configure: prompts and completions to the model provider you selected; any MCP server you attach to an agent (the documented example points at https://mcp.sentry.dev/mcp); OCI image pulls from GHCR; and npm or GitHub traffic during installation and build. The README states no first-party telemetry and no phone-home behaviour, but it also does not describe network egress in detail, so treat “local-first” as “your data and your runtime stay yours by default”, not as an air-gapped or offline-first guarantee.

Requirements

  • Node.js 22+, which the README states and package.json corroborates with "engines": { "node": ">=22" }.
  • npm 10+, per the Requirements section, plus a source clone and a build step.
  • A model provider API key — OpenAI, Anthropic, MiniMax, or any OpenAI-compatible endpoint. Without one the runtime can start but has nothing to think with.
  • Docker, optional for Docker-backed sandboxes; required in practice for the six-tool MCP bridge and the Agent Plugin path, which both pin ghcr.io/sandbaseai/sandbase-harness-mcp:0.3.8.
  • kubectl for the Kubernetes backend, and a reachable worker queue for the self-hosted backend.
  • No operating-system restriction is stated, there is no Python requirement (the runtime is TypeScript), no external database is needed, and no hosted account is required.

Known limits

  • The npm name is a trap. The published package is managed-agents, and the README states flatly that the same name on npm is not this project and must not be installed or run through npx.
  • Maturity is not characterised. The version is 0.3.8. The README documents features and distribution, not a stability promise, a support window, or a list of what remains provisional.
  • Installation has known friction. A git-hosted profile install fails once with ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED until you paste the printed key into the profile’s pnpm-workspace.yaml under allowBuilds:. A partial install can leave Plugin Hub reporting already installed: managed-agents, with an official recovery sequence pointing at a reported issue.
  • Authentication is off until you turn it on, and key lifecycle controls are undocumented.
  • Isolation quality is your deployment decision, and the security documentation stops at the feature table.
  • The bridge is a bridge. The container holds the six MCP tools only, so runtime availability is a hard dependency for every DSH session driven through it.
  • No independent security validation is claimed. The README’s own directory entries say so: listings are “not a maintainer review or security certification”, an evaluation was requested with “no score or certification claimed”, and one entry carries “explicit non-certification scope”.
  • It is not a replacement for the harness’s own sandbox. The README never says that, and nothing in it positions this runtime as a substitute for DSH’s local file policy, approval stack, or process behaviour.

When to use it — and when not to

Use it when agent runs must be inspectable and replayable after the fact, when sessions must survive restarts with a resumable event stream, or when you want controlled code execution because the local-process backend is not enough and you would rather declare a Docker or Kubernetes backend than trust the ambient filesystem. It also fits when you want to drive one runtime from several clients — a local Console, a TypeScript SDK, the Anthropic SDK pointed at /v1, and DSH over MCP — and when a self-hosted SQLite deployment without a hosted control plane is the actual requirement.

Do not adopt it because the words “sandboxed” and “audit” sound like a security posture. Read your chosen backend as the real boundary; with sandbox_provider: local, expect the agent to run as your user, inside a directory under your workspace. Do not assume credentials are encrypted, rotatable, or scoped, and do not treat the event stream as tamper-evident evidence. Skip it if you use DSH casually and do not want a second long-running service, a SQLite database, and an install step whose build-allowlist detail you must maintain. And never install it from npm under the plain managed-agents name.

Compatibility notes

The DSH integration is a bundle patch, not merely discovery metadata, and the README is candid that dsh-plugin was once treated as a metadata-only label. The bridge pins image tag 0.3.8, so upgrading one side without the other is an untested pairing. Keep the two boundaries separate in your head: your DSH file policy, approvals, and local sandbox belong to the harness, while the remote runtime has its own, configured independently. The README also documents a Codespaces development-container path (with GitHub billing attached) and an independent VPS walkthrough that demonstrates the older v0.3.2.

FAQ

Is it actually sandboxed?

Not as a property of the product. Sandboxing is a selectable backend, and the README qualifies every external description of it with “backend-dependent” or “deployment-dependent” isolation. With sandbox_provider: local you get a workspace directory and your own privileges; Docker per-session containers and Kubernetes give a stronger boundary, and each carries its own prerequisites.

Are my credentials safe in the vault?

The source does not say enough to answer that. The runtime stores “credential vaults” in SQLite-backed metadata alongside memory stores and files, and the six-tool bridge avoids writing a key into plugin.json, mcp.json, or installed plugin files. The README never states that vault values are encrypted at rest, never describes key rotation or scoping, and never states what a vault entry can reach — so treat it as secret storage, not a hardened secrets manager.

Do I have to run a server, Docker, or an account?

No account and no hosted control plane are required, and the default metadata store is SQLite in your workspace, so no database service is needed either. But you do run a server process — the Console and API live at 127.0.0.1:3000 — and Docker is needed for Docker-backed sandboxes and for the published six-tool bridge image. A model provider API key is required.

What is shipped versus proposed?

Shipped, per the README’s feature list and API examples: sessions, environments, SQLite-backed metadata and local artifacts, credential vaults, memory stores, files, skills, API keys, the four sandbox backends, MCP toolsets with permission policies, resumable SSE replay, the TypeScript SDK, and the six-tool DSH bridge. The tidy phrase “sessions, tool governance, approvals, credentials, memory, artifacts, audit/replay, and selectable backends” comes from an external directory proposal the project submitted, not from a published feature matrix — so do not read it as a contract for behaviour the repository documents nowhere else.

Sources & references

The technical claims on this page rest on the primary documents below. Each link is followed so it can be checked directly.

  1. [1]sandbaseai/sandbase-harness — GitHubThe plugin’s own repository and README — the primary document every claim in this listing is checked against.
  2. [2]deepseek-ai/deepseek-harness — GitHubUpstream repository for DeepSeek Harness, the Cordis runtime and the plugin loading model.
  3. [3]@deepseek-ai/dsh on npm — npmPublished harness package, including the release tags our dshTarget field tracks.
  4. [4]dsh-plugin GitHub topic — GitHubThe discovery mechanism used to find plugins listed in this directory.

All links last verified 2026-09-11

Questions about this listing

Is Sandbase Harness safe to install?
Sandbase Harness holds verification level L2 of 5 — Manifest valid, key fields complete — and its security status is unverified — no scan has run. A verification level records how far the install path was exercised; it is not a safety guarantee. Safety depends on what the plugin can actually reach, so read its source and install script and check its file, shell, network and credential access before you run it.
Which DeepSeek Harness version does Sandbase Harness target?
Sandbase Harness declares no dshTarget, so no specific DeepSeek Harness release has been committed to. The field is optional, and its absence means this listing makes no claim about working on a particular release — test it in an isolated profile first.
How do I install Sandbase Harness?
Start the harness with npx @deepseek-ai/dsh web, then copy the install command shown at the top of this page. That command is generated from the package name the repository publishes — or from an install spec the listing declares — so it cannot drift from what the repository actually ships. This listing was last checked on 2026-09-18.
Is it actually sandboxed?
Not as a property of the product. Sandboxing is a selectable backend, and the README qualifies every external description of it with "backend-dependent" or "deployment-dependent" isolation. With sandbox_provider: local you get a workspace directory and your own privileges; Docker per-session containers and Kubernetes give a stronger boundary, and each carries its own prerequisites.
Are my credentials safe in the vault?
The source does not say enough to answer that. The runtime stores "credential vaults" in SQLite-backed metadata alongside memory stores and files, and the six-tool bridge avoids writing a key into plugin.json, mcp.json, or installed plugin files. The README never states that vault values are encrypted at rest, never describes key rotation or scoping, and never states what a vault entry can reach — so treat it as secret storage, not a hardened secrets manager.
Do I have to run a server, Docker, or an account?
No account and no hosted control plane are required, and the default metadata store is SQLite in your workspace, so no database service is needed either. But you do run a server process — the Console and API live at 127.0.0.1:3000 — and Docker is needed for Docker-backed sandboxes and for the published six-tool bridge image. A model provider API key is required.
What is shipped versus proposed?
Shipped, per the README's feature list and API examples: sessions, environments, SQLite-backed metadata and local artifacts, credential vaults, memory stores, files, skills, API keys, the four sandbox backends, MCP toolsets with permission policies, resumable SSE replay, the TypeScript SDK, and the six-tool DSH bridge. The tidy phrase "sessions, tool governance, approvals, credentials, memory, artifacts, audit/replay, and selectable backends" comes from an external directory proposal the project submitted, not from a published feature matrix — so do not read it as a contract for behaviour the repository documents nowhere else.

Similar DSH plugins

Browse all

dsh-worktable

Aisland-SJL

An agent-project workbench for the web profile — a sidebar app drawer, a dockable split workspace, and a control room that mirrors every project's state without polling.

L3
640 JavaScript

DSH Ads

Nagi-ovo

A parody plugin that injects fake ads, fake games and popups into the DSH interface, styled after 2005 portal web.

L2
626 TypeScript

API Relay Audit

toby-bridges

A DSH plugin that runs a local 14-step audit against an AI API relay, reusing the current provider's endpoint and credential.

L3
838 Python

dsh-ios

ZSeven-W

A live iOS Simulator — and a USB-connected iPhone — inside the conversation: 22 agent tools, a tappable MJPEG panel, accessibility and OCR taps, and SwiftUI preview hot reload.

L3
295 TypeScript

DSH SSH Ops

caoyiwei850

Drive SSH operations from the main conversation with dangerous-command protection and a side terminal.

L3
20 TypeScript

Conversational data analysis for DSH: ask in plain language, the agent writes and runs the SQL, then charts it — with a browsable catalog, read-only guards and offline HTML reports.

L3
194 JavaScript
ESC

Type to search the index. Built at deploy time by Pagefind.