Skip to content

Commit c158cb6

Browse files
authored
Merge pull request #8 from usezombie/docs/pivot-v2-messaging
docs: v2 zombie content — quickstart, concepts, how-it-works, changelog
2 parents f2725b1 + 0f80bae commit c158cb6

6 files changed

Lines changed: 234 additions & 114 deletions

File tree

.gitleaks.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
title = "Zombie Docs Gitleaks Config"
2+
3+
[allowlist]
4+
description = "Allow placeholder tokens used in documentation examples"
5+
regexTarget = "secret"
6+
regexes = [
7+
'''your-webhook-token''',
8+
]

changelog.mdx

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,53 @@ description: "Stay up to date with UseZombie product updates, new features, and
77
UseZombie is in **Early Access Preview**. Features below are live in the current release. APIs and agent behavior may evolve before GA.
88
</Tip>
99

10+
<Update label="v0.5.0 — April 11, 2026" tags={["New releases", "Zombies"]}>
11+
## Lead Zombie — v2 core ships
12+
13+
UseZombie is now a runtime for always-on agents. Two commands, running agent:
14+
15+
```bash
16+
zombiectl install lead-collector
17+
zombiectl up
18+
```
19+
20+
## What's new
21+
22+
### Zombie config format
23+
YAML frontmatter (trigger, skills, credentials, budget) + markdown body (agent instructions).
24+
The CLI compiles YAML → JSON before upload; the server only ever sees JSON.
25+
Supports voice-transcribed instructions as the instruction body.
26+
27+
### Webhook ingestion
28+
Every zombie gets a stable inbound URL: `POST /v1/webhooks/{zombie_id}`.
29+
Routing is by primary key — no source name collisions, no JSONB index.
30+
Bearer token auth per zombie. Idempotency via Redis SET NX (24h TTL).
31+
Returns 202 Accepted or 200 Duplicate.
32+
33+
### Activity stream
34+
Append-only audit log (`core.activity_events`). Every zombie action — event received,
35+
skill invoked, response returned — is timestamped and queryable.
36+
`zombiectl logs` streams the activity log. Cursor-based pagination for replay.
37+
38+
### New CLI commands
39+
`zombiectl install`, `zombiectl up`, `zombiectl status`, `zombiectl kill`,
40+
`zombiectl logs`, `zombiectl credential add`, `zombiectl credential list`.
41+
42+
### Schema additions
43+
- `core.zombies` — zombie registry with JSONB config
44+
- `core.zombie_sessions` — session checkpoint (context upserted after each event)
45+
- `core.activity_events` — append-only audit log (UPDATE/DELETE blocked by trigger)
46+
47+
Applied automatically by `zombied migrate`. No changes to existing tables.
48+
49+
### API reference updated
50+
16 v1 endpoints removed from the OpenAPI spec (agents, harness, specs endpoints no longer in v2 path).
51+
`POST /v1/webhooks/{zombie_id}` added. Mintlify sync required — see [API Reference](/api-reference/introduction).
52+
53+
### Version tooling
54+
`make sync-version` / `make check-version` prevent VERSION drift across `build.zig.zon` and `zombiectl/package.json`.
55+
</Update>
56+
1057
<Update label="v0.4.0 — April 6, 2026" tags={["New releases", "Improvements"]}>
1158
## Steer running agents mid-run
1259

concepts.mdx

Lines changed: 84 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,67 +5,114 @@ description: "Core terminology and mental model for UseZombie."
55

66
## Core terminology
77

8-
These are the building blocks of UseZombie. Understanding them will help you navigate the docs, configure workspaces, and interpret run results.
9-
108
<AccordionGroup>
11-
<Accordion title="Spec">
12-
A markdown file describing what you want built. Specs are format-agnostic — structured sections, free-form prose, or bullet lists all work. The agent reads natural language and infers implementation intent from your codebase. A spec is the input to every run.
9+
<Accordion title="Zombie">
10+
A persistent, always-on agent process. A zombie has a config (YAML + markdown), a trigger
11+
(how it receives events), a set of skills (what tools it can use), and a set of credentials
12+
(secrets it needs — but never sees). Once started, a zombie runs continuously, restarts on
13+
crash, and waits for events on its inbox queue.
1314
</Accordion>
1415

