Skip to content
cccskills
FreePublished on GitHub

manage-openapi-overlays

Create, apply, and validate OpenAPI overlay files to customize SDK generation without editing the source specification. Use JSONPath to target operations or schemas and configure naming, grouping, retries, pagination, headers, enum handling, or custom security.

OriginalShow the original description

Use when creating, applying, or validating overlay files including x-speakeasy extensions. Covers overlay syntax, JSONPath targeting, retries, pagination, naming, grouping, open enums, global headers, custom security. Triggers on "create overlay", "apply overlay", "overlay file", "x-speakeasy", "add extension", "configure retries", "add pagination", "overlay for retries".

trycompai/comp2,061 stars(GitHub 2,061 + cccskills 0)

Run score Not tested

See how to install

Good for

  • Creating an overlay for SDK naming or grouping
  • Applying an existing overlay to an OpenAPI spec
  • Validating an overlay file
  • Configuring retries or pagination

Files included (1)

  • SKILL.md10.9 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

manage-openapi-overlays

Overlays let you customize an OpenAPI spec for SDK generation without modifying the source. This skill covers creating overlay files, applying them to specs, and using them to fix validation errors.

Content Guides

TopicGuide
OpenAPI Validationcontent/validation.md
Security Schemescontent/security-schemes.md

These guides cover validating specs, fixing common issues, and configuring authentication methods.

Authentication

Set SPEAKEASY_API_KEY env var or run speakeasy auth login.

When to Use

Use this skill when you need to manually work with overlay files:

  • Creating an overlay file from scratch with specific JSONPath targets
  • Applying an existing overlay file to a spec
  • Validating overlay syntax and structure
  • Comparing two specs to generate an overlay
  • Understanding overlay mechanics (actions, targets, update/remove)
  • Fixing lint issues via manual overlay creation
  • User says: "create overlay", "apply overlay", "overlay file", "manual overlay", "overlay syntax", "JSONPath targeting", "validate overlay"

NOT for: AI-powered naming suggestions (see improve-sdk-naming instead)

Inputs

InputRequiredDescription
Target specYesOpenAPI spec to customize or fix
CustomizationsDependsChanges to apply (groups, names, retries, descriptions)
Overlay fileDependsExisting overlay to apply (for apply workflow)
Lint outputHelpfulValidation errors to fix (for fix workflow)

Outputs

OutputDescription
Overlay fileYAML file with JSONPath-targeted changes
Modified specTransformed OpenAPI spec (when applying)

Commands

Generate an Overlay by Comparing Specs

speakeasy overlay compare -b <before-spec> -a <after-spec> -o <output-overlay>

Use this when you have a modified version of a spec and want to capture the differences as a reusable overlay.

Apply an Overlay to a Spec

speakeasy overlay apply -s <spec-path> -o <overlay-path> --out <output-path>

Validate an Overlay

speakeasy overlay validate -o <overlay-path>

Creating an Overlay Manually

Create an overlay file with this structure:

overlay: 1.0.0
info:
  title: My Overlay
  version: 1.0.0
actions:
  - target: "$.paths['/example'].get"
    update:
      x-speakeasy-group: example
      x-speakeasy-name-override: getExample

Each action has a target (JSONPath expression) and an update (object to merge) or remove (boolean to delete the target).

Example: SDK Method Naming and Grouping

overlay: 1.0.0
info:
  title: SDK Customizations
  version: 1.0.0
actions:
  - target: "$.paths['/users'].get"
    update:
      x-speakeasy-group: users
      x-speakeasy-name-override: list
  - target: "$.paths['/users'].post"
    update:
      x-speakeasy-group: users
      x-speakeasy-name-override: create
  - target: "$.paths['/users/{id}'].get"
    update:
      x-speakeasy-group: users
      x-speakeasy-name-override: get
  - target: "$.paths['/users/{id}'].delete"
    update:
      x-speakeasy-group: users
      x-speakeasy-name-override: delete
      deprecated: true

This produces SDK methods: sdk.users.list(), sdk.users.create(), sdk.users.get(), sdk.users.delete().

Example: Apply Overlay

# Apply overlay and write merged spec
speakeasy overlay apply -s openapi.yaml -o sdk-overlay.yaml --out openapi-modified.yaml

# Compare two specs to generate an overlay
speakeasy overlay compare -b original.yaml -a modified.yaml -o changes-overlay.yaml

