Agents you can
read, fork, and ship.
An agent that perceives, judges, and acts on its own — at lightning speed. One codebase ships to Web, Desktop, and a Chrome extension that drives the user's already-logged-in browser.
One run, four phases
Watch the API squad actually run
Same UI the agent renders in production — stepped through phase by phase. Click a phase to see the message stream and the tools fired at that moment.
reasoning · 4 thoughts
await view_skill({
skill_name: 'rest-api',
version: '>=1.0',
if_missing: 'skip',
}) await write_todos({
todos: [
{ id: 'fetch-schema', deps: [] },
{ id: 'write-migrations', deps: ['fetch-schema'] },
// …
],
}) await team_create({
name: 'build_api',
members: [
{ name: 'schema-sync', agentType: 'code' },
{ name: 'test-runner', agentType: 'test' },
// …
],
}) await team_task({
action: 'create',
title: 'fetch-schema',
assignedTo: 'schema-sync',
description: 'Parse OpenAPI, emit schema.ts + migration.sql',
dependencies: [],
}) const result = await execute({
command: 'pnpm prisma generate',
timeout: 30_000,
}) await write_file({
path: 'migrations/001_auth.sql',
content: migration,
}) await team_message({
to: 'test-runner',
content: 'schema.ts ready at /tmp/out/schema.ts',
}) const hits = await recall_memory({
types: ['project'],
query: 'auth header convention',
limit: 3,
}) await complete({
summary: 'Scaffolded /api/auth · 3 files · 12 tests pass',
artifacts: [
{ kind: 'pr', url: 'github.com/acme/api/pull/42' },
],
}) Ship anywhere
One codebase, everywhere the work happens
Same agent behavior across three surfaces and three sandbox providers. The only thing that changes is where data lives and where tools run.
PostgreSQL-backed, streaming SSE, resumable mid-run.
Local-first, keys encrypted via safeStorage, offline-capable.
BUA drives your already-logged-in browser via CDP.
Zero-setup loop — tools run in-process for fastest iteration.
Persistent Linux workspace per task, stateful across rounds.
Fresh micro-VM per task, ~200ms cold start, ephemeral.
How it works
Autonomous by default, shaped by protocol
The same protocol — from a one-line answer to a multi-file refactor. Clarify and Plan activate only when Assess flags them as needed.
Assess
Triage against P0-P3 policies — direct answer, confirmation required, clarification needed, or plan first.
Clarify
optionalWhen context, goal, or constraints materially affect the outcome, ask the user before acting.
Plan
optionalEmit an explicit todo list — execution stages only, each with verifiable output and a delivery spec.
Execute
Run stages linearly, parallelize independent tool calls when safe, recover from errors openly.
Deliver
Synthesize outputs, verify against the delivery spec, return a direct response or persisted files.
FAQ
Answers before you fork it
The things people ask after five minutes with the repo.
Can I self-host?
Yes — Zapvol is open source end-to-end. Run the server + web stack on your own infra, or ship the desktop app straight to users. No phone-home, no mandatory cloud account.
Why TypeScript instead of Python?
The agent shares code with the UI — prompts, schemas, tool types, message shapes — and TypeScript lets us ship the same typed contract from the browser down to the sandbox. Python would force a protocol boundary we don't need.
How is this different from Mastra / Vercel AI SDK / LangChain?
Vercel AI SDK is the streaming primitive underneath — we build on it. Mastra is a peer framework; Zapvol goes further by shipping a full Web + Desktop + Extension product, not just a backend framework. Against LangChain, we favor typed, documented internals you can read in an afternoon.
Is the browser extension (BUA) safe?
BUA is an internal-only tool: silent execution by default, no consent prompts, but a full audit log, a global kill switch in the popup, and Chrome's non-removable yellow "debugger attached" bar. A domain blocklist lets ops carve out sensitive sites.
Which models are supported?
Anything Vercel AI SDK supports — Anthropic, OpenAI, Google, Bedrock, Azure, local Ollama. Model choice is per-tier; tier configs are stored in the DB and swappable without a deploy.
How does sandbox isolation work?
Every tool call resolves against a sandbox capability map. The agent never touches your host filesystem or shell directly — it calls a capability, the sandbox provider (Node / Daytona / E2B) executes it, and the result streams back as a typed tool output.
Is this production-ready?
Zapvol is used in production internally for coding, research, and browser automation. The stack — streaming, resumable rounds, 3-tier compaction, per-task SSE replay via Redis — is built for long-running agent work, not demos.
What's the license?
Source-available under a license that permits self-hosting and internal use. See the repo for the exact terms; commercial redistribution needs a separate agreement.
Ready to build?
Get started with Zapvol in minutes. Free and open source.