HarnessAgent + AbstractFilesystem + built-in compaction and layered memory. At the time, we made a promise: write agent logic once and switch deployment shapes on demand — from a personal laptop all the way to enterprise distributed deployments.
HarnessAgent attracted a lot of attention, and many developers asked for a real-world application. Today we are releasing both AgentScope Claw and AgentScope Builder. They are shipping products and concrete case studies of AgentScope Harness:
- agentscope-claw — the full realization of Harness on the “single-user local” end. Using AgentScope Harness, we have built a Java version of OpenClaw.
- agentscope-builder — the full realization of Harness on the “multi-user enterprise” end, released today. Builder can be understood as the distributed version of OpenClaw: on one platform, an entire team can develop, operate, and share self-evolving agents.
AgentScope Claw — Using Harness to Build an OpenClaw
What It Is
AgentScope Claw is a lightweight Java version of [OpenClaw]: a personal assistant that runs on your own computer. It acts as you, works inside your file system and shell, and slowly “grows” with use — the skills it learns, the subagents it spawns, and the memory it accumulates are all files it writes into its workspace. Claw lives in the repository at:mvn package, one java -jar, then open http://localhost:8080 in a browser. All state is persisted under the ~/.agentscope/ workspace, which can be overridden with the CLAW_HOME environment variable. On first launch it auto-creates a built-in default agent, so you can start chatting without writing any code.
Three Core Capabilities
What makes Claw interesting is not “it can chat,” but the following three things — and they are the first complete expression of Harness’s design promise in a real product: 1. Workspace-driven self-evolution All of Claw’s state lives not in a database, but under~/.agentscope/claw/workspace/:
AGENTS.md— agent persona and behavioral contract, automatically injected as system prompt before each inferenceskills/— reusable skills that the agent writes and uses itselfsubagents/— subagent spec declarations, auto-discovered and loadedMEMORY.md+memory/YYYY-MM-DD.md— layered memory, automatically maintained by a background LLMagents/<subId>/sessions/— full conversation logs (JSONL) and compacted context
MEMORY.md. Tweaking an agent’s persona, knowledge, or skills does not require code changes — just edit the files in the workspace. Changing a file is equivalent to upgrading the agent. OpenClaw already did this; now Java can do it too, backed by the AgentScope Harness runtime.
2. Direct access to your local file system and shell
Claw uses the LocalFilesystemWithShell backend — no sandbox, no remote server. All reads, writes, and commands hit the local OS directly. On your own machine this is not a bug; it is a feature: ask it to “move files older than three months in ~/Downloads to the archive directory,” and it can actually do it, because it has a shell.
Harness registers tools conditionally based on backend capabilities — in Claw’s local mode, the execute shell tool automatically appears in the agent’s toolset; switch to an untrusted environment (such as Builder’s remote mode, described later), and the same shell tool automatically disappears from the same agent code. This is the first concrete demonstration of “the same agent logic, different shapes”.
3. Direct integration with the apps you already use
Claw ships with six built-in channels out of the box:
That means you can @claw from a DingTalk DM or a GitHub issue comment, and it responds with the full workspace context. During bootstrap, each agent also registers the
outbound_send tool, allowing it to proactively send messages to any channel — after a subtask finishes, HarnessGateway.tryDispatchAnnounce automatically reuses the inbound address so completion notifications naturally return to the DingTalk or WeCom session that triggered them.
The channel layer also ships with a default set of reliability mechanisms — idempotent deduplication, bot-loop protection, WeCom signature verification, AES-256-CBC decryption, and access-token renewal. These are the “write it wrong and it breaks” details of enterprise IM integration that the framework already handles.
Claw’s Boundaries
Claw intentionally stays simple — no login, no multi-tenant isolation, no Docker sandbox, no horizontal scaling. It deliberately avoids doing more, because those things would break the “install and run” experience. But as soon as you try to put this inside a team, problems appear one after another: how do multiple people share the same process? How do self-evolved workspaces stay isolated per user? How does a user’s memory remain consistent across nodes in a multi-replica deployment? How do you safely run user-submitted code? How do you share a good agent with colleagues without letting them break it? Each of these five problems is small on its own, but together they mean Claw must be repackaged into a different container. That is the starting point for Builder.From Claw to Builder — The Enterprise Deployment Shape of OpenClaw
Claw assumes “one machine, one user, one workspace.” Applying that assumption directly to a team breaks in five places at once — and none of them can be fixed by “running a few more Claw processes”:- Multiple people share one process, but each needs their own view. Claw only recognizes the current local user. Multi-user login, token-based authentication, and per-user session separation are all outside Claw’s scope.
- Each user’s workspace must not pollute others. A side effect of agent self-evolution is that it writes files — learned skills, generated subagents, accumulated
MEMORY.md. Alice’s tuned agent must not let Bob see things he should not see, nor let Bob’s conversation overwrite Alice’s memory. But Claw uses a single global workspace. - In a multi-replica deployment, the same user must see a consistent workspace. Running two Claw processes on two machines means two isolated local disks; the same user’s request landing on different replicas sees two different memories.
- Running user-submitted code on the server requires OS-level isolation. Claw enables local shell by default — a core experience on your own machine, but a direct attack surface in a multi-tenant service.
- Good agents need to be shareable without being breakable. What teams need is not “export the whole thing and let someone else import it,” but fine-grained “I authorize a group to use it, but they cannot modify it.”
Builder Product Position 1 — A Multi-Tenant, Distributed OpenClaw
Builder packages Claw’s core experience into a team- and enterprise-oriented web platform. One-sentence positioning:Builder is the distributed version of OpenClaw — same self-evolution, same workspace-driven design, same Harness runtime; only scaled from “one person” to “one organization,” and from “one laptop” to “a set of horizontally scalable services.”As a platform product, its core capabilities are:
- A multi-tenant, distributed version of OpenClaw that supports many users on one platform, with each user’s agent isolated, supports multi-replica deployment, and keeps user workspaces consistent across nodes;
- A no-code agent development platform where users can create, tune, and share their agents from the Web UI without writing a single line of code, with all agent state persisted in the workspace to automatically drive self-evolution.
Builder Product Position 2 — A No-Code Agent Development Platform
Over the past year, platforms like LangSmith Fleet, Coze, and Dify sparked a wave of “no-code agent building” — users can assemble a working agent in the browser without writing code. The core experience is consistent: choose template → configure parameters → connect tools → publish, lowering the entry barrier for agent development. Builder does the same: users log in from the browser and build their own agents without writing code. In the UI, pick a template (or start from a blank scaffold), choose a model, write a system prompt, check skills / subagents / tools / MCP services, save, and start chatting — low barrier, fast onboarding, and WYSIWYG, just like other no-code platforms.The Real Difference: Creation Is Just the Starting Point; the Agent Keeps Evolving
Most no-code platforms produce a static agent — you configure what it can do, and it does only those things forever. If you want it to do something new, you return to the admin panel and manually change the configuration. The agent’s capability ceiling equals everything you thought of at creation time. Builder is different. Every agent has a continuously growing workspace behind it:- Automatic memory accumulation: after each conversation, the agent distills new facts and writes them to memory. Next time it knows you and your business better than before. You do not need to manually update its knowledge base — it grows on its own.
- Automatic skill acquisition: while completing tasks, if the agent notices a reusable workflow, it can structure it into a new skill under the
skills/directory. Next time it faces a similar scenario, it calls the learned skill instead of reasoning from scratch. - Automatic subagent spawning: when a class of subtasks keeps recurring, the agent can split it out into a dedicated subagent (written to
subagents/), then delegate to it directly instead of doing it itself.
AGENTS.md (persona) in the UI, manage skills/ (add/remove skills), feed knowledge/ (domain knowledge), and review MEMORY.md (correct memory). “No-code” does not mean “zero control”; it means “you do not need code to control the agent, but you can always control it through files.”
Comparison with Platforms Like LangSmith Fleet
One-sentence summary: Builder is a “no-code + self-evolving” agent platform — the barrier to entry is as low as Fleet / Coze / Dify, but what you create is not a static tool; it is a digital assistant that grows.
Builder’s Core Mechanism: CompositeFilesystem
If Builder’s implementation had to be explained in one sentence, it would be:Builder runs every agent on top ofLet us follow a concrete request to unpack these two pieces.HarnessAgent+CompositeFilesystem— the former handles the agent’s runtime orchestration, while the latter turns the workspace into an asset that is namespace-isolated, distributable, and projectable into a sandbox.
HarnessGateway — One Independent Runtime per (User, Agent)
Beneath the web layer sits a HarnessGateway. Its job is simple: route each(userId, agentId) pair to an independent HarnessAgent instance.
- Alice calls
agent-A→ lands onAgent(alice, agent-A) - Alice calls
agent-B→ lands onAgent(alice, agent-B) - Bob calls the same
agent-A→ lands onAgent(bob, agent-A)— completely independent from Alice’s
HarnessAgent instance receives a CompositeFilesystem bound to that user and that agent’s namespace. In other words — HarnessGateway does not care how isolation is implemented; it only “gives the right request to the right agent instance”; the real isolation work happens in the next layer.
CompositeFilesystem — Turning Workspaces into Isolated Assets
CompositeFilesystem is the key that makes all of Builder work. Its name is literal — it is a composite file system:
- Top layer is namespace routing: when the agent calls
read("AGENTS.md"), CompositeFilesystem reads(userId, agentId)from the currentRuntimeContextand transparently rewrites the path tousers/{userId}/agents/{agentId}/AGENTS.md. The agent code thinks it is operating on “a whole file system,” but what it actually sees is a namespace-trimmed subtree that belongs only to it. - Bottom layer is the physical storage backend: after namespace routing, where the data actually lands depends on the backend implementation. The default is host disk via
LocalFilesystemWithShell, with paths resolved to~/.agentscope/builder/workspace/users/{userId}/agents/{agentId}/....
read / write / ls / grep API, exactly as in Claw. Isolation is implemented inside CompositeFilesystem, not by business code “carefully avoiding other people’s directories.”
End-to-End Walkthrough of a Write
To make this abstraction concrete — when Alice asks heragent-A in the UI to learn a new skill (writing to skills/sql-helper/SKILL.md), the full call chain is:
- Web layer: JWT parsing yields
userId=alice, URL path parsing yieldsagentId=agent-A, both are attached toRuntimeContext. - HarnessGateway: routes to the
Agent(alice, agent-A)HarnessAgentinstance. - Agent inference: the model decides to call the
write_file("skills/sql-helper/SKILL.md", ...)tool. - CompositeFilesystem top layer: intercepts the call, reads
(alice, agent-A)fromRuntimeContext, and rewrites the path tousers/alice/agents/agent-A/skills/sql-helper/SKILL.md. - CompositeFilesystem bottom layer: default local storage appends this relative path to
~/.agentscope/builder/workspace/, ultimately writing to disk at~/.agentscope/builder/workspace/users/alice/agents/agent-A/skills/sql-helper/SKILL.md. - Next inference: when the next conversation starts,
WorkspaceContextHookinjects the system prompt and also readsskills/through CompositeFilesystem, automatically locating Alice/agent-A’s own subtree; the newly learned skill appears in the toolset.
agent-A does the same thing, the path is rewritten to users/bob/agents/agent-A/... — physically a completely different directory tree from Alice’s. There is no business code that asks “is this Alice or Bob”; isolation emerges from the abstraction layer.
When You Need Stronger Isolation: Add a Sandbox on Top of the Same Composite
In Claw’s local mode, shell commands hit the host directly. Builder’s default local mode inherits this — suitable for trusted teams and single-node deployments. But as soon as your scenario involves untrusted code entering the agent (for example, letting the agent run user-submitted SQL, Python, or shell scripts), the host can no longer take that hit directly. Builder does not “rebuild a sandbox solution” for this scenario; instead, it adds a projection layer on top of CompositeFilesystem:- After entering sandbox mode, the runtime moves entirely inside a Docker container
- The host side remains the “master” of the workspace; CompositeFilesystem projects key files such as
AGENTS.md,skills/,subagents/, andknowledge/from the host into/workspaceinside the container - The agent inside the container sees the exact same workbench as the host — it reads the same
AGENTS.mdand uses the same set of skills - Shell commands execute inside the container; the host process is never directly affected by any user input
USER (one container per user, shared across multiple sessions) is a reasonable starting point for most multi-tenant SaaS.
When One Machine Is Not Enough: Swap the Storage Layer for a Distributed Backend
So far Builder is still single-node — workspaces live on one machine’s local disk (or in Docker containers on that machine). Once you want to make Builder multi-replica, with user requests landing on any node and seeing consistent state, the problem returns to the “how do replicas share workspaces” question from the beginning. CompositeFilesystem’s solution is direct: swap the bottom storage backend from “local disk” to “distributed KV.” Builder abstracts theBaseStore interface; implementations can be Redis, object storage (OSS / S3), or your own KV service. After swapping:
- All agent runtime reads and writes go through
RemoteFilesystemand land inBaseStore - The web layer managing user workspaces also uses the same
BaseStore— what the web sees and what the agent sees is the same data - Combined with a distributed
Session(typical implementation:RedisSession), Builder processes themselves can be deployed as equal replicas
AbstractFilesystem from the Harness article shows its real power — business code does not change a single line; the deployment side swaps a Bean and the migration from single-node to distributed is complete.
Builder Architecture at a Glance
HarnessAgent and AbstractFilesystem.
This is Builder’s design philosophy: do not reinvent the agent runtime; only add the operational shell required to run it in a multi-tenant enterprise environment.
Quick Start
Claw
~/.agentscope. To connect DingTalk / WeCom / Feishu / other channels, edit ~/.agentscope/agentscope.json and add the corresponding channel entries. See the Claw README for details.
Builder
admin/admin, bob/bob, or alice/alice to access the full UI. For production deployment (database switch, sandbox image, distributed backend), see the Builder README.
Claw vs Builder — Which One to Choose
The two paths are not mutually exclusive — Harness workspaces are files; the entire
AGENTS.md / skills/ / subagents/ subtree is an asset that can be versioned, code-reviewed, and copied directly from Claw into Builder. A common workflow: a developer tunes an agent to their satisfaction on their own machine with Claw, submits the workspace directory as a template to the repository, and operations pushes it to the whole team via Builder.
Summary
In the Harness article, we delivered the “self-evolving agent runtime” —HarnessAgent + workspace conventions + pluggable filesystem + hook pipeline.
Today’s article turns that runtime into two directly runnable products:
- Claw proves: using AgentScope Harness, we can already build a complete Java version of OpenClaw — self-evolution, local shell, five IM channel integrations, all packaged into a Spring Boot application you can run with
mvn package. - Builder proves: the same Harness runtime, plus an operational shell for “workspace isolation and sharing,” directly evolves into a multi-tenant platform for teams. From Claw to Builder, not a single line of agent business logic changed; only which layer CompositeFilesystem provides isolation in, and which medium it persists data to, changed.