Local web workspace
The local web workspace is reworked around review: a sessions drawer, light and dark themes, a movable diff panel, and a searchable model selector. zhivex-code project add registers a folder for a running local server.
A coding agent governed by design. It works inside a sealed boundary, and nothing reaches your repo until you approve the exact patch.
Every task follows the same governed path, from context to proof.
The task binds to a repo, a commit and the files in scope. No drifting context.
The default runtime exposes no host shell. Isolated commands run in an opt-in OCI snapshot with no network and no secrets.
Sensitive steps pause for you. You see the diff and test results before anything moves.
The exact approved patch is admitted, with a record of what ran and what changed.
Limits are enforced by the runtime, not requested in a prompt.
$ sh -c "…" on hostThe default runtime exposes no shell. Isolated commands stay in the configured sandbox.
curl https://…With isolated execution on, the container has no network.
git push origin mainCommits and pushes stay yours. The agent proposes a patch.
apply --force stale.patchIf your tree moved, the patch is rejected, not forced.
Harness 1.5.0 and Code 0.4.0 are on npm latest. The Code CLI is zhivex-code. Published releases are verified with npm provenance. These notes follow the repository changelogs. Bedrock and Azure OpenAI are provisional and not live-certified.
The local web workspace is reworked around review: a sessions drawer, light and dark themes, a movable diff panel, and a searchable model selector. zhivex-code project add registers a folder for a running local server.
The local web client adds a task and evidence panel: goal, revision, artifact and check provenance, task-wide accounting, and explicit accept, correct, and continue. Web task control negotiates task.control.v1.
zhivex-code export-audit and verify-audit, and the same zhx commands, use the experimental @zhivex-ai/harness/audit entrypoint. Verification checks the pack without resolving provider, store, or budget configuration.
Provisional routes on the matched engine. Bedrock Converse reports Tier B. BEDROCK_RUNTIME=openai and Azure OpenAI are the Tier A paths. These routes have no live certification.
restore_file is pinned to a destination and digest. Each budget ledger stays bound to its source namespace. Protected paths compare in locale-independent lowercase. High-entropy output from credential-bearing MCP servers is flagged.
Published Harness and Code releases are verified with npm provenance. npm latest for this pair is Harness 1.5.0 and Code 0.4.0.
Harness’s integration layer, and a standalone TypeScript SDK. The same generateText, streamText, tools, and durable agents run on Bun and Node.js. Install only the adapters you use. 1.34.0 adds an experimental MCP server.
14providers
274models
one npm install@zhivex-ai/sdk
Default model catalog in Zhivex/zhivex-ai-sdk@c3f4bf58d2bd1fee8fc0d3be44b432507350b95c, packages/sdk/src/catalog/fragments.ts. 14 provider fragments, 274 entries.
The Harness runs the governed coding agent. This SDK is that integration layer and a standalone SDK: generation, tools, durable agents, an experimental MCP server, and @zhivex-ai/sandbox-docker 0.2.0.
import { streamText } from "@zhivex-ai/sdk"; const result = streamText({ provider: "openai", prompt: "Say hello from the unified SDK." }); for await (const chunk of result.textStream) { process.stdout.write(chunk); }
Illustrative stream. The provider id is the only line that changes.
generateText · streamTextThe same calls on every adapter. Switching providers means changing the model line.
tool() · toolChoiceCallable tools with tool choice across adapters.
generateObject · streamObjectSchema-validated objects, native where the provider supports it.
reasoning: { effort }One effort ladder, mapped to each provider’s native controls.
Hosted tools / MCPProvider-hosted tools, web search and remote MCP where available.
Files API · multimodalFiles, image, audio and realtime sessions on supported adapters.
resumeAgent · sessionsSessions stored in Postgres, SQLite or a file you operate.
getApiStability()Every export is stable, beta or experimental. CI fails if one is unclassified.
@zhivex-ai/gatewayIn-process policy routing and fallback across registered adapters.
createAgentApprovalQueueHuman approval queues for agent actions.
@zhivex-ai/reactHeadless chat state, SSE transport and accessible components.
Bun · Node.jsNode.js, Bun, route handlers or workers. Keys stay on the server.
@zhivex-ai/sdk/mcp-serverExperimental. Local tools and agents over Streamable HTTP and newline-delimited stdio. Tools that require approval are not executed.
@zhivex-ai/sandbox-dockerExperimental reference environment, version 0.2.0. Each run gets a non-root container, network off by default, resource limits, snapshots, and lease-aware resume.
import { createEgressPolicy, generateText } from "@zhivex-ai/sdk";import { createOpenAI } from "@zhivex-ai/openai"; const apiKey = process.env.OPENAI_API_KEY;if (!apiKey) throw new Error("Set OPENAI_API_KEY in the server environment."); const egressPolicy = createEgressPolicy({ allow: [{ provider: "openai", model: "gpt-6-astra", region: "*", endpoint: "api.openai.com" }]}); const result = await generateText({ model: createOpenAI({ apiKey })("gpt-6-astra"), prompt: "Describe Zhivex AI SDK in one sentence.", egressPolicy, egress: { endpoint: "api.openai.com" }}); console.log(result.text);
import { generateText } from "@zhivex-ai/sdk";import { createAnthropic } from "@zhivex-ai/anthropic";import { createOpenAI } from "@zhivex-ai/openai"; const openai = createOpenAI({ apiKey: process.env.OPENAI_API_KEY });const anthropic = createAnthropic({ apiKey: process.env.ANTHROPIC_API_KEY }); const prompt = "Respond in one short sentence."; const fromOpenAI = await generateText({ model: openai("gpt-4o-mini"), prompt });const fromAnthropic = await generateText({ model: anthropic("claude-sonnet-5"), prompt }); console.log(fromOpenAI.text);console.log(fromAnthropic.text);
import { generateText } from "@zhivex-ai/sdk";import { createOpenAI } from "@zhivex-ai/openai"; const result = await generateText({ model: createOpenAI({ apiKey: process.env.OPENAI_API_KEY })("gpt-6-astra"), prompt: "Review this architecture and identify its highest-risk assumption.", reasoning: { effort: "high" }});
We're opening 10 design partner spots for teams who want to delegate real work without giving up control.
10 spots