@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.
Files changed (90) hide show
  1. package/dist/browser.js +3 -10
  2. package/dist/code-scan.d.ts +1 -1
  3. package/dist/index.js +81 -88
  4. package/dist/jira.d.ts +75 -9
  5. package/dist/jira.js +4 -4
  6. package/dist/package.json +1 -1
  7. package/dist/report.d.ts +51 -276
  8. package/dist/trackers/index.js +12 -12
  9. package/dist/trackers/jira-adapter.js +11 -11
  10. package/package.json +1 -1
  11. package/docs/analysis.md +0 -109
  12. package/docs/apps/agent-ops.md +0 -130
  13. package/docs/apps/auth.md +0 -158
  14. package/docs/apps/deploy.md +0 -207
  15. package/docs/apps/goal-mode.md +0 -175
  16. package/docs/apps/index.md +0 -149
  17. package/docs/apps/managing.md +0 -121
  18. package/docs/cli-reference.md +0 -494
  19. package/docs/cloning-repositories.md +0 -285
  20. package/docs/cloud/bundles.md +0 -92
  21. package/docs/cloud/dedicated-egress.md +0 -140
  22. package/docs/cloud/editing-prompts.md +0 -79
  23. package/docs/cloud/env-vars.md +0 -144
  24. package/docs/cloud/limits.md +0 -81
  25. package/docs/cloud/logs.md +0 -104
  26. package/docs/cloud/triggering.md +0 -128
  27. package/docs/concepts/agents.md +0 -112
  28. package/docs/concepts/designing-agents.md +0 -247
  29. package/docs/concepts/graph.md +0 -83
  30. package/docs/concepts/sessions.md +0 -70
  31. package/docs/concepts/skills.md +0 -86
  32. package/docs/concepts/state.md +0 -106
  33. package/docs/concepts/sub-graphs.md +0 -227
  34. package/docs/custom-workflows.md +0 -358
  35. package/docs/get-started/deploy.md +0 -75
  36. package/docs/get-started/install.md +0 -60
  37. package/docs/get-started/run-locally.md +0 -94
  38. package/docs/get-started/trigger-and-logs.md +0 -90
  39. package/docs/get-started/use-from-agents.md +0 -153
  40. package/docs/get-started/your-first-workflow.md +0 -69
  41. package/docs/getting-started.md +0 -108
  42. package/docs/installation.md +0 -127
  43. package/docs/integrations/github.md +0 -73
  44. package/docs/integrations/gitlab.md +0 -43
  45. package/docs/integrations/jira.md +0 -71
  46. package/docs/integrations/lark.md +0 -41
  47. package/docs/integrations/linear.md +0 -43
  48. package/docs/integrations/notion.md +0 -33
  49. package/docs/integrations/plane.md +0 -46
  50. package/docs/integrations/sentry.md +0 -42
  51. package/docs/integrations/slack.md +0 -33
  52. package/docs/intro.md +0 -86
  53. package/docs/legacy/test-automation.md +0 -111
  54. package/docs/packages/agent-workflow.md +0 -88
  55. package/docs/packages/cli.md +0 -73
  56. package/docs/packages/core.md +0 -72
  57. package/docs/packages/mcp-browser.md +0 -110
  58. package/docs/packages/mcp-cli.md +0 -176
  59. package/docs/packages/memory.md +0 -223
  60. package/docs/packages/skills.md +0 -218
  61. package/docs/packages/ui-memory.md +0 -245
  62. package/docs/recipes/bug-autofix.md +0 -85
  63. package/docs/recipes/github-ai-scout.md +0 -61
  64. package/docs/recipes/index.md +0 -68
  65. package/docs/recipes/pipeline-supervisor.md +0 -57
  66. package/docs/recipes/sentry-triage.md +0 -93
  67. package/docs/recipes/test.md +0 -190
  68. package/docs/reviewing-results.md +0 -114
  69. package/docs/running-tests.md +0 -134
  70. package/docs/self-host/backup-restore.md +0 -53
  71. package/docs/self-host/custom-sidecars.md +0 -136
  72. package/docs/self-host/index.md +0 -75
  73. package/docs/self-host/storage.md +0 -50
  74. package/docs/self-host/troubleshooting.md +0 -48
  75. package/docs/self-host/upgrade.md +0 -81
  76. package/docs/skills/browser.md +0 -97
  77. package/docs/skills/chat-memory.md +0 -122
  78. package/docs/skills/core-tools.md +0 -80
  79. package/docs/skills/function-skill.md +0 -93
  80. package/docs/skills/github.md +0 -91
  81. package/docs/skills/index.md +0 -46
  82. package/docs/skills/jira.md +0 -99
  83. package/docs/skills/lark.md +0 -85
  84. package/docs/skills/memory.md +0 -92
  85. package/docs/skills/sentry.md +0 -80
  86. package/docs/skills/slack.md +0 -89
  87. package/docs/tests/memory.md +0 -131
  88. package/docs/triggering-workflows.md +0 -552
  89. package/docs/workflow-artifact-layout-evaluation.md +0 -119
  90. 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.
@@ -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.