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

Crypto Market Cli

Cryptocurrency market data tool with price checking, portfolio tracking, and market analysis. Use when you need crypto prices, market cap, 24h changes, portf...

Registry SourceRecently Updated
Web3

Onchain Analyzer

Analyze wallet addresses and on-chain activity — transaction history, token holdings, DeFi positions, and trading patterns across EVM chains and Solana. Use...

Registry SourceRecently Updated
Web3

Use Developer Controlled Wallets

Create and manage Circle developer-controlled wallets where the application retains full custody of wallet keys on behalf of end-users. Covers wallet sets, e...

Registry SourceRecently Updated
00Profile unavailable
Web3

Neko Futures Trader

Automated Binance Futures trading scanner with runner detection and price monitor. Features: - Runner detection (volume spike + momentum + breakout) - Real c...

Registry SourceRecently Updated
00Profile unavailable