Claude-skill-registry flow-conventions-folder-structure
Validate and fix folder structure for Output SDK workflows. Use to ensure migrated workflows follow the correct structure conventions.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/flow-conventions-folder-structure" ~/.claude/skills/majiayu000-claude-skill-registry-flow-conventions-folder-structure && rm -rf "$T"
manifest:
skills/data/flow-conventions-folder-structure/SKILL.mdsource content
Output SDK Folder Structure Conventions
Overview
This skill documents the required folder structure for Output SDK workflows and helps validate/fix structure issues after migration.
When to Use This Skill
After Migration:
- Validating folder structure is correct
- Fixing structure issues
- Renaming files to match conventions
During Setup:
- Creating new workflow directories
- Understanding project organization
Folder Structure Comparison
Flow SDK (Old Structure)
src/ └── workflows/ └── example_workflow/ ├── activities.ts # Activity functions ├── helpers.ts # Optional helpers ├── prompts.ts # JS prompt arrays ├── prompts.xml # XML prompts ├── readme.xml # Documentation ├── types.ts # Type definitions └── workflow.ts # Workflow class
Output SDK (New Structure)
src/ └── workflows/ └── example_workflow/ ├── workflow.ts # Workflow function (export default) ├── steps.ts # Step definitions ├── types.ts # Types + Zod schemas ├── analyzeDocument@v1.prompt # Prompt files ├── generateSummary@v1.prompt └── scenarios/ # Test input files ├── basic_input.json └── full_options.json
File Naming Conventions
Workflow Folder
- Use
for folder namessnake_case - Match the workflow name
# Correct user_onboarding/ generate_report/ analyze_document/ # Wrong userOnboarding/ GenerateReport/ analyze-document/
Core Files
| File | Naming | Purpose |
|---|---|---|
| Exact name | Workflow definition |
| Exact name | All step definitions |
| Exact name | Types and Zod schemas |
Prompt Files
Format:
{descriptiveName}@{version}.prompt
# Correct analyzeDocument@v1.prompt generateSummary@v1.prompt extractEntities@v2.prompt # Wrong analyze.prompt # Missing version analyzeDocument.txt # Wrong extension analyze-document@v1.md # Wrong extension
Scenario Files
Format:
{descriptive_name}.json
# Correct basic_input.json full_options.json edge_case_empty.json question_ada_lovelace.json # Wrong test1.json # Not descriptive BasicInput.json # Not snake_case
Required vs Optional Files
Required Files
| File | Must Exist | Purpose |
|---|---|---|
| Yes | Workflow entry point |
| Yes (if steps exist) | Step definitions |
| Yes | Schemas and types |
Optional Files/Folders
| File/Folder | Optional | Purpose |
|---|---|---|
| If LLM calls | Prompt templates |
| Recommended | Test inputs |
| If needed | Utility functions |
Files to Remove After Migration
| File | Action |
|---|---|
| Rename to or delete after conversion |
| Delete after converting to files |
| Delete after converting to files |
| Can keep for reference or delete |
Validation Commands
Check Folder Structure
WORKFLOW="src/workflows/my_workflow" # List all files ls -la $WORKFLOW/ # Check for required files [ -f "$WORKFLOW/workflow.ts" ] && echo "✓ workflow.ts" || echo "✗ workflow.ts missing" [ -f "$WORKFLOW/steps.ts" ] && echo "✓ steps.ts" || echo "✗ steps.ts missing" [ -f "$WORKFLOW/types.ts" ] && echo "✓ types.ts" || echo "✗ types.ts missing" # Check for leftover files [ -f "$WORKFLOW/activities.ts" ] && echo "⚠ activities.ts should be removed" || echo "✓ No activities.ts" [ -f "$WORKFLOW/prompts.ts" ] && echo "⚠ prompts.ts should be removed" || echo "✓ No prompts.ts" [ -f "$WORKFLOW/prompts.xml" ] && echo "⚠ prompts.xml should be removed" || echo "✓ No prompts.xml"
Check Folder Naming
# List workflow folders ls -d src/workflows/*/ # Check for non-snake_case folders ls -d src/workflows/*/ | while read dir; do name=$(basename "$dir") if [[ "$name" =~ [A-Z] ]] || [[ "$name" =~ "-" ]]; then echo "⚠ Non-snake_case folder: $name" fi done
Check Prompt File Naming
# List prompt files ls src/workflows/my_workflow/*.prompt 2>/dev/null # Check for version in prompt names for f in src/workflows/my_workflow/*.prompt; do if [[ ! "$f" =~ @v[0-9]+\.prompt$ ]]; then echo "⚠ Missing version: $f" fi done
Fixing Structure Issues
Rename activities.ts to steps.ts
mv src/workflows/my_workflow/activities.ts src/workflows/my_workflow/steps.ts
Create scenarios directory
mkdir -p src/workflows/my_workflow/scenarios
Fix folder naming
# Rename from camelCase to snake_case mv src/workflows/userOnboarding src/workflows/user_onboarding
Remove old files
rm src/workflows/my_workflow/prompts.ts rm src/workflows/my_workflow/prompts.xml
Complete Example
Before Migration
src/workflows/userReport/ ├── activities.ts ├── helpers.ts ├── prompts.ts ├── prompts.xml ├── readme.xml ├── types.ts └── workflow.ts
After Migration
src/workflows/user_report/ # Renamed to snake_case ├── workflow.ts # Converted to workflow() ├── steps.ts # Converted from activities.ts ├── types.ts # Added Zod schemas ├── generateReport@v1.prompt # Converted from prompts.ts ├── formatOutput@v1.prompt └── scenarios/ # NEW ├── daily_report.json ├── weekly_report.json └── full_options.json
Project-Wide Structure
src/ ├── workflows/ │ ├── user_onboarding/ │ │ ├── workflow.ts │ │ ├── steps.ts │ │ ├── types.ts │ │ ├── welcome@v1.prompt │ │ └── scenarios/ │ ├── generate_report/ │ │ ├── workflow.ts │ │ ├── steps.ts │ │ ├── types.ts │ │ ├── analyze@v1.prompt │ │ └── scenarios/ │ └── shared_steps/ # Optional: shared steps │ └── shared_steps.ts ├── shared/ # Optional: shared utilities │ ├── types.ts │ └── helpers.ts └── index.ts # Exports
Validation Checklist
- Workflow folder uses
snake_case -
existsworkflow.ts -
exists (if workflow has steps)steps.ts -
existstypes.ts - Prompt files use
formatname@version.prompt - No leftover
activities.ts - No leftover
orprompts.tsprompts.xml -
directory exists (recommended)scenarios/ - Scenario files use
formatsnake_case.json
Related Skills
- Complete migration validationflow-validation-checklist
- Creating test scenariosflow-create-scenario-files
- Pre-migration analysisflow-analyze-workflow-structure