output-build-workflow
Implement an Output SDK workflow from a plan document. Use when the user asks to build, implement, or code a workflow from an…
Comprehensive guide to Output.ai Framework for building durable, LLM-powered workflows orchestrated by Temporal. Covers project structure, workflow patterns, steps, LLM integration, HTTP clients, CLI commands, and the full inventory of available agents and skills.
Claude Code
$ npx -y skills add growthxai/output --skill output-meta-project-context --agent claude-code
Codex
$ npx skills add growthxai/output --skill output-meta-project-context -a codex -y
Cursor
$ npx skills add growthxai/output --skill output-meta-project-context -a cursor -y
Gemini CLI
$ npx skills add growthxai/output --skill output-meta-project-context -a gemini-cli -y
GitHub Copilot
$ npx skills add growthxai/output --skill output-meta-project-context -a github-copilot -y
OpenCode
$ npx skills add growthxai/output --skill output-meta-project-context -a opencode -y
Windsurf
$ npx skills add growthxai/output --skill output-meta-project-context -a windsurf -y
name: output-meta-project-context description: Comprehensive guide to Output.ai Framework for building durable, LLM-powered workflows orchestrated by Temporal. Covers project structure, workflow patterns, steps, LLM integration, HTTP clients, CLI commands, and the full inventory of available agents and skills. allowed-tools: [Read]
Output.ai provides infrastructure for building production-grade AI workflows: fact checkers, content generators, data extractors, research assistants, and multi-step agents. Built on Temporal, it guarantees **durable execution** - if execution fails mid-run, it resumes from the last successful step.
**Separation of orchestration from I/O:**
This separation enables automatic retries, resumption, and debugging.
| Component | Purpose | Key Rule | |-----------|---------|----------| | **Workflow** | Orchestrates step execution | Must be deterministic (no I/O, no Date.now(), no Math.random()). Call other workflows as functions (`await otherWorkflow( input )`) to run them as child workflows; never use `executeChild` or `startChild` from `@temporalio/workflow` | | **Step** | Handles all I/O operations | Where HTTP, LLM, DB calls happen | | **Evaluator** | Quality assessment | Returns confidence-scored results for validation loops | | **Scenario** | Test input data | JSON files matching workflow's inputSchema | | **Prompt** | LLM templates | Liquid.js templating with YAML frontmatter config | | **Eval Test** | Offline quality testing | Dataset-driven verification with `verify()` from `@outputai/core/evals` |
config/
├── credentials.yml.enc # Global encrypted credentials
├── credentials.key # Global decryption key (DO NOT COMMIT)
└── credentials/ # Environment-specific credentials
├── production.yml.enc
└── production.key
src/
├── shared/ # Shared code across workflows
│ ├── clients/ # API clients (e.g., jina.ts, stripe.ts)
│ └── utils/ # Utility functions (e.g., string.ts)
└── workflows/ # Workflow definitions
└── {workflow_name}/
├── workflow.ts # Orchestration logic (deterministic)
├── steps.ts # I/O operations
├── types.ts # Zod schemas (input, output, internal)
├── evaluators.ts # Quality checks (optional)
├── utils.ts # Local utilities (optional)
├── credentials.yml.enc # Workflow-specific credentials (optional)
├── prompts/ # LLM templates (optional)
│ └── generate@v1.prompt
├── scenarios/ # Test inputs (optional)
│ └── happy_path.json
└── tests/ # Offline eval tests (optional)
├── datasets/ # YAML test datasets
│ └── happy_path.yml
└── evals/ # Eval evaluators and workflow
├── evaluators.ts
└── workflow.ts**Shared directory** (`src/shared/`):
**Allowed imports:**
**Forbidden:**
| Rule | Correct | Incorrect | |------|---------|-----------| | Zod import | `import { z } from '@outputai/core'` | `import { z } from 'zod'` | | HTTP client | `import { createKyClient } from '@outputai/core/http'` | `import axios from 'axios'` | | HTTP bodies | Read with `.json()`/`.text()` or cancel unused non-HEAD bodies | Read only `response.url`/`status` and leave body open | | Cost tracking | `addRequestCost` in an `afterResponse` hook for paid APIs | Cost left untracked, or tracked only at call sites | | Credentials | `import { credentials } from '@outputai/core/credentials'` | `process.env.SECRET` | | LLM calls | `import { generateText, aiSdk } from '@outputai/core/llm'` | Direct provider SDK | | ES imports | `import { fn } from './file.js'` | `import { fn } from './file'` | | Workflow I/O | Call steps for any I/O | Direct fetch/http in workflow |
**Determinism violations (never in workflows):**
---
| Agent | Purpose | |-------|---------| | `workflow-planner` | Designs workflow architecture, creates implementation blueprints | | `workflow-debugger` | Analyzes workflow execution traces, identifies issues | | `workflow-quality` | Reviews code quality, validates implementations | | `workflow-prompt-writer` | Creates and optimizes LLM prompt templates | | `workflow-context-fetcher` | Gathers documentation and existing patterns |
| Skill | Purpose | |-------|---------| | `output-plan-workflow` | Plan workflow architecture - **ALWAYS FIRST**, creates implementation blueprint | | `output-build-workflow` | Build/implement workflows from a plan, or for modifications | | `output-debug-workflow` | Debug workflow issues when workflows fail or behave unexpectedly | | `output-migrate` | Upgrade a project between Output framework versions |
| Skill
The open-source TypeScript framework for building AI workflows and agents. Designed for Claude Code — describe what you want, Claude builds it, with all the best practices already in place. One framework.
Implement an Output SDK workflow from a plan document. Use when the user asks to build, implement, or code a workflow from an…
View, edit, and set encrypted credentials in an Output.ai project. Use when adding secrets, updating API keys, verifying…
Wire encrypted credentials to environment variables using the credential: convention. Use when setting up LLM provider keys…
Initialize encrypted credentials for an Output.ai project. Use when setting up credentials for the first time, adding…
Debug Output SDK workflow issues. Use when user reports a workflow failing, erroring, hanging, producing wrong results, or asks…
Use the Agent class for multi-step tool loops, conversation history, streaming progress, and reusable LLM agents. Use when…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.