From outputai
Implements an Output SDK workflow from a plan document. Invoke when the user asks to build a workflow from an existing plan or after `output-plan-workflow` has produced a plan.
How this skill is triggered — by the user, by Claude, or both
Slash command
/outputai:output-build-workflow [workflow-plan-file-path] [workflow-name] [workflow-directory][workflow-plan-file-path] [workflow-name] [workflow-directory]opusThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Your task is to implement an Output.ai workflow based on a provided plan document.
Your task is to implement an Output.ai workflow based on a provided plan document.
The workflow skeleton has already been created at: $3 (if not it should be)
Please read the plan file and implement the workflow according to its specifications.
Use the todo tool to track your progress through the implementation process.
Implement the workflow described in the plan document, following Output SDK patterns and best practices.
<pre_flight_check>
EXECUTE: Claude Skill: output-meta-pre-flight
</pre_flight_check>
<process_flow>
Read and understand the plan document.
$1Update $3/workflow.ts with the workflow definition.
<implementation_checklist>
<workflow_template>
import { workflow, z } from '@outputai/core';
import { stepName } from './steps.js';
const inputSchema = z.object( {
// Define based on plan
} );
const outputSchema = z.object( {
// Define based on plan
} );
export default workflow( {
name: '$2',
description: 'Description from plan',
inputSchema,
outputSchema,
fn: async input => {
// Implement orchestration logic from plan
const result = await stepName( input );
return { result };
}
} );
</workflow_template>
Update $3/steps.ts with all step definitions from the plan.
<implementation_checklist>
<step_template>
import { step, z } from '@outputai/core';
export const stepName = step( {
name: 'stepName',
description: 'Description from plan',
inputSchema: z.object( {
// Define based on plan
} ),
outputSchema: z.object( {
// Define based on plan
} ),
fn: async input => {
// Implement step logic from plan
return output;
}
} );
</step_template>
If the plan includes evaluator functions, implement them in $3/evaluators.ts.
<decision_tree> IF plan_includes_evaluators: CREATE evaluators.ts IMPLEMENT evaluator functions per plan ELSE: SKIP to step 4 </decision_tree>
<implementation_checklist>
output-dev-eval-testing skill)
</implementation_checklist><evaluator_template>
import { evaluator, z, EvaluationBooleanResult } from '@outputai/core';
export const evaluateName = evaluator( {
name: 'evaluate_name',
description: 'Description from plan',
inputSchema: z.object( {
// Define based on plan
} ),
fn: async input => {
// Implement evaluation logic from plan
return new EvaluationBooleanResult( {
value: true,
confidence: 0.95,
reasoning: 'Explanation of evaluation'
} );
}
} );
</evaluator_template>
If the plan includes LLM-based steps, create prompt templates in $3/prompts/.
<decision_tree> IF plan_includes_llm_steps: CREATE prompt_templates UPDATE steps.ts to use loadPrompt and generateText ELSE: SKIP to step 6 </decision_tree>
<llm_step_template>
import { step, z } from '@outputai/core';
import { generateText } from '@outputai/llm';
export const llmStep = step( {
name: 'llmStep',
description: 'LLM-based step',
inputSchema: z.object( {
param: z.string()
} ),
outputSchema: z.string(),
fn: async ( { param } ) => {
const { result } = await generateText( {
prompt: 'prompt_name@v1',
variables: { param }
} );
return result;
}
} );
</llm_step_template>
<prompt_file_template>
---
provider: anthropic
# current as of 2026-05-04 — run output-dev-model-selection for the latest
model: claude-sonnet-4-6
temperature: 0.7
---
<assistant>
You are a helpful assistant.
</assistant>
<user>
</user>
</prompt_file_template>
Update $3/README.md with workflow-specific documentation.
<documentation_requirements>
Create at least one scenario file in $3/scenarios/ for testing the workflow.
<scenario_requirements>
scenarios/ directory if it doesn't existtest_input.json with valid example input matching the inputSchema<scenario_template>
{
// Populate with example values matching inputSchema
// Use realistic test data that demonstrates the workflow
}
</scenario_template>
For a workflow with inputSchema: ```typescript z.object( { topic: z.string(), maxLength: z.number().optional() } ) ```Create scenarios/test_input.json:
{
"topic": "The history of artificial intelligence",
"maxLength": 500
}
Verify the implementation is complete and correct.
<validation_checklist>
Verify the implementation is ready for use.
<post_flight_check>
EXECUTE: Claude Skill: output-meta-post-flight
</post_flight_check>
</process_flow>
<post_flight_check>
EXECUTE: Claude Skill: output-meta-post-flight
</post_flight_check>
---- START ----
Workflow Name: $2
Workflow Directory: $3
Plan File Path: $1
Additional Instructions:
$ARGUMENTS
npx claudepluginhub growthxai/output --plugin outputaiOrchestrates the full planning process for creating new Output.ai workflows, including architecture, steps, prompts, evaluators, and testing strategy using specialized subagents.
Authors a reusable, deterministic agent orchestration workflow as a self-contained .mjs script for Claude Code's Workflow tool, with structured phases, fan-out, and verification.
Creates dated executable workflow files with bite-sized tasks, exact file paths, and loop/gate definitions after design approval.