Output Dev Folder Structure

作者 growthxaia4f6bd40ab0e無授權條款440 個星標收錄於 2026年10月8日更新於 2026年10月8日儲存庫今天更新

Workflow folder structure conventions for Output SDK. Use when creating new workflows, organizing workflow files, or understanding the standard project layout.

AI 產生的概覽

說明 Output SDK 工作流的標準資料夾結構與檔案慣例。

功能
此技能提供 Output SDK 工作流專案的組織慣例,涵蓋標準 src/ 目錄配置、workflow.ts、steps.ts、types.ts、prompts 與 scenarios 等檔案的用途,以及共用資源目錄。它也說明元件位置的嚴格規則、步驟與評估器的匯入隔離規則、命名慣例和檢查清單。產出的是指引與審查標準,而非檔案或程式碼。
適用情境
適用於建立新的 Output SDK 工作流、重新整理現有工作流、判斷檔案應放在何處,或審查工作流結構是否符合規範時。
執行需求
除代理外不需要其他工具或指令碼;此技能宣告使用唯讀工具(Read、Glob),並假定使用者熟悉 Output SDK 與 TypeScript。

Workflow Folder Structure Conventions

Overview

This skill documents the standard folder structure for Output SDK workflows. Following these conventions ensures consistency across the codebase and enables proper tooling support.

When to Use This Skill

  • Creating a new workflow from scratch
  • Reorganizing an existing workflow
  • Understanding where to place different file types
  • Reviewing workflow structure for compliance

Standard Project Structure

src/├── shared/                          # Shared code across workflows│   ├── clients/                     # API clients (using @outputai/http)│   ├── utils/                       # Utility functions & helpers│   ├── services/                    # Business logic services│   ├── steps/                       # Shared steps (optional)│   └── evaluators/                  # Shared evaluators (optional)└── workflows/    └── {workflow-name}/             # Individual workflow directory        ├── workflow.ts              # Workflow definition (REQUIRED)        ├── steps.ts                 # OR steps/ folder        ├── evaluators.ts            # OR evaluators/ folder (optional)        ├── types.ts                 # Zod schemas and TypeScript types        ├── utils.ts                 # Workflow-specific utilities (optional)        ├── prompts/                 # LLM prompt templates (optional)        │   └── {promptName}@v1.prompt        └── scenarios/               # Test input scenarios (optional)            └── {scenario_name}.json

File Purposes

workflow.ts (Required)

  • Contains the main workflow() function definition
  • Default exports the workflow
  • Must be deterministic - no direct I/O operations
  • Orchestrates step calls

Related Skill: output-dev-workflow-function

steps.ts or steps/ folder (Required)

  • Contains all step() function definitions
  • Handles all I/O operations (HTTP, LLM, file system, etc.)
  • Named exports for each step function
  • Includes error handling with FatalError and ValidationError

Related Skill: output-dev-step-function

evaluators.ts or evaluators/ folder (Optional)

  • Contains evaluator() function definitions
  • Used for workflow quality assessment and validation
  • Named exports for each evaluator function

types.ts (Required)

  • Contains Zod schemas for input/output validation
  • Exports TypeScript types derived from schemas
  • Imports z from @outputai/core (never from zod)

Related Skill: output-dev-types-file

utils.ts (Optional)

  • Contains pure helper functions
  • No I/O operations - those belong in steps
  • Shared utility logic for the workflow

prompts/ folder (Optional)

  • Contains .prompt files for LLM operations
  • File naming: {promptName}@v1.prompt
  • Uses YAML frontmatter and Liquid.js templating

Related Skill: output-dev-prompt-file

scenarios/ folder (Optional)

  • Contains JSON test input files
  • File naming: {scenario_name}.json
  • Matches workflow inputSchema structure

Related Skill: output-dev-scenario-file

Organization Options

Option 1: Flat Files (Recommended for smaller workflows)

src/workflows/{workflow-name}/├── workflow.ts├── steps.ts           # All steps in one file├── evaluators.ts      # All evaluators in one file (optional)├── types.ts└── ...

Option 2: Folder-Based (For larger workflows)

src/workflows/{workflow-name}/├── workflow.ts├── steps/             # Steps split into individual files│   ├── fetch_data.ts│   ├── process.ts│   └── validate.ts├── evaluators/        # Evaluators split into individual files│   ├── quality.ts│   └── accuracy.ts├── types.ts└── ...

Component Location Rules (Strict)

The Output SDK enforces strict rules about where components can be defined:

