Install any skill in seconds. Free to start, no credit card required.
Get Started Free →You are an expert in Airbyte, the open-source data integration platform with 300+ pre-built connectors. You help developers sync data from SaaS tools, databases, and APIs into data warehouses and lakes — handling incremental syncs, CDC (Change Data Capture), schema evolution, and error recovery for production data pipelines.
.claude/skills/terminalskills-airbyte/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 23% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 58% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 143% | 0% |
| case-03 | ✓→✓ | = Same ✓ | 165% | 0% |
| case-04 | ✓→✓ | = Same ✓ | 67% | 0% |
You are an expert in Airbyte, the open-source data integration platform with 300+ pre-built connectors. You help developers sync data from SaaS tools, databases, and APIs into data warehouses and lakes — handling incremental syncs, CDC (Change Data Capture), schema evolution, and error recovery for production data pipelines.
bash# Docker Compose (recommended for small-medium) git clone https://github.com/airbytehq/airbyte.git cd airbyte && ./run-ab-platform.sh # UI at http://localhost:8000 # Kubernetes (production) helm repo add airbyte https://airbytehq.github.io/helm-charts helm install airbyte airbyte/airbyte -n airbyte --create-namespace # Cloud: https://cloud.airbyte.com (managed)
python# Create connections programmatically via Airbyte API import requests AIRBYTE_API = "http://localhost:8000/api/v1" # Create a Stripe source source = requests.post(f"{AIRBYTE_API}/sources/create", json={ "workspaceId": workspace_id, "name": "Stripe Production", "sourceDefinitionId": "e094cb9a-26de-4645-8761-65c0c425d1de", # Stripe "connectionConfiguration": { "account_id": "acct_xxx", "client_secret": os.environ["STRIPE_SECRET_KEY"], "start_date": "2025-01-01T00:00:00Z", }, }).json() # Create a BigQuery destination destination = requests.post(f"{AIRBYTE_API}/destinations/create", json={ "workspaceId": workspace_id, "name": "BigQuery Warehouse", "destinationDefinitionId": "22f6c74f-5699-40ff-833c-4a879ea40133", "connectionConfiguration": { "project_id": "my-project", "dataset_id": "raw_stripe", "credentials_json": os.environ["GCP_CREDENTIALS"], "loading_method": {"method": "GCS Staging", "gcs_bucket_name": "airbyte-staging"}, }, }).json() # Create connection (source → destination) connection = requests.post(f"{AIRBYTE_API}/connections/create", json={ "sourceId": source["sourceId"], "destinationId": destination["destinationId"], "syncCatalog": { "streams": [ { "stream": {"name": "subscriptions", "namespace": "stripe"}, "config": { "syncMode": "incremental", "destinationSyncMode": "append_dedup", "cursorField": ["created"], "primaryKey": [["id"]], }, }, ], }, "schedule": {"scheduleType": "cron", "cronExpression": "0 */2 * * * ?"}, "namespaceFormat": "raw_${SOURCE_NAMESPACE}", }).json()
python# Build a custom source connector with Airbyte CDK from airbyte_cdk.sources import AbstractSource from airbyte_cdk.sources.streams import Stream from airbyte_cdk.sources.streams.http import HttpStream class InternalAPIStream(HttpStream): url_base = "https://api.internal.company.com/v1/" primary_key = "id" cursor_field = "updated_at" def path(self, **kwargs) -> str: return "events" def parse_response(self, response, **kwargs): for record in response.json()["data"]: yield record class Source(AbstractSource): def check_connection(self, logger, config): # Verify API credentials work return True, None def streams(self, config): return [InternalAPIStream(authenticator=self.get_auth(config))]
bash# Docker Compose curl -o docker-compose.yaml https://raw.githubusercontent.com/airbytehq/airbyte/master/docker-compose.yaml docker compose up -d # Python CDK for custom connectors pip install airbyte-cdk
auto_propagation in connection settingsraw_${SOURCE} namespace pattern; keeps raw data organized before dbt transforms| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 16,983 | 14,635 | -14% | 1 | 1 | 0% | 3,553 | 4,363 | +23% | 0 | 0 | — |
case-02 | pass→pass | 4,543 | 3,511 | -23% | 1 | 1 | 0% | 765 | 1,862 | +143% | 0 | 0 | — |
case-03 | pass→pass | 3,447 | 2,790 | -19% | 1 | 1 | 0% | 679 | 1,797 | +165% | 0 | 0 | — |
case-04 | pass→pass | 11,487 | 10,784 | -6% | 1 | 1 | 0% | 1,985 | 3,323 | +67% | 0 | 0 | — |
case-05 | pass→pass | 16,294 | 12,764 | -22% | 1 | 1 | 0% | 2,820 | 3,652 | +30% | 0 | 0 | — |
case-10 | pass→pass | 3,702 | 3,448 | -7% | 1 | 1 | 0% | 679 | 1,910 | +181% | 0 | 0 | — |
case-06 | pass→pass | 7,264 | 10,501 | +45% | 1 | 1 | 0% | 1,200 | 2,804 | +134% | 0 | 0 | — |
case-07 | fail→pass | 11,528 | 10,128 | -12% | 1 | 1 | 0% | 1,984 | 3,134 | +58% | 0 | 0 | — |
case-08 | pass→pass | 3,724 | 4,786 | +29% | 1 | 1 | 0% | 669 | 2,254 | +237% | 0 | 0 | — |
case-09 | pass→pass | 4,174 | 3,528 | -15% | 1 | 1 | 0% | 796 | 1,964 | +147% | 0 | 0 | — |
case-11 | pass→pass | 10,607 | 12,018 | +13% | 1 | 1 | 0% | 1,852 | 3,401 | +84% | 0 | 0 | — |
case-12 | pass→pass | 8,554 | 9,011 | +5% | 1 | 1 | 0% | 1,678 | 2,911 | +73% | 0 | 0 | — |
case-13 | pass→pass | 11,180 | 13,586 | +22% | 1 | 1 | 0% | 1,900 | 3,687 | +94% | 0 | 0 | — |
case-14 | pass→pass | 7,216 | 6,019 | -17% | 1 | 1 | 0% | 1,510 | 2,609 | +73% | 0 | 0 | — |
case-15 | pass→pass | 5,596 | 4,607 | -18% | 1 | 1 | 0% | 1,105 | 2,175 | +97% | 0 | 0 | — |
case-16 | pass→pass | 11,308 | 10,449 | -8% | 1 | 1 | 0% | 1,824 | 3,089 | +69% | 0 | 0 | — |
case-17 | pass→pass | 2,596 | 2,306 | -11% | 1 | 1 | 0% | 349 | 1,772 | +408% | 0 | 0 | — |
case-18 | pass→pass | 9,977 | 3,239 | -68% | 1 | 1 | 0% | 2,071 | 1,808 | -13% | 0 | 0 | — |
case-19 | pass→pass | 3,581 | 3,684 | +3% | 1 | 1 | 0% | 601 | 1,963 | +227% | 0 | 0 | — |
case-20 | pass→pass | 2,941 | 1,677 | -43% | 1 | 1 | 0% | 488 | 1,544 | +216% | 0 | 0 | — |
case-21 | pass→pass | 9,557 | 14,981 | +57% | 1 | 1 | 0% | 1,778 | 3,764 | +112% | 0 | 0 | — |
case-22 | pass→pass | 8,351 | 5,325 | -36% | 1 | 1 | 0% | 1,531 | 2,435 | +59% | 0 | 0 | — |
case-23 | pass→pass | 15,912 | 14,962 | -6% | 1 | 1 | 0% | 3,320 | 4,174 | +26% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +9 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.