Agent skill

Windmill

by plan4better in plan4better/goat

A skill your agent uses when working with GOAT's Windmill instance — running or syncing analytics tools, inspecting job execution, adding a new tool, or checking which f/goat/tools/ scripts exist.

GPL-3.0Auto-check: notesFrontend & Design

Install Windmill

skills CLI
$ npx skills add plan4better/goat --skill windmill -a claude-code

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

GitHub CLI
$ gh skill install plan4better/goat windmill --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/plan4better/goat.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/windmill .claude/skills/windmill && 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
windmill
GitHub stars
167
Token cost
~910 tokens
SKILL.md length
305 words
Files
1
Skills in repo
2
Repo updated
First seen
Licence
GPL-3.0

At a glance

A skill your agent uses when working with GOAT's Windmill instance — running or syncing analytics tools, inspecting job execution, adding a new tool, or checking which f/goat/tools/ scripts exist.

  • Works in 5 steps: Frontend calls the processes service API… → processes creates a job in customer.job… → Windmill runs the generated Python… → …
  • Working with GOATs Windmill instance — running
  • SKILL.md covers Setup, Folder Structure, Tools — do not hardcode the list and How Tools Execute, plus 3 more sections
  • Calls uv and python; needs WINDMILL_TOKEN

What it does

Windmill is an agent skill from plan4better/goat. Use when working with GOAT's Windmill instance — running or syncing analytics tools, inspecting job execution, adding a new tool, or checking which f/goat/tools/ scripts exist. Use the Windmill MCP tools for API calls.

Its SKILL.md is about 910 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 Frontend & Design, covering MCP servers. It works with Python. The repository describes itself as: WebGIS with Planning Intelligence. The licence is GPL-3.0.

When your agent uses it

  • Working with GOATs Windmill instance — running
  • Syncing analytics tools
  • Inspecting job execution
  • Adding a new tool

Example prompts

  • “/windmill”

Requirements

  • Python 3
  • A credential in WINDMILL_TOKEN

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Frontend calls the processes service API to start a tool
  2. processes creates a job in customer.job and submits it to Windmill
  3. Windmill runs the generated Python script, which imports from goatlib.tools
  4. The tool class (BaseToolRunner subclass) reads input from DuckLake, processes, writes output to DuckLake
  5. Job status is tracked in customer.job (pending → running → finished/failed)

What it can do on your machine

Read from SKILL.md and the folder at commit a181bf4. 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:

    • uv
    • python

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

  • Network

    No URLs in SKILL.md. Its commands use uv, 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:

    • WINDMILL_TOKEN

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

Context cost

