CLI utility for managing Windmill resources like scripts, flows, and application deployments.

Install

mkdir -p .claude/skills/cli-commands && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/2001" && unzip -o skill.zip -d .claude/skills/cli-commands && rm skill.zip

Installs to .claude/skills/cli-commands

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

MUST use when using the CLI, including debugging job failures and inspecting run history via `wmill job`.
105 chars✓ has a “when” trigger
Beginner

Key capabilities

  • Start a local development server for testing apps
  • List, inspect, and push application resources to remote
  • Lint raw application folder structures
  • Generate new app scaffolds from templates

How it works

Executes shell commands against the Windmill API using local configurations or provided environment flags.

Inputs & outputs

You give it
CLI flags and subcommands (app, job, etc)
You get back
Stdout text or JSON console output

When to use cli-commands

  • List and inspect deployed apps
  • Debug failed job executions
  • Sync local scripts to remote workspace
  • Deploy new application versions

About this skill

Windmill CLI Commands

The Windmill CLI (wmill) provides commands for managing scripts, flows, apps, and other resources.

Global Options

  • --workspace <workspace:string> - Specify the target workspace. This overrides the default workspace.
  • --debug --verbose - Show debug/verbose logs
  • --show-diffs - Show diff informations when syncing (may show sensitive informations)
  • --token <token:string> - Specify an API token. This will override any stored token.
  • --base-url <baseUrl:string> - Specify the base URL of the API. If used, --token and --workspace are required and no local remote/workspace already set will be used.
  • --config-dir <configDir:string> - Specify a custom config directory. Overrides WMILL_CONFIG_DIR environment variable and default ~/.config location.

Commands

app

app related commands

Options:

  • --json - Output as JSON (for piping to jq)

Subcommands:

  • app list - list all apps
    • --json - Output as JSON (for piping to jq)
  • app get <path:string> - get an app's details
    • --json - Output as JSON (for piping to jq)
  • app push [file_path:string] [remote_path:string] - push a local app. With no args, infers the app from the current directory and the remote path from its location relative to wmill.yaml.
  • app dev [app_folder:string] - Start a development server for building apps with live reload and hot module replacement
    • --port <port:number> - Port to run the dev server on (will find next available port if occupied)
    • --host <host:string> - Host to bind the dev server to
    • --entry <entry:string> - Entry point file (default: index.ts for Svelte/Vue, index.tsx otherwise)
    • --no-open - Don't automatically open the browser
    • --recording - Frame the app in a shell with a Record button, to capture a replayable session recording of the app under development
  • app lint [app_folder:string] - Lint a raw app folder to validate structure and buildability
    • --fix - Attempt to fix common issues (not implemented yet)
  • app bundle [app_folder:string] - Bundle a raw app folder to js/css without deploying it
    • --out <dir:string> - Directory to write bundle.js and bundle.css into (default: <app_folder>/dist)
    • --no-minify - Skip minification
  • app new - create a new raw app from a template
    • --summary <summary:string> - App summary (short description). Skips the prompt when provided. Triggers non-interactive mode.
    • --path <path:string> - App path (e.g., f/folder/my_app or u/username/my_app). Skips the prompt when provided. Triggers non-interactive mode.
    • --framework <framework:string> - Framework template: react19 | react18 | svelte5 | vue. Skips the prompt when provided. Triggers non-interactive mode.
    • --datatable <datatable:string> - Datatable to wire up. Without this flag in non-interactive mode, no datatable is configured.
    • --schema <schema:string> - Schema to use with --datatable. Created (CREATE SCHEMA IF NOT EXISTS) if it doesn't already exist.
    • --overwrite - Overwrite the target directory if it already exists, without prompting.
    • --no-open-in-desktop - Do not prompt to open the new app in Claude Desktop.
  • app generate-agents [app_folder:string] - regenerate AGENTS.md and DATATABLES.md from remote workspace
  • app set-permissioned-as <path:string> <email:string> - Set the on_behalf_of_email for an app (requires admin or wm_deployers group)

audit

View audit logs (requires admin)

Subcommands:

  • audit list - List audit log entries
  • audit get <id:string> - Get a specific audit log entry
    • --json - Output as JSON (for piping to jq)

config

Show all available wmill.yaml configuration options

Options:

  • --json - Output as JSON for programmatic consumption

Subcommands:

  • config migrate - Migrate wmill.yaml from gitBranches/environments to workspaces format

datatable

datatable related commands

