@zibby/skills 0.2.22 → 0.2.24
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/browser.js +3 -10
- package/dist/code-scan.d.ts +1 -1
- package/dist/index.js +81 -88
- package/dist/jira.d.ts +75 -9
- package/dist/jira.js +4 -4
- package/dist/package.json +1 -1
- package/dist/report.d.ts +51 -276
- package/dist/trackers/index.js +12 -12
- package/dist/trackers/jira-adapter.js +11 -11
- package/package.json +1 -1
- package/docs/analysis.md +0 -109
- package/docs/apps/agent-ops.md +0 -130
- package/docs/apps/auth.md +0 -158
- package/docs/apps/deploy.md +0 -207
- package/docs/apps/goal-mode.md +0 -175
- package/docs/apps/index.md +0 -149
- package/docs/apps/managing.md +0 -121
- package/docs/cli-reference.md +0 -494
- package/docs/cloning-repositories.md +0 -285
- package/docs/cloud/bundles.md +0 -92
- package/docs/cloud/dedicated-egress.md +0 -140
- package/docs/cloud/editing-prompts.md +0 -79
- package/docs/cloud/env-vars.md +0 -144
- package/docs/cloud/limits.md +0 -81
- package/docs/cloud/logs.md +0 -104
- package/docs/cloud/triggering.md +0 -128
- package/docs/concepts/agents.md +0 -112
- package/docs/concepts/designing-agents.md +0 -247
- package/docs/concepts/graph.md +0 -83
- package/docs/concepts/sessions.md +0 -70
- package/docs/concepts/skills.md +0 -86
- package/docs/concepts/state.md +0 -106
- package/docs/concepts/sub-graphs.md +0 -227
- package/docs/custom-workflows.md +0 -358
- package/docs/get-started/deploy.md +0 -75
- package/docs/get-started/install.md +0 -60
- package/docs/get-started/run-locally.md +0 -94
- package/docs/get-started/trigger-and-logs.md +0 -90
- package/docs/get-started/use-from-agents.md +0 -153
- package/docs/get-started/your-first-workflow.md +0 -69
- package/docs/getting-started.md +0 -108
- package/docs/installation.md +0 -127
- package/docs/integrations/github.md +0 -73
- package/docs/integrations/gitlab.md +0 -43
- package/docs/integrations/jira.md +0 -71
- package/docs/integrations/lark.md +0 -41
- package/docs/integrations/linear.md +0 -43
- package/docs/integrations/notion.md +0 -33
- package/docs/integrations/plane.md +0 -46
- package/docs/integrations/sentry.md +0 -42
- package/docs/integrations/slack.md +0 -33
- package/docs/intro.md +0 -86
- package/docs/legacy/test-automation.md +0 -111
- package/docs/packages/agent-workflow.md +0 -88
- package/docs/packages/cli.md +0 -73
- package/docs/packages/core.md +0 -72
- package/docs/packages/mcp-browser.md +0 -110
- package/docs/packages/mcp-cli.md +0 -176
- package/docs/packages/memory.md +0 -223
- package/docs/packages/skills.md +0 -218
- package/docs/packages/ui-memory.md +0 -245
- package/docs/recipes/bug-autofix.md +0 -85
- package/docs/recipes/github-ai-scout.md +0 -61
- package/docs/recipes/index.md +0 -68
- package/docs/recipes/pipeline-supervisor.md +0 -57
- package/docs/recipes/sentry-triage.md +0 -93
- package/docs/recipes/test.md +0 -190
- package/docs/reviewing-results.md +0 -114
- package/docs/running-tests.md +0 -134
- package/docs/self-host/backup-restore.md +0 -53
- package/docs/self-host/custom-sidecars.md +0 -136
- package/docs/self-host/index.md +0 -75
- package/docs/self-host/storage.md +0 -50
- package/docs/self-host/troubleshooting.md +0 -48
- package/docs/self-host/upgrade.md +0 -81
- package/docs/skills/browser.md +0 -97
- package/docs/skills/chat-memory.md +0 -122
- package/docs/skills/core-tools.md +0 -80
- package/docs/skills/function-skill.md +0 -93
- package/docs/skills/github.md +0 -91
- package/docs/skills/index.md +0 -46
- package/docs/skills/jira.md +0 -99
- package/docs/skills/lark.md +0 -85
- package/docs/skills/memory.md +0 -92
- package/docs/skills/sentry.md +0 -80
- package/docs/skills/slack.md +0 -89
- package/docs/tests/memory.md +0 -131
- package/docs/triggering-workflows.md +0 -552
- package/docs/workflow-artifact-layout-evaluation.md +0 -119
- package/docs/workflow.md +0 -558
|
@@ -1,285 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 8
|
|
3
|
-
title: Cloning Repositories
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Cloning Repositories in Custom Agents
|
|
7
|
-
|
|
8
|
-
Custom agents can clone your project's configured repositories (GitHub/GitLab) using the `cloneRepo()` helper function from `@zibby/core`.
|
|
9
|
-
|
|
10
|
-
## Overview
|
|
11
|
-
|
|
12
|
-
When your agent runs in the cloud, it has access to:
|
|
13
|
-
- All repositories configured in your project settings (GitHub/GitLab)
|
|
14
|
-
- Authenticated tokens for cloning (injected securely by the platform)
|
|
15
|
-
- A clean isolated container environment
|
|
16
|
-
|
|
17
|
-
The `cloneRepo()` function handles authentication, supports multiple repos, and works with both GitHub.com and self-hosted GitLab instances.
|
|
18
|
-
|
|
19
|
-
## Basic Usage
|
|
20
|
-
|
|
21
|
-
### Clone All Repositories
|
|
22
|
-
|
|
23
|
-
By default, `cloneRepo()` clones all repositories configured for your project:
|
|
24
|
-
|
|
25
|
-
```javascript
|
|
26
|
-
// nodes/setup.mjs
|
|
27
|
-
import { cloneRepo, z } from '@zibby/core';
|
|
28
|
-
|
|
29
|
-
const SetupOutputSchema = z.object({
|
|
30
|
-
repoPaths: z.record(z.string()),
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
export const setupNode = {
|
|
34
|
-
name: 'setup',
|
|
35
|
-
|
|
36
|
-
async preProcess(state) {
|
|
37
|
-
// Clone all repos
|
|
38
|
-
const repoPaths = await cloneRepo();
|
|
39
|
-
|
|
40
|
-
// repoPaths = {
|
|
41
|
-
// 'myorg/backend': '/workspace/repos/myorg-backend',
|
|
42
|
-
// 'myorg/frontend': '/workspace/repos/myorg-frontend'
|
|
43
|
-
// }
|
|
44
|
-
|
|
45
|
-
return { repoPaths };
|
|
46
|
-
},
|
|
47
|
-
|
|
48
|
-
prompt: (state) => `Repositories cloned:
|
|
49
|
-
${JSON.stringify(state.setup.repoPaths, null, 2)}
|
|
50
|
-
|
|
51
|
-
Ready to analyze the codebase.`,
|
|
52
|
-
|
|
53
|
-
outputSchema: SetupOutputSchema,
|
|
54
|
-
};
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### Clone Specific Repositories
|
|
58
|
-
|
|
59
|
-
If you only need certain repositories:
|
|
60
|
-
|
|
61
|
-
```javascript
|
|
62
|
-
// Clone only backend repo
|
|
63
|
-
const repoPaths = await cloneRepo({
|
|
64
|
-
repos: ['myorg/backend']
|
|
65
|
-
});
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
### Using Cloned Repositories
|
|
69
|
-
|
|
70
|
-
Access the cloned code via the returned paths:
|
|
71
|
-
|
|
72
|
-
```javascript
|
|
73
|
-
// nodes/analyze.mjs
|
|
74
|
-
import { z } from '@zibby/core';
|
|
75
|
-
|
|
76
|
-
const AnalyzeOutputSchema = z.object({
|
|
77
|
-
summary: z.string(),
|
|
78
|
-
files: z.array(z.string()),
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
export const analyzeNode = {
|
|
82
|
-
name: 'analyze',
|
|
83
|
-
|
|
84
|
-
prompt: (state) => `Analyze the codebase.
|
|
85
|
-
|
|
86
|
-
Repositories are cloned at:
|
|
87
|
-
${JSON.stringify(state.setup.repoPaths, null, 2)}
|
|
88
|
-
|
|
89
|
-
Use the Shell tool to:
|
|
90
|
-
1. List files in the repos (e.g., ls ${Object.values(state.setup.repoPaths)[0]})
|
|
91
|
-
2. Read important files (e.g., cat ${Object.values(state.setup.repoPaths)[0]}/README.md)
|
|
92
|
-
3. Run analysis commands (e.g., cd ${Object.values(state.setup.repoPaths)[0]} && npm audit)
|
|
93
|
-
|
|
94
|
-
Return a summary and list of key files.`,
|
|
95
|
-
|
|
96
|
-
outputSchema: AnalyzeOutputSchema,
|
|
97
|
-
};
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
## Configuration Options
|
|
101
|
-
|
|
102
|
-
```javascript
|
|
103
|
-
await cloneRepo({
|
|
104
|
-
// Clone specific repos only (default: all repos)
|
|
105
|
-
repos: ['myorg/backend', 'myorg/frontend'],
|
|
106
|
-
|
|
107
|
-
// Base directory for cloned repos (default: '/workspace/repos')
|
|
108
|
-
baseDir: '/workspace/repos',
|
|
109
|
-
|
|
110
|
-
// Clone depth - 1 for shallow clone, 0 for full history (default: 1)
|
|
111
|
-
depth: 1,
|
|
112
|
-
|
|
113
|
-
// Specific branch to clone (default: repo's default branch)
|
|
114
|
-
branch: 'develop',
|
|
115
|
-
});
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
## Return Value
|
|
119
|
-
|
|
120
|
-
`cloneRepo()` returns an object mapping repository names to their cloned paths:
|
|
121
|
-
|
|
122
|
-
```javascript
|
|
123
|
-
{
|
|
124
|
-
'myorg/backend': '/workspace/repos/myorg-backend',
|
|
125
|
-
'myorg/frontend': '/workspace/repos/myorg-frontend'
|
|
126
|
-
}
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
If a repository fails to clone, its value will be `null`:
|
|
130
|
-
|
|
131
|
-
```javascript
|
|
132
|
-
{
|
|
133
|
-
'myorg/backend': '/workspace/repos/myorg-backend',
|
|
134
|
-
'myorg/broken-repo': null // Failed to clone
|
|
135
|
-
}
|
|
136
|
-
```
|
|
137
|
-
|
|
138
|
-
## Complete Example Agent
|
|
139
|
-
|
|
140
|
-
Here's a full agent that clones repos and runs analysis:
|
|
141
|
-
|
|
142
|
-
```javascript
|
|
143
|
-
// graph.mjs
|
|
144
|
-
import { WorkflowAgent, WorkflowGraph } from '@zibby/core';
|
|
145
|
-
import { setupNode, analyzeNode, reportNode } from './nodes/index.mjs';
|
|
146
|
-
|
|
147
|
-
export class CodeAuditWorkflow extends WorkflowAgent {
|
|
148
|
-
buildGraph() {
|
|
149
|
-
const graph = new WorkflowGraph();
|
|
150
|
-
|
|
151
|
-
graph.addNode('setup', setupNode);
|
|
152
|
-
graph.addNode('analyze', analyzeNode);
|
|
153
|
-
graph.addNode('report', reportNode);
|
|
154
|
-
|
|
155
|
-
graph.setEntryPoint('setup');
|
|
156
|
-
graph.addEdge('setup', 'analyze');
|
|
157
|
-
graph.addEdge('analyze', 'report');
|
|
158
|
-
graph.addEdge('report', 'END');
|
|
159
|
-
|
|
160
|
-
return graph;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
```javascript
|
|
166
|
-
// nodes/setup.mjs
|
|
167
|
-
import { cloneRepo, z } from '@zibby/core';
|
|
168
|
-
|
|
169
|
-
export const setupNode = {
|
|
170
|
-
name: 'setup',
|
|
171
|
-
|
|
172
|
-
async preProcess(state) {
|
|
173
|
-
console.log('Cloning repositories...');
|
|
174
|
-
const repoPaths = await cloneRepo();
|
|
175
|
-
console.log('Cloned:', Object.keys(repoPaths).length, 'repositories');
|
|
176
|
-
return { repoPaths };
|
|
177
|
-
},
|
|
178
|
-
|
|
179
|
-
prompt: () => 'Repositories cloned successfully. Ready for analysis.',
|
|
180
|
-
|
|
181
|
-
outputSchema: z.object({
|
|
182
|
-
ready: z.boolean().default(true),
|
|
183
|
-
}),
|
|
184
|
-
};
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
```javascript
|
|
188
|
-
// nodes/analyze.mjs
|
|
189
|
-
import { z } from '@zibby/core';
|
|
190
|
-
|
|
191
|
-
export const analyzeNode = {
|
|
192
|
-
name: 'analyze',
|
|
193
|
-
|
|
194
|
-
prompt: (state) => {
|
|
195
|
-
const repoList = Object.entries(state.setup.repoPaths)
|
|
196
|
-
.map(([name, path]) => `- ${name}: ${path}`)
|
|
197
|
-
.join('\\n');
|
|
198
|
-
|
|
199
|
-
return `Analyze all cloned repositories for security issues.
|
|
200
|
-
|
|
201
|
-
Cloned repositories:
|
|
202
|
-
${repoList}
|
|
203
|
-
|
|
204
|
-
For each repository, use the Shell tool to:
|
|
205
|
-
1. Check for dependencies with known vulnerabilities (npm audit, pip check, etc.)
|
|
206
|
-
2. Search for common security issues (hardcoded secrets, SQL injection patterns, etc.)
|
|
207
|
-
3. Review package.json/requirements.txt for outdated dependencies
|
|
208
|
-
|
|
209
|
-
Return a comprehensive security audit report.`;
|
|
210
|
-
},
|
|
211
|
-
|
|
212
|
-
outputSchema: z.object({
|
|
213
|
-
findings: z.array(z.object({
|
|
214
|
-
severity: z.enum(['low', 'medium', 'high', 'critical']),
|
|
215
|
-
repo: z.string(),
|
|
216
|
-
description: z.string(),
|
|
217
|
-
file: z.string().optional(),
|
|
218
|
-
})),
|
|
219
|
-
summary: z.string(),
|
|
220
|
-
}),
|
|
221
|
-
};
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
## How It Works
|
|
225
|
-
|
|
226
|
-
1. **Project Configuration**: You configure repositories in your project settings (Web UI)
|
|
227
|
-
2. **Secure Token Injection**: When the agent runs, Zibby injects:
|
|
228
|
-
- `REPOS` env var (array of repo metadata with clone URLs)
|
|
229
|
-
- `GITHUB_TOKEN` and/or `GITLAB_TOKEN` (OAuth tokens for authentication)
|
|
230
|
-
3. **Authenticated Clone**: `cloneRepo()` constructs authenticated URLs and clones via `git clone`
|
|
231
|
-
4. **Isolation**: Each agent run gets a fresh container with no cached state
|
|
232
|
-
|
|
233
|
-
## Supported Platforms
|
|
234
|
-
|
|
235
|
-
- **GitHub** (github.com)
|
|
236
|
-
- **GitLab** (gitlab.com)
|
|
237
|
-
- **Self-hosted GitLab** (custom instance URLs from project settings)
|
|
238
|
-
|
|
239
|
-
## Error Handling
|
|
240
|
-
|
|
241
|
-
`cloneRepo()` is resilient to failures:
|
|
242
|
-
|
|
243
|
-
```javascript
|
|
244
|
-
const repoPaths = await cloneRepo();
|
|
245
|
-
|
|
246
|
-
// Check for failures
|
|
247
|
-
for (const [repo, path] of Object.entries(repoPaths)) {
|
|
248
|
-
if (path === null) {
|
|
249
|
-
console.error(`Failed to clone ${repo}`);
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
// Continue with successfully cloned repos
|
|
254
|
-
const successfulRepos = Object.entries(repoPaths)
|
|
255
|
-
.filter(([_, path]) => path !== null);
|
|
256
|
-
```
|
|
257
|
-
|
|
258
|
-
Common failure reasons:
|
|
259
|
-
- Missing/expired authentication tokens
|
|
260
|
-
- Repository doesn't exist or access denied
|
|
261
|
-
- Network issues
|
|
262
|
-
- Invalid clone URL
|
|
263
|
-
|
|
264
|
-
## Performance Tips
|
|
265
|
-
|
|
266
|
-
1. **Shallow Clones**: Use `depth: 1` (default) for faster cloning
|
|
267
|
-
2. **Specific Repos**: Only clone repos you need via the `repos` option
|
|
268
|
-
3. **Parallel Execution**: `cloneRepo()` clones all repos in parallel automatically
|
|
269
|
-
|
|
270
|
-
## Local Development
|
|
271
|
-
|
|
272
|
-
When running agents locally (`zibby agent run`), you'll need to:
|
|
273
|
-
1. Set `REPOS` env var manually (JSON array)
|
|
274
|
-
2. Provide `GITHUB_TOKEN` or `GITLAB_TOKEN`
|
|
275
|
-
3. Ensure `git` is installed
|
|
276
|
-
|
|
277
|
-
Example for local testing:
|
|
278
|
-
|
|
279
|
-
```bash
|
|
280
|
-
export REPOS='[{"name":"myorg/backend","provider":"github","cloneUrl":"https://github.com/myorg/backend.git"}]'
|
|
281
|
-
export GITHUB_TOKEN="ghp_your_token"
|
|
282
|
-
zibby agent run my-agent
|
|
283
|
-
```
|
|
284
|
-
|
|
285
|
-
In production (cloud), these are injected automatically.
|
package/docs/cloud/bundles.md
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 3
|
|
3
|
-
title: Bundle build (Heroku-style)
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Bundle build
|
|
7
|
-
|
|
8
|
-
When you `zibby agent deploy`, two things happen:
|
|
9
|
-
|
|
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
|
-
2. **Bundle build** — a CodeBuild job downloads the sources, runs `npm install --omit=dev`, packages a tarball, uploads it back to S3.
|
|
12
|
-
|
|
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
|
-
|
|
15
|
-
## What's in the bundle
|
|
16
|
-
|
|
17
|
-
The CLI uploads:
|
|
18
|
-
|
|
19
|
-
| File | Source | What it does |
|
|
20
|
-
|---|---|---|
|
|
21
|
-
| `graph.mjs` | `.zibby/workflows/<name>/graph.mjs` | The workflow definition. Required. |
|
|
22
|
-
| `nodes/*.mjs` | `.zibby/workflows/<name>/nodes/` | Per-node logic. Optional. |
|
|
23
|
-
| `workflow.json` | `.zibby/workflows/<name>/workflow.json` | Manifest (entry class, triggers). Optional. |
|
|
24
|
-
| `package.json` + `package-lock.json` | `.zibby/workflows/<name>/` | Dependency resolution. Required when graph.mjs imports `@zibby/*`. |
|
|
25
|
-
| `zibby.config.json` | resolved from `.zibby.config.mjs` at project root | Your config (`agent`, `models`, `browser`, …) serialized to JSON. Optional. |
|
|
26
|
-
|
|
27
|
-
`zibby.config.json` is **resolved locally at deploy time** — the CLI imports your `.zibby.config.mjs`, runs any expressions in it (e.g. `process.env.X`), then `JSON.stringify`s the result. The cloud never executes user JS to load config; it just reads the JSON. Function values are dropped silently — config is data, not code.
|
|
28
|
-
|
|
29
|
-
This is what makes per-node `models` overrides actually work in cloud:
|
|
30
|
-
|
|
31
|
-
```js
|
|
32
|
-
// .zibby.config.mjs
|
|
33
|
-
export default {
|
|
34
|
-
agent: { cursor: { model: 'auto' } },
|
|
35
|
-
models: {
|
|
36
|
-
default: 'auto',
|
|
37
|
-
execute_live: 'claude-opus-4.6', // overrides JUST the execute_live node
|
|
38
|
-
},
|
|
39
|
-
};
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## Why this matters
|
|
43
|
-
|
|
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
|
-
|
|
46
|
-
```
|
|
47
|
-
trigger → tarball download (3s) → graph.run() → done
|
|
48
|
-
```
|
|
49
|
-
|
|
50
|
-
3-second cold start instead of 60.
|
|
51
|
-
|
|
52
|
-
## Spinner output
|
|
53
|
-
|
|
54
|
-
```
|
|
55
|
-
⠋ Building bundle on Zibby Cloud... (provisioning) — 14s
|
|
56
|
-
⠙ Building bundle on Zibby Cloud... [1/4] Downloading sources — 22s
|
|
57
|
-
⠹ Building bundle on Zibby Cloud... [2/4] Materializing source files — 24s
|
|
58
|
-
⠸ Building bundle on Zibby Cloud... [3/4] Installing dependencies — 32s
|
|
59
|
-
⠴ Building bundle on Zibby Cloud... [4/4] Packaging bundle — 56s
|
|
60
|
-
✔ Bundle ready (78s) — runtime npm install eliminated
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
Pass `--verbose` (or set `ZIBBY_DEPLOY_VERBOSE=1`) to see the raw CodeBuild logs.
|
|
64
|
-
|
|
65
|
-
## Re-deploys reuse the bundle path
|
|
66
|
-
|
|
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
|
-
|
|
69
|
-
## Security model
|
|
70
|
-
|
|
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
|
-
|
|
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
|
-
|
|
75
|
-
## Bundle size
|
|
76
|
-
|
|
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
|
-
|
|
79
|
-
To slim it: audit your agent's `package.json` for unused deps, and prefer the lightest agent SDK that does the job.
|
|
80
|
-
|
|
81
|
-
## Source-fetch fallback
|
|
82
|
-
|
|
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
|
-
|
|
85
|
-
```
|
|
86
|
-
[setup] Bundle extract failed (...); falling back to source install
|
|
87
|
-
[setup] Workflow v3 — 6 source files
|
|
88
|
-
[setup] Wrote 6 files
|
|
89
|
-
[setup] Installing dependencies...
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
The fallback exists so a deploy that never produced a bundle (e.g. CodeBuild job hadn't completed yet) still works.
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 5
|
|
3
|
-
title: Dedicated egress IP
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Dedicated egress IP
|
|
7
|
-
|
|
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
|
-
behind a firewall (private GitLab, Salesforce, Oracle Cloud, internal API behind a
|
|
11
|
-
corporate VPN), the random-IP behavior makes it unusable.
|
|
12
|
-
|
|
13
|
-
The **dedicated egress IP** addon pins all your agent's outbound traffic to a
|
|
14
|
-
single static IP that you can whitelist once on the destination service.
|
|
15
|
-
|
|
16
|
-
## Pricing
|
|
17
|
-
|
|
18
|
-
**$50/month per account.** All your projects share the same IP.
|
|
19
|
-
|
|
20
|
-
## How it works
|
|
21
|
-
|
|
22
|
-
```
|
|
23
|
-
Your Fargate task (random IP per run)
|
|
24
|
-
│
|
|
25
|
-
│ All HTTPS traffic tunneled through:
|
|
26
|
-
▼
|
|
27
|
-
┌──────────────────────────────────┐
|
|
28
|
-
│ Zibby's egress proxy │
|
|
29
|
-
│ - Validates your auth │
|
|
30
|
-
│ - Routes via YOUR static IP │
|
|
31
|
-
└──────────────────────────────────┘
|
|
32
|
-
│
|
|
33
|
-
▼
|
|
34
|
-
Internet (sees your static IP, e.g. 54.66.241.180)
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
Every outbound HTTPS call from your agent exits via your dedicated IP:
|
|
38
|
-
|
|
39
|
-
| What | Whether it tunnels |
|
|
40
|
-
|---|---|
|
|
41
|
-
| `fetch()` from agent code | ✅ via static IP |
|
|
42
|
-
| `git clone` private repos | ✅ via static IP |
|
|
43
|
-
| `npm install` from private registries | ✅ via static IP |
|
|
44
|
-
| `curl` / `wget` in shell scripts | ✅ via static IP |
|
|
45
|
-
| AWS SDK calls (S3, DynamoDB) | ❌ direct (AWS doesn't care about source IP) |
|
|
46
|
-
|
|
47
|
-
## Enabling
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
# 1. Enable the addon for your account (paid)
|
|
51
|
-
zibby deploy --dedicated-ip enable
|
|
52
|
-
|
|
53
|
-
# Output:
|
|
54
|
-
# Provisioning your dedicated egress IP...
|
|
55
|
-
# Done in 8s.
|
|
56
|
-
#
|
|
57
|
-
# Your static IP: 54.66.241.180
|
|
58
|
-
#
|
|
59
|
-
# Add this to your firewall allowlist, then opt projects in:
|
|
60
|
-
# zibby deploy --dedicated-ip use --project <project-id>
|
|
61
|
-
|
|
62
|
-
# 2. Opt each project in (free)
|
|
63
|
-
zibby deploy --dedicated-ip use --project my-project
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## Checking status
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
zibby deploy --dedicated-ip status
|
|
70
|
-
|
|
71
|
-
# Output:
|
|
72
|
-
# Dedicated egress IP: active
|
|
73
|
-
#
|
|
74
|
-
# Your static IP: 54.66.241.180
|
|
75
|
-
# Provisioned: 2026-05-02
|
|
76
|
-
#
|
|
77
|
-
# Projects opted in:
|
|
78
|
-
# ✓ my-project
|
|
79
|
-
# ✗ other-project (not opted in)
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
## Whitelisting on common services
|
|
83
|
-
|
|
84
|
-
**GitLab self-hosted:**
|
|
85
|
-
```
|
|
86
|
-
Admin → Settings → Network → Outbound requests
|
|
87
|
-
→ Allowlist: 54.66.241.180
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
**GitHub Enterprise:**
|
|
91
|
-
```
|
|
92
|
-
Site admin → Authentication → IP allowlist
|
|
93
|
-
→ Add: 54.66.241.180
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
**AWS Security Group (e.g. for a private RDS/ECS endpoint):**
|
|
97
|
-
```
|
|
98
|
-
Inbound rule → HTTPS → Source: 54.66.241.180/32
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
**Salesforce:**
|
|
102
|
-
```
|
|
103
|
-
Setup → Network Access → Trusted IP ranges
|
|
104
|
-
→ Add: 54.66.241.180 to 54.66.241.180
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
## What stays the same
|
|
108
|
-
|
|
109
|
-
Your IP is **stable for as long as you have the addon enabled**:
|
|
110
|
-
|
|
111
|
-
- Survives Zibby infrastructure changes (we replace proxy boxes regularly)
|
|
112
|
-
- Survives our region failovers
|
|
113
|
-
- Survives your own agent redeploys
|
|
114
|
-
|
|
115
|
-
The only way the IP changes is if **you** disable the addon, in which case the IP
|
|
116
|
-
is released back to AWS at the end of your billing period.
|
|
117
|
-
|
|
118
|
-
## Disabling
|
|
119
|
-
|
|
120
|
-
```bash
|
|
121
|
-
zibby deploy --dedicated-ip disable
|
|
122
|
-
```
|
|
123
|
-
|
|
124
|
-
The IP stays attached until the end of your current billing period (no immediate
|
|
125
|
-
proration). After that, the IP is released.
|
|
126
|
-
|
|
127
|
-
If you re-enable later, you'll get a **different** IP — we can't guarantee the
|
|
128
|
-
same one. Re-whitelist on your destination services if you re-enable.
|
|
129
|
-
|
|
130
|
-
## Per-project IPs
|
|
131
|
-
|
|
132
|
-
Currently every project on your account shares the same IP. If you need separate
|
|
133
|
-
IPs per project (for compliance isolation, dev/staging/prod separation, etc.),
|
|
134
|
-
contact support.
|
|
135
|
-
|
|
136
|
-
## Limitations
|
|
137
|
-
|
|
138
|
-
- Currently only available in `ap-southeast-2` (Sydney). Multi-region coming.
|
|
139
|
-
- Only IPv4. No IPv6 yet.
|
|
140
|
-
- Outbound only. We don't host inbound services on your IP.
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
sidebar_position: 6
|
|
3
|
-
title: Editing node prompts
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Editing node prompts
|
|
7
|
-
|
|
8
|
-
Every node in an agent has a **prompt** — the instructions handed to the
|
|
9
|
-
coding agent when that step runs. In the graph editor (both the deploy modal
|
|
10
|
-
and a deployed agent's **Overview** tab) each prompt is tagged with a badge:
|
|
11
|
-
|
|
12
|
-
| Badge | What it means |
|
|
13
|
-
|---|---|
|
|
14
|
-
| <span style={{color:'#34d399',fontWeight:600}}>EDITABLE</span> | The prompt is a stored text template. You can change it right here. |
|
|
15
|
-
| <span style={{color:'#d4b483',fontWeight:600}}>READ-ONLY</span> | The prompt is generated by the node's code at runtime. It can't be edited in the UI. |
|
|
16
|
-
|
|
17
|
-
The `!` next to the badge explains the same thing on hover.
|
|
18
|
-
|
|
19
|
-
## Editable prompts
|
|
20
|
-
|
|
21
|
-
A prompt is editable when the node declares it as a plain text template (a
|
|
22
|
-
string, optionally with `{{variables}}`).
|
|
23
|
-
|
|
24
|
-
The graph shown in the marketplace **deploy modal is a read-only preview** —
|
|
25
|
-
you pick the name and model there, not edit prompts. You edit editable
|
|
26
|
-
prompts **after you deploy**:
|
|
27
|
-
|
|
28
|
-
- Open the deployed agent's **Overview** tab.
|
|
29
|
-
- Click the node, edit the prompt, and save.
|
|
30
|
-
- The change applies to the next run **live — no redeploy needed**.
|
|
31
|
-
|
|
32
|
-
This is the right choice when you want non-developers to tune wording,
|
|
33
|
-
tone, or rules without touching code.
|
|
34
|
-
|
|
35
|
-
## Read-only prompts
|
|
36
|
-
|
|
37
|
-
A prompt is read-only when the node builds it **in code** — a function that
|
|
38
|
-
assembles the text from state, fetched context, or conditionals at runtime.
|
|
39
|
-
There's no fixed string to edit, so the editor shows a rendered preview only.
|
|
40
|
-
|
|
41
|
-
To change a read-only prompt you edit the agent's source and redeploy. You
|
|
42
|
-
don't need to leave your AI coding agent to do it — the
|
|
43
|
-
[Zibby MCP](../packages/mcp-cli) drives the whole loop from chat:
|
|
44
|
-
|
|
45
|
-
1. **Download the agent** — pull the deployed sources back to your machine.
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
zibby agent download <uuid>
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
Or, from an MCP-aware agent (Claude Code / Cursor / Codex / Gemini),
|
|
52
|
-
ask it to call `zibby_download_agent`.
|
|
53
|
-
|
|
54
|
-
2. **Edit the node's code** — open the node file under
|
|
55
|
-
`.zibby/workflows/<name>/nodes/` and change how the prompt is built. Your
|
|
56
|
-
coding agent can do this directly.
|
|
57
|
-
|
|
58
|
-
3. **Redeploy to update** — ship the change back to the same agent.
|
|
59
|
-
|
|
60
|
-
```bash
|
|
61
|
-
zibby agent deploy <name>
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
Or have the agent call `zibby_deploy_agent`. The deployed agent updates in
|
|
65
|
-
place; its UUID and trigger config stay the same.
|
|
66
|
-
|
|
67
|
-
:::tip Want it editable instead?
|
|
68
|
-
If a prompt would be better tuned by non-developers, convert the node from a
|
|
69
|
-
function prompt to a **string template**. Once it's a stored template, the
|
|
70
|
-
badge flips to **Editable** and it gains live-update from Overview.
|
|
71
|
-
:::
|
|
72
|
-
|
|
73
|
-
## Why the split exists
|
|
74
|
-
|
|
75
|
-
Function prompts exist for a reason: some nodes need to assemble instructions
|
|
76
|
-
from things only known at runtime — the linked ticket, the diff, prior
|
|
77
|
-
reviews, whether an integration is connected. A fixed text box can't express
|
|
78
|
-
that logic, so those nodes keep their prompt in code. Simpler, static prompts
|
|
79
|
-
stay as editable templates so anyone can adjust them.
|