ballerina-platform/ballerina-library/generating-connectors

Claude Code and agent skill by ballerina-platform/ballerina-library

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Generates a complete Ballerina connector from an OpenAPI specification. Use when the user wants to create, generate, or build a Ballerina connector from an OpenAPI or Swagger spec; run the connector creation pipeline; generate a Ballerina client from an API spec; or produce connector tests, examples, and documentation.

Install

npx vskill@latest install ballerina-platform/ballerina-library/generating-connectors

SKILL.md

Generating Ballerina Connectors Skill

An AI-assisted pipeline for generating and maintaining Ballerina connectors from OpenAPI specifications. Mirrors the bal connector openapi workflow with interactive guidance, "2+1" prompting, and LLM reasoning applied only where it adds value.


How This Skill Works

This skill orchestrates five pipeline stages in sequence:

Setup → Sanitize → Client → Tests → Examples → Docs

Each stage is defined in a dedicated file under stages/. Load only the active stage's file into context — do not preload all stages.

Compilation errors are fixed inline within each stage using the reusable fix procedure (references/fix-procedure.md). Any stage that runs bal build will invoke this procedure automatically on failure — no separate fix stage.

Scripts in scripts/ handle all deterministic operations. Run them via Bash — do not reimplement their logic inline.


Quick Reference

StageFileSkippable?Key output
0. Setupstages/00-setup.mdNoConfiguration, validated spec
1. Sanitizestages/01-sanitize.mdYes (sanitize)aligned_ballerina_openapi.yaml, sanitations.md
2. Clientstages/02-client.mdYes (client)client.bal, types.bal — build + auto-fix inline
3. Testsstages/03-tests.mdYes (tests)tests/test.bal, mock server — build + auto-fix inline
4. Examplesstages/04-examples.mdYes (examples)regenerate safely, or retain + validate existing packages when excluded
5. Docsstages/05-docs.mdYes (docs)README.md, Module.md, Ballerina.toml keywords

Entry Point Instructions

When this skill is invoked:

  1. Print the welcome banner:

``` ╔══════════════════════════════════════════╗ ║ Ballerina Connector Generator ║ ╚════════════════════════════════ ᵥ₀․₄․₀ ══╝

I'll guide you through generating a Ballerina connector from your OpenAPI spec. This involves up to 5 stages: sanitize → client → tests → examples → docs. ```

  1. Read and follow stages/00-setup.md to collect all configuration. Do this before loading any other stage file.
  1. After setup, execute stages in order, respecting EXCLUDED_STAGES:

`` for stage in [sanitize, client, tests, examples, docs]: if stage not in EXCLUDED_STAGES: Read the corresponding stage file Follow its instructions completely If INTERACTIVE_MODE: pause and confirm before next stage elif stage == examples: Read stages/04-examples.md and follow its retained-example validation path ``

  1. When any stage runs bal build and it fails, read references/fix-procedure.md and invoke it immediately in that stage's context before proceeding.

Shared State

These variables are set in Setup (stage 00) and used by all subsequent stages:

VariableDescription
PYTHON_CMDResolved Python 3 command for this machine (python3/python/py) — determined once in Setup Step 0
SPEC_PATHAbsolute or relative path to the input OpenAPI spec
BALLERINA_DIRDirectory containing (or to contain) Ballerina.toml — where client.bal, types.bal, utils.bal, tests/, README.md, Module.md are generated
SPEC_DIRUser-confirmed path for the aligned spec, sanitations.md, and stable operation-ID/schema-name decisions in ai-mappings.json (default: ./docs/spec)
EXAMPLE_DIRUser-confirmed path for generated examples (default: ./examples); retained examples use this default even when generation is excluded
BAL_ORGBallerina package org (read from Ballerina.toml or collected from user)
BAL_PACKAGEBallerina package name (read from Ballerina.toml or collected from user)
LICENSE_PATHPath to the user-provided license file, or empty if not provided
TAGSList of OpenAPI tags to filter (or empty for all)
OPERATIONSList of operation IDs to filter (or empty for all)
USE_REMOTEBoolean — generate remote vs resource methods (connector-tool default: false)
INTERACTIVE_MODEBoolean — pause after each stage (connector-tool default: false)
EXCLUDED_STAGESList of stage names to skip — valid values: sanitize, client, tests, examples, docs
SPEC_METADATAJSON from parse_openapi_spec.py on the original spec (Stage 00) — the only spec representation in LLM context
ALIGNED_SPEC_METADATAJSON from parse_openapi_spec.py on ALIGNED_SPEC, the post-flatten/align spec (Stage 01 onward) — authoritative for path keys, operationIds, and generated schema names

Core Principles

Context hygiene: Never inject the raw OpenAPI spec into the LLM context. Always use the structured JSON output from scripts/parse_openapi_spec.py. When fixing code errors, read only the specific lines indicated by scripts/parse_errors.py.

Deterministic first: Use scripts for everything that doesn't require reasoning. Only use the LLM for: spec enhancement (naming, descriptions), code error repair, and content generation (examples, docs).

"2+1" prompting: For every required input, always offer exactly two contextual defaults plus a "custom value" option. See stages/00-setup.md for the pattern.

Transparency: Print a clear status line before each sub-step. Use ✓ for success, ⚠ for warnings, ✗ for failures.


