Agent skill

Create Environment

by godatadriven in godatadriven/whirl

Create a new Whirl environment in the envs/ directory. An agent skill from godatadriven/whirl.

Apache-2.0Auto-check passedBackend & APIs

Install Create Environment

skills CLI
$ npx skills add godatadriven/whirl --skill create-environment -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install godatadriven/whirl create-environment --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/godatadriven/whirl.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/create-environment .claude/skills/create-environment && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
create-environment
GitHub stars
205
Token cost
~1.9k tokens
SKILL.md length
454 words
Files
1
Skills in repo
4
Repo updated
First seen
Licence
Apache-2.0

At a glance

Create a new Whirl environment in the envs/ directory. An agent skill from godatadriven/whirl.

  • Works in 3 steps: Gather Requirements → Create Files → Verify
  • The user wants to add
  • Calls airflow, pip and curl; needs POSTGRES_PASSWORD and AIRFLOW__API_AUTH__JWT_SECRET
  • Create a new Docker Compose environment for the Whirl local Airflow development tool

What it does

Create Environment is an agent skill from godatadriven/whirl. Create a new Whirl environment in the envs/ directory. Use when the user wants to add, scaffold, or create a new Docker Compose environment for the Whirl local Airflow development tool. Also invoked by the create-example skill when the user needs a custom environment. Triggers on requests like "create a new environment", "add an environment for Kafka", "I need an environment with Redis and S3".

Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Backend & APIs, covering Containers, Data pipelines and ETL and File uploads and storage. It works with Docker, Apache Airflow, Redis and Apache Kafka. The repository describes itself as: Fast iterative local development and testing of Apache Airflow workflows. The licence is Apache-2.0.

When your agent uses it

  • The user wants to add
  • Create a new Docker Compose environment for the Whirl local Airflow development tool
  • Needs a custom environment
  • Requests like create a new environment

Example prompts

  • “create a new environment”
  • “add an environment for Kafka”
  • “I need an environment with Redis and S3”
  • “/create-environment”

Requirements

  • Python 3
  • Docker
  • A credential in AIRFLOW__API_AUTH__JWT_SECRET
  • A credential in AIRFLOW__API__SECRET_KEY

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. Gather Requirements
  2. Create Files
  3. Verify

What it can do on your machine

Read from SKILL.md and the folder at commit f085d57. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • airflow
    • pip
    • curl
    • aws

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use pip, curl and aws, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • POSTGRES_PASSWORD
    • AIRFLOW__API_AUTH__JWT_SECRET
    • AIRFLOW__API__SECRET_KEY
    • AWS_ACCESS_KEY_ID
    • AWS_SECRET_ACCESS_KEY
    • AIRFLOW__CORE__FERNET_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Create Environment loads about 1.9k tokens when it runs. Until then it costs about 104 tokens; SKILL.md has 454 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~104
When it runs · the whole SKILL.md, loaded when a task matches
~1.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from godatadriven/whirl at commit f085d57, republished under its Apache-2.0 licence (© godatadriven). 454 words, ~1,894 tokens.

