arazzo-writer

Create and edit Arazzo workflow specification files (.arazzo.yaml) for API testing and orchestration. Use when building API test workflows, defining multi-step API sequences, writing API integration tests, or documenting API usage patterns. Triggers include: "arazzo", "workflow spec", "API workflow", "multi-step API test", ".arazzo.yaml", "orchestrate calls", or any request to describe API workflows with assertions.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "arazzo-writer" with this command: npx skills add steakfisher/arazzo-writer/steakfisher-arazzo-writer-arazzo-writer

Arazzo Workflow Authoring Skill

Arazzo describes end-to-end API workflows. This skill generates comprehensive test coverage for ALL API operations.

References: expressions | validation | spec


GENERATION PROCESS (MANDATORY)

Phase 1: Discovery

# 1.1 Find OpenAPI spec
find . -name "*.yaml" -o -name "*.json" | xargs grep -l "openapi\|swagger" 2>/dev/null

# 1.2 Analyze repo structure
ls -la && ls -la src/ lib/ api/ 2>/dev/null

# 1.3 Extract ALL operations - list every path + method, note auth requirements, map CRUD patterns

Phase 2: Plan ALL Workflows

CategoryWorkflows to Generate
CRUD (per resource)create{R}, get{R}ById, update{R}, delete{R}, full{R}Lifecycle
Authlogin, register, tokenRefresh, logout
Listslist{R}s, search{R}s, paginated{R}List
Relationshipscreate{Parent}Then{Child}, get{Parent}With{Children}
Errorsunauthorized{R}, notFound{R}, validationError{R}
Edge Casesduplicate{R}, boundary{R}Values

Phase 3: Generate Single Comprehensive File

arazzo: 1.0.1
info:
  title: Complete API Test Suite
  version: 1.0.0
sourceDescriptions:
  - name: api
    url: ./openapi.yaml
    type: openapi
workflows:
  - workflowId: loginWorkflow
    # ... ALL workflows from Phase 2

SUCCESS CRITERIA (ALL must pass)

CheckCommandPass
1. OpenAPI foundls -la <spec>Spec exists
2. Ops identifiedgrep -E "^\s+(get|post|put|patch|delete):" <spec> | wc -lAll counted
3. File existsls -la <arazzo>Size > 0
4. YAML validpython -c "import yaml; yaml.safe_load(open('<arazzo>'))"Silent success
5. Arazzo validopenapi arazzo validate <arazzo>Exit 0
6. Coveragegrep -c "workflowId:" <arazzo>Covers all ops + errors

ONLY mark complete when ALL 6 checks pass.


Quick Reference

Workflow: workflowId (required), summary, inputs (JSON Schema), steps (required), outputs, dependsOn, failureActions

Step: stepId (required), ONE of operationId/operationPath/workflowId, parameters (need in), requestBody, successCriteria, outputs


Critical Syntax

operationPath

"{$sourceDescriptions.<name>.url}#/paths/~1<escaped-path>/<method>"

Escaping: /~1, ~~0

# /api/users → POST
operationPath: "{$sourceDescriptions.api.url}#/paths/~1api~1users/post"
# /users/{id} → GET  
operationPath: "{$sourceDescriptions.api.url}#/paths/~1users~1{id}/get"

JSONPath (RFC 9535)

# WRONG
condition: $.user != null

# CORRECT - must use $[?(@...)]
condition: $[?(@.user != null)]

Outputs (expressions only, no literals)

# WRONG
outputs:
  success: true

# CORRECT
outputs:
  userId: $response.body#/id

Workflow Templates

Auth

- workflowId: loginWorkflow
  inputs:
    type: object
    properties:
      email: { type: string }
      password: { type: string }
  steps:
    - stepId: login
      operationPath: "{$sourceDescriptions.api.url}#/paths/~1auth~1login/post"
      requestBody:
        contentType: application/json
        payload:
          email: "{$inputs.email}"
          password: "{$inputs.password}"
      successCriteria:
        - condition: $statusCode == 200
        - context: $response.body
          type: jsonpath
          condition: $[?(@.token != null)]
      outputs:
        token: $response.body#/token
  outputs:
    token: $steps.login.outputs.token

Full CRUD Lifecycle