Using in Workflow (Recommended)

Instead of applying overlays manually, add them to .speakeasy/workflow.yaml:

sources:
  my-api:
    inputs:
      - location: ./openapi.yaml
    overlays:
      - location: ./naming-overlay.yaml
      - location: ./grouping-overlay.yaml

Overlays are applied in order. Later overlays can override earlier ones. This approach ensures overlays are always applied during speakeasy run.

Common Fix Patterns

Use overlays to fix validation issues when you cannot edit the source spec.

IssueOverlay Fix
Poor operation namesAdd x-speakeasy-name-override to the operation
Missing descriptionsAdd summary or description to the operation
Missing tagsAdd tags array to the operation
Need operation groupingAdd x-speakeasy-group to operations
Need retry configAdd x-speakeasy-retries to operations or globally
Deprecate an endpointAdd deprecated: true to the operation
Add SDK-specific metadataAdd any x-speakeasy-* extension

Fix Workflow

# 1. Validate the spec to identify issues
speakeasy lint openapi --non-interactive -s openapi.yaml

# 2. Create an overlay file targeting each issue (see patterns above)

# 3. Add overlay to workflow.yaml under sources.overlays

# 4. Regenerate the SDK
speakeasy run --output console

Speakeasy Extensions Reference

Extensions (x-speakeasy-*) customize SDK generation. Apply them via overlays.

ExtensionApplies ToPurpose
x-speakeasy-retriesOperation or rootConfigure retry behavior
x-speakeasy-paginationOperationEnable automatic pagination
x-speakeasy-name-overrideOperationOverride SDK method name
x-speakeasy-groupOperationGroup methods under namespace
x-speakeasy-unknown-valuesSchema with enumAllow unknown enum values
x-speakeasy-globalsRootDefine SDK-wide parameters
x-speakeasy-custom-security-schemeSecurity schemeMulti-part custom auth

Retries

actions:
  - target: "$.paths['/resources'].get"  # Or "$" for global
    update:
      x-speakeasy-retries:
        strategy: backoff
        backoff:
          initialInterval: 500      # ms
          maxInterval: 60000        # ms
          maxElapsedTime: 3600000   # ms
          exponent: 1.5
        statusCodes: ["5XX", "429"]
        retryConnectionErrors: true

Pagination

Offset/Limit:

actions:
  - target: "$.paths['/users'].get"
    update:
      x-speakeasy-pagination:
        type: offsetLimit
        inputs:
          - name: offset
            in: parameters
            type: offset
          - name: limit
            in: parameters
            type: limit
        outputs:
          results: $.data
          numPages: $.meta.total_pages

Cursor:

actions:
  - target: "$.paths['/events'].get"
    update:
      x-speakeasy-pagination:
        type: cursor
        inputs:
          - name: cursor
            in: parameters
            type: cursor
        outputs:
          results: $.events
          nextCursor: $.next_cursor

Open Enums (Anti-Fragility)

Prevent SDK breakage when APIs return new enum values:

actions:
  - target: "$.components.schemas.Status"
    update:
      x-speakeasy-unknown-values: allow

For all enums (add x-speakeasy-jsonpath: rfc9535 at overlay root):

actions:
  - target: $..[?length(@.enum) > 1]
    update:
      x-speakeasy-unknown-values: allow

Global Headers

Add SDK-wide headers as constructor options:

actions:
  - target: $
    update:
      x-speakeasy-globals:
        parameters:
          - $ref: "#/components/parameters/TenantId"
  - target: $.components
    update:
      parameters:
        TenantId:
          name: X-Tenant-Id
          in: header
          schema:
            type: string

Result: client = SDK(api_key="...", tenant_id="tenant-123")

Custom Security Schemes

For complex auth (HMAC, multi-part credentials):

actions:
  - target: $.components
    update:
      securitySchemes:
        hmacAuth:
          type: http
          scheme: custom
          x-speakeasy-custom-security-scheme:
            schema:
              type: object
              properties:
                keyId:
                  type: string
                keySecret:
                  type: string
  - target: $
    update:
      security:
        - hmacAuth: []

With envVarPrefix: MYAPI in gen.yaml, generates env var support for MYAPI_KEY_ID, MYAPI_KEY_SECRET.

JSONPath Targeting Reference

