Overview
A small set of verbs cover the live lifecycle:install --from <path> brings an agent up, status shows what’s running, logs (or events for filtered history) replays the activity stream, steer triggers a manual run, and stop / resume / kill / delete walk the irreversibility ladder. Each operates on the current workspace; set it with zombiectl workspace use or check with zombiectl workspace show.
zombiectl install --from <path>
Reads SKILL.md and TRIGGER.md from the directory you point at, validates them, and uploads to the active workspace. Install is the deploy — there is no separate up step.
webhook trigger, keyed by triggers[].source. The host-agent install skill registers each URL on the upstream provider via your existing gh (or equivalent) CLI — there is no separate paste step. To rotate the workspace-level signing secret, see Quickstart → Verify the registered webhook.
Re-running zombiectl install --from <same-path> against a workspace that already has the same agent is idempotent: the new SKILL.md / TRIGGER.md replace the previous version on the next event.
Exit codes:
0— installed (or updated).1— no workspace selected, or API error.2— missing--from, invalid path, or schema rejection.
zombiectl status
Lists every agent in the active workspace with its state, last event, and budget consumed.
--json for a machine-readable shape suitable for scripting:
zombiectl logs <zombie_id>
Print the agent’s recent activity stream. Every webhook receipt, cron fire, steer message, tool call, and run exit lands here, tagged with what triggered it (webhook:github, cron:*, steer:<user>, continuation:<original_actor>).
| Flag | Default | Purpose |
|---|---|---|
--limit <n> | 20 | Page size. |
--cursor <cursor> | (none) | Pagination cursor returned as next_cursor in a previous response. |
--json | off | Emit the raw { items, next_cursor } envelope. |
zombiectl events <zombie_id> — filtered history
Richer filter surface than logs. Use this when you need to slice by actor or time window:
| Flag | Default | Purpose |
|---|---|---|
--actor <glob> | (none) | Filter by actor. |
--since <duration> | 24h | Go-style duration (2h, 7d) or RFC 3339 timestamp. |
--cursor <cursor> | (none) | Pagination cursor from a previous response. |
--limit <n> | 50 | Max events per page. |
--json | off | Emit raw JSON for scripting. |
events --since 30s from a script if you need near-live behaviour.
zombiectl steer <zombie_id> "<message>"
Posts a steer message — a manual trigger that runs the same reasoning loop as a webhook event. Useful before you have a webhook wired up, or for one-off investigation.
Lifecycle: stop / resume / kill / delete
Four verbs control the agent’s lifecycle, in increasing order of irreversibility:
| Verb | What it does | Reversible? |
|---|---|---|
stop <zombie_id> | Halt the running session. New events stop dispatching; the in-flight run finishes cleanly. | Yes — zombiectl resume. |
resume <zombie_id> | Bring a stopped (or auto-paused) agent back to active. | — |
kill <zombie_id> | Mark terminal. The agent won’t process events again, but its row, history, and webhook URL persist. | No, but a killed agent can be deleted after. |
delete <zombie_id> | Hard-delete. Removes the agent row and its webhook URL. Must kill first. | No. |
delete. After delete, recreating with the same SKILL.md produces a new zombie_id and a new webhook URL; any upstream wiring needs to be updated.
Exit codes
| Code | Meaning |
|---|---|
0 | Success. |
1 | Workspace not selected, network error, or server rejected the call. |
2 | Invalid or missing argument (missing --from, missing <zombie_id>, etc.). |