@bang404/openagent-harness
v0.18.0
Published
Thin client for the private OpenAgent harness runtime
Readme
OpenAgent Harness Client
Thin TypeScript client for the private OpenAgent runtime. The package contains
only the public wire contract and process-management helpers; the agent loop,
prompts, providers, tools, persistence, and checkpoint implementation remain in
the private openagent-server binary.
import { spawnOpenAgent } from "@bang404/openagent-harness/node";
const agent = await spawnOpenAgent({ workspace: process.cwd() });
const [workspace] = await agent.client.listWorkspaces();
const session = await agent.client.createSession(workspace.id);
const result = await agent.client.runToCompletion(session.session_id, {
input: "Fix the failing tests",
});
console.log(result.status);
await agent.stop();Callers that do not vendor a server executable can install the correct release artifact from the machine-readable SDK manifest before spawning it. The helper checks the Harness protocol range, byte length, and SHA-256 before atomically activating the versioned executable:
import { installOpenAgentBinary, spawnOpenAgent } from "@bang404/openagent-harness/node";
const installed = await installOpenAgentBinary({
manifestUrl: process.env.OPENAGENT_SDK_MANIFEST!,
installDirectory: ".openagent-sdk",
headers: { authorization: `Bearer ${process.env.GITHUB_TOKEN}` },
});
const agent = await spawnOpenAgent({
binaryPath: installed.path,
workspace: process.cwd(),
});For development tools or long-running hosts, spawnReloadableOpenAgent exposes
an explicit process-reload boundary. Finish or cancel active runs, install a
verified newer binary, then call reload(installed.path); durable conversations
remain in OPENAGENT_HOME, while in-memory runs intentionally do not cross the
process boundary.
The daemon listens on an ephemeral loopback port and uses a process-scoped Bearer token. Do not expose the endpoint or token to untrusted code.