ComponentMust be in
step() callsFiles containing 'steps' in path
evaluator() callsFiles containing 'evaluators' in path
workflow() callsworkflow.ts file

Examples:

  • src/workflows/my_workflow/steps.ts ✓
  • src/workflows/my_workflow/steps/fetch_data.ts ✓
  • src/shared/steps/common_steps.ts ✓
  • src/workflows/my_workflow/helpers.ts ✗ (cannot contain step() calls)

Import Rules (Activity Isolation)

Steps and evaluators are Temporal activities with isolation constraints to ensure deterministic replay.

Steps CAN import from:

  • Local workflow files: ./utils.js, ./types.js, ./helpers.js
  • Local subdirectories: ./clients/pokeapi.js, ./lib/helpers.js
  • Shared utilities: ../../shared/utils/*.js
  • Shared clients: ../../shared/clients/*.js
  • Shared services: ../../shared/services/*.js

Steps CANNOT import:

  • Other steps (activity isolation)
  • Evaluators
  • Workflow files

Evaluators follow the same rules:

  • CAN import local files and shared code
  • CANNOT import other evaluators, steps, or workflows

Import Pattern Examples:

typescript
// From workflow steps.ts - importing shared clientimport { GeminiImageService } from '../../shared/clients/gemini_client.js';
// From workflow steps.ts - importing local utilityimport { formatResponse } from './utils.js';
// From workflow steps.ts - importing typesimport { InputSchema, OutputSchema } from './types.js';
// WRONG - steps cannot import other stepsimport { otherStep } from '../../shared/steps/other.js'; // ✗

Shared Resources

src/shared/clients/

HTTP clients shared across workflows:

src/shared/clients/├── gemini_client.ts     # Google Gemini API client├── jina_client.ts       # Jina AI client└── perplexity_client.ts # Perplexity API client

Import pattern in workflow steps:

typescript
import { GeminiImageService } from '../../shared/clients/gemini_client.js';

Related Skill: output-dev-http-client-create

src/shared/utils/

Utility functions shared across workflows:

src/shared/utils/├── string_helpers.ts├── date_formatters.ts└── validators.ts

src/shared/services/

Business logic services shared across workflows:

src/shared/services/├── image_service.ts└── content_service.ts

src/shared/steps/ (Optional)

Shared steps that can be imported by workflows:

src/shared/steps/└── common_steps.ts

Note: Workflows import shared steps, but steps cannot import other steps directly.

Naming Conventions

Folder Names

  • Use snake_case for workflow folder names
  • Example: image_infographic_nano, resume_parser

File Names

  • Use camelCase for .ts files (except workflow.ts, steps.ts, types.ts, evaluators.ts)
  • Use camelCase@v{n} for .prompt files
  • Use snake_case for .json scenario files

Workflow Names

  • The name property in workflow() should be camelCase
  • Example: imageInfographicNano

Example: Complete Workflow Structure

src/workflows/image_infographic_nano/├── workflow.ts              # workflow({ name: 'imageInfographicNano', ... })├── steps.ts                 # generateImageIdeas, generateImages, validateReferenceImages├── types.ts                 # WorkflowInputSchema, WorkflowOutput, step schemas├── utils.ts                 # normalizeReferenceImageUrls, buildS3Url, etc.├── prompts/│   └── [email protected]└── scenarios/    ├── test_input_complex.json    └── test_input_solar_panels.json

Verification Checklist

When reviewing workflow structure, verify:

  • workflow.ts exists with default export
  • steps.ts or steps/ folder exists with all step definitions
  • types.ts exists with Zod schemas
  • All .ts imports use .js extension
  • prompts/ folder exists if LLM operations are used
  • scenarios/ folder exists with at least one test input
  • Folder naming follows snake_case convention
  • Workflow name in code follows camelCase convention
  • Steps only import allowed dependencies (local files, shared code)
  • No cross-component imports (steps don't import other steps)

Related Skills

  • output-dev-workflow-function - Writing workflow.ts files
  • output-dev-step-function - Writing step functions
  • output-dev-evaluator-function - Writing evaluators.ts files
  • output-dev-types-file - Creating Zod schemas
  • output-dev-prompt-file - Creating prompt files
  • output-dev-scenario-file - Creating test scenarios
  • output-dev-http-client-create - Creating shared HTTP clients

來源與署名

來源:growthxai/output位於coding_assistants/claude/plugins/outputai/skills/output-dev-folder-structure提交a4f6bd4

授權條款: 無授權條款

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架