@zibby/skills 0.1.33 → 0.1.35
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/README.md +2 -0
- package/dist/browser.d.ts +19 -0
- package/dist/chat-memory.d.ts +355 -0
- package/dist/chat-notify.d.ts +409 -0
- package/dist/core-tools.d.ts +131 -0
- package/dist/function-skill.d.ts +149 -0
- package/dist/git.d.ts +72 -0
- package/dist/github.d.ts +777 -0
- package/dist/github.js +4 -3
- package/dist/gitlab.d.ts +396 -0
- package/dist/gitlab.js +19 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.js +145 -126
- package/dist/integrations.d.ts +110 -0
- package/dist/jira.d.ts +547 -0
- package/dist/lark.d.ts +161 -0
- package/dist/linear.d.ts +344 -0
- package/dist/llm-billing.d.ts +294 -0
- package/dist/memory.d.ts +137 -0
- package/dist/package.json +67 -17
- package/dist/plane.d.ts +24 -0
- package/dist/report.d.ts +354 -0
- package/dist/report.js +9 -9
- package/dist/sentry.d.ts +43 -0
- package/dist/skill-installer.d.ts +86 -0
- package/dist/slack.d.ts +284 -0
- package/dist/test-runner.d.ts +220 -0
- package/dist/trackers/github-adapter.d.ts +96 -0
- package/dist/trackers/github-adapter.js +4 -3
- package/dist/trackers/index.d.ts +27 -0
- package/dist/trackers/index.js +16 -15
- package/dist/trackers/jira-adapter.d.ts +90 -0
- package/dist/trackers/linear-adapter.d.ts +89 -0
- package/dist/trackers/plane-adapter.d.ts +101 -0
- package/dist/trackers/types.d.ts +335 -0
- package/dist/workflow-builder.d.ts +245 -0
- package/docs/apps/agent-ops.md +6 -6
- package/docs/apps/deploy.md +1 -1
- package/docs/apps/index.md +1 -1
- package/docs/apps/managing.md +1 -1
- package/docs/cli-reference.md +65 -65
- package/docs/cloning-repositories.md +9 -9
- package/docs/cloud/bundles.md +8 -8
- package/docs/cloud/dedicated-egress.md +6 -6
- package/docs/cloud/env-vars.md +29 -29
- package/docs/cloud/limits.md +11 -11
- package/docs/cloud/triggering.md +16 -16
- package/docs/concepts/agents.md +4 -4
- package/docs/concepts/sessions.md +7 -7
- package/docs/concepts/state.md +1 -1
- package/docs/concepts/sub-graphs.md +9 -9
- package/docs/get-started/deploy.md +14 -14
- package/docs/get-started/install.md +4 -4
- package/docs/get-started/run-locally.md +12 -12
- package/docs/get-started/trigger-and-logs.md +14 -14
- package/docs/get-started/use-from-agents.md +17 -17
- package/docs/get-started/your-first-workflow.md +8 -8
- package/docs/integrations/gitlab.md +1 -1
- package/docs/integrations/lark.md +2 -2
- package/docs/integrations/linear.md +1 -1
- package/docs/integrations/notion.md +2 -2
- package/docs/integrations/plane.md +1 -1
- package/docs/integrations/slack.md +1 -1
- package/docs/intro.md +4 -4
- package/docs/legacy/test-automation.md +2 -2
- package/docs/packages/cli.md +11 -11
- package/docs/packages/core.md +2 -2
- package/docs/packages/mcp-cli.md +18 -18
- package/docs/packages/skills.md +2 -2
- package/docs/packages/ui-memory.md +1 -1
- package/docs/recipes/bug-autofix.md +1 -1
- package/docs/recipes/index.md +3 -3
- package/docs/recipes/pipeline-supervisor.md +4 -4
- package/docs/recipes/sentry-triage.md +7 -7
- package/docs/recipes/test.md +6 -6
- package/docs/skills/browser.md +2 -2
- package/docs/skills/chat-memory.md +1 -1
- package/docs/skills/core-tools.md +1 -1
- package/docs/skills/function-skill.md +1 -1
- package/docs/skills/github.md +2 -2
- package/docs/skills/index.md +1 -1
- package/docs/skills/jira.md +1 -1
- package/docs/skills/lark.md +1 -1
- package/docs/skills/memory.md +2 -2
- package/docs/skills/sentry.md +1 -1
- package/docs/skills/slack.md +2 -2
- package/package.json +67 -17
|
@@ -3,13 +3,13 @@ sidebar_position: 8
|
|
|
3
3
|
title: Cloning Repositories
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Cloning Repositories in Custom
|
|
6
|
+
# Cloning Repositories in Custom Agents
|
|
7
7
|
|
|
8
|
-
Custom
|
|
8
|
+
Custom agents can clone your project's configured repositories (GitHub/GitLab) using the `cloneRepo()` helper function from `@zibby/core`.
|
|
9
9
|
|
|
10
10
|
## Overview
|
|
11
11
|
|
|
12
|
-
When your
|
|
12
|
+
When your agent runs in the cloud, it has access to:
|
|
13
13
|
- All repositories configured in your project settings (GitHub/GitLab)
|
|
14
14
|
- Authenticated tokens for cloning (injected securely by the platform)
|
|
15
15
|
- A clean isolated container environment
|
|
@@ -135,9 +135,9 @@ If a repository fails to clone, its value will be `null`:
|
|
|
135
135
|
}
|
|
136
136
|
```
|
|
137
137
|
|
|
138
|
-
## Complete Example
|
|
138
|
+
## Complete Example Agent
|
|
139
139
|
|
|
140
|
-
Here's a full
|
|
140
|
+
Here's a full agent that clones repos and runs analysis:
|
|
141
141
|
|
|
142
142
|
```javascript
|
|
143
143
|
// graph.mjs
|
|
@@ -224,11 +224,11 @@ Return a comprehensive security audit report.`;
|
|
|
224
224
|
## How It Works
|
|
225
225
|
|
|
226
226
|
1. **Project Configuration**: You configure repositories in your project settings (Web UI)
|
|
227
|
-
2. **Secure Token Injection**: When the
|
|
227
|
+
2. **Secure Token Injection**: When the agent runs, Zibby injects:
|
|
228
228
|
- `REPOS` env var (array of repo metadata with clone URLs)
|
|
229
229
|
- `GITHUB_TOKEN` and/or `GITLAB_TOKEN` (OAuth tokens for authentication)
|
|
230
230
|
3. **Authenticated Clone**: `cloneRepo()` constructs authenticated URLs and clones via `git clone`
|
|
231
|
-
4. **Isolation**: Each
|
|
231
|
+
4. **Isolation**: Each agent run gets a fresh container with no cached state
|
|
232
232
|
|
|
233
233
|
## Supported Platforms
|
|
234
234
|
|
|
@@ -269,7 +269,7 @@ Common failure reasons:
|
|
|
269
269
|
|
|
270
270
|
## Local Development
|
|
271
271
|
|
|
272
|
-
When running
|
|
272
|
+
When running agents locally (`zibby agent run`), you'll need to:
|
|
273
273
|
1. Set `REPOS` env var manually (JSON array)
|
|
274
274
|
2. Provide `GITHUB_TOKEN` or `GITLAB_TOKEN`
|
|
275
275
|
3. Ensure `git` is installed
|
|
@@ -279,7 +279,7 @@ Example for local testing:
|
|
|
279
279
|
```bash
|
|
280
280
|
export REPOS='[{"name":"myorg/backend","provider":"github","cloneUrl":"https://github.com/myorg/backend.git"}]'
|
|
281
281
|
export GITHUB_TOKEN="ghp_your_token"
|
|
282
|
-
zibby
|
|
282
|
+
zibby agent run my-agent
|
|
283
283
|
```
|
|
284
284
|
|
|
285
285
|
In production (cloud), these are injected automatically.
|
package/docs/cloud/bundles.md
CHANGED
|
@@ -5,12 +5,12 @@ title: Bundle build (Heroku-style)
|
|
|
5
5
|
|
|
6
6
|
# Bundle build
|
|
7
7
|
|
|
8
|
-
When you `zibby
|
|
8
|
+
When you `zibby agent deploy`, two things happen:
|
|
9
9
|
|
|
10
|
-
1. **Source upload** — your
|
|
10
|
+
1. **Source upload** — your agent folder (sources only, no `node_modules`) is sent to S3 via a presigned PUT URL. The CLI does this; the backend never has S3 IAM credentials for your account's bucket.
|
|
11
11
|
2. **Bundle build** — a CodeBuild job downloads the sources, runs `npm install --omit=dev`, packages a tarball, uploads it back to S3.
|
|
12
12
|
|
|
13
|
-
The tarball is what the cloud runtime downloads at trigger time. **No `npm install` happens at runtime** —
|
|
13
|
+
The tarball is what the cloud runtime downloads at trigger time. **No `npm install` happens at runtime** — agents boot in seconds regardless of dependency tree size.
|
|
14
14
|
|
|
15
15
|
## What's in the bundle
|
|
16
16
|
|
|
@@ -41,7 +41,7 @@ export default {
|
|
|
41
41
|
|
|
42
42
|
## Why this matters
|
|
43
43
|
|
|
44
|
-
Without bundling, every cloud trigger would run `npm install` inside the ECS task. For a typical
|
|
44
|
+
Without bundling, every cloud trigger would run `npm install` inside the ECS task. For a typical agent with `@zibby/core` + a few skills, that's 30–90 seconds per cold start. With the bundle:
|
|
45
45
|
|
|
46
46
|
```
|
|
47
47
|
trigger → tarball download (3s) → graph.run() → done
|
|
@@ -64,23 +64,23 @@ Pass `--verbose` (or set `ZIBBY_DEPLOY_VERBOSE=1`) to see the raw CodeBuild logs
|
|
|
64
64
|
|
|
65
65
|
## Re-deploys reuse the bundle path
|
|
66
66
|
|
|
67
|
-
The bundle URL is keyed by
|
|
67
|
+
The bundle URL is keyed by agent UUID — re-deploys overwrite the previous bundle. Old executions in flight finish against the *previous* bundle (no rug-pull) because each ECS task downloads the tarball at the moment it starts.
|
|
68
68
|
|
|
69
69
|
## Security model
|
|
70
70
|
|
|
71
71
|
The CodeBuild role has **zero S3 IAM permissions**. It receives presigned GET (for sources) and PUT (for bundle) URLs as build-time env vars. URLs are scoped to single keys, expire after 15 minutes.
|
|
72
72
|
|
|
73
|
-
This means a malicious `postinstall` script in
|
|
73
|
+
This means a malicious `postinstall` script in an agent's `package.json` can't escape its sandbox to read other customers' bundles or sources.
|
|
74
74
|
|
|
75
75
|
## Bundle size
|
|
76
76
|
|
|
77
77
|
Typical: 100–200 MB compressed. Mostly node_modules. The bundle includes everything `npm install --omit=dev` produces — runtime deps only, no dev deps.
|
|
78
78
|
|
|
79
|
-
To slim it: audit your
|
|
79
|
+
To slim it: audit your agent's `package.json` for unused deps, and prefer the lightest agent SDK that does the job.
|
|
80
80
|
|
|
81
81
|
## Source-fetch fallback
|
|
82
82
|
|
|
83
|
-
If the bundle is missing or fails to extract, the cloud runtime falls back to source-fetch + runtime `npm install`. Slower, but
|
|
83
|
+
If the bundle is missing or fails to extract, the cloud runtime falls back to source-fetch + runtime `npm install`. Slower, but agents still run. You'll see this in logs:
|
|
84
84
|
|
|
85
85
|
```
|
|
86
86
|
[setup] Bundle extract failed (...); falling back to source install
|
|
@@ -5,12 +5,12 @@ title: Dedicated egress IP
|
|
|
5
5
|
|
|
6
6
|
# Dedicated egress IP
|
|
7
7
|
|
|
8
|
-
By default, every Zibby
|
|
9
|
-
For most customers that's fine — but if your
|
|
8
|
+
By default, every Zibby agent exits via a random AWS IP that changes every run.
|
|
9
|
+
For most customers that's fine — but if your agent needs to talk to a service
|
|
10
10
|
behind a firewall (private GitLab, Salesforce, Oracle Cloud, internal API behind a
|
|
11
11
|
corporate VPN), the random-IP behavior makes it unusable.
|
|
12
12
|
|
|
13
|
-
The **dedicated egress IP** addon pins all your
|
|
13
|
+
The **dedicated egress IP** addon pins all your agent's outbound traffic to a
|
|
14
14
|
single static IP that you can whitelist once on the destination service.
|
|
15
15
|
|
|
16
16
|
## Pricing
|
|
@@ -34,11 +34,11 @@ single static IP that you can whitelist once on the destination service.
|
|
|
34
34
|
Internet (sees your static IP, e.g. 54.66.241.180)
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
Every outbound HTTPS call from your
|
|
37
|
+
Every outbound HTTPS call from your agent exits via your dedicated IP:
|
|
38
38
|
|
|
39
39
|
| What | Whether it tunnels |
|
|
40
40
|
|---|---|
|
|
41
|
-
| `fetch()` from
|
|
41
|
+
| `fetch()` from agent code | ✅ via static IP |
|
|
42
42
|
| `git clone` private repos | ✅ via static IP |
|
|
43
43
|
| `npm install` from private registries | ✅ via static IP |
|
|
44
44
|
| `curl` / `wget` in shell scripts | ✅ via static IP |
|
|
@@ -110,7 +110,7 @@ Your IP is **stable for as long as you have the addon enabled**:
|
|
|
110
110
|
|
|
111
111
|
- Survives Zibby infrastructure changes (we replace proxy boxes regularly)
|
|
112
112
|
- Survives our region failovers
|
|
113
|
-
- Survives your own
|
|
113
|
+
- Survives your own agent redeploys
|
|
114
114
|
|
|
115
115
|
The only way the IP changes is if **you** disable the addon, in which case the IP
|
|
116
116
|
is released back to AWS at the end of your billing period.
|
package/docs/cloud/env-vars.md
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
---
|
|
2
2
|
sidebar_position: 4
|
|
3
|
-
title: Per-
|
|
3
|
+
title: Per-agent env vars
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Per-
|
|
6
|
+
# Per-agent env vars
|
|
7
7
|
|
|
8
|
-
Each deployed
|
|
8
|
+
Each deployed agent has its own encrypted env-var bag. The cloud runtime injects those vars into the Fargate task that runs the agent — they show up in `process.env` like any other env var.
|
|
9
9
|
|
|
10
|
-
Use this for credentials that are **specific to one
|
|
10
|
+
Use this for credentials that are **specific to one agent** — different `ANTHROPIC_API_KEY` per agent, an agent-only `DATABASE_URL`, an external webhook secret. Project-wide secrets stay on the project record (set in dashboard); agent env wins on conflict.
|
|
11
11
|
|
|
12
12
|
## The fast path: `--env` at deploy
|
|
13
13
|
|
|
14
|
-
Most users want to ship a `.env` alongside the
|
|
14
|
+
Most users want to ship a `.env` alongside the agent:
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
|
-
zibby
|
|
17
|
+
zibby agent deploy my-agent --env .env
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
The CLI deploys the
|
|
20
|
+
The CLI deploys the agent as usual, then syncs the `.env` into per-agent env vars. You'll see:
|
|
21
21
|
|
|
22
22
|
```
|
|
23
|
-
✔ Deployed my-
|
|
23
|
+
✔ Deployed my-agent (v1)
|
|
24
24
|
✔ Bundle ready (78s)
|
|
25
25
|
✔ Synced 4 env vars from .env
|
|
26
26
|
```
|
|
@@ -28,21 +28,21 @@ The CLI deploys the workflow as usual, then syncs the `.env` into per-workflow e
|
|
|
28
28
|
Multiple files merge with later wins (mirrors how dotenv libraries usually layer):
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
zibby
|
|
31
|
+
zibby agent deploy my-agent --env .env --env .env.prod
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
## Manage after deploy: `zibby
|
|
34
|
+
## Manage after deploy: `zibby agent env`
|
|
35
35
|
|
|
36
|
-
Four verbs, all keyed by the
|
|
36
|
+
Four verbs, all keyed by the agent UUID (from `zibby agent list` or `.zibby-deploy.json`):
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
zibby
|
|
40
|
-
zibby
|
|
41
|
-
zibby
|
|
42
|
-
zibby
|
|
39
|
+
zibby agent env list <uuid> # show key names (no values)
|
|
40
|
+
zibby agent env set <uuid> ANTHROPIC_API_KEY=sk-… # add or rotate one
|
|
41
|
+
zibby agent env unset <uuid> OLD_KEY # remove one
|
|
42
|
+
zibby agent env push <uuid> --file .env [--file .env.prod] # bulk replace
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
`set` is for surgical updates — leaves every other key alone. `push` is the deploy-flow `--env` exposed as a standalone command for when you want to update env without redeploying the
|
|
45
|
+
`set` is for surgical updates — leaves every other key alone. `push` is the deploy-flow `--env` exposed as a standalone command for when you want to update env without redeploying the agent itself.
|
|
46
46
|
|
|
47
47
|
`list` only returns key names, never values. Once you set a value, the only place it surfaces is inside the running container.
|
|
48
48
|
|
|
@@ -50,19 +50,19 @@ zibby workflow env push <uuid> --file .env [--file .env.prod] # bulk replace
|
|
|
50
50
|
|
|
51
51
|
Rotate one key:
|
|
52
52
|
```bash
|
|
53
|
-
zibby
|
|
53
|
+
zibby agent env set 1a255ded-9f57-44ad-81cf-70726b13d653 ANTHROPIC_API_KEY=sk-ant-rotated
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
Wipe all env on
|
|
56
|
+
Wipe all env on an agent (push an empty file):
|
|
57
57
|
```bash
|
|
58
|
-
zibby
|
|
58
|
+
zibby agent env push <uuid> --file /dev/null
|
|
59
59
|
```
|
|
60
60
|
|
|
61
61
|
CI rotation (GitHub Actions):
|
|
62
62
|
```yaml
|
|
63
63
|
- run: |
|
|
64
64
|
echo "ANTHROPIC_API_KEY=$ANTHROPIC_KEY" > .env.cd
|
|
65
|
-
npx @zibby/cli
|
|
65
|
+
npx @zibby/cli agent env push $WORKFLOW_UUID --file .env.cd
|
|
66
66
|
env:
|
|
67
67
|
ANTHROPIC_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
|
|
68
68
|
WORKFLOW_UUID: ${{ vars.WORKFLOW_UUID }}
|
|
@@ -74,10 +74,10 @@ CI rotation (GitHub Actions):
|
|
|
74
74
|
When a Fargate task starts, env vars come from three layers (later wins):
|
|
75
75
|
|
|
76
76
|
```
|
|
77
|
-
built-in container vars → project secrets (DDB) →
|
|
77
|
+
built-in container vars → project secrets (DDB) → agent env (DDB)
|
|
78
78
|
```
|
|
79
79
|
|
|
80
|
-
So if both your project record and your
|
|
80
|
+
So if both your project record and your agent env define `ANTHROPIC_API_KEY`, the agent's value is what `process.env.ANTHROPIC_API_KEY` returns inside the run.
|
|
81
81
|
|
|
82
82
|
## Validation
|
|
83
83
|
|
|
@@ -87,11 +87,11 @@ So if both your project record and your workflow env define `ANTHROPIC_API_KEY`,
|
|
|
87
87
|
| Value | Any string. Empty string is allowed. |
|
|
88
88
|
| `.env` files | Standard dotenv syntax — comments, quoted values, blank lines, `KEY=value` per line. |
|
|
89
89
|
|
|
90
|
-
The CLI validates locally before the API round-trip, so `zibby
|
|
90
|
+
The CLI validates locally before the API round-trip, so `zibby agent env set <uuid> lowercase=v` fails fast with a readable message instead of a 400.
|
|
91
91
|
|
|
92
|
-
## Use case: multi-
|
|
92
|
+
## Use case: multi-vendor agents
|
|
93
93
|
|
|
94
|
-
Different nodes in the same
|
|
94
|
+
Different nodes in the same agent may want to call different model vendors:
|
|
95
95
|
|
|
96
96
|
```js
|
|
97
97
|
// graph.mjs
|
|
@@ -110,7 +110,7 @@ CURSOR_API_KEY=key_...
|
|
|
110
110
|
OPENAI_API_KEY=sk-...
|
|
111
111
|
EOF
|
|
112
112
|
|
|
113
|
-
zibby
|
|
113
|
+
zibby agent deploy multi-agent --env .env
|
|
114
114
|
```
|
|
115
115
|
|
|
116
116
|
Each agent reads its own env var when invoked. No prompt-stuffing keys, no per-node config.
|
|
@@ -118,13 +118,13 @@ Each agent reads its own env var when invoked. No prompt-stuffing keys, no per-n
|
|
|
118
118
|
## Security model
|
|
119
119
|
|
|
120
120
|
- **Encryption**: KMS envelope encryption with per-account keys. The plaintext never lands in CloudWatch, DDB, or Lambda logs.
|
|
121
|
-
- **Access control**: every env command needs project-level access on the
|
|
121
|
+
- **Access control**: every env command needs project-level access on the agent's project — checked on every request.
|
|
122
122
|
- **Audit**: KMS logs every decrypt operation. Cross-reference with `WORKFLOW_JOB_ID` to see exactly which run pulled which secret.
|
|
123
|
-
- **Rotation**: `zibby
|
|
123
|
+
- **Rotation**: `zibby agent env set` with a new value — the next triggered run picks it up. Currently in-flight runs keep using the value they decrypted at start time.
|
|
124
124
|
|
|
125
125
|
## What this is *not*
|
|
126
126
|
|
|
127
|
-
- **Not for the project's primary credentials** — those live on the project record (dashboard → Project → Secrets). Use
|
|
127
|
+
- **Not for the project's primary credentials** — those live on the project record (dashboard → Project → Secrets). Use agent env for *agent-specific* overrides.
|
|
128
128
|
- **Not a values-readable store** — `list` returns key names only. If you need to retrieve the value, you'll have to push it again. This is intentional.
|
|
129
129
|
- **Not 1Password / Vault** — no rotation policies, no version history. Plain CRUD.
|
|
130
130
|
|
package/docs/cloud/limits.md
CHANGED
|
@@ -5,24 +5,24 @@ title: Limits & quotas
|
|
|
5
5
|
|
|
6
6
|
# Limits & quotas
|
|
7
7
|
|
|
8
|
-
##
|
|
8
|
+
## Agent runtime cap
|
|
9
9
|
|
|
10
|
-
Every
|
|
10
|
+
Every agent execution has a **30-minute hard cap**. If an agent exceeds it, the
|
|
11
11
|
container is terminated with exit code `124` (timeout) and the execution is marked
|
|
12
12
|
`failed` with reason `TIMEOUT`.
|
|
13
13
|
|
|
14
14
|
Why this exists:
|
|
15
|
-
- Stops runaway
|
|
15
|
+
- Stops runaway agents (infinite loops, hung HTTP calls, stuck npm installs)
|
|
16
16
|
from burning unbounded compute
|
|
17
17
|
- Predictable per-execution cost ceiling
|
|
18
18
|
- Industry standard — GitHub Actions defaults to 6 hours, GitLab CI defaults to
|
|
19
19
|
1 hour, Vercel functions cap at 5 minutes. We picked 30 min as the sweet spot
|
|
20
|
-
for AI-driven
|
|
20
|
+
for AI-driven agents
|
|
21
21
|
|
|
22
|
-
If your
|
|
22
|
+
If your agent needs to run longer:
|
|
23
23
|
- Split it into multiple shorter executions chained via input/output
|
|
24
24
|
- Move long-running work (large npm installs, video processing) into your bundled
|
|
25
|
-
artifact at deploy time so the
|
|
25
|
+
artifact at deploy time so the agent itself stays short
|
|
26
26
|
- Contact us about a Pro tier with a longer cap
|
|
27
27
|
|
|
28
28
|
The cap is enforced **inside** the container by a watchdog timer set on startup,
|
|
@@ -43,7 +43,7 @@ marked failed.
|
|
|
43
43
|
|
|
44
44
|
## Container freedom (what you CAN do)
|
|
45
45
|
|
|
46
|
-
Inside your container, your
|
|
46
|
+
Inside your container, your agent has **full control**:
|
|
47
47
|
|
|
48
48
|
- Install any npm package (`npm install`, `pip install`, `apt install` if root)
|
|
49
49
|
- Run any shell command (`curl`, `git`, `docker`-in-docker not supported)
|
|
@@ -58,7 +58,7 @@ no side effects on Zibby infrastructure.
|
|
|
58
58
|
|
|
59
59
|
| Boundary | Why |
|
|
60
60
|
|---|---|
|
|
61
|
-
| Talk to other customers'
|
|
61
|
+
| Talk to other customers' agents | Each task is a separate isolated container |
|
|
62
62
|
| Use someone else's static IP | Only your account's IP is reachable from your task |
|
|
63
63
|
| Run beyond the 30-min cap | Watchdog kills the process |
|
|
64
64
|
| Read Zibby infra secrets | Container IAM role only sees your execution data |
|
|
@@ -66,7 +66,7 @@ no side effects on Zibby infrastructure.
|
|
|
66
66
|
|
|
67
67
|
## Outbound network
|
|
68
68
|
|
|
69
|
-
By default your
|
|
69
|
+
By default your agent exits via a random AWS IP that changes every run. If you
|
|
70
70
|
need a stable IP for whitelisting customer firewalls, see
|
|
71
71
|
[Dedicated egress IP](./dedicated-egress) ($50/mo addon).
|
|
72
72
|
|
|
@@ -74,8 +74,8 @@ need a stable IP for whitelisting customer firewalls, see
|
|
|
74
74
|
|
|
75
75
|
| Endpoint | Limit |
|
|
76
76
|
|---|---|
|
|
77
|
-
| Trigger
|
|
77
|
+
| Trigger agent | 60/min per account |
|
|
78
78
|
| Read logs | 600/min per account |
|
|
79
|
-
| Deploy
|
|
79
|
+
| Deploy agent | 30/hour per account |
|
|
80
80
|
|
|
81
81
|
Hitting a rate limit returns `429 Too Many Requests` with a `Retry-After` header.
|
package/docs/cloud/triggering.md
CHANGED
|
@@ -5,18 +5,18 @@ title: Triggering programmatically
|
|
|
5
5
|
|
|
6
6
|
# Triggering programmatically
|
|
7
7
|
|
|
8
|
-
The CLI is the public surface for triggering
|
|
8
|
+
The CLI is the public surface for triggering agents. CI runners, cron hosts, webhook handlers — all of them shell out to the same command:
|
|
9
9
|
|
|
10
10
|
```bash
|
|
11
|
-
zibby
|
|
12
|
-
zibby
|
|
13
|
-
zibby
|
|
14
|
-
zibby
|
|
11
|
+
zibby agent trigger <uuid>
|
|
12
|
+
zibby agent trigger <uuid> -p ticket=BUG-123
|
|
13
|
+
zibby agent trigger <uuid> --input '{"ticket":"BUG-123","priority":"high"}'
|
|
14
|
+
zibby agent trigger <uuid> --input-file payload.json
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
Auth: set `ZIBBY_API_KEY` in the environment, or run `zibby login` once on a workstation. Either works; the CLI picks up whichever is available.
|
|
18
18
|
|
|
19
|
-
The flag surface is identical to `zibby
|
|
19
|
+
The flag surface is identical to `zibby agent run` (local) — same `-p / --input / --input-file`, plus `--idempotency-key` for the cloud-only dedup case below. Flip the verb and the same call shape goes from local to remote.
|
|
20
20
|
|
|
21
21
|
### Input precedence
|
|
22
22
|
|
|
@@ -29,7 +29,7 @@ When more than one input source is provided, they merge with this **precedence (
|
|
|
29
29
|
This means the common pattern of "load a base payload from disk, override a few keys for this run" works without manual merging:
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
|
-
zibby
|
|
32
|
+
zibby agent trigger <uuid> --input-file payload.json -p priority=urgent
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
## CI / cron
|
|
@@ -39,10 +39,10 @@ Anywhere you can shell out, call the CLI. Don't hand-roll an HTTP client — you
|
|
|
39
39
|
### GitHub Actions
|
|
40
40
|
|
|
41
41
|
```yaml
|
|
42
|
-
- name: Trigger Zibby
|
|
42
|
+
- name: Trigger Zibby agent
|
|
43
43
|
run: |
|
|
44
44
|
npm i -g @zibby/cli
|
|
45
|
-
zibby
|
|
45
|
+
zibby agent trigger $WORKFLOW_UUID -p sha=$GITHUB_SHA -p pr=$PR_NUMBER
|
|
46
46
|
env:
|
|
47
47
|
WORKFLOW_UUID: 2b1ea07f-3ede-4bfd-a51d-431f0bab008e
|
|
48
48
|
ZIBBY_API_KEY: ${{ secrets.ZIBBY_API_KEY }}
|
|
@@ -61,7 +61,7 @@ jobs:
|
|
|
61
61
|
runs-on: ubuntu-latest
|
|
62
62
|
steps:
|
|
63
63
|
- run: npm i -g @zibby/cli
|
|
64
|
-
- run: zibby
|
|
64
|
+
- run: zibby agent trigger $UUID --input '{"weekly":true}'
|
|
65
65
|
env:
|
|
66
66
|
UUID: ${{ vars.WORKFLOW_UUID }}
|
|
67
67
|
ZIBBY_API_KEY: ${{ secrets.ZIBBY_API_KEY }}
|
|
@@ -79,7 +79,7 @@ app.post('/webhook', (req, res) => {
|
|
|
79
79
|
|
|
80
80
|
try {
|
|
81
81
|
execFileSync('zibby', [
|
|
82
|
-
'
|
|
82
|
+
'agent', 'trigger', process.env.WORKFLOW_UUID,
|
|
83
83
|
'--input', JSON.stringify(req.body),
|
|
84
84
|
'--idempotency-key', req.headers['x-event-id'],
|
|
85
85
|
], { env: process.env, stdio: 'pipe' });
|
|
@@ -97,7 +97,7 @@ If your runtime can't spawn a Node CLI (constrained Lambda layers, edge runtimes
|
|
|
97
97
|
Pass an idempotency key to deduplicate triggers within a 24-hour window:
|
|
98
98
|
|
|
99
99
|
```bash
|
|
100
|
-
zibby
|
|
100
|
+
zibby agent trigger <uuid> \
|
|
101
101
|
-p ticket=BUG-123 \
|
|
102
102
|
--idempotency-key webhook-2026-05-02-event-7
|
|
103
103
|
```
|
|
@@ -109,14 +109,14 @@ Same key + same input within 24h returns the original `jobId` instead of startin
|
|
|
109
109
|
After triggering, the CLI prints the `jobId`. To watch the execution:
|
|
110
110
|
|
|
111
111
|
```bash
|
|
112
|
-
zibby
|
|
112
|
+
zibby agent logs <uuid> -t
|
|
113
113
|
```
|
|
114
114
|
|
|
115
|
-
See [`
|
|
115
|
+
See [`agent logs` in the CLI Reference](../cli-reference#agent-logs).
|
|
116
116
|
|
|
117
|
-
## Per-
|
|
117
|
+
## Per-agent env vars
|
|
118
118
|
|
|
119
|
-
If your
|
|
119
|
+
If your agent needs credentials or config that's specific to it (different `ANTHROPIC_API_KEY` per agent, an agent-only `DATABASE_URL`, etc.), set them via the env-var API — see [Per-agent env vars](./env-vars). They get injected into the Fargate task at trigger time and override anything set on the project record.
|
|
120
120
|
|
|
121
121
|
## Quotas
|
|
122
122
|
|
package/docs/concepts/agents.md
CHANGED
|
@@ -92,7 +92,7 @@ Then a node can use it:
|
|
|
92
92
|
graph.addNode('plan', { prompt, outputSchema: Plan, agent: 'mine' });
|
|
93
93
|
```
|
|
94
94
|
|
|
95
|
-
The framework ships **zero** agent strategies bundled — `@zibby/agent-workflow` is BYO. The five built-ins above live in `@zibby/core`, which is what `zibby
|
|
95
|
+
The framework ships **zero** agent strategies bundled — `@zibby/agent-workflow` is BYO. The five built-ins above live in `@zibby/core`, which is what `zibby agent new` scaffolds and what the cloud runtime preloads.
|
|
96
96
|
|
|
97
97
|
## Authentication
|
|
98
98
|
|
|
@@ -106,7 +106,7 @@ The framework ships **zero** agent strategies bundled — `@zibby/agent-workflow
|
|
|
106
106
|
|
|
107
107
|
In Zibby Cloud, you have two options:
|
|
108
108
|
|
|
109
|
-
- **Project-wide credentials**: set once on the project record (dashboard → Project → Secrets) — every
|
|
110
|
-
- **Per-
|
|
109
|
+
- **Project-wide credentials**: set once on the project record (dashboard → Project → Secrets) — every agent in the project uses them.
|
|
110
|
+
- **Per-agent overrides**: set on a single agent via [`PUT /workflows/<uuid>/env`](../cloud/env-vars) — useful when one agent needs a different `ANTHROPIC_API_KEY` from the rest of the project, or when one agent needs to talk to multiple agent vendors with their own keys.
|
|
111
111
|
|
|
112
|
-
|
|
112
|
+
Agent env wins over project secrets on conflict (last-write-wins inside the Fargate task).
|
|
@@ -5,7 +5,7 @@ title: Sessions & artifacts
|
|
|
5
5
|
|
|
6
6
|
# Sessions & artifacts
|
|
7
7
|
|
|
8
|
-
Every
|
|
8
|
+
Every agent run — local or cloud — produces a **session folder** under `.zibby/output/sessions/<sessionId>/`. The folder is the canonical record of what happened.
|
|
9
9
|
|
|
10
10
|
## What's inside
|
|
11
11
|
|
|
@@ -31,7 +31,7 @@ Format: `<unix_ms>_<random>`. Generated when the graph starts running.
|
|
|
31
31
|
You can override via:
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
zibby
|
|
34
|
+
zibby agent run my-agent --session 1777678254943_ymcw
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
Useful for replay — re-run from a saved input/state without re-paying earlier nodes.
|
|
@@ -39,7 +39,7 @@ Useful for replay — re-run from a saved input/state without re-paying earlier
|
|
|
39
39
|
## Replay a session
|
|
40
40
|
|
|
41
41
|
```bash
|
|
42
|
-
zibby
|
|
42
|
+
zibby agent run my-agent \
|
|
43
43
|
--session 1777678254943_ymcw \
|
|
44
44
|
--node verify # only re-run the 'verify' node
|
|
45
45
|
```
|
|
@@ -48,19 +48,19 @@ The graph reads `state.plan` and `state.implement` from the saved session and on
|
|
|
48
48
|
|
|
49
49
|
## Cloud sessions
|
|
50
50
|
|
|
51
|
-
Cloud runs land in the same `.zibby/output/sessions/` layout, just inside the ECS container's `/workspace/`. The session folder is uploaded to S3 at the end of each run; `zibby
|
|
51
|
+
Cloud runs land in the same `.zibby/output/sessions/` layout, just inside the ECS container's `/workspace/`. The session folder is uploaded to S3 at the end of each run; `zibby agent logs <uuid> -t` streams CloudWatch logs in real time.
|
|
52
52
|
|
|
53
53
|
To download a finished cloud session locally:
|
|
54
54
|
|
|
55
55
|
```bash
|
|
56
|
-
zibby
|
|
56
|
+
zibby agent download <uuid>
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
-
This pulls the
|
|
59
|
+
This pulls the agent source (so you can edit and redeploy) plus the most recent execution's session folder.
|
|
60
60
|
|
|
61
61
|
## Studio integration
|
|
62
62
|
|
|
63
|
-
[Zibby Studio](https://zibby.app) is a desktop UI that watches `.zibby/output/sessions/`. Anything that writes a session folder shows up in Studio automatically — pin a session, watch state evolve live, or stop
|
|
63
|
+
[Zibby Studio](https://zibby.app) is a desktop UI that watches `.zibby/output/sessions/`. Anything that writes a session folder shows up in Studio automatically — pin a session, watch state evolve live, or stop an agent from the Stop button.
|
|
64
64
|
|
|
65
65
|
The protocol is documented and stable:
|
|
66
66
|
|
package/docs/concepts/state.md
CHANGED
|
@@ -5,7 +5,7 @@ title: State & schema
|
|
|
5
5
|
|
|
6
6
|
# State & schema
|
|
7
7
|
|
|
8
|
-
Every
|
|
8
|
+
Every agent run carries one **state** object that flows from node to node. State is the only handoff mechanism — there's no shared globals, no hidden context.
|
|
9
9
|
|
|
10
10
|
## Shape
|
|
11
11
|
|
|
@@ -5,13 +5,13 @@ title: Sub-graphs (parent → child)
|
|
|
5
5
|
|
|
6
6
|
# Sub-graphs
|
|
7
7
|
|
|
8
|
-
A **sub-graph node** runs another deployed
|
|
8
|
+
A **sub-graph node** runs another deployed agent as a child of the current one. Use it when a step is large enough to deserve its own workflow definition — its own state schema, its own version, its own activity-tab history — but you want a parent to dispatch it as part of a larger flow.
|
|
9
9
|
|
|
10
10
|
The shape is one extra field on the existing node config:
|
|
11
11
|
|
|
12
12
|
```js
|
|
13
13
|
g.addNode('audit', {
|
|
14
|
-
workflow: 'deep-audit', // ← name of another
|
|
14
|
+
workflow: 'deep-audit', // ← name of another agent in this project
|
|
15
15
|
});
|
|
16
16
|
```
|
|
17
17
|
|
|
@@ -22,7 +22,7 @@ That's it. No new imports, no UUID, no separate class. The engine recognizes `wo
|
|
|
22
22
|
| Scenario | Sub-graph? |
|
|
23
23
|
|---|---|
|
|
24
24
|
| Two parents need the same multi-node flow | ✅ Yes — define it once as a child, reference by name |
|
|
25
|
-
| One step needs different state schema than the rest | ✅ Yes — each
|
|
25
|
+
| One step needs different state schema than the rest | ✅ Yes — each agent has its own schema |
|
|
26
26
|
| You want per-step activity-tab history + replay | ✅ Yes — each child run gets its own row |
|
|
27
27
|
| Step is a single LLM call | ❌ No — just add a regular node |
|
|
28
28
|
| Step has its own retry policy | Either works, but a sub-graph gives independent control |
|
|
@@ -77,7 +77,7 @@ g.addNode('audit', {
|
|
|
77
77
|
|
|
78
78
|
## How state flows
|
|
79
79
|
|
|
80
|
-
Each
|
|
80
|
+
Each agent has its own state schema — they're independent. The parent must transform its state into the child's input shape, and (optionally) extract whatever it needs back out.
|
|
81
81
|
|
|
82
82
|
### A complete example — `parent-orchestrator` calls `child-doubler`
|
|
83
83
|
|
|
@@ -184,13 +184,13 @@ err.subgraphStatus // 'failed' | 'canceled' | 'timeout'
|
|
|
184
184
|
|
|
185
185
|
## What's deployed vs what you write
|
|
186
186
|
|
|
187
|
-
You only ever reference
|
|
187
|
+
You only ever reference agents by **name**. The cloud handles the UUID resolution.
|
|
188
188
|
|
|
189
189
|
| Stage | What you write | What the backend does |
|
|
190
190
|
|---|---|---|
|
|
191
|
-
| `zibby
|
|
191
|
+
| `zibby agent deploy child-doubler` | nothing about UUIDs | mints UUID, stores `(projectId, workflowType='child-doubler', uuid='…')` |
|
|
192
192
|
| `subgraph('child-doubler')` in parent code | just the name | stored as a string in the parent's graph definition |
|
|
193
|
-
| `zibby
|
|
193
|
+
| `zibby agent deploy parent-orchestrator` | nothing | looks up `'child-doubler'` → UUID, snapshots the dependency |
|
|
194
194
|
| Parent runs in Fargate → hits sub-graph node | nothing | POSTs to `/workflows/<uuid>/trigger` with `parentExecutionId` |
|
|
195
195
|
|
|
196
196
|
Names are unique per project (DDB primary key enforces this), so `subgraph('child-doubler')` resolves unambiguously within the parent's project.
|
|
@@ -208,14 +208,14 @@ Each child execution row carries `parentExecutionId` pointing at the parent. The
|
|
|
208
208
|
|
|
209
209
|
Sub-graph dispatch needs the `PROGRESS_API_URL` env var (the public API base). That's set automatically on Fargate runs. For local dev, you have two options:
|
|
210
210
|
|
|
211
|
-
1. **Deploy both
|
|
211
|
+
1. **Deploy both agents to cloud, then trigger the parent.** The cloud path always works.
|
|
212
212
|
2. **Mock the trigger + status endpoints locally.** See [`workflows/parent-orchestrator/mock-server.mjs`](https://github.com/ZibbyHQ/agent-workflow/tree/main/examples) in the agent-workflow repo for a 90-line example that simulates the dispatch + poll loop.
|
|
213
213
|
|
|
214
214
|
In-process sub-graph execution (running the child in the parent's Node process directly, no HTTP) is **not supported** — we picked consistency between local and cloud over the 10s spawn-time savings.
|
|
215
215
|
|
|
216
216
|
## Cross-project sub-graphs
|
|
217
217
|
|
|
218
|
-
`workflow: 'name'` resolves within the parent's own project. To call another project's
|
|
218
|
+
`workflow: 'name'` resolves within the parent's own project. To call another project's agent, pass an explicit project ID:
|
|
219
219
|
|
|
220
220
|
```js
|
|
221
221
|
g.addNode('audit', {
|