Subcommands:

  • datatable list - list all datatables in the workspace
    • --json - Output as JSON (for piping to jq)
  • datatable run <sql:string> - run a SQL query on a datatable
    • -n --name <name:string> - Datatable name (default: main)
    • -s --silent - Output only the final result as JSON. Useful for scripting.
  • datatable migrate - manage datatable migrations
    • datatable migrate new <name:string> - scaffold a new migration (.up.sql / .down.sql files)
      • -d --datatable <datatable:string> - Target datatable (default: main)
    • datatable migrate up - apply all pending migrations to the main datatable (or one via --datatable)
      • -d --datatable <datatable:string> - Target datatable (default: main)
    • datatable migrate down - roll back the most recent migration on the main datatable (or one via --datatable)
      • -d --datatable <datatable:string> - Target datatable (default: main)
  • datatable create [name:string] - register a datatable database in the workspace (default: instance-backed 'main') so scripts can use datatable://<name>
    • --resource <resource:string> - Back the datatable with an existing postgresql resource path instead of the instance database
    • --force - Allow adding to a workspace that already has datatables (fork metadata on existing ones is not preserved)
  • datatable serve - Serve all datatables as a Postgres-wire endpoint (psql, DBeaver, pgAdmin); the client picks the datatable via the database name in its connection string
    • --port <port:number> - Port to listen on (default: first free port in 5433-5500)
    • --host <host:string> - Bind address (default: 127.0.0.1)
    • --password <password:string> - Password for Postgres clients (default: generate a random password at startup)
  • datatable psql - Start a serve listener and launch psql connected to it
    • -n --name <name:string> - Datatable to connect psql to (default: main)
    • --port <port:number> - Port the proxy listens on (default: first free port in 5433-5500)
    • --host <host:string> - Bind address for the proxy (default: 127.0.0.1)
    • --password <password:string> - Password for the temporary Postgres proxy (default: generate a random password at startup)

dependencies

workspace dependencies related commands

Alias: deps

Subcommands:

  • dependencies push <file_path:string> - Push workspace dependencies from a local file

dev

Watch local file changes and live-reload the dev page for preview. Does NOT deploy to the remote workspace — use wmill sync push for that.

Options:

  • --includes <pattern...:string> - Filter paths given a glob pattern or path
  • --proxy-port <port:number> - Port for a localhost reverse proxy to the remote Windmill server
  • --path <path:string> - Watch a specific windmill path (e.g., u/admin/my_script or f/my_flow)
  • --no-open - Do not open the browser automatically

docs

Search Windmill documentation.

Arguments: <query:string>

Options:

  • --json - Output results as JSON.

ducklake

ducklake related commands

Subcommands:

  • ducklake list - list all ducklakes in the workspace
    • --json - Output as JSON (for piping to jq)
  • ducklake run <sql:string> - run a SQL query on a ducklake
    • -n --name <name:string> - Ducklake name (default: main)
    • -s --silent - Output only the final result as JSON. Useful for scripting.

flow

flow related commands

Options:

  • --show-archived - Enable archived flows in output
  • --json - Output as JSON (for piping to jq)

Subcommands:

  • flow list - list all flows
    • --show-archived - Enable archived flows in output
    • --json - Output as JSON (for piping to jq)
  • flow get <path:string> - get a flow's details
    • --json - Output as JSON (for piping to jq)
  • flow push <file_path:string> <remote_path:string> - push a local flow spec. This overrides any remote versions.
    • --message <message:string> - Deployment message
  • flow run <path:string> - run a flow by path.
    • -d --data <data:string> - Inputs specified as a JSON string or a file using @<filename> or stdin using @-.
    • -s --silent - Do not ouput anything other then the final output. Useful for scripting.
    • --tag <tag:string> - Override the worker tag the run is dispatched to (e.g. to route it to dev workers instead of the flow's default tag).
  • flow preview <flow_path:string> - preview a local flow without deploying it. Runs the flow definition from local files and uses local PathScripts by default. Pass --step <id> to run only one module in isolation (resolves nested steps inside branchone/branchall/forloopflow/whileloopflow plus the special preprocessor/failure modules; supported step types: rawscript, script, flow).
    • -d --data <data:string> - Inputs specified as a JSON string or a file using @<filename> or stdin using @-.
    • -s --silent - Do not output anything other then the final output. Useful for scripting.
    • --remote - Use deployed workspace scripts for PathScript steps instead of local files.
    • --step <step_id:string> - Run only the named step instead of the whole flow. Honors --data as the step's args and --remote / local-PathScript resolution the same way the full-flow preview does.
    • --tag <tag:string> - Override the worker tag the preview is dispatched to (e.g. to route it to dev workers instead of the flow's default tag).
  • flow new <flow_path:string> - create a new empty flow
    • --summary <summary:string> - flow summary
    • --description <description:string> - flow description
  • flow bootstrap <flow_path:string> - create a new empty flow (alias for new)
    • --summary <summary:string> - flow summary
    • --description <description:string> - flow description
  • flow history <path:string> - Show version history for a flow
    • --json - Output as JSON (for piping to jq)
  • flow show-version <path:string> <version:string> - Show a specific version of a flow
    • --json - Output as JSON (for piping to jq)
  • `flow set-permissioned-as path:string <e

Content truncated.

When not to use it

  • When the task is purely about writing application logic without CLI interaction
  • When the user lacks network access to the remote Windmill workspace

Prerequisites

Wmill CLI binaryValid workspace token

Limitations

  • Requires local configuration directory setup
  • Some flags like --fix are not yet implemented

How it compares

It enforces the correct CLI parameter structure and flags, minimizing syntax errors compared to manual shell execution.

Compared to similar skills

cli-commands side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
cli-commands (this skill)22moNo flagsBeginner
github-actions-templates73moNo flagsIntermediate
prowler-ci17moNo flagsIntermediate
upgrade-deps02moNo flagsAdvanced

Try saying

Example prompts that trigger this skill in your AI assistant.

You might also like

Search skills

Search the agent skills registry