CLI
The `shipeasy` command — manage flags, experiments, keys, and the MCP server from your terminal or CI.
The CLI is a thin wrapper over the same Server Actions the dashboard uses. Anything you can do in the UI works from a terminal, and every read command supports --json so you can pipe results into scripts.
Install
shipeasy --version
shipeasy --helpSee Authenticate for the login flow.
At a glance
shipeasy whoami
Project: acme Email: you@example.com Worker URL: https://api.shipeasy.ai{"\n"} App URL: https://shipeasy.ai
shipeasy flags list
shipeasy configs list
shipeasy experiments list
shipeasy keys list
shipeasy mcp installAdd --json to any read command for machine-readable output. Add --project <id> to override the active project for a single call.
Global flags
The CLI doesn't have process-wide global options today — each subcommand declares its own flags. Two flags are accepted by nearly every write command, though:
Prop
Type
Env scoping is per-subcommand (e.g. configs draft --env staging)
rather than a global --env flag.
Auth
| Command | Description |
|---|---|
shipeasy login | PKCE browser flow. Saves credentials to ~/.shipeasy/credentials. |
shipeasy logout | Wipe credentials. |
shipeasy whoami | Show the active project, email, and accessible projects. |
shipeasy bind <id> | Bind the cwd to a project (writes .shipeasy in the project root). |
Feature flags
| Command | Description |
|---|---|
shipeasy flags list | List every feature flag in the project. --json for raw output. |
shipeasy flags create <name> | Create a new feature flag. Options: --rollout <pct> (default 0), --rules <json>, --salt <s>. |
shipeasy flags rollout <name> <pct> | Set the rollout %. 0 is an instant kill-switch. |
shipeasy flags enable <name> | Set the feature flag's enabled bit to true. |
shipeasy flags disable <name> | Set enabled to false (keeps rules). |
shipeasy flags delete <name> | Permanent. Use with care. |
--rules accepts a JSON array of { attr, op, value } rules — the same shape the dashboard produces:
shipeasy flags create new-ui \
--rollout 25 \
--rules '[{"attr":"plan","op":"eq","value":"pro"}]'Killswitches (alias ks) — break-glass
| Command | Description |
|---|---|
shipeasy killswitch list | List all killswitches. ks is the short alias. |
shipeasy ks create <name> | Create a killswitch (folder.name). |
shipeasy ks update <name> | Update default value, switches map, or description. |
shipeasy ks set <name> <switch> <value> | Set a switch entry on one env (default prod). |
shipeasy ks unset <name> <switch> | Remove a switch entry from one env. |
shipeasy ks delete <name> | Permanent. |
shipeasy ks create email.outbound
shipeasy ks set email.outbound off trueDynamic values (configs)
| Command | Description |
|---|---|
shipeasy configs list | List every dynamic config. |
shipeasy configs get <name> | Read the current value. |
shipeasy configs create <name> | Create a config. Pass --value <json> for initial value. |
shipeasy configs update <name> | Flat update across envs. Pass --value <json>. |
shipeasy configs draft <name> | Save a draft for --env <env> without publishing. |
shipeasy configs publish <name> | Publish the saved draft for --env <env>. |
shipeasy configs activity <name> | Show recent activity (audit log) for the config. |
shipeasy configs delete <name> | Permanent. |
shipeasy configs update pricing --value '{"base":9.99,"currency":"USD"}'Experiments
| Command | Description |
|---|---|
shipeasy experiments list | All experiments + status. |
shipeasy experiments create <name> | Create an experiment. Options: --universe, --allocation, --groups, --params, --targeting-gate. |
shipeasy experiments start <name> | Move from draft → running. |
shipeasy experiments stop <name> | Move to stopped. |
shipeasy experiments status <name> | Show config + latest analysis (lift, p-value, CI per metric per group). |
--groups is a JSON array of { name, weight, params }:
shipeasy experiments create checkout-cta \
--allocation 100 \
--groups '[{"name":"control","weight":50,"params":{"label":"Pay"}},{"name":"v1","weight":50,"params":{"label":"Buy now"}}]'Metrics
| Command | Description |
|---|---|
shipeasy metrics list | Every metric registered for the project. |
shipeasy metrics show <id> | Show one metric by id, including its query DSL. |
shipeasy metrics create <name> | Define a new metric. Required: --event <name> + one of --query <dsl> or --query-ir <json>. |
shipeasy metrics grammar | Print the metric DSL grammar — handy when authoring --query. |
shipeasy metrics delete <id> | Soft-delete a metric. |
SDK keys
| Command | Description |
| ------------------------------------ | --------------------------------------------------------------------------------- | ------- | ----------------------------------------------------------- |
| shipeasy keys list | List keys (id, kind, last used). The raw token is never shown after creation. |
| shipeasy keys create --type <server | client | admin> | Create a key (required: --type). Token is shown once. |
| shipeasy keys revoke <id> | Revoke by id or id-prefix. First match wins. |
API tokens
For long-lived CI access, create an admin SDK key from the dashboard's
SDK Keys page (shipeasy keys create --type admin) and pass it
via the SHIPEASY_CLI_TOKEN env. See
Authenticate → SDK keys vs API tokens
for when to use each.
Feedback (bugs & requests)
| Command | Description |
|---|---|
shipeasy feedback bugs <subcommand> | list / get / create / update / delete / link-pr bug reports. |
shipeasy feedback features <subcommand> | Same surface for feature requests. |
bugs create takes the bug-report contract (--steps, --actual,
--expected); features create takes --description, --use-case,
--importance. Both accept --json for scripting.
shipeasy feedback bugs create "Checkout button overlaps footer" \
--steps "1. Add item to cart. 2. Resize below 1024px." \
--actual "Button hidden behind sticky footer" \
--expected "Button stays visible above the footer"
shipeasy feedback features create "Dark mode dashboard" \
--description "System-prefers dark theme for the dashboard chrome" \
--use-case "Reviewing experiments at night" \
--importance importantMCP server
| Command | Description |
|---|---|
shipeasy mcp install | Patch the right config file for Claude Code, Cursor, Windsurf, or a custom MCP client. |
shipeasy mcp status | Show the current MCP registration state for the detected client. |
shipeasy mcp uninstall | Remove the registration. |
shipeasy mcp start | Run the MCP server in the foreground. Used by the install command — rarely needed by hand. |
See MCP server for the tool inventory.
Agent skills & plugins
There is no separate skills or plugin install command — shipeasy setup
does it. It detects every coding agent in your environment (Claude Code,
Cursor, OpenAI Codex, GitHub Copilot, Google Jules) and wires each the way
that agent expects: the Claude Code marketplace plugin (commands + skills +
MCP) for Claude, and the agent's own instructions file
(.cursor/rules/shipeasy.mdc, AGENTS.md, .github/copilot-instructions.md)
plus @shipeasy/mcp registration for the rest.
shipeasy setup # detect + wire every agent found
shipeasy setup --yes --agents claude,cursor # non-interactive subsetsetup is idempotent — re-run it as you add agents.
Environment variables
Prop
Type
Exit codes
0 on success, 1 on any error. JSON output goes to stdout; human-readable progress goes to stderr — pipes work the way you'd expect.
shipeasy flags list --json | jq '.[] | select(.enabled == true) | .name'Examples
# Create a feature flag, set targeting, roll out to 5%, then promote to 100%.
shipeasy flags create checkout-v2 --rules '[{"attr":"plan","op":"eq","value":"pro"}]'
shipeasy flags rollout checkout-v2 5
shipeasy flags rollout checkout-v2 100
# File a bug from CI when a smoke test fails.
SHIPEASY_CLI_TOKEN="$CI_TOKEN" shipeasy feedback bugs create \
--title "Smoke test failed on deploy" --steps "See CI run" --priority highEvery read command accepts --json. Every write command exits non-zero on failure. The CLI is
built to be scripted — drop it into a Makefile or a GitHub Actions step and it behaves the way
you'd expect.
Hand it to an AI agent.
The MCP server exposes the same surface as typed tools. Your agent gets one-call install and a curated tool inventory.