Download SKILL.mdSave it as .claude/skills/create-environment/SKILL.md (or your agent's skills folder).
name
create-environment
description
Create a new Whirl environment in the envs/ directory. Use when the user wants to add, scaffold, or create a new Docker Compose environment for the Whirl local Airflow development tool. Also invoked by the create-example skill when the user needs a custom environment. Triggers on requests like "create a new environment", "add an environment for Kafka", "I need an environment with Redis and S3".

Create Whirl Environment

Scaffold a new Whirl environment in envs/. Gather requirements interactively, then generate all files.

Workflow

1. Gather Requirements

Ask the user for:

  1. Environment name - short kebab-case name describing the services (e.g. postgres-s3-spark, sftp-mysql-example)
  2. Services needed - which external services to include. Common options:
    • S3 - LocalStack (localstack/localstack:3.0.2, port 4566)
    • PostgreSQL - (postgres:16, port 5432)
    • MySQL - (mysql:8, port 3306)
    • MockServer - REST API mocking (mockserver/mockserver:5.15.0, port 1080)
    • Spark - Master + Worker cluster
    • SFTP - (atmoz/sftp, port 22)
    • SMTP - MailDev (maildev/maildev:2.0.5, ports 1080/1025)
    • Redis, Kafka, or other custom services
  3. Airflow mode - how Airflow should run:
    • singlemachine (default) - scheduler + webserver in one container, simplest setup
    • Distributed - separate api-server, scheduler, dag-processor, triggerer containers (for testing HA or distributed setups)
2. Create Files

Create envs/<name>/ with these files:

docker-compose.yml (required)

Follow these patterns:

Airflow service (singlemachine mode):

yaml
services:
  airflow:
    image: docker-whirl-airflow:py-${PYTHON_VERSION}-local
    command: ["singlemachine"]
    ports:
      - '5000:5000'
    env_file:
      - .whirl.env
    environment:
      - WHIRL_SETUP_FOLDER
      - AIRFLOW__FAB__AUTH_BACKENDS
      - AIRFLOW__CORE__EXECUTION_API_SERVER_URL
      - AIRFLOW__API_AUTH__JWT_SECRET
    volumes:
      - ${DAG_FOLDER}:/opt/airflow/dags/$PROJECTNAME
      - ${ENVIRONMENT_FOLDER}/whirl.setup.d:${WHIRL_SETUP_FOLDER}/env.d/
      - ${DAG_FOLDER}/whirl.setup.d:${WHIRL_SETUP_FOLDER}/dag.d/

Adding service dependencies:

yaml
    depends_on:
      - s3server
      - postgresdb
    links:
      - s3server:${DEMO_BUCKET}.s3server  # Only for S3 virtual-host style access

Common service definitions:

S3 (LocalStack):

yaml
  s3server:
    image: localstack/localstack:3.0.2
    ports:
      - "4566:4566"
    environment:
      - SERVICES=s3
    env_file:
      - .whirl.env

PostgreSQL:

yaml
  postgresdb:
    image: postgres:16
    ports:
      - 5432:5432
    environment:
      - POSTGRES_HOST=postgresdb
      - POSTGRES_PORT=5432
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_DB=${POSTGRES_DB}

MockServer:

yaml
  mockserver:
    image: mockserver/mockserver:5.15.0
    ports:
      - 1080:1080
    environment:
      - LOG_LEVEL=ERROR
      - SERVER_PORT=1080

MySQL:

yaml
  mysql:
    image: mysql:8
    ports:
      - 3306:3306
    env_file:
      - mysql.env

SMTP (MailDev):

yaml
  smtp-server:
    image: maildev/maildev:2.0.5
    ports:
      - "1080:1080"
      - "1025:1025"

Mock data volume (when needed): Add to the airflow service volumes:

yaml
      - ${MOCK_DATA_FOLDER}:/mock-data
.whirl.env (required)

Standard variables always included:

AIRFLOW_VERSION=3.3.2
AIRFLOW__CORE__EXPOSE_CONFIG=True
AIRFLOW__API__EXPOSE_CONFIG=True
AIRFLOW__API__SECRET_KEY=webser_secret_key
AIRFLOW__DATABASE__LOAD_DEFAULT_CONNECTIONS=False
AIRFLOW__CORE__LOAD_EXAMPLES=False

Add service-specific variables based on chosen services:

For S3:

AWS_ACCESS_KEY_ID=bar
AWS_SECRET_ACCESS_KEY=foo
DEMO_BUCKET=demo-s3-output
AWS_SERVER=s3server
AWS_PORT=4566

For PostgreSQL:

POSTGRES_HOST=postgresdb
POSTGRES_PORT=5432
POSTGRES_PASSWORD=p@ssw0rd
POSTGRES_USER=postgres
POSTGRES_DB=postgresdb

For SMTP:

AIRFLOW__SMTP__SMTP_HOST=smtp-server
AIRFLOW__SMTP__SMTP_PORT=2525
AIRFLOW__SMTP__SMTP_MAIL_FROM=sender@example.com

For distributed Airflow (add fernet key and DB connection):

AIRFLOW__CORE__FERNET_KEY=YlCImzjge_TeZc7jPJ7Jz2pgOtb4yTssA1pVyqIADWg=
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=postgresql+psycopg2://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
whirl.setup.d/ scripts (optional but typical)

Create numbered shell scripts for environment initialization. Common scripts:

S3 connection setup (01_add_connection_s3.sh):

bash
#!/usr/bin/env bash

echo "=========================="
echo "== Configure S3 =========="
echo "=========================="

pip install awscli

export AWS_ENDPOINT_URL="http://${AWS_SERVER}:${AWS_PORT}"

while [[ "$(curl -s -o /dev/null -w '%{http_code}' ${AWS_ENDPOINT_URL})" != "200" ]]; do
  echo "Waiting for S3 server..."
  sleep 2
done

aws s3 mb s3://${DEMO_BUCKET}

airflow connections add aws_default \
  --conn-type aws \
  --conn-extra "{\"endpoint_url\": \"http://${AWS_SERVER}:${AWS_PORT}\"}"

PostgreSQL connection setup (02_add_connection_postgres.sh):

bash
#!/usr/bin/env bash

echo "=============================="
echo "== Configure PostgreSQL ======"
echo "=============================="

airflow connections add postgres_default \
  --conn-type postgres \
  --conn-host ${POSTGRES_HOST} \
  --conn-port ${POSTGRES_PORT} \
  --conn-login ${POSTGRES_USER} \
  --conn-password ${POSTGRES_PASSWORD} \
  --conn-schema ${POSTGRES_DB}

Scripts must use #!/usr/bin/env bash and include wait loops for service readiness when needed.

compose.setup.d/ scripts (optional)

Host-side scripts executed before Docker Compose starts. Use for:

  • Cleaning persistent data directories (e.g., .pgdata/)
  • Building custom Docker images
  • Pre-provisioning resources
Additional env files (optional)

For services needing separate env files (e.g., mysql.env, sftp.env).

Show full SKILL.md (197 more words)Show less
README.md (required)

Every environment in envs/ has one. Keep to the shape the existing ones use (see envs/postgres-s3-external-spark/README.md for a typical example):

  • Title + one paragraph — what this environment is for, and when to reach for it rather than a neighbouring one. If a near-identical environment exists, link to it and say what differs; the Spark and Delta Sharing families are all distinguished this way.
  • Services table — service, image, published ports, purpose. Mark build-only or init-only containers as such so they are not mistaken for long-running services.
  • Setup scripts — one line each, saying what it does. Note explicitly when a script runs on the host (compose.setup.d/) rather than in the container.
  • Configuration — the .whirl.env values worth knowing, and any that deviate from the repo defaults (a pinned PYTHON_VERSION, non-default Postgres credentials, an unusual port).
  • Used by — which examples default to this environment. If none do, give the whirl -x <example> -e <env> command that exercises it, and say if CI runs it. Note any CI exclusion and why (memory, missing upstream artifact).
3. Verify

After creating files:

  • Confirm docker-compose.yml is valid YAML
  • Ensure .whirl.env variable names match service names in docker-compose.yml
  • Setup scripts are executable: chmod +x envs/<name>/whirl.setup.d/*.sh

© godatadriven, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/create-environment of godatadriven/whirl.

Open the folder on GitHubat commit f085d57

Compare with similar skills

Create Environment next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Create Environment compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Create Environment this skillgodatadriven/whirl205—~1.9kAutomated safety check: PassApache-2.0
Use Sealoshashgraph-online/awesome-codex-plugins1.2k—~2.2kAutomated safety check: PassApache-2.0
Monstermq Broker Configvogler75/monster-mq143—~2.2kAutomated safety check: PassGPL-3.0
Cloudrun DevelopmentTencentCloudBase/CloudBase-AI-Toolkit1.1k1 repos~7.2kAutomated safety check: PassMIT
CloudbaseTencentCloudBase/CloudBase-AI-Toolkit1.1k1 repos~4.7kAutomated safety check: PassMIT
Stripe Projectsfossasia/eventyay1.7k5 repos~2kAutomated safety check: NotesApache-2.0

Similar skills

  • Use Sealos

    hashgraph-online/awesome-codex-plugins

    Deploy and operate apps on Sealos Cloud: sign in to a Sealos account, deploy any project or self-hosted app (from the template store, an official Docker image, or project source code), provision…

    1.2k GitHub stars~2.2k tokensUpdated today
    DatabasesAuto-check passed
  • Monstermq Broker Config

    vogler75/monster-mq

    Guide for configuring, deploying, and operating the MonsterMQ broker.

    143 GitHub stars~2.2k tokensUpdated 2 days ago
    DevOps & CloudAuto-check passed
  • Cloudrun Development

    TencentCloudBase/CloudBase-AI-Toolkit

    CloudBase Run backend development rules (Function mode/Container mode).

    1.1k GitHub starsUsed in 1 repo~7.2k tokens
    DatabasesAuto-check passed
  • Cloudbase

    TencentCloudBase/CloudBase-AI-Toolkit

    A skill your agent uses when you develop, design, build, deploy, debug, migrate, or troubleshoot CloudBase (腾讯云开发, 云开发, TCB, 微信云开发) projects — Web, 微信小程序, 小程序, uni-app, mobile (iOS, Android…

    1.1k GitHub starsUsed in 1 repo~4.7k tokens
    Backend & APIsAuto-check passed
  • Stripe Projects

    fossasia/eventyay

    A skill your agent uses when the user wants to provision infrastructure or third-party services using Stripe Projects.

    1.7k GitHub starsUsed in 5 repos~2k tokens
    Backend & APIsAuto-check: notes
  • Foundatio

    FoundatioFx/Foundatio

    A skill your agent uses when working with Foundatio infrastructure abstractions for .NET -- caching, queuing, messaging, file storage, distributed locking, or background jobs.

    2.1k GitHub stars~3.9k tokensUpdated yesterday
    Backend & APIsAuto-check passed

More from godatadriven/whirl

  • Verify CI Impact

    godatadriven/whirl

    Before committing, work out which Whirl examples need a CI run to verify changes still work, then run them after confirming with the user.

    205 GitHub stars~1.3k tokensUpdated 7 days ago
    Auto-check passed
  • Create Example

    godatadriven/whirl

    Create a new Whirl example project in the examples/ directory.

    205 GitHub stars~1.1k tokensUpdated 7 days ago
    Auto-check passed
  • Version Bumper

    godatadriven/whirl

    Bump the Airflow or Python version across all project files.

    205 GitHub stars~1.2k tokensUpdated 7 days ago
    Auto-check passed

Questions about Create Environment

What does Create Environment do?

Create a new Whirl environment in the envs/ directory. An agent skill from godatadriven/whirl. Create Environment is an agent skill from godatadriven/whirl. Create a new Whirl environment in the envs/ directory.

When should I use Create Environment?

Create Environment fits situations like: the user wants to add; create a new Docker Compose environment for the Whirl local Airflow development tool; needs a custom environment; requests like create a new environment.

How do I install Create Environment in Claude Code?

Run `npx skills add godatadriven/whirl --skill create-environment -a claude-code`. Or copy the skill folder (.claude/skills/create-environment in godatadriven/whirl) into .claude/skills/create-environment in your project. Claude Code loads it when a task matches its description.

How do I install Create Environment in Codex?

Run `npx skills add godatadriven/whirl --skill create-environment -a codex`. Or copy the skill folder (.claude/skills/create-environment in godatadriven/whirl) into .agents/skills/create-environment in your project. Codex loads it when a task matches its description.

Can I use Create Environment in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add godatadriven/whirl --skill create-environment -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/create-environment, .gemini/skills/create-environment, .github/skills/create-environment and .opencode/skills/create-environment in your project.

What does Create Environment need to run?

Going by SKILL.md and its folder, Create Environment needs the command-line tools its instructions call (airflow, pip, curl and aws) and credentials named POSTGRES_PASSWORD, AIRFLOW__API_AUTH__JWT_SECRET, AIRFLOW__API__SECRET_KEY and AWS_ACCESS_KEY_ID. Our summary lists: Python 3; Docker; A credential in AIRFLOW__API_AUTH__JWT_SECRET; A credential in AIRFLOW__API__SECRET_KEY.

Does Create Environment access the network?

SKILL.md contains no URLs. Its commands use pip and curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Create Environment safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Create Environment use?

Create Environment is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Create Environment use?

About 1.9k tokens (SKILL.md is roughly 7.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Create Environment?

Skills that share tags, products or a category with Create Environment: Use Sealos (hashgraph-online/awesome-codex-plugins, 1.2k stars), Monstermq Broker Config (vogler75/monster-mq, 143 stars), Cloudrun Development (TencentCloudBase/CloudBase-AI-Toolkit, 1.1k stars) and Cloudbase (TencentCloudBase/CloudBase-AI-Toolkit, 1.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Create Environment?

godatadriven (a GitHub organization) maintains it in godatadriven/whirl, which has 205 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 1, 2026.

Source: godatadriven/whirl on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.