Reference Files

  • references/workflows.md — Stage sequencing rules, error handling, final summary format
  • references/fix-procedure.md — Reusable compilation error fixer (invoked inline by client, tests, examples stages)
  • templates/readme_template.md — Connector README scaffold for stage 05

Scripts Reference

All scripts are in <skill-root>/scripts/ and are pure Python (.py) — no shell scripts, so they run identically on macOS/Linux/Windows. Invoke them with <PYTHON_CMD> (resolved once in Setup Step 0), not a hardcoded python3.

bash
# Check environment (bal, PyYAML) — run first in setup, after PYTHON_CMD is resolved
<PYTHON_CMD> scripts/check_environment.py
# Find OpenAPI spec candidates in CWD — use before prompting for spec path
<PYTHON_CMD> scripts/find_spec_files.py
# Find an existing Ballerina.toml nested below CWD — use before prompting for output dir
<PYTHON_CMD> scripts/find_ballerina_toml.py
# Initialise a Ballerina package in the output dir (bal new . + remove main.bal)
<PYTHON_CMD> scripts/init_ballerina_package.py "<output-dir>"
# Validate spec file (YAML/JSON validity + required fields)
<PYTHON_CMD> scripts/validate_spec.py "<spec-path>"
# Extract structured spec metadata — the only spec representation in LLM context
<PYTHON_CMD> scripts/parse_openapi_spec.py "<spec-path>"
# Convert YAML spec to JSON — writes <same-name>.json, prints output path
<PYTHON_CMD> scripts/convert_yaml_to_json.py "<spec.yaml>"
# Locate aligned/flattened spec output in a spec directory
<PYTHON_CMD> scripts/find_spec_output.py "<spec-dir>"
# Read Ballerina.toml package fields → JSON {org, name, version, distribution, keywords, description}
<PYTHON_CMD> scripts/parse_ballerina_toml.py "<Ballerina.toml>"
# Write/replace the keywords array in Ballerina.toml's [package] section
<PYTHON_CMD> scripts/write_ballerina_keywords.py "<Ballerina.toml>" "<keyword1>" "<keyword2>" ...
# Generate/merge sanitations.md from a structural diff of original vs aligned spec
<PYTHON_CMD> scripts/generate_sanitations.py "<original-spec>" "<aligned-spec>" "<out.md>" --template "<template>" --module-name "<PC>" --cli-command "<cmd>"
# Analyse client.bal → JSON {apiCount, numExamples, configType, methods:[...]}
<PYTHON_CMD> scripts/analyze_client.py "<client.bal>"
# Generate service stub from spec → tests/mock_service.bal
# 3rd/4th args optional (empty string when unset): operation filter + license header
<PYTHON_CMD> scripts/generate_mock_stub.py "<aligned-spec>" "<output-dir>" "<SELECTED_OPERATIONS>" "<LICENSE_PATH>"
# Run any bal command in a working directory — prints stderr to a temp file and its path on failure
<PYTHON_CMD> scripts/run_bal_command.py --cwd "<working-dir>" <command> [<argument>...]
# Parse compilation errors from bal build stderr → JSON error array
<PYTHON_CMD> scripts/parse_errors.py "<stderr-file-or-stdin>"
# Reuse and persist stable AI operation-ID decisions across regeneration runs
<PYTHON_CMD> scripts/operation_id_mappings.py prepare "<aligned-spec>" "<ai-mappings.json>" "<candidate.json>"
<PYTHON_CMD> scripts/operation_id_mappings.py apply "<aligned-spec>" "<candidate.json>" "<decisions.json>" "<ai-mappings.json>"
# Scan an aligned spec for duplicate operationIds — non-fatal warnings
<PYTHON_CMD> scripts/check_duplicate_operation_ids.py "<aligned-spec>"
# Reuse and persist stable AI schema-name decisions; schema-less specs are supported
<PYTHON_CMD> scripts/schema_mappings.py prepare "<aligned-spec>" "<ai-mappings.json>" "<candidate.json>"
<PYTHON_CMD> scripts/schema_mappings.py apply "<aligned-spec>" "<candidate.json>" "<decisions.json>" "<ai-mappings.json>"
# Collect/apply missing request-body and API-key descriptions
<PYTHON_CMD> scripts/spec_descriptions.py prepare "<aligned-spec>" "<requests.json>"
<PYTHON_CMD> scripts/spec_descriptions.py apply "<aligned-spec>" "<requests.json>" "<decisions.json>"
# Normalize and resolve a unique snake_case example name
<PYTHON_CMD> scripts/example_names.py resolve "<examples-dir>" "<suggested-name>" "<fallback-name>"
# Capture and compare client/types source snapshots for semantic-version advice
<PYTHON_CMD> scripts/client_version_summary.py capture "<ballerina-dir>" "<baseline.json>"
<PYTHON_CMD> scripts/client_version_summary.py diff "<ballerina-dir>" "<baseline.json>"
# Scan or safely clean generated example packages only
<PYTHON_CMD> scripts/manage_examples.py <scan|cleanup> "<examples-dir>"

Security

  • Security scanPassed, 95 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

7-day trend score
0

Not refreshed yet.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/ballerina-platform/ballerina-library/generating-connectors/badge)](https://verified-skill.com/skills/ballerina-platform/ballerina-library/generating-connectors)

Something wrong with this skill or its page? Tell us.