@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
package/docs/workflow.md DELETED
@@ -1,558 +0,0 @@
1
- ---
2
- sidebar_position: 4
3
- title: Workflow Engine
4
- ---
5
-
6
- # Workflow Engine
7
-
8
- Zibby's workflow engine is a **graph-based orchestration system for AI agents**, inspired by [LangGraph](https://github.com/langchain-ai/langgraph) but designed to be **agent-agnostic**. The same workflow definition runs identically on Cursor, Claude, or Codex — you switch agents with a single flag, not by rewriting your pipeline.
9
-
10
- ## Core Concepts
11
-
12
- ### Graph = Nodes + Edges + State
13
-
14
- A workflow is a directed graph where:
15
-
16
- - **Nodes** — individual steps (AI calls, data transformations, tool usage)
17
- - **Edges** — connections between nodes (linear or conditional)
18
- - **State** — a shared key-value store that flows through the graph; every node reads from and writes to it
19
-
20
- ```
21
- ┌──────────┐ ┌──────────────┐ ┌─────────────────┐
22
- │ preflight│────▶│ execute_live │────▶│ generate_script │───▶ END
23
- └──────────┘ └──────────────┘ └─────────────────┘
24
-
25
- ▼ (conditional)
26
- END
27
- (no actions recorded)
28
- ```
29
-
30
- ### Agent-Agnostic Design
31
-
32
- The workflow framework never calls a specific AI provider directly. Instead, it uses a **Strategy Pattern**:
33
-
34
- 1. Each agent (Cursor, Claude, Codex) implements the `AgentStrategy` base class
35
- 2. The `invokeAgent()` function selects the right strategy at runtime based on your config
36
- 3. Nodes call `invokeAgent()` — they never know which provider executes the prompt
37
-
38
- This means:
39
- - Workflows are **portable** across agents
40
- - Skills (MCP tools) are resolved per-agent automatically
41
- - You can override the model per-node in config without touching workflow code
42
-
43
- ```javascript
44
- // .zibby.config.js — switch agent with one line
45
- export default {
46
- agent: {
47
- cursor: { model: 'auto' },
48
- // claude: { model: 'sonnet-4.6' },
49
- // codex: { model: 'gpt-5.2-codex' },
50
- }
51
- };
52
- ```
53
-
54
- ### Three Supported Agents
55
-
56
- | Agent | SDK | MCP Integration | Structured Output |
57
- |---|---|---|---|
58
- | **Cursor** | cursor-agent CLI / API | MCP servers via `~/.cursor/mcp.json` | JSON extraction from response |
59
- | **Claude** | `@anthropic-ai/claude-agent-sdk` | Native MCP tool_use with `allowedTools` | Zod schema → SDK structured output |
60
- | **Codex** | `@openai/codex-sdk` | `mcp_servers` config in SDK | Zod → JSON Schema via `outputSchema` |
61
-
62
- All three implement the same interface:
63
-
64
- ```javascript
65
- class AgentStrategy {
66
- canHandle(context) // Is this agent available?
67
- invoke(prompt, options) // Execute prompt with tools + schema
68
- getName() // 'cursor' | 'claude' | 'codex'
69
- }
70
- ```
71
-
72
- ## Building a Workflow
73
-
74
- ### The Built-in Default: Browser Test Automation
75
-
76
- When you run `zibby test test.txt`, the CLI uses the built-in `BrowserTestAutomationAgent` workflow — no init or config needed:
77
-
78
- ```javascript
79
- import { WorkflowAgent, WorkflowGraph } from '@zibby/core';
80
- import { preflightNode, executeLiveNode, generateScriptNode } from './nodes/index.mjs';
81
-
82
- export class BrowserTestAutomationAgent extends WorkflowAgent {
83
- buildGraph() {
84
- const graph = new WorkflowGraph();
85
-
86
- graph.addNode('preflight', preflightNode);
87
- graph.addNode('execute_live', executeLiveNode);
88
- graph.addNode('generate_script', generateScriptNode);
89
-
90
- graph.setEntryPoint('preflight');
91
- graph.addEdge('preflight', 'execute_live');
92
-
93
- graph.addConditionalEdges('execute_live', (state) => {
94
- const result = state.execute_live;
95
- const hasExecution = (result?.steps?.length > 0) || (result?.actions?.length > 0);
96
- return hasExecution ? 'generate_script' : 'END';
97
- });
98
-
99
- graph.addEdge('generate_script', 'END');
100
- return graph;
101
- }
102
-
103
- async onComplete(result) {
104
- // Save artifacts, push to memory, etc.
105
- }
106
- }
107
- ```
108
-
109
- **What each node does:**
110
-
111
- | Node | Type | Skills | Purpose |
112
- |---|---|---|---|
113
- | `preflight` | Prompt-only (no tools) | — | Reads test spec, extracts title + assertion checklist via LLM |
114
- | `execute_live` | Tool-using | Browser, Memory | AI drives a real browser, fills forms, clicks, captures selectors |
115
- | `generate_script` | Prompt-only | — | Converts recorded actions into a reusable Playwright `.spec.js` |
116
-
117
- ### Custom Workflows via `zibby init`
118
-
119
- Scaffold a customizable workflow into your project:
120
-
121
- ```bash
122
- zibby init --agent cursor
123
- ```
124
-
125
- This creates:
126
-
127
- ```
128
- .zibby.config.js # Project configuration
129
- .zibby/
130
- ├── graph.js # Workflow graph (nodes + edges)
131
- ├── nodes/
132
- │ ├── preflight.js # Extract title + assertions
133
- │ ├── execute-live.js # AI drives browser
134
- │ └── generate-script.js # Generate Playwright script
135
- └── result-handler.js # Post-execution artifact saving
136
- ```
137
-
138
- You can then modify any node, add new nodes, or change the graph structure.
139
-
140
- ## WorkflowGraph API
141
-
142
- ### Creating a Graph
143
-
144
- ```javascript
145
- import { WorkflowGraph, Node } from '@zibby/core';
146
-
147
- const graph = new WorkflowGraph({
148
- stateSchema: MyZodSchema, // Optional: Zod schema for state validation
149
- middleware: [myMiddleware], // Optional: middleware functions
150
- });
151
- ```
152
-
153
- ### Adding Nodes
154
-
155
- ```javascript
156
- // Simple node with prompt function + output schema
157
- graph.addNode('my_node', {
158
- name: 'my_node',
159
- prompt: (state) => `Analyze: ${state.testSpec}`,
160
- outputSchema: z.object({
161
- title: z.string(),
162
- items: z.array(z.string()),
163
- }),
164
- });
165
-
166
- // Node with skills (MCP tools)
167
- graph.addNode('browser_step', {
168
- name: 'browser_step',
169
- skills: [SKILLS.BROWSER, SKILLS.MEMORY],
170
- prompt: (state) => `Execute: ${state.testSpec}`,
171
- outputSchema: ExecutionSchema,
172
- timeout: 600000,
173
- });
174
-
175
- // Node with custom execute (no LLM call)
176
- graph.addNode('transform', {
177
- name: 'transform',
178
- _isCustomCode: true,
179
- execute: async (context) => {
180
- const data = context.state.get('raw_data');
181
- return { cleaned: data.trim(), wordCount: data.split(' ').length };
182
- },
183
- outputSchema: TransformSchema,
184
- });
185
- ```
186
-
187
- ### Wiring Edges
188
-
189
- ```javascript
190
- // Linear flow
191
- graph.setEntryPoint('step_a');
192
- graph.addEdge('step_a', 'step_b');
193
- graph.addEdge('step_b', 'step_c');
194
- graph.addEdge('step_c', 'END');
195
-
196
- // Conditional branching
197
- graph.addConditionalEdges('step_b', (state) => {
198
- return state.step_b.success ? 'step_c' : 'error_handler';
199
- });
200
- ```
201
-
202
- ### Running the Graph
203
-
204
- ```javascript
205
- const result = await graph.run(agent, {
206
- testSpec: 'Go to example.com and verify the title',
207
- cwd: process.cwd(),
208
- config: { agent: { cursor: { model: 'auto' } } },
209
- });
210
-
211
- console.log(result.success); // true
212
- console.log(result.state.preflight); // { title: '...', assertions: [...] }
213
- console.log(result.executionLog); // [{ node, success, duration }, ...]
214
- ```
215
-
216
- ## Node Anatomy
217
-
218
- Every node has three key parts:
219
-
220
- ### 1. Prompt
221
-
222
- A function or string template that receives the current state and produces the LLM prompt:
223
-
224
- ```javascript
225
- prompt: (state) => `
226
- Test spec: ${state.testSpec}
227
- Previous results: ${JSON.stringify(state.preflight)}
228
-
229
- Execute the test and return structured results.
230
- `
231
- ```
232
-
233
- Nodes can also use Handlebars templates when configured with a `prompt` option:
234
-
235
- ```javascript
236
- graph.addNode('my_node', nodeImpl, {
237
- prompt: `Analyze {{testSpec}} and produce {{outputFormat}} results`
238
- });
239
- ```
240
-
241
- ### 2. Output Schema (Zod)
242
-
243
- Every node declares a Zod schema for its output. The framework validates the AI response against it:
244
-
245
- ```javascript
246
- import { z } from '@zibby/core';
247
-
248
- const MyOutputSchema = z.object({
249
- title: z.string().describe('Concise test title'),
250
- assertions: z.array(z.object({
251
- description: z.string(),
252
- expected: z.string(),
253
- })),
254
- });
255
-
256
- export const myNode = {
257
- name: 'my_node',
258
- outputSchema: MyOutputSchema,
259
- prompt: (state) => '...',
260
- };
261
- ```
262
-
263
- The schema serves three purposes:
264
- - **Runtime validation** — the LLM response is parsed and validated against the schema
265
- - **Structured output** — Claude and Codex agents use the schema for native structured output (no JSON extraction needed)
266
- - **State contract** — downstream nodes know exactly what shape to expect from upstream output
267
-
268
- ### 3. Skills
269
-
270
- Skills declare what MCP tools a node needs. The framework resolves the right MCP server per-agent:
271
-
272
- ```javascript
273
- import { SKILLS } from '@zibby/core';
274
-
275
- export const executeLiveNode = {
276
- name: 'execute_live',
277
- skills: [SKILLS.BROWSER, SKILLS.MEMORY],
278
- // ...
279
- };
280
- ```
281
-
282
- Available built-in skills: `BROWSER`, `JIRA`, `GITHUB`, `SLACK`, `MEMORY`.
283
-
284
- ## State Management
285
-
286
- State is a shared key-value store managed by `WorkflowState`. Each node's output is automatically stored under its name:
287
-
288
- ```javascript
289
- // After preflight runs:
290
- state.get('preflight') // → { title: '...', assertions: [...] }
291
-
292
- // After execute_live runs:
293
- state.get('execute_live') // → { success: true, steps: [...], actions: [...] }
294
- ```
295
-
296
- Built-in state keys:
297
-
298
- | Key | Type | Description |
299
- |---|---|---|
300
- | `messages` | `Array` | Accumulated messages |
301
- | `errors` | `Array` | Error records `{ node, error }` |
302
- | `artifacts` | `Object` | Generated artifacts |
303
- | `config` | `Object` | Resolved `.zibby.config.js` |
304
- | `agentType` | `string` | Active agent (`cursor`, `claude`, `codex`) |
305
- | `sessionPath` | `string` | Path to session output directory |
306
- | `context` | `Object` | Loaded context files (CONTEXT.md, AGENTS.md, env) |
307
- | `testSpec` | `string` | The test specification text |
308
- | `<node_name>` | `Object` | Each node's validated output |
309
-
310
- State supports history and rollback:
311
-
312
- ```javascript
313
- state.set('key', 'value');
314
- state.update({ a: 1, b: 2 });
315
- state.append('errors', { node: 'x', error: 'failed' });
316
- state.rollback(); // Undo last mutation
317
- ```
318
-
319
- ## Graph Compiler
320
-
321
- Zibby includes a **graph compiler** that takes a serialized JSON graph (from the dashboard's visual editor) and compiles it into an executable `WorkflowGraph`:
322
-
323
- ```javascript
324
- import { compileGraph, validateGraphConfig } from '@zibby/core';
325
-
326
- // Validate before compiling
327
- const { valid, errors } = validateGraphConfig(graphJson);
328
-
329
- // Compile JSON → executable graph
330
- const graph = compileGraph(graphJson, {
331
- stateSchema: MySchema,
332
- middleware: [memoryMiddleware],
333
- });
334
-
335
- await graph.run(agent, initialState);
336
- ```
337
-
338
- The compiler handles:
339
- - **Node resolution** — maps node types to registered implementations
340
- - **Decision nodes** — collapses visual decision diamonds into `addConditionalEdges`
341
- - **Custom code** — safely compiles inline JavaScript from the visual editor
342
- - **Tool resolution** — wires MCP tool permissions per node
343
- - **Entry point detection** — finds the node with no incoming edges
344
-
345
- ## Middleware
346
-
347
- Middleware wraps every node execution, enabling cross-cutting concerns:
348
-
349
- ```javascript
350
- const graph = new WorkflowGraph({
351
- middleware: [
352
- async (nodeName, next, stateValues, state) => {
353
- console.log(`Starting: ${nodeName}`);
354
- const result = await next();
355
- console.log(`Completed: ${nodeName} in ${result.duration}ms`);
356
- return result;
357
- }
358
- ]
359
- });
360
- ```
361
-
362
- Skills can also provide middleware. For example, the Memory skill injects a middleware that loads test history before each node and persists insights after:
363
-
364
- ```javascript
365
- // Automatically injected when a node declares skills: [SKILLS.MEMORY]
366
- const memoryMiddleware = await memorySkill.middleware();
367
- ```
368
-
369
- ## Skill Adaptation per Agent
370
-
371
- Skills are resolved differently depending on which agent is active:
372
-
373
- | Agent | How Skills (MCP servers) Are Wired |
374
- |---|---|
375
- | **Cursor** | Written to `~/.cursor/mcp.json` — Cursor IDE manages the MCP lifecycle |
376
- | **Claude** | Passed as `mcpServers` config to the Claude Agent SDK — native MCP support |
377
- | **Codex** | Passed as `mcp_servers` config to the Codex SDK — SDK manages MCP processes |
378
-
379
- The skill's `resolve()` function returns a platform-neutral server config:
380
-
381
- ```javascript
382
- {
383
- command: 'node',
384
- args: ['/path/to/mcp-browser.js', '--save-video=1280x720', '--viewport-size=1280x720', '--output-dir=./output'],
385
- env: { SOME_KEY: '...' }
386
- }
387
- ```
388
-
389
- Each agent strategy translates this into its native MCP format. Node code never changes.
390
-
391
- ## Context Loading
392
-
393
- The workflow engine auto-discovers context files that are prepended to prompts:
394
-
395
- ```javascript
396
- // .zibby.config.js
397
- export default {
398
- context: {
399
- filenames: ['CONTEXT.md', 'AGENTS.md'],
400
- discovery: {
401
- env: `env-${process.env.ENV || 'local'}.js`,
402
- }
403
- }
404
- };
405
- ```
406
-
407
- Context files cascade from the project root down to the spec's directory. This lets you provide domain knowledge (login credentials, app structure, known quirks) that the AI uses during execution.
408
-
409
- ## Per-Node Model Override
410
-
411
- Override the AI model for specific nodes without changing the workflow:
412
-
413
- ```javascript
414
- // .zibby.config.js
415
- export default {
416
- agent: {
417
- cursor: { model: 'auto' },
418
- },
419
- models: {
420
- default: 'auto',
421
- execute_live: 'claude-opus-4', // Use a more capable model for browser execution
422
- preflight: 'claude-sonnet-4.6', // Faster model for analysis
423
- }
424
- };
425
- ```
426
-
427
- Model resolution priority: node override → `models.default` → agent block model → `'auto'`.
428
-
429
- ## Workflow Templates
430
-
431
- `@zibby/core` ships two built-in workflow templates:
432
-
433
- ### Browser Test Automation (`browser-test-automation`)
434
-
435
- The default workflow for `zibby test`:
436
-
437
- ```
438
- preflight → execute_live → generate_script → END
439
- ```
440
-
441
- Three nodes: extract spec, drive browser, generate Playwright script.
442
-
443
- ### Code Analysis (`code-analysis`)
444
-
445
- Used by the cloud analysis pipeline:
446
-
447
- ```
448
- setup → analyze_ticket → generate_code → generate_test_cases → finalize → END
449
- ```
450
-
451
- Six nodes: clone repo, analyze Jira ticket, generate code changes, write test cases, compile report.
452
-
453
- ## Creating Custom Skills
454
-
455
- ### MCP Skill (wraps an external MCP server)
456
-
457
- ```javascript
458
- import { skill } from '@zibby/skills';
459
-
460
- export const linear = skill('linear', {
461
- description: 'Linear project management',
462
- serverName: 'linear',
463
- allowedTools: ['mcp__linear__*'],
464
- envKeys: ['LINEAR_API_KEY'],
465
- resolve() {
466
- if (!process.env.LINEAR_API_KEY) return null;
467
- return {
468
- command: 'npx',
469
- args: ['-y', '@anthropic/linear-mcp-server'],
470
- env: { LINEAR_API_KEY: process.env.LINEAR_API_KEY }
471
- };
472
- }
473
- });
474
- ```
475
-
476
- ### Function Skill (single tool, no MCP server)
477
-
478
- ```javascript
479
- import { skill } from '@zibby/skills';
480
-
481
- export const add = skill('add', {
482
- description: 'Add two numbers',
483
- input: { a: 'number', b: 'number' },
484
- handler: async ({ a, b }) => ({ result: a + b })
485
- });
486
- ```
487
-
488
- Function skills are automatically bridged to MCP at runtime — the framework spawns a lightweight MCP server that delegates to your handler.
489
-
490
- ## End-to-End Example: Custom Workflow
491
-
492
- ```javascript
493
- import { WorkflowGraph, SKILLS } from '@zibby/core';
494
- import { z } from '@zibby/core';
495
-
496
- // 1. Define output schemas
497
- const AnalysisSchema = z.object({
498
- summary: z.string(),
499
- testCases: z.array(z.object({
500
- name: z.string(),
501
- steps: z.array(z.string()),
502
- })),
503
- });
504
-
505
- const ExecutionSchema = z.object({
506
- success: z.boolean(),
507
- steps: z.array(z.string()),
508
- actions: z.array(z.object({
509
- type: z.string(),
510
- description: z.string(),
511
- })),
512
- browserClosed: z.boolean(),
513
- });
514
-
515
- // 2. Define nodes
516
- const analyzeNode = {
517
- name: 'analyze',
518
- prompt: (state) => `Analyze this requirement and produce test cases:\n${state.testSpec}`,
519
- outputSchema: AnalysisSchema,
520
- };
521
-
522
- const executeNode = {
523
- name: 'execute',
524
- skills: [SKILLS.BROWSER, SKILLS.MEMORY],
525
- prompt: (state) => `Execute test "${state.analyze.testCases[0].name}":\n${state.analyze.testCases[0].steps.join('\n')}`,
526
- outputSchema: ExecutionSchema,
527
- timeout: 600000,
528
- };
529
-
530
- // 3. Build graph
531
- const graph = new WorkflowGraph();
532
- graph.addNode('analyze', analyzeNode);
533
- graph.addNode('execute', executeNode);
534
- graph.setEntryPoint('analyze');
535
- graph.addEdge('analyze', 'execute');
536
- graph.addEdge('execute', 'END');
537
-
538
- // 4. Run
539
- const result = await graph.run(agent, {
540
- testSpec: 'Verify the user can log in and see the dashboard',
541
- cwd: process.cwd(),
542
- });
543
- ```
544
-
545
- ## Workflow CLI Commands
546
-
547
- ```bash
548
- # Run a specific workflow (if you have multiple defined)
549
- zibby test test.txt --workflow QuickSmokeWorkflow
550
-
551
- # Run a single node (for debugging)
552
- zibby test test.txt --node execute_live --session last
553
-
554
- # Upload/download workflow graphs to/from Zibby Cloud
555
- zibby workflow list
556
- zibby workflow download --type run_test
557
- zibby workflow upload --type analysis --file .zibby/workflow-analysis.json
558
- ```