15-
<Accordion title="Run">
16-
A single execution of a spec. Each run has a lifecycle state: `QUEUED`, `RUNNING`, `COMPLETED`, or `FAILED`. A completed run produces artifacts (the implementation diff, gate logs) and a scorecard. Runs are immutable once finished — to retry, create a new run.
16+
<Accordion title="ZombieConfig">
17+
The YAML + markdown file that defines a zombie. YAML frontmatter carries machine-readable
18+
config (trigger, skills, credentials, budget); the markdown body carries agent instructions
19+
in natural language. The CLI compiles this to JSON before uploading — the server only ever
20+
sees JSON.
21+
22+
```yaml
23+
---
24+
name: lead-collector
25+
trigger:
26+
type: webhook
27+
source: email
28+
token: your-token
29+
skills:
30+
- agentmail
31+
credentials:
32+
agentmail_api_key: op://your-vault/agentmail/api_key
33+
budget:
34+
max_tokens_per_event: 4000
35+
---
36+
37+
You are a lead qualification agent...
38+
```
1739
</Accordion>
1840

19-
<Accordion title="Gate loop">
20-
The sequential validation cycle that runs after the agent finishes implementing: `make lint`, then `make test`, then `make build`. If any gate fails, the agent reads the error output, self-repairs, and re-runs the full gate sequence. The loop runs up to 3 times by default. This is what makes UseZombie runs self-repairing.
41+
<Accordion title="Trigger">
42+
How a zombie receives events. Currently supported: `webhook`. The `source` field is a
43+
human-readable label (e.g. "email", "github", "slack") — it appears in logs but is not used
44+
for routing. Routing uses the zombie's unique ID. The `token` field is the Bearer token
45+
callers must include.
2146
</Accordion>
2247

23-
<Accordion title="Scorecard">
24-
Quality metrics attached to every completed run. Four weighted dimensions:
25-
26-
- **Completion** (40%) — Did the agent implement everything the spec asked for?
27-
- **Error rate** (30%) — How many gate failures occurred before passing?
28-
- **Latency** (20%) — Wall-clock time from enqueue to PR.
29-
- **Resource efficiency** (10%) — Token and compute usage relative to task complexity.
30-
31-
Scores map to tiers: **Bronze** (0--39), **Silver** (40--69), **Gold** (70--89), **Elite** (90--100).
48+
<Accordion title="Skill">
49+
A named capability available to a zombie's agent. Skills are declared in the config and
50+
resolved by the runtime — the agent calls a skill by name, the runtime injects the
51+
credential and executes the API call outside the sandbox. Examples: `agentmail`, `github`,
52+
`slack`. Skills are the only way agents interact with external services.
3253
</Accordion>
3354

34-
<Accordion title="Workspace">
35-
A bound GitHub repository with associated entitlements, billing configuration, and agent settings. When you run `zombiectl workspace add`, you create a workspace. All runs, harnesses, and billing are scoped to a workspace.
55+
<Accordion title="Credential firewall">
56+
The security boundary between your secrets and the agent. Credentials are stored encrypted
57+
in the UseZombie vault. When an agent invokes a skill, the firewall retrieves the secret,
58+
makes the outbound API call, and returns only the response. The agent process never receives
59+
the raw credential — not as an environment variable, not as a function argument, not in any
60+
log. If the agent is compromised, your keys are not.
3661
</Accordion>
3762

38-
<Accordion title="Harness">
39-
Workspace-scoped agent configuration. A harness defines how agents operate within a workspace: which source repositories to read, which compiler/runtime versions to use, and which agent profiles are available. Operators store source references, compile version constraints, and activate profiles through the harness.
63+
<Accordion title="Activity stream">
64+
An append-only audit log of every action a zombie takes. Every event received, every skill
65+
invoked, every response returned — timestamped and queryable. `zombiectl logs` streams the
66+
activity log in real time. The stream is stored in Postgres and paginated by cursor for
67+
replay and debugging.
4068
</Accordion>
4169

42-
<Accordion title="Agent profile">
43-
A named configuration within a harness that defines the model, repair strategy, and gate settings for runs. Each profile accumulates its own score history across runs, making it easy to compare configurations. Switch profiles to experiment with different agent behaviors without changing workspace settings.
70+
<Accordion title="Session checkpoint">
71+
The persisted state between event deliveries. After each event is processed, the zombie's
72+
agent state (conversation history, working memory) is checkpointed to Postgres. If the
73+
process crashes, the next event picks up from the last checkpoint. This is what makes
74+
zombies stateful across runs — they remember context across events.
4475
</Accordion>
4576

46-
<Accordion title="Worktree">
47-
An isolated git working directory created for each run. The agent implements the spec in a worktree branched from the workspace's default branch, ensuring no changes touch main until you approve the PR. Worktrees are cleaned up automatically after run completion.
77+
<Accordion title="Kill switch">
78+
Stop a zombie immediately from `zombiectl kill` or the web UI. The running agent process is
79+
terminated mid-action — no new events are processed, no further billing. The zombie's state
80+
is preserved so it can be restarted cleanly. Use the kill switch when an agent is misbehaving
81+
or consuming unexpected resources.
4882
</Accordion>
4983