TargetSelects
$.paths['/users'].getGET /users operation
$.paths['/users/{id}'].*All operations on /users/{id}
$.paths['/users'].get.parameters[0]First parameter of GET /users
$.components.schemas.UserUser schema definition
$.components.schemas.User.properties.nameName property of User schema
$.infoAPI info object
$.info.titleAPI title
$.servers[0]First server entry

What NOT to Do

  • Do NOT use overlays for invalid YAML/JSON syntax errors -- fix the source file
  • Do NOT try to fix broken $ref paths with overlays -- fix the source spec
  • Do NOT use overlays to fix wrong data types -- this is an API design issue
  • Do NOT try to deduplicate schemas with overlays -- requires structural analysis
  • Do NOT ignore errors that require source spec fixes -- overlays cannot solve everything
  • Do NOT modify source OpenAPI specs directly if they are externally managed
  • Do NOT use a speakeasy overlay create command -- it does not exist

Troubleshooting

ErrorCauseSolution
"target not found"JSONPath does not match spec structureVerify exact path and casing by inspecting the spec
Changes not appliedOverlay not in workflowAdd overlay to sources.overlays in workflow.yaml
"invalid overlay"Malformed YAMLCheck overlay structure: needs overlay, info, actions
YAML parse errorInvalid overlay syntaxCheck YAML indentation and quoting
No changes visibleWrong target pathUse $.paths['/exact-path'] with exact casing
Errors persist after overlayIssue not overlay-appropriateCheck if the issue requires a source spec fix instead
Overlay order conflictLater overlay overrides earlierReorder overlays in workflow.yaml or merge into one file

After Making Changes

After creating or modifying overlay files and adding them to workflow.yaml, prompt the user to regenerate the SDK:

Overlay configuration complete. Would you like to regenerate the SDK now with speakeasy run?

If the user confirms, run:

speakeasy run --output console

Overlay changes only take effect in the SDK after regeneration.

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

Guide API endpoint changes so request DTOs, runtime validation, OpenAPI documentation, and MCP tool metadata stay aligned. It covers discoverability, authentication, uploads, long-running tasks, and response types that MCP tools cannot handle.

  • Adding an API endpoint with a request body
  • Updating DTO validation and OpenAPI metadata
  • Making an endpoint available as an MCP tool
trycompai/comp2.1KUpdated Oct 24, 2026

Review specified files for design system usage, replace legacy @trycompai/ui components and lucide-react icons with available @trycompai/design-system equivalents, and run the app type check to verify the migration.

  • Migrating legacy UI components
  • Replacing lucide-react icons with Carbon icons
  • Checking specified files for design system compliance
trycompai/comp2.1KUpdated Oct 24, 2026

audit-hooks

FreeSummary

Review specified files for outdated hook and API patterns, then replace them with the prescribed SWR hooks, API clients, or server API calls. The guidance covers data fetching, mutations, cache updates, and response handling, followed by a typecheck command.

  • Auditing files for disallowed API and hook patterns
  • Replacing raw fetch calls with the API client
  • Migrating server actions and database mutations to API hooks
trycompai/comp2.1KUpdated Oct 24, 2026

audit-rbac

FreeSummary

Review NestJS API endpoints and frontend components for role-based access control and audit log compliance. The skill lists permission, guard, route, and UI gating rules, then directs the agent to fix violations and run type checks.

  • Auditing API routes for permission decorators
  • Checking UI actions against user permissions
  • Fixing access control inconsistencies
trycompai/comp2.1KUpdated Oct 24, 2026

audit-tests

FreeSummary

Audit unit tests for components that use permissions. Add missing tests and fix failures, checking that administrators can use mutation controls, auditors cannot, and read-only content remains visible to both.

  • Adding permission tests for a component
  • Checking admin and auditor behavior
  • Fixing failing permission-related tests
trycompai/comp2.1KUpdated Oct 24, 2026

Set up Better Auth for TypeScript applications, including server and client configuration, database adapters, sessions, email and social sign-in, and plugins. The guide also highlights environment variables, schema generation, and security settings to review.

  • Configuring Better Auth in a TypeScript app
  • Connecting an ORM or database adapter
  • Setting up sessions and cookie storage
trycompai/comp2.1KUpdated Oct 24, 2026

See all skills by trycompai

Report a problem with this skill