Windmill loads about 910 tokens when it runs. Until then it costs about 57 tokens; SKILL.md has 305 words of instructions outside code blocks.

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

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: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NoteMentions a .env fileSKILL.md:12
    - **URL / Web UI**: `WINDMILL_URL` in `.env` (local dev: http://localhost:8110)
  • NoteMentions a .env fileSKILL.md:14
    - **Token**: `WINDMILL_TOKEN` in `.env` — never hardcode it
  • NoteMentions a .env fileSKILL.md:63
    set -a && source .env && set +a

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 plan4better/goat at commit a181bf4, republished under its GPL-3.0 licence (© plan4better). 305 words, ~910 tokens.

Download SKILL.mdSave it as .claude/skills/windmill/SKILL.md (or your agent's skills folder).
name
windmill
description
Use when working with GOAT's Windmill instance — running or syncing analytics tools, inspecting job execution, adding a new tool, or checking which f/goat/tools/* scripts exist. Use the Windmill MCP tools for API calls.

Windmill

Context for GOAT's Windmill instance. Use the Windmill MCP tools for API calls; this skill provides domain knowledge.

Setup

  • URL / Web UI: WINDMILL_URL in .env (local dev: http://localhost:8110)
  • Workspace: goat
  • Token: WINDMILL_TOKEN in .env — never hardcode it

Folder Structure

All scripts live under f/goat/:

  • f/goat/tools/ — Analytics tools (synced from goatlib, run by the processes service)
  • f/goat/tasks/ — Background tasks (thumbnails, S3 sync, etc.)

Tools — do not hardcode the list

The tool set changes often. The single source of truth is the registry: packages/python/goatlib/src/goatlib/tools/registry.py (TOOL_REGISTRY). Scripts under f/goat/tools/ are auto-generated from it via python -m goatlib.tools.sync_windmill.

To see the current tools (grouped by category, with hidden/beta/worker flags), run from repo root:

bash
uv run python -c "
from itertools import groupby
from goatlib.tools.registry import TOOL_REGISTRY
for cat, items in groupby(sorted(TOOL_REGISTRY, key=lambda t: t.category), key=lambda t: t.category):
    print(f'## {cat}')
    for t in items:
        flags = [f for f, on in (('hidden', t.toolbox_hidden), ('beta', t.beta), (f'worker={t.worker_tag}', t.worker_tag != 'tools')) if on]
        print(f\"  {t.windmill_path}{'  [' + ', '.join(flags) + ']' if flags else ''} — {t.description}\")
"

Categories: geoprocessing, data_management, geoanalysis, accessibility_indicators, data (the data category is toolbox-hidden internal tools: layer import/update/delete/export/create, project export/import, print report). toolbox_hidden tools stay callable via the API but don't appear in the toolbox UI; beta tools render in a Beta sub-section; worker_tag routes the job to a specific Windmill worker (e.g. print).

How Tools Execute

  1. Frontend calls the processes service API to start a tool
  2. processes creates a job in customer.job and submits it to Windmill
  3. Windmill runs the generated Python script, which imports from goatlib.tools
  4. The tool class (BaseToolRunner subclass) reads input from DuckLake, processes, writes output to DuckLake
  5. Job status is tracked in customer.job (pending → running → finished/failed)

Adding / Changing a Tool

  1. Add or edit the tool class in goatlib/tools/<name>.py (inherit BaseToolRunner[TParams])
  2. Register it in goatlib/tools/registry.py (TOOL_REGISTRY) — this is what makes it appear everywhere
  3. Sync to Windmill (reads WINDMILL_URL / WINDMILL_TOKEN from the environment):
bash
set -a && source .env && set +a
uv run python -m goatlib.tools.sync_windmill

Checking Jobs

Via Windmill MCP, or via the database (see the db skill for connection):

sql
SELECT id, type, status, created_at, payload->>'tool_type' AS tool
FROM customer.job ORDER BY created_at DESC LIMIT 10;

Key Code Paths

  • Tool registry (source of truth): packages/python/goatlib/src/goatlib/tools/registry.py
  • Tool base class: packages/python/goatlib/src/goatlib/tools/base.py
  • Individual tools: packages/python/goatlib/src/goatlib/tools/<name>.py
  • Windmill sync: packages/python/goatlib/src/goatlib/tools/sync_windmill.py
  • Code generation: packages/python/goatlib/src/goatlib/tools/codegen.py
  • Processes API: apps/processes/ (OGC API Processes service)

© plan4better, GPL-3.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/windmill of plan4better/goat.

Open the folder on GitHubat commit a181bf4

Compare with similar skills

Windmill 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.

Windmill compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Windmill this skillplan4better/goat167—~910Automated safety check: NotesGPL-3.0
DocsPrefectHQ/fastmcp28k—~1kAutomated safety check: PassApache-2.0
Fast Agent Designevalstate/fast-agent3.9k—~220Automated safety check: PassApache-2.0
Stitch Upload To Stitchmajiayu000/claude-skill-registry6661 repos~1.1kAutomated safety check: NotesMIT
MCP Server Builderanthropics/skills180k64 repos~2.3kAutomated safety check: PassApache-2.0
MCP Server BuildershareAI-lab/learn-claude-code78k5 repos~1.2kAutomated safety check: PassMIT

Similar skills

  • Docs

    PrefectHQ/fastmcp

    Write or revise a page under docs/ for gofastmcp.com. An agent skill from PrefectHQ/fastmcp.

    28k GitHub stars~1k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Fast Agent Design

    evalstate/fast-agent

    A skill your agent uses to generate well-branded interfaces and assets for fast-agent, either for production or throwaway prototypes/mocks/etc.

    3.9k GitHub stars~220 tokensUpdated today
    Frontend & DesignAuto-check passed
  • Stitch Upload To Stitch

    majiayu000/claude-skill-registry

    Upload local assets (images, mockups, extracted HTML, design markdown) to a Stitch project.

    666 GitHub starsUsed in 1 repo~1.1k tokens
    Agent WorkflowsAuto-check: notes
  • MCP Server Builder

    anthropics/skills

    Official

    Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.

    180k GitHub starsUsed in 64 repos~2.3k tokens
    Agent WorkflowsAuto-check passed
  • MCP Server Builder

    shareAI-lab/learn-claude-code

    Walks through building MCP servers in Python or TypeScript that expose tools, resources and prompts to Claude, with templates, registration and testing.

    78k GitHub starsUsed in 5 repos~1.2k tokens
    Agent WorkflowsAuto-check passed
  • Fastmcp Client CLI

    PrefectHQ/fastmcp

    Query and invoke tools on MCP servers using fastmcp list and fastmcp call.

    28k GitHub starsUsed in 1 repo~823 tokens
    Agent WorkflowsAuto-check passed

More from plan4better/goat

  • DB

    plan4better/goat

    A skill your agent uses when inspecting, debugging, or understanding the GOAT PostgreSQL database — querying projects, layers, users, orgs, teams, roles, jobs, or checking data state during local dev.

    167 GitHub stars~1.3k tokensUpdated today
    Auto-check: notes

Works with

Questions about Windmill

What does Windmill do?

A skill your agent uses when working with GOAT's Windmill instance — running or syncing analytics tools, inspecting job execution, adding a new tool, or checking which f/goat/tools/ scripts exist. Windmill is an agent skill from plan4better/goat. Use when working with GOAT's Windmill instance — running or syncing analytics tools, inspecting job execution, adding a new tool, or checking which f/goat/tools/ scripts exist.

When should I use Windmill?

Windmill fits situations like: working with GOATs Windmill instance — running; syncing analytics tools; inspecting job execution; adding a new tool.

How do I install Windmill in Claude Code?

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

How do I install Windmill in Codex?

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

Can I use Windmill 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 plan4better/goat --skill windmill -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/windmill, .gemini/skills/windmill, .github/skills/windmill and .opencode/skills/windmill in your project.

What does Windmill need to run?

Going by SKILL.md and its folder, Windmill needs the command-line tools its instructions call (uv and python) and credentials named WINDMILL_TOKEN. Our summary lists: Python 3; A credential in WINDMILL_TOKEN.

Does Windmill access the network?

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

Is Windmill safe to install?

Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Windmill use?

Windmill is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Windmill use?

About 910 tokens (SKILL.md is roughly 3.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 Windmill?

Skills that share tags, products or a category with Windmill: Docs (PrefectHQ/fastmcp, 28k stars), Fast Agent Design (evalstate/fast-agent, 3.9k stars), Stitch Upload To Stitch (majiayu000/claude-skill-registry, 666 stars) and MCP Server Builder (anthropics/skills, 180k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Windmill?

plan4better (a GitHub organization) maintains it in plan4better/goat, which has 167 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on October 7, 2026.

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