CLI
The Crow CLI (crow) allows you to interact with Crow CI from the command line.
You can manage repositories, pipelines, secrets, and more.
Installation
Section titled “Installation”Binary Download
Section titled “Binary Download”Download the CLI from the project’s releases page.
Choose the appropriate binary for your platform: Linux and macOS builds ship as crow-cli_<os>_<arch>.tar.gz, the Windows build as crow-cli_windows_amd64.zip.
Container Image
Section titled “Container Image”The CLI is also available as a container image:
Configuration
Section titled “Configuration”The CLI needs a Crow server and a personal access token. Generate a token in the Crow CI web interface under Settings > Personal Access Tokens. A scoped token only reaches what its scopes allow, see Access tokens.
Servers
Section titled “Servers”Add each server once and store a token for it:
crow server add asks the server which forges it builds (for example codefloe.com) and stores them as the server’s forge hosts.
Inside a git checkout, the CLI then picks the server whose forge hosts match a git remote and the repository from that remote, so per-repository commands need no arguments:
A command picks its server in this order:
--serverorCROW_SERVER: the name of a configured server, or a URL.- The server whose forge hosts match a git remote of the working directory (
upstreamfirst, thenorigin, then any other remote). - The default server: the first one added, or the one set with
crow server set-default. - The only configured server.
crow server current shows which server and repository the working directory resolves to, and why.
| Command | Description |
|---|---|
crow server add <name> <url> |
Add a server. --default makes it the default, --forge-host (repeatable) sets the forge hosts instead of detecting them, --token-env VAR or --token-command "cmd args" reads the token from an environment variable or a command instead of storing it |
crow server login [name] |
Prompt for a token, check it against the server and store it. --token or a token piped to stdin skip the prompt |
crow server logout [name] |
Forget the stored token |
crow server ls |
List servers, their forge hosts and where their token comes from (-o json/yaml) |
crow server current |
Show the server and repository the working directory resolves to |
crow server set-default <name> |
Make a server the default |
crow server refresh [name] |
Ask one or all servers for their forge hosts and add new ones; hosts set with --forge-host are kept |
crow server rm <name> |
Remove a server and its stored token (-f skips the confirmation) |
Servers live in $XDG_CONFIG_HOME/crow/instances.yaml (usually ~/.config/crow/instances.yaml; change it with --config or CROW_CONFIG).
Stored tokens go to credentials.yaml next to it, readable only by your user, so instances.yaml holds no secrets and can be kept in your dotfiles.
A stored token is tied to the server URL it was stored for: if the URL of a server changes, run crow server login again.
The file can also be edited by hand, and may be a symlink, e.g. into a dotfiles repository. login and logout leave it untouched; commands that change servers rewrite it, which drops comments:
crow mcp reads the same file, see MCP Server for Coding Agents.
Environment variables
Section titled “Environment variables”Without an instances file, or for one-off calls, set the server and token directly:
| Variable | Description |
|---|---|
CROW_SERVER |
URL of your Crow CI server (e.g., https://ci.example.com), or the name of a configured server |
CROW_TOKEN |
Personal access token |
A URL together with a token is always used as given.
For a configured server, --token on the command line overrides its stored token.
CROW_TOKEN from the environment is never sent to a configured server, because it usually belongs to another one; set CROW_SERVER to a URL to use it.
Common Commands
Section titled “Common Commands”Repository Management
Section titled “Repository Management”Pipeline Management
Section titled “Pipeline Management”See Deployment for who may deploy and which pipelines can be deployed.
pipeline workflow
Section titled “pipeline workflow”Subcommands for managing workflows within a pipeline run. Currently used for workflow-level approval gates.
The workflow is resolved by name within the given pipeline.
The caller must be in the workflow’s approvers list, or hold push permission on the repo if no approvers are configured.
An optional --reason is recorded in the audit trail.
Secrets Management
Section titled “Secrets Management”Local Pipeline Execution
Section titled “Local Pipeline Execution”crow exec takes workflow files or directories as arguments; there is no --workflow flag.
Without arguments it uses the default config (.crow/, .crow.yaml, …) in the current directory.
For a file inside .crow/ or .woodpecker/, the repository root is mounted as the workspace; pass --repo-path to choose another directory.
--secrets-file reads a YAML map of name: value pairs and is also configurable via CROW_SECRETS_FILE (or WOODPECKER_SECRETS_FILE).
Linting
Section titled “Linting”crow lint validates local pipeline configuration files against the Crow schema — it does not fetch configuration from the server or forge.
Point it at a single YAML/Jsonnet file or a directory containing workflow files.
MCP Server for Coding Agents
Section titled “MCP Server for Coding Agents”crow mcp serves pipeline status, step logs and waiting for results to coding agents over the Model Context Protocol.
See MCP Server for Coding Agents for setup and the available tools.
Agent Management
Section titled “Agent Management”Global Agent Management
Section titled “Global Agent Management”Requires admin privileges.
User Management
Section titled “User Management”Requires admin privileges. See instance roles for the available roles.
--role replaces the user’s roles, so a role mapped from the identity provider that is not listed is removed.
A mapped role can only be listed when the user already holds it.
Repository Artifacts
Section titled “Repository Artifacts”See Artifacts for details.
Build Cache Limits
Section titled “Build Cache Limits”Viewing requires the maintenance:read permission, changes need maintenance:write.
A user is addressed by their login, an organization by its name or ID.
See Caching for how the limits apply.