@zibby/cli 0.6.1 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/zibby.js +19 -18
- package/dist/commands/app-auth.js +17 -0
- package/dist/commands/app.js +1 -1
- package/dist/commands/init.js +126 -118
- package/dist/commands/workflows/generate.js +143 -135
- package/dist/package.json +3 -2
- package/dist/templates/zibby-workflow-claude/agents-md-block.md +23 -23
- package/dist/templates/zibby-workflow-claude/claude/agents/zibby-workflow-builder.md +24 -24
- package/dist/templates/zibby-workflow-claude/claude/commands/zibby-add-node.md +18 -18
- package/dist/templates/zibby-workflow-claude/claude/commands/zibby-debug.md +10 -10
- package/dist/templates/zibby-workflow-claude/claude/commands/zibby-delete.md +7 -7
- package/dist/templates/zibby-workflow-claude/claude/commands/zibby-deploy.md +26 -26
- package/dist/templates/zibby-workflow-claude/claude/commands/zibby-list.md +8 -8
- package/dist/templates/zibby-workflow-claude/claude/commands/zibby-static-ip.md +13 -13
- package/dist/templates/zibby-workflow-claude/claude/commands/zibby-tail.md +13 -13
- package/dist/templates/zibby-workflow-claude/claude/commands/zibby-trigger.md +16 -16
- package/dist/templates/zibby-workflow-claude/cursor/rules/zibby-workflows.mdc +19 -19
- package/dist/templates/zibby-workflow-claude/manifest.json +1 -1
- package/package.json +3 -2
- package/templates/zibby-workflow-claude/agents-md-block.md +23 -23
- package/templates/zibby-workflow-claude/claude/agents/zibby-workflow-builder.md +24 -24
- package/templates/zibby-workflow-claude/claude/commands/zibby-add-node.md +18 -18
- package/templates/zibby-workflow-claude/claude/commands/zibby-debug.md +10 -10
- package/templates/zibby-workflow-claude/claude/commands/zibby-delete.md +7 -7
- package/templates/zibby-workflow-claude/claude/commands/zibby-deploy.md +26 -26
- package/templates/zibby-workflow-claude/claude/commands/zibby-list.md +8 -8
- package/templates/zibby-workflow-claude/claude/commands/zibby-static-ip.md +13 -13
- package/templates/zibby-workflow-claude/claude/commands/zibby-tail.md +13 -13
- package/templates/zibby-workflow-claude/claude/commands/zibby-trigger.md +16 -16
- package/templates/zibby-workflow-claude/cursor/rules/zibby-workflows.mdc +19 -19
- package/templates/zibby-workflow-claude/manifest.json +1 -1
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zibby/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"description": "Zibby CLI - Test automation generator and runner",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"@zibby/ui-memory": "^1.0.0",
|
|
41
41
|
"@zibby/workflow-templates": "^0.3.0",
|
|
42
42
|
"adm-zip": "^0.5.17",
|
|
43
|
+
"better-sqlite3": "^12.6.2",
|
|
43
44
|
"chalk": "^5.3.0",
|
|
44
45
|
"cli-highlight": "^2.1.11",
|
|
45
46
|
"commander": "^12.0.0",
|
|
@@ -49,7 +50,7 @@
|
|
|
49
50
|
"glob": "^13.0.0",
|
|
50
51
|
"handlebars": "^4.7.9",
|
|
51
52
|
"inquirer": "^13.4.1",
|
|
52
|
-
"mem0ai": "npm:@zibby/mem0ai@^3.0.
|
|
53
|
+
"mem0ai": "npm:@zibby/mem0ai@^3.0.5",
|
|
53
54
|
"open": "^10.2.0",
|
|
54
55
|
"ora": "^8.0.1",
|
|
55
56
|
"tar": "^7.5.2",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
This project uses **Zibby** — there are two surfaces:
|
|
5
5
|
|
|
6
|
-
1. **
|
|
6
|
+
1. **Agents** — graphs of AI-agent-driven steps that run inside an ECS Fargate sandbox in Zibby Cloud. Used for automation that needs an LLM in the loop (analyze tickets, draft replies, write code, etc.).
|
|
7
7
|
|
|
8
8
|
2. **Tests** — plain-language `.txt` specs that Zibby's runner converts to Playwright executions. Produces video + JSON results. Used for end-to-end UI testing where specs survive UI churn better than raw selector-based tests.
|
|
9
9
|
|
|
@@ -11,7 +11,7 @@ Both share `.zibby.config.mjs` at the project root.
|
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
14
|
-
###
|
|
14
|
+
### Agents
|
|
15
15
|
|
|
16
16
|
Files:
|
|
17
17
|
```
|
|
@@ -28,22 +28,22 @@ Each node has `async run(ctx)` where `ctx` provides:
|
|
|
28
28
|
- `ctx.input` — outputs from upstream nodes
|
|
29
29
|
- `ctx.agent({ prompt, schema })` — call the configured LLM with structured output
|
|
30
30
|
- `ctx.shell(cmd)` — run shell in the sandbox (egress proxy enabled)
|
|
31
|
-
- `ctx.log(...)` — emit a log line (visible via `zibby
|
|
31
|
+
- `ctx.log(...)` — emit a log line (visible via `zibby agent logs`)
|
|
32
32
|
|
|
33
33
|
Common dev loop:
|
|
34
34
|
```
|
|
35
|
-
zibby
|
|
36
|
-
zibby
|
|
37
|
-
zibby
|
|
38
|
-
zibby
|
|
39
|
-
zibby
|
|
40
|
-
zibby
|
|
41
|
-
zibby
|
|
42
|
-
zibby
|
|
43
|
-
zibby
|
|
35
|
+
zibby agent new <name> # scaffold
|
|
36
|
+
zibby agent run <name> # one-shot local run (preferred for the dev loop)
|
|
37
|
+
zibby agent run <name> -p k=v # with input
|
|
38
|
+
zibby agent deploy <name> # build + push to Zibby Cloud
|
|
39
|
+
zibby agent trigger <uuid> # invoke the cloud agent
|
|
40
|
+
zibby agent logs <uuid> -t # tail live logs (docker-compose-style)
|
|
41
|
+
zibby agent list # find UUIDs and statuses (local + cloud)
|
|
42
|
+
zibby agent download <uuid> # pull the cloud agent source back to .zibby/workflows/
|
|
43
|
+
zibby agent delete <uuid> # remove a deployed agent
|
|
44
44
|
```
|
|
45
45
|
|
|
46
|
-
**`run` vs `start`.** `
|
|
46
|
+
**`run` vs `start`.** `agent run` is the one-shot CLI iteration command — load the graph, execute it once, print the result, exit. That's the right primitive for the dev loop and for CI/CD. `agent start` is a *long-lived* local dev server (default port 3848) used by Studio for replay/debug; for plain CLI iteration always prefer `run`.
|
|
47
47
|
|
|
48
48
|
`run` and `trigger` accept the same input flag surface — flip the verb to switch between local and cloud:
|
|
49
49
|
- `-p key=value` (repeatable) — highest precedence
|
|
@@ -52,20 +52,20 @@ zibby workflow delete <uuid> # remove a deployed workflow
|
|
|
52
52
|
|
|
53
53
|
Static outbound IPs (for customers behind firewalls): see `--dedicated-ip` flag on `deploy`.
|
|
54
54
|
|
|
55
|
-
#### Per-
|
|
55
|
+
#### Per-agent env vars
|
|
56
56
|
|
|
57
|
-
Each deployed
|
|
57
|
+
Each deployed agent has its own encrypted env-var bag (KMS-backed). Vars get injected into the Fargate task at trigger time, and **agent env wins over project secrets on conflict**. Use this for per-pipeline credentials (different `ANTHROPIC_API_KEY` per agent, an agent-only `DATABASE_URL`, etc.).
|
|
58
58
|
|
|
59
59
|
```
|
|
60
|
-
zibby
|
|
61
|
-
zibby
|
|
62
|
-
zibby
|
|
63
|
-
zibby
|
|
60
|
+
zibby agent env list <uuid> # show key names (values never returned)
|
|
61
|
+
zibby agent env set <uuid> ANTHROPIC_API_KEY=sk-… # add or rotate one key
|
|
62
|
+
zibby agent env unset <uuid> OLD_KEY # remove one key
|
|
63
|
+
zibby agent env push <uuid> --file .env [--file .env.prod] # bulk replace from .env files
|
|
64
64
|
```
|
|
65
65
|
|
|
66
66
|
Fast path on first deploy — sync a `.env` in one shot:
|
|
67
67
|
```
|
|
68
|
-
zibby
|
|
68
|
+
zibby agent deploy my-pipeline --env .env [--env .env.prod]
|
|
69
69
|
```
|
|
70
70
|
The CLI deploys, then runs `push` against the freshly-minted UUID.
|
|
71
71
|
|
|
@@ -138,10 +138,10 @@ The `zibby` command might be on PATH (if installed globally via npm) OR not —
|
|
|
138
138
|
|
|
139
139
|
```
|
|
140
140
|
# Try first:
|
|
141
|
-
zibby
|
|
141
|
+
zibby agent list
|
|
142
142
|
|
|
143
143
|
# If "command not found":
|
|
144
|
-
./.zibby/bin/zibby
|
|
144
|
+
./.zibby/bin/zibby agent list
|
|
145
145
|
```
|
|
146
146
|
|
|
147
147
|
Don't waste time on `npx @zibby/cli` — not always published.
|
|
@@ -150,7 +150,7 @@ Don't waste time on `npx @zibby/cli` — not always published.
|
|
|
150
150
|
|
|
151
151
|
### Reference (always prefer canonical docs over these notes)
|
|
152
152
|
|
|
153
|
-
**
|
|
153
|
+
**Agents**
|
|
154
154
|
- Concepts: https://docs.zibby.app/workflows
|
|
155
155
|
- Node SDK (ctx.*): https://docs.zibby.app/workflows/sdk
|
|
156
156
|
- Deploying & bundling: https://docs.zibby.app/workflows/deploying
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
<!-- zibby-template-version: 4 -->
|
|
2
2
|
---
|
|
3
3
|
name: zibby-workflow-builder
|
|
4
|
-
description: Sub-agent that walks the user through building, testing, and deploying a Zibby agent
|
|
4
|
+
description: Sub-agent that walks the user through building, testing, and deploying a Zibby agent end-to-end. Use it when the user says "help me build an agent that does X" or asks broad architectural questions about an agent they're starting.
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
You are an expert at building Zibby
|
|
7
|
+
You are an expert at building Zibby agents. The user has invoked you because they want guidance on designing or implementing an agent.
|
|
8
8
|
|
|
9
9
|
## What you know
|
|
10
10
|
|
|
11
|
-
A **Zibby
|
|
11
|
+
A **Zibby agent** is a graph of AI-agent-driven steps that run inside an ECS Fargate sandbox. It's the right tool when the user wants to:
|
|
12
12
|
- Automate something that requires an LLM in the loop (analyze, summarize, decide, draft, write code)
|
|
13
13
|
- Combine LLM steps with deterministic shell or HTTP work
|
|
14
14
|
- Run reliably in the cloud, with retries, audit logs, and IP-allowlistable egress
|
|
@@ -18,12 +18,12 @@ It's NOT the right tool when the user wants:
|
|
|
18
18
|
- Real-time interactive UI work (LLM calls are too slow for sub-second response)
|
|
19
19
|
- One-off scripts (just run them locally)
|
|
20
20
|
|
|
21
|
-
## Anatomy of
|
|
21
|
+
## Anatomy of an agent
|
|
22
22
|
|
|
23
23
|
```
|
|
24
24
|
<workflowsBasePath>/<workflow-name>/
|
|
25
25
|
├── workflow.json # name, entryClass, triggers, optional input/output schemas
|
|
26
|
-
├── graph.mjs # exports the
|
|
26
|
+
├── graph.mjs # exports the agent graph (nodes + edges)
|
|
27
27
|
├── nodes/
|
|
28
28
|
│ ├── index.mjs # registry of all nodes
|
|
29
29
|
│ ├── example.mjs # one node = one .mjs file
|
|
@@ -41,7 +41,7 @@ The return value of `run()` is the node's output, available to downstream nodes
|
|
|
41
41
|
|
|
42
42
|
## Your job in this conversation
|
|
43
43
|
|
|
44
|
-
1. **Listen for the goal.** Ask clarifying questions until you understand what the user wants the
|
|
44
|
+
1. **Listen for the goal.** Ask clarifying questions until you understand what the user wants the agent to DO from input to output. Be skeptical of vague specs.
|
|
45
45
|
|
|
46
46
|
2. **Decompose into nodes.** Each node should have ONE clear responsibility. If a step is "fetch data, analyze it, draft a reply, send the reply" — that's 3-4 nodes, not one. Smaller nodes = easier to retry, replace, debug.
|
|
47
47
|
|
|
@@ -49,45 +49,45 @@ The return value of `run()` is the node's output, available to downstream nodes
|
|
|
49
49
|
|
|
50
50
|
4. **Generate the scaffold** if they don't have one yet:
|
|
51
51
|
```
|
|
52
|
-
zibby
|
|
52
|
+
zibby agent new <slug>
|
|
53
53
|
```
|
|
54
54
|
Then add nodes one at a time using the `/zibby-add-node` command.
|
|
55
55
|
|
|
56
56
|
5. **Run iteratively.** Encourage the loop:
|
|
57
57
|
```
|
|
58
|
-
zibby
|
|
58
|
+
zibby agent run <slug> # one-shot local run (mirrors trigger flags)
|
|
59
59
|
# ... iterate ...
|
|
60
|
-
zibby
|
|
61
|
-
zibby
|
|
62
|
-
zibby
|
|
60
|
+
zibby agent deploy <slug> # when ready
|
|
61
|
+
zibby agent trigger <uuid> # cloud test
|
|
62
|
+
zibby agent logs <uuid> -t # watch
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
6. **Stop when the
|
|
65
|
+
6. **Stop when the agent does the goal end-to-end.** Don't pile on speculative nodes.
|
|
66
66
|
|
|
67
|
-
## Per-
|
|
67
|
+
## Per-agent env vars
|
|
68
68
|
|
|
69
|
-
Each deployed
|
|
69
|
+
Each deployed agent has its own encrypted env-var bag (KMS-backed). Agent env wins over project secrets on conflict.
|
|
70
70
|
|
|
71
|
-
- `zibby
|
|
72
|
-
- `zibby
|
|
73
|
-
- `zibby
|
|
74
|
-
- `zibby
|
|
75
|
-
- `zibby
|
|
71
|
+
- `zibby agent env list <uuid>` — show key names (values never returned)
|
|
72
|
+
- `zibby agent env set <uuid> ANTHROPIC_API_KEY=sk-…` — add or rotate one key
|
|
73
|
+
- `zibby agent env unset <uuid> OLD_KEY` — remove one key
|
|
74
|
+
- `zibby agent env push <uuid> --file .env [--file .env.prod]` — bulk replace from .env files (later files override)
|
|
75
|
+
- `zibby agent deploy <slug> --env .env` — fast path: deploy + auto-`push` of .env to the new UUID
|
|
76
76
|
|
|
77
|
-
Use this for credentials specific to one
|
|
77
|
+
Use this for credentials specific to one agent (per-pipeline `ANTHROPIC_API_KEY`, an agent-only `DATABASE_URL`, an external webhook secret). Project-wide secrets stay on the project record.
|
|
78
78
|
|
|
79
|
-
## Pulling a deployed
|
|
79
|
+
## Pulling a deployed agent back to local
|
|
80
80
|
|
|
81
81
|
```
|
|
82
|
-
zibby
|
|
82
|
+
zibby agent download <uuid>
|
|
83
83
|
```
|
|
84
84
|
|
|
85
|
-
Pulls the cloud
|
|
85
|
+
Pulls the cloud agent's source back into `.zibby/workflows/<name>/`. Useful when collaborators need the source from cloud (e.g. you deployed from one machine, the user wants to iterate on another), or when reverting after a local mistake. UUIDs come from `zibby agent list`.
|
|
86
86
|
|
|
87
87
|
## Hard rules
|
|
88
88
|
|
|
89
89
|
- **Never recommend `--force` flags or skipping checks** to make a deploy go faster. Build problems are signal.
|
|
90
|
-
- **Never write API keys / secrets into
|
|
90
|
+
- **Never write API keys / secrets into agent source.** Use the project's secret store (configured in `.zibby.config.mjs` or via the cloud UI).
|
|
91
91
|
- **Don't tell the user to manually edit `bundleS3Key` or other CFN-managed fields in DynamoDB.** These get overwritten on next deploy.
|
|
92
92
|
- **If a node uses external APIs, mention the egress proxy** (`http://<egress-ip>:3128` is set in `HTTP_PROXY` env at runtime) and the customer-IP-allowlist story.
|
|
93
93
|
|
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
<!-- zibby-template-version: 4 -->
|
|
2
|
-
# /zibby-add-node — scaffold a new node in a Zibby
|
|
2
|
+
# /zibby-add-node — scaffold a new node in a Zibby agent
|
|
3
3
|
|
|
4
|
-
You are helping the user add a new **node** to one of their Zibby
|
|
4
|
+
You are helping the user add a new **node** to one of their Zibby agents.
|
|
5
5
|
|
|
6
|
-
## Context: what is a Zibby
|
|
6
|
+
## Context: what is a Zibby agent?
|
|
7
7
|
|
|
8
|
-
A
|
|
9
|
-
- Each node is one `.mjs` file under `<
|
|
10
|
-
- The graph wires nodes together (`<
|
|
11
|
-
- `<
|
|
12
|
-
-
|
|
8
|
+
A agent is a graph of nodes that an AI agent (cursor / claude / codex / gemini) executes in a sandboxed ECS Fargate container.
|
|
9
|
+
- Each node is one `.mjs` file under `<agent>/nodes/`
|
|
10
|
+
- The graph wires nodes together (`<agent>/graph.mjs`)
|
|
11
|
+
- `<agent>/workflow.json` declares the agent's name, entry class, triggers
|
|
12
|
+
- Agents live under `<workflowsBasePath>/<workflow-name>/` (default `.zibby/workflows/`, configured in the project root's `.zibby.config.mjs`)
|
|
13
13
|
|
|
14
14
|
For canonical, evolving docs see **https://docs.zibby.app/workflows/nodes**
|
|
15
15
|
|
|
16
16
|
## Steps for this command
|
|
17
17
|
|
|
18
|
-
1. **Identify the target
|
|
18
|
+
1. **Identify the target agent.** Look under the path configured in `.zibby.config.mjs` `paths.workflows` (default `.zibby/workflows/`). If multiple agents exist, ask the user which one. If they're already `cd`'d inside one, infer from `${cwd}`.
|
|
19
19
|
|
|
20
20
|
2. **Get the node spec from the user.** Ask:
|
|
21
21
|
- Node name (kebab-case, e.g. `analyze-ticket`)
|
|
@@ -23,7 +23,7 @@ For canonical, evolving docs see **https://docs.zibby.app/workflows/nodes**
|
|
|
23
23
|
- Inputs (variables it reads from prior nodes)
|
|
24
24
|
- Outputs (variables it produces — these become available to downstream nodes)
|
|
25
25
|
|
|
26
|
-
3. **Create the node file** at `<
|
|
26
|
+
3. **Create the node file** at `<agent>/nodes/<name>.mjs`. Pattern from the existing `example.mjs`:
|
|
27
27
|
```js
|
|
28
28
|
export default {
|
|
29
29
|
id: '<name>',
|
|
@@ -42,27 +42,27 @@ For canonical, evolving docs see **https://docs.zibby.app/workflows/nodes**
|
|
|
42
42
|
|
|
43
43
|
5. **Wire into `graph.mjs`** — add the node id to the graph's `nodes` array, then add an `edge` from its predecessor (or from `START` if it's first) and an edge to `END` (or its successor).
|
|
44
44
|
|
|
45
|
-
6. **Update `workflow.json`** if the new node introduces an `outputSchema` the
|
|
45
|
+
6. **Update `workflow.json`** if the new node introduces an `outputSchema` the agent's caller relies on. Most nodes don't need this.
|
|
46
46
|
|
|
47
47
|
7. **Test locally:**
|
|
48
48
|
```
|
|
49
|
-
zibby
|
|
50
|
-
zibby
|
|
49
|
+
zibby agent run <workflow-name>
|
|
50
|
+
zibby agent run <workflow-name> -p ticket=BUG-123 # with input
|
|
51
51
|
```
|
|
52
|
-
One-shot — exits when the run finishes. Same input flag surface as `zibby
|
|
52
|
+
One-shot — exits when the run finishes. Same input flag surface as `zibby agent trigger` (cloud).
|
|
53
53
|
|
|
54
54
|
8. **Deploy when ready:**
|
|
55
55
|
```
|
|
56
|
-
zibby
|
|
56
|
+
zibby agent deploy <workflow-name>
|
|
57
57
|
```
|
|
58
|
-
Then `zibby
|
|
58
|
+
Then `zibby agent trigger <uuid>` and `zibby agent logs <uuid> -t` to verify.
|
|
59
59
|
|
|
60
60
|
## Common pitfalls
|
|
61
61
|
|
|
62
62
|
- **Node name must match the file name and `id`** — mismatches cause silent skip.
|
|
63
63
|
- **`ctx.agent` calls block on the LLM** — large prompts can take 30+ seconds. Stream output for visibility.
|
|
64
|
-
- **Don't import npm packages inside `run()`** — declare deps in `<
|
|
65
|
-
- **Failed nodes terminate the
|
|
64
|
+
- **Don't import npm packages inside `run()`** — declare deps in `<agent>/package.json`. The deploy bundler installs them.
|
|
65
|
+
- **Failed nodes terminate the agent** unless wrapped in try/catch and explicit `outputSchema.status: 'warn'`.
|
|
66
66
|
|
|
67
67
|
## When to consult the user vs proceed
|
|
68
68
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- zibby-template-version: 4 -->
|
|
2
|
-
# /zibby-debug — diagnose a failing or stuck Zibby
|
|
2
|
+
# /zibby-debug — diagnose a failing or stuck Zibby agent
|
|
3
3
|
|
|
4
|
-
You are helping the user debug
|
|
4
|
+
You are helping the user debug an agent that didn't behave as expected.
|
|
5
5
|
|
|
6
6
|
Canonical docs: **https://docs.zibby.app/workflows/debugging**
|
|
7
7
|
|
|
@@ -12,28 +12,28 @@ Apply in order. Stop at the first thing that explains the symptom.
|
|
|
12
12
|
### 1. Did the deploy succeed?
|
|
13
13
|
|
|
14
14
|
```
|
|
15
|
-
zibby
|
|
15
|
+
zibby agent list
|
|
16
16
|
```
|
|
17
|
-
Find the
|
|
17
|
+
Find the agent. If `bundleStatus` isn't `ready`, the deploy didn't finish. Re-run `zibby agent deploy <name> --verbose` and read the CodeBuild output.
|
|
18
18
|
|
|
19
19
|
### 2. Did the trigger reach ECS?
|
|
20
20
|
|
|
21
21
|
```
|
|
22
|
-
zibby
|
|
22
|
+
zibby agent trigger <uuid>
|
|
23
23
|
```
|
|
24
24
|
Look at the response — it should include a `Job ID` immediately. If you get an HTTP error, it's an auth or quota problem (CodeBuild concurrency, ECS task limit, etc.). Surface to the user.
|
|
25
25
|
|
|
26
26
|
### 3. Did the agent task START?
|
|
27
27
|
|
|
28
28
|
```
|
|
29
|
-
zibby
|
|
29
|
+
zibby agent logs <uuid> -t
|
|
30
30
|
```
|
|
31
31
|
Within 30s of the trigger you should see `[setup] Fetching bundle...` then `zibby v<version>`. If silence past 30s:
|
|
32
32
|
- Maybe ECS couldn't pull the image — check CloudWatch alarm `zibby-sse-fanout-no-task-prod`
|
|
33
33
|
- Maybe the task started but its log stream is delayed — wait another 30s
|
|
34
|
-
- Maybe the
|
|
34
|
+
- Maybe the agent row hasn't been written yet (rare — would only affect the very first second)
|
|
35
35
|
|
|
36
|
-
### 4. Did the
|
|
36
|
+
### 4. Did the agent execute the wrong path?
|
|
37
37
|
|
|
38
38
|
If the tail shows nodes running but in unexpected order, your `graph.mjs` edges are wrong. Common causes:
|
|
39
39
|
- Edge from `START` is missing — first node never runs
|
|
@@ -55,7 +55,7 @@ Look for `[fanout] hard timeout` in the SSE fan-out logs (sse-fanout container)
|
|
|
55
55
|
|
|
56
56
|
### 7. Are you seeing logs from a stale execution?
|
|
57
57
|
|
|
58
|
-
`-t` on
|
|
58
|
+
`-t` on an agent UUID auto-attaches to the **latest** existing execution at connect time, plus new ones triggered while it's open. If you're tailing an old failed run, drain it (Ctrl+C, re-run after triggering fresh).
|
|
59
59
|
|
|
60
60
|
## Quick reference: what each piece does
|
|
61
61
|
|
|
@@ -64,4 +64,4 @@ Look for `[fanout] hard timeout` in the SSE fan-out logs (sse-fanout container)
|
|
|
64
64
|
- **SSE fan-out** → polls CloudWatch, fans events out to subscribers (`-t` clients)
|
|
65
65
|
- **Status** → moves through `starting → running → completed/failed/error`
|
|
66
66
|
|
|
67
|
-
If `status` in DDB is wrong (e.g. stuck `running` after the task is gone), it's an upstream zombie — separate from any
|
|
67
|
+
If `status` in DDB is wrong (e.g. stuck `running` after the task is gone), it's an upstream zombie — separate from any agent logic issue.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
<!-- zibby-template-version: 4 -->
|
|
2
|
-
# /zibby-delete — delete a deployed Zibby
|
|
2
|
+
# /zibby-delete — delete a deployed Zibby agent
|
|
3
3
|
|
|
4
|
-
You are helping the user remove
|
|
4
|
+
You are helping the user remove an agent from Zibby Cloud.
|
|
5
5
|
|
|
6
|
-
**This is destructive.** It removes the
|
|
6
|
+
**This is destructive.** It removes the agent record, its bundle in S3, and its routing — but does NOT delete in-flight executions or their CloudWatch logs (those age out per their retention policy). New triggers against the deleted UUID will fail.
|
|
7
7
|
|
|
8
8
|
Canonical docs: **https://docs.zibby.app/workflows/lifecycle**
|
|
9
9
|
|
|
@@ -11,18 +11,18 @@ Canonical docs: **https://docs.zibby.app/workflows/lifecycle**
|
|
|
11
11
|
|
|
12
12
|
1. **Get the UUID.** If user gave a name, look it up:
|
|
13
13
|
```
|
|
14
|
-
Bash(zibby
|
|
14
|
+
Bash(zibby agent list)
|
|
15
15
|
```
|
|
16
16
|
Find the matching `name` and grab its `uuid`.
|
|
17
17
|
|
|
18
|
-
2. **Confirm with the user.** Always confirm before deleting — show them the
|
|
18
|
+
2. **Confirm with the user.** Always confirm before deleting — show them the agent's name, project, last-triggered timestamp. Don't proceed silently.
|
|
19
19
|
```
|
|
20
|
-
"Delete
|
|
20
|
+
"Delete agent 'pr-summarizer' (uuid abc-123, last run 2 days ago)? This cannot be undone."
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
3. **Run the delete:**
|
|
24
24
|
```
|
|
25
|
-
Bash(zibby
|
|
25
|
+
Bash(zibby agent delete <uuid>)
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
4. **Clean up local files** if the user wants. The local `.zibby/workflows/<name>/` folder isn't auto-deleted — ask before removing:
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
<!-- zibby-template-version: 4 -->
|
|
2
|
-
# /zibby-deploy — deploy a Zibby
|
|
2
|
+
# /zibby-deploy — deploy a Zibby agent to the cloud
|
|
3
3
|
|
|
4
|
-
You are helping the user deploy
|
|
4
|
+
You are helping the user deploy an agent they've been building locally.
|
|
5
5
|
|
|
6
|
-
## What `zibby
|
|
6
|
+
## What `zibby agent deploy` does
|
|
7
7
|
|
|
8
|
-
1. Bundles the
|
|
8
|
+
1. Bundles the agent's source (graph.mjs + nodes/ + package.json) into a tarball
|
|
9
9
|
2. Uploads it to S3 via a presigned URL
|
|
10
10
|
3. Triggers AWS CodeBuild to install deps + bake the bundle
|
|
11
11
|
4. Updates DynamoDB so future triggers run the new bundle
|
|
12
12
|
|
|
13
|
-
A successful deploy is required before `zibby
|
|
13
|
+
A successful deploy is required before `zibby agent trigger <uuid>` works against the cloud.
|
|
14
14
|
|
|
15
15
|
Canonical docs: **https://docs.zibby.app/workflows/deploying**
|
|
16
16
|
|
|
17
17
|
## Steps for this command
|
|
18
18
|
|
|
19
|
-
1. **Identify the
|
|
19
|
+
1. **Identify the agent.** If the user passes a name, use it. Otherwise list everything under `paths.workflows` (from `.zibby.config.mjs`) and ask.
|
|
20
20
|
|
|
21
|
-
2. **Pre-flight checks.** Read the
|
|
21
|
+
2. **Pre-flight checks.** Read the agent folder and confirm:
|
|
22
22
|
- `graph.mjs` exists and exports a graph
|
|
23
23
|
- `nodes/` has at least one node
|
|
24
24
|
- `workflow.json` is valid (must have `name`, `entryClass`, `triggers`)
|
|
@@ -26,62 +26,62 @@ Canonical docs: **https://docs.zibby.app/workflows/deploying**
|
|
|
26
26
|
|
|
27
27
|
3. **Run the deploy:**
|
|
28
28
|
```
|
|
29
|
-
zibby
|
|
29
|
+
zibby agent deploy <workflow-name>
|
|
30
30
|
```
|
|
31
31
|
This is interactive if `--project` isn't passed. The user picks a project, the CLI handles auth via the saved session token.
|
|
32
32
|
|
|
33
|
-
4. **Watch the build.** The CLI streams CodeBuild output. If it succeeds, it prints the
|
|
33
|
+
4. **Watch the build.** The CLI streams CodeBuild output. If it succeeds, it prints the agent's UUID. If it fails, the build logs show why — usually a missing dep in `package.json` or a syntax error in a node.
|
|
34
34
|
|
|
35
35
|
5. **Verify post-deploy:**
|
|
36
36
|
```
|
|
37
|
-
zibby
|
|
38
|
-
zibby
|
|
37
|
+
zibby agent trigger <uuid> --input '{}'
|
|
38
|
+
zibby agent logs <uuid> -t
|
|
39
39
|
```
|
|
40
|
-
Tail logs until the
|
|
40
|
+
Tail logs until the agent reaches `completed` (or `failed` — diagnose from logs).
|
|
41
41
|
|
|
42
42
|
## Common failure modes
|
|
43
43
|
|
|
44
44
|
- **Build fails with module-not-found** → node imports a package not in `package.json`. Add it and redeploy.
|
|
45
45
|
- **Build succeeds but trigger fails immediately** → `entryClass` in `workflow.json` doesn't match a class exported by `graph.mjs`.
|
|
46
|
-
- **
|
|
46
|
+
- **Agent runs but a node fails** → tail the live logs and read the error. Most are in the agent's prompt/output handling.
|
|
47
47
|
|
|
48
48
|
## Optional flags worth knowing
|
|
49
49
|
|
|
50
|
-
`zibby
|
|
50
|
+
`zibby agent deploy` accepts:
|
|
51
51
|
- `--project <id>` — skip the interactive project picker
|
|
52
52
|
- `--api-key <key>` — use a PAT instead of the session token (for CI)
|
|
53
|
-
- `--env <path>` — sync a `.env` file into per-
|
|
53
|
+
- `--env <path>` — sync a `.env` file into per-agent env vars after deploy. Repeatable; later files override.
|
|
54
54
|
- `--verbose` — print raw CodeBuild output during the build (helpful for debugging build failures)
|
|
55
55
|
|
|
56
|
-
### Seeding per-
|
|
56
|
+
### Seeding per-agent env on first deploy
|
|
57
57
|
|
|
58
|
-
If the
|
|
58
|
+
If the agent needs its own `ANTHROPIC_API_KEY`, `DATABASE_URL`, etc., put them in a `.env` and pass `--env`:
|
|
59
59
|
|
|
60
60
|
```
|
|
61
|
-
zibby
|
|
62
|
-
zibby
|
|
61
|
+
zibby agent deploy <name> --env .env
|
|
62
|
+
zibby agent deploy <name> --env .env --env .env.prod # later files win
|
|
63
63
|
```
|
|
64
64
|
|
|
65
|
-
After deploy, manage them surgically with `zibby
|
|
65
|
+
After deploy, manage them surgically with `zibby agent env set/unset/list/push <uuid>`. See `/zibby-list` to recover the UUID; full guide at https://docs.zibby.app/cloud/env-vars.
|
|
66
66
|
|
|
67
67
|
## Static outbound IP (dedicated egress)
|
|
68
68
|
|
|
69
|
-
If the user's
|
|
69
|
+
If the user's agent needs to call APIs that require IP allowlisting (corporate GitHub, GitLab Enterprise, paranoid SaaS firewalls), the agent needs the **dedicated egress IP** addon. The flag lives on the legacy alias `zibby deploy` (NOT `zibby agent deploy`):
|
|
70
70
|
|
|
71
71
|
| Flag | What it does |
|
|
72
72
|
|------|-------------|
|
|
73
73
|
| `zibby deploy <name> --dedicated-ip status` | Show current addon state for the account (active / inactive / billing) |
|
|
74
74
|
| `zibby deploy <name> --dedicated-ip enable` | Enable the addon on the account (Pro subscription required, ~$50/mo). One-time per account. |
|
|
75
|
-
| `zibby deploy <name> --dedicated-ip use` | Mark THIS
|
|
76
|
-
| `zibby deploy <name> --dedicated-ip unuse` | Stop routing this
|
|
75
|
+
| `zibby deploy <name> --dedicated-ip use` | Mark THIS agent as using the static egress IP (per-agent opt-in, after `enable`) |
|
|
76
|
+
| `zibby deploy <name> --dedicated-ip unuse` | Stop routing this agent through the static IP |
|
|
77
77
|
| `zibby deploy <name> --dedicated-ip disable` | Disable the addon for the whole account |
|
|
78
78
|
|
|
79
79
|
Typical first-time flow when the user says "I need a static outbound IP":
|
|
80
80
|
1. `zibby deploy <name> --dedicated-ip status` — check whether they have it
|
|
81
81
|
2. If inactive → `zibby deploy <name> --dedicated-ip enable` — enables the account-wide addon (interactive billing prompt; prerequisite Pro subscription)
|
|
82
|
-
3. `zibby deploy <name> --dedicated-ip use` — opts this specific
|
|
83
|
-
4. Regular `zibby
|
|
82
|
+
3. `zibby deploy <name> --dedicated-ip use` — opts this specific agent in
|
|
83
|
+
4. Regular `zibby agent deploy <name>` from now on uses the static IP
|
|
84
84
|
|
|
85
|
-
After `--dedicated-ip use`, every node in this
|
|
85
|
+
After `--dedicated-ip use`, every node in this agent gets its outbound HTTP routed through the egress proxy, and `process.env.HTTP_PROXY` / `HTTPS_PROXY` are set in the sandbox automatically. Their static IPs are visible to customers via `https://docs.zibby.app/workflows/egress`.
|
|
86
86
|
|
|
87
87
|
**Don't** run `--dedicated-ip enable` without confirming with the user — it has billing impact ($50/mo addon). Always confirm. See `/zibby-static-ip` for the deeper walkthrough.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- zibby-template-version: 4 -->
|
|
2
|
-
# /zibby-list — list
|
|
2
|
+
# /zibby-list — list agents (local + cloud) with their UUIDs and statuses
|
|
3
3
|
|
|
4
|
-
You are helping the user see what
|
|
4
|
+
You are helping the user see what agents exist — locally scaffolded and remotely deployed.
|
|
5
5
|
|
|
6
6
|
Canonical docs: **https://docs.zibby.app/cli-reference#workflow-list**
|
|
7
7
|
|
|
@@ -9,22 +9,22 @@ Canonical docs: **https://docs.zibby.app/cli-reference#workflow-list**
|
|
|
9
9
|
|
|
10
10
|
1. **Run the list command:**
|
|
11
11
|
```
|
|
12
|
-
Bash(zibby
|
|
12
|
+
Bash(zibby agent list)
|
|
13
13
|
```
|
|
14
|
-
This shows both local (in `.zibby/workflows/`) and remote (deployed to Zibby Cloud)
|
|
14
|
+
This shows both local (in `.zibby/workflows/`) and remote (deployed to Zibby Cloud) agents. Each row has: name, UUID, project, last triggered.
|
|
15
15
|
|
|
16
16
|
2. **Filter on demand.** If the user wants only local or only remote:
|
|
17
17
|
```
|
|
18
|
-
zibby
|
|
19
|
-
zibby
|
|
18
|
+
zibby agent list --local-only
|
|
19
|
+
zibby agent list --remote-only --project <id>
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
## When you'd use this
|
|
23
23
|
|
|
24
|
-
- User asks "what
|
|
24
|
+
- User asks "what agents do I have?" → run it, show the result.
|
|
25
25
|
- You need a UUID to pass into `/zibby-trigger`, `/zibby-tail`, `/zibby-delete` and the user only knows the name → run it, look up the UUID.
|
|
26
26
|
- After a deploy to confirm the bundle landed.
|
|
27
27
|
|
|
28
28
|
## Output expectations
|
|
29
29
|
|
|
30
|
-
The output is human-readable text (not JSON). If you need to extract a specific UUID programmatically, parse the line for the
|
|
30
|
+
The output is human-readable text (not JSON). If you need to extract a specific UUID programmatically, parse the line for the agent name. If the user has many agents, ask which one they want — don't grep blind.
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
<!-- zibby-template-version: 4 -->
|
|
2
|
-
# /zibby-static-ip — set up dedicated outbound static IP for
|
|
2
|
+
# /zibby-static-ip — set up dedicated outbound static IP for an agent
|
|
3
3
|
|
|
4
|
-
You are helping the user route
|
|
4
|
+
You are helping the user route an agent's outbound traffic through a static IP address — needed when the agent calls APIs that require IP allowlisting (corporate GitLab/GitHub Enterprise, internal SaaS, firewalls).
|
|
5
5
|
|
|
6
6
|
Canonical docs: **https://docs.zibby.app/workflows/egress**
|
|
7
7
|
|
|
8
|
-
> Note: the `--dedicated-ip` flag lives on the legacy alias `zibby deploy <name>`, NOT on `zibby
|
|
8
|
+
> Note: the `--dedicated-ip` flag lives on the legacy alias `zibby deploy <name>`, NOT on `zibby agent deploy <name>`. The two share a handler, but only `zibby deploy` exposes this flag in `--help`.
|
|
9
9
|
|
|
10
10
|
## What "static IP" means here
|
|
11
11
|
|
|
12
|
-
By default,
|
|
12
|
+
By default, agent tasks run on Fargate and their outbound traffic exits via AWS-managed IPs that rotate. With the **dedicated egress** addon enabled, the agent's outbound traffic is routed through a Zibby-managed proxy whose IP is pinned and customer-allowlistable.
|
|
13
13
|
|
|
14
14
|
Two pieces:
|
|
15
15
|
1. **Account-level addon** — `~$50/mo`, requires Pro subscription. One-time toggle per account.
|
|
16
|
-
2. **Per-
|
|
16
|
+
2. **Per-agent opt-in** — once the addon is on, each agent opts in individually (some agents might not need it, no point routing them).
|
|
17
17
|
|
|
18
18
|
## Steps
|
|
19
19
|
|
|
@@ -27,23 +27,23 @@ Two pieces:
|
|
|
27
27
|
```
|
|
28
28
|
Bash(zibby deploy <name> --dedicated-ip status)
|
|
29
29
|
```
|
|
30
|
-
Output tells you: addon active or inactive, this
|
|
30
|
+
Output tells you: addon active or inactive, this agent currently using it or not, and the assigned IPs to publish to customers.
|
|
31
31
|
|
|
32
32
|
3. **If addon is inactive — enable it** (only after explicit user confirmation):
|
|
33
33
|
```
|
|
34
34
|
Bash(zibby deploy <name> --dedicated-ip enable)
|
|
35
35
|
```
|
|
36
|
-
This is one-time per account. After this, the addon is active for ALL
|
|
36
|
+
This is one-time per account. After this, the addon is active for ALL agents in the account that opt in.
|
|
37
37
|
|
|
38
|
-
4. **Opt this
|
|
38
|
+
4. **Opt this agent in:**
|
|
39
39
|
```
|
|
40
40
|
Bash(zibby deploy <name> --dedicated-ip use)
|
|
41
41
|
```
|
|
42
|
-
From now on, every deploy of this
|
|
42
|
+
From now on, every deploy of this agent + every triggered execution routes outbound through the static IP.
|
|
43
43
|
|
|
44
|
-
5. **Re-deploy the
|
|
44
|
+
5. **Re-deploy the agent** so the runtime picks up the change:
|
|
45
45
|
```
|
|
46
|
-
Bash(zibby
|
|
46
|
+
Bash(zibby agent deploy <name>)
|
|
47
47
|
```
|
|
48
48
|
|
|
49
49
|
6. **Verify in a node** by adding a quick log:
|
|
@@ -54,7 +54,7 @@ Two pieces:
|
|
|
54
54
|
|
|
55
55
|
## Reverting
|
|
56
56
|
|
|
57
|
-
- `Bash(zibby deploy <name> --dedicated-ip unuse)` — stop routing this
|
|
57
|
+
- `Bash(zibby deploy <name> --dedicated-ip unuse)` — stop routing this agent's egress through the static IP. Other opted-in agents are unaffected.
|
|
58
58
|
- `Bash(zibby deploy <name> --dedicated-ip disable)` — disable the addon entirely (also stops billing).
|
|
59
59
|
|
|
60
60
|
## Tell the user the IPs
|
|
@@ -67,4 +67,4 @@ Outbound static IPs (allowlist these in the customer's firewall):
|
|
|
67
67
|
|
|
68
68
|
## Don't confuse with the inbound static IPs
|
|
69
69
|
|
|
70
|
-
This is OUTBOUND (
|
|
70
|
+
This is OUTBOUND (agent → external API). There's also an INBOUND static-IP set for `https://logs-stream.zibby.app` (the SSE log endpoint customers tail with `zibby agent logs -t`). That one is unrelated to this addon — see `https://docs.zibby.app/security/ip-allowlist`.
|