- workflowId: fullUserLifecycle
  inputs:
    type: object
    properties:
      token: { type: string }
  steps:
    - stepId: create
      operationPath: "{$sourceDescriptions.api.url}#/paths/~1users/post"
      parameters:
        - name: Authorization
          in: header
          value: "Bearer {$inputs.token}"
      requestBody:
        contentType: application/json
        payload:
          name: "Test User"
          email: "test@example.com"
      successCriteria:
        - condition: $statusCode == 201
      outputs:
        userId: $response.body#/id

    - stepId: read
      operationPath: "{$sourceDescriptions.api.url}#/paths/~1users~1{id}/get"
      parameters:
        - name: Authorization
          in: header
          value: "Bearer {$inputs.token}"
        - name: id
          in: path
          value: $steps.create.outputs.userId
      successCriteria:
        - condition: $statusCode == 200

    - stepId: update
      operationPath: "{$sourceDescriptions.api.url}#/paths/~1users~1{id}/put"
      parameters:
        - name: Authorization
          in: header
          value: "Bearer {$inputs.token}"
        - name: id
          in: path
          value: $steps.create.outputs.userId
      requestBody:
        contentType: application/json
        payload:
          name: "Updated"
      successCriteria:
        - condition: $statusCode == 200

    - stepId: delete
      operationPath: "{$sourceDescriptions.api.url}#/paths/~1users~1{id}/delete"
      parameters:
        - name: Authorization
          in: header
          value: "Bearer {$inputs.token}"
        - name: id
          in: path
          value: $steps.create.outputs.userId
      successCriteria:
        - condition: $statusCode == 200

Error Workflows

- workflowId: unauthorizedAccess
  steps:
    - stepId: noAuth
      operationPath: "{$sourceDescriptions.api.url}#/paths/~1users/get"
      successCriteria:
        - condition: $statusCode == 401

- workflowId: notFound
  inputs:
    type: object
    properties:
      token: { type: string }
  steps:
    - stepId: getMissing
      operationPath: "{$sourceDescriptions.api.url}#/paths/~1users~1{id}/get"
      parameters:
        - name: Authorization
          in: header
          value: "Bearer {$inputs.token}"
        - name: id
          in: path
          value: "nonexistent-id"
      successCriteria:
        - condition: $statusCode == 404

- workflowId: validationError
  inputs:
    type: object
    properties:
      token: { type: string }
  steps:
    - stepId: badData
      operationPath: "{$sourceDescriptions.api.url}#/paths/~1users/post"
      parameters:
        - name: Authorization
          in: header
          value: "Bearer {$inputs.token}"
      requestBody:
        contentType: application/json
        payload:
          email: "invalid"
      successCriteria:
        - condition: $statusCode == 400 || $statusCode == 422

List/Pagination

- workflowId: listWithPagination
  steps:
    - stepId: firstPage
      operationPath: "{$sourceDescriptions.api.url}#/paths/~1users/get"
      parameters:
        - name: page
          in: query
          value: "1"
        - name: limit
          in: query
          value: "10"
      successCriteria:
        - condition: $statusCode == 200

Common Errors

ErrorFix
operationPath must contain json pointerUse #/paths/~1<path>/<method>
must reference the urlUse .url not .name
invalid jsonpathUse $[?(@.field op value)]
must begin with $No literals in outputs
parameter missing 'in'Add in: path/query/header/cookie
exactly one of operationId...Use only ONE per step

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Web3

precog

Trade on prediction markets. Create a local wallet, list markets, check prices, buy and sell outcome shares. Coming soon: create and fund markets directly from this skill.

Archived SourceRecently Updated
Web3

china-sportswear-outdoor-sourcing

Comprehensive sportswear and outdoor equipment sourcing guide for international buyers – provides detailed information about China's athletic apparel, footwear, outdoor gear, and accessories manufacturing clusters, supply chain structure, regional specializations, and industry trends (2026 updated).

Archived SourceRecently Updated
Web3

china-lighting-sourcing

Comprehensive lighting industry sourcing guide for international buyers – provides detailed information about China's LED, smart, outdoor, automotive, and specialty lighting manufacturing clusters, supply chain structure, regional specializations, and industry trends (2026 updated).

Archived SourceRecently Updated
Web3

china-furniture-sourcing

Comprehensive furniture industry sourcing guide for international buyers – provides detailed information about China's residential, office, hotel, outdoor, and custom furniture manufacturing clusters, supply chain structure, regional specializations, and industry trends (2026 updated).

Archived SourceRecently Updated