50-
<Accordion title="NullClaw">
51-
The embedded agent runtime that executes specs inside the sandbox. NullClaw receives the spec, injected codebase context, and tool access, then produces an implementation. It operates within the worktree and has no access outside the sandbox boundary.
84+
<Accordion title="Budget">
85+
Per-event spending limits. `max_tokens_per_event` caps the LLM token budget per event
86+
delivery. `max_wall_seconds` caps wall-clock time. If either limit is hit, the event is
87+
terminated and a budget breach is logged to the activity stream. One bad prompt never
88+
becomes an infinite burn.
5289
</Accordion>
5390

54-
<Accordion title="Executor">
55-
The sidecar process (`zombied-executor`) that owns the sandbox lifecycle. The executor spawns NullClaw agents, manages worktree creation and cleanup, enforces resource limits (CPU, memory, time), and reports execution results back to the worker.
91+
<Accordion title="Workspace">
92+
A container for zombies, billing, and access control. All zombies, credentials, and billing
93+
are scoped to a workspace. Multiple team members can share a workspace with role-based
94+
access.
5695
</Accordion>
5796

58-
<Accordion title="Context injection">
59-
The process of providing relevant codebase context — file contents, module structure, dependency graphs — to agents alongside the spec. Good context injection is what separates accurate implementations from hallucinated ones. This is a key area of ongoing improvement in UseZombie.
97+
<Accordion title="NullClaw">
98+
The embedded agent runtime that executes inside the sandbox. NullClaw receives the zombie's
99+
instructions, injected skill definitions, and events, then produces responses and skill
100+
invocations. It operates inside an isolated sandbox process and has no direct access to
101+
credentials or external networks — everything flows through the firewall.
60102
</Accordion>
61103

62-
<Accordion title="Agent relay">
63-
A stateless communication model where `zombied` acts as a pass-through between `zombiectl` and the workspace's LLM provider. The CLI sends tool definitions (read_file, list_dir, glob) with each request. The model decides which files to read via tool calls. The CLI executes tools locally on the developer's laptop and sends results back. Files never leave the machine unless the model explicitly asks for them.
64-
65-
Used by `spec init` and `run --preview` for lightweight, interactive agent sessions. The pipeline model (sandbox + worker) is used for full `run` execution.
104+
<Accordion title="Executor">
105+
The sidecar process (`zombied-executor`) that owns the sandbox lifecycle. The executor
106+
spawns NullClaw agents inside isolated sandbox containers, enforces resource limits (CPU,
107+
memory, time), and reports execution results back to the event loop. The executor is also
108+
used for harness compilation and spec preview in legacy v1 workflows.
66109
</Accordion>
67110

68-
<Accordion title="Steering">
69-
An agent-to-agent workflow where an external coding agent (Claude Code, Codex, OpenCode) submits specs to UseZombie. The external agent handles planning and spec authoring; UseZombie handles execution with verified gates. This lets you compose agent capabilities: one agent thinks, another builds with guardrails.
111+
<Accordion title="Event loop">
112+
The persistent process that drives a zombie. The event loop claims a zombie from the
113+
dispatch queue, loads its config and session checkpoint, waits for events on its Redis
114+
Streams inbox, delivers each event to NullClaw, checkpoints state after processing, and
115+
acknowledges the Redis message (at-least-once delivery). Events are processed sequentially
116+
— a zombie's mailbox is ordered.
70117
</Accordion>
71118
</AccordionGroup>

how-it-works.mdx

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,12 @@ Your agent never sees raw credentials. It makes requests. The firewall intercept
2121
## Step by step
2222

2323
<Steps>
24-
<Step title="Connect your agent">
25-
Push your agent code to a workspace. UseZombie wraps it in a sandboxed process with resource limits (CPU, memory, wall time). The agent starts running immediately and restarts automatically on crash.
24+
<Step title="Install a zombie">
25+
Run `zombiectl install <template>` to create a zombie config file. Edit it to set your trigger, skills, and agent instructions. Run `zombiectl up` to deploy. UseZombie provisions a webhook endpoint, starts the event loop, and your agent is live in seconds.
2626
</Step>
2727

2828
<Step title="Store credentials — once">
29-
Add API keys, tokens, and secrets to the workspace credential store via `zombiectl skill-secret put` or Mission Control. Credentials are encrypted at rest and never passed into the sandbox.
29+
Add API keys and tokens via `zombiectl credential add` or Mission Control. Credentials are encrypted at rest and never passed into the sandbox. Your agent invokes a skill by name; the firewall handles the rest.
3030
</Step>
3131

3232
<Step title="Firewall injects credentials per-request">
@@ -38,7 +38,7 @@ Your agent never sees raw credentials. It makes requests. The firewall intercept
3838
</Step>
3939

4040
<Step title="Webhooks arrive without ngrok">
41-
Register webhook sources (GitHub, Slack, email, custom HTTP) on the workspace. UseZombie provides a stable inbound endpoint and routes matching events to your agent process. No tunneling, no port forwarding, no custom servers.
41+
Every zombie gets a stable, unique webhook URL at `https://hooks.usezombie.com/v1/webhooks/{zombie_id}`. Point GitHub, Slack, email, or any HTTP source at it. Events are authenticated with a Bearer token and queued to the zombie's inbox. No tunneling, no port forwarding, no custom servers.
4242
</Step>
4343

4444
<Step title="Observe and control">
@@ -72,27 +72,31 @@ The agent makes a plain HTTP request. The firewall resolves the right credential
7272
sequenceDiagram
7373
participant CLI as zombiectl
7474
participant API as zombied API
75+
participant WH as Webhook endpoint
7576
participant Q as Redis Streams
76-
participant W as zombied worker
77-
participant S as Sandbox process
77+
participant EL as Event loop (worker)
78+
participant S as NullClaw sandbox
7879
participant F as Credential firewall
7980
80-
CLI->>API: POST /v1/agents (agent config)
81-
API->>Q: enqueue agent_start
82-
Q->>W: claim work
83-
W->>S: spawn sandboxed process
84-
S->>F: outbound requests (no credentials)
81+
CLI->>API: POST /v1/webhooks/install (zombie config)
82+
WH->>API: POST /v1/webhooks/{zombie_id} (inbound event)
83+
API->>Q: XADD zombie:{id}:events
84+
Q->>EL: XREADGROUP (claim event)
85+
EL->>S: deliver event to NullClaw
86+
S->>F: skill invocations (no raw credentials)
8587
F->>F: inject credentials + log
86-
W->>CLI: SSE: status, logs, cost
88+
EL->>API: checkpoint session state
89+
EL->>Q: XACK (at-least-once)
8790
```
8891

8992
**Component responsibilities:**
9093

91-
- **`zombiectl`** — CLI client. Deploys agents, checks status, manages secrets, streams logs.
92-
- **`zombied` API** — HTTP server. Manages agent lifecycle, credential store, webhook routing, billing.
93-
- **Redis Streams** — Work queue. Durable, ordered, with consumer group semantics for worker fleet scaling.
94-
- **`zombied` worker** — Owns the sandbox lifecycle. Spawns agents, enforces resource limits, handles restarts.
95-
- **Credential firewall** — Network-layer proxy. Intercepts outbound requests, injects credentials, records audit logs.
94+
- **`zombiectl`** — CLI client. Installs zombies, manages credentials, checks status, streams logs.
95+
- **`zombied` API** — HTTP server. Manages zombie lifecycle, webhook ingestion, credential store, billing.
96+
- **Redis Streams** — Per-zombie event inbox. Durable, ordered, consumer group semantics for at-least-once delivery.
97+
- **Event loop** — Worker thread that drives a zombie. Claims events, delivers to sandbox, checkpoints state, acks queue.
98+
- **NullClaw** — The embedded agent runtime inside the sandbox. Receives events and instructions, produces skill invocations and responses.
99+
- **Credential firewall** — Network-layer proxy. Intercepts outbound skill requests, injects credentials, records audit logs.
96100

97101
## Spend control
98102

index.mdx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ So we killed the old approach and pivoted. UseZombie is now a runtime for always
1717

1818
## What UseZombie does
1919

20-
UseZombie is agent hosting infrastructure. Connect your agents, and we handle credentials, webhooks, and walls — your agents run 24/7 without ever seeing your keys.
20+
UseZombie is agent hosting infrastructure. You bring your agent; we handle credentials (hidden from the sandbox), webhooks (wired automatically), audit logs (every action timestamped), and a kill switch. Your agent runs 24/7 without ever seeing a password.
2121

22-
<Card title="Get started" icon="rocket" href="/quickstart" horizontal>
23-
Connect your agent and have it running in minutes.
22+
<Card title="Get started in 2 minutes" icon="rocket" href="/quickstart" horizontal>
23+
Install a zombie, add credentials, run `zombiectl up`.
2424
</Card>
2525

2626
## What zombies do
@@ -53,7 +53,7 @@ UseZombie is agent hosting infrastructure. Connect your agents, and we handle cr
5353
Understand the agent hosting model and credential firewall.
5454
</Card>
5555
<Card title="Key concepts" icon="book" href="/concepts">
56-
Agents, workspaces, credential walls, webhooks, and observability.
56+
Zombies, triggers, skills, credential firewall, and kill switch.
5757
</Card>
5858
<Card title="CLI reference" icon="rectangle-terminal" href="/cli/zombiectl">
5959
Full command reference for zombiectl.

0 commit comments

Comments
 (0)