Shipeasy

CLI

The `shipeasy` command — manage flags, experiments, keys, and the MCP server from your terminal or CI.

Production readyOn this page · 8 min readUpdated · May 3, 2026Works with · macOS · Linux · Windows · Docker · 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

$npm install -g @shipeasy/cli
shipeasy --version
shipeasy --help

See Authenticate for the login flow.

At a glance

zsh
$

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 install

Add --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

CommandDescription
shipeasy loginPKCE browser flow. Saves credentials to ~/.shipeasy/credentials.
shipeasy logoutWipe credentials.
shipeasy whoamiShow the active project, email, and accessible projects.
shipeasy bind <id>Bind the cwd to a project (writes .shipeasy in the project root).

Feature flags

CommandDescription
shipeasy flags listList 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

CommandDescription
shipeasy killswitch listList 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 true

Dynamic values (configs)

CommandDescription
shipeasy configs listList 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

CommandDescription
shipeasy experiments listAll experiments + status.
shipeasy experiments create <name>Create an experiment. Options: --universe, --allocation, --groups, --params, --targeting-gate.
shipeasy experiments start <name>Move from draftrunning.
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

CommandDescription
shipeasy metrics listEvery 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 grammarPrint 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)

CommandDescription
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 important

MCP server

CommandDescription
shipeasy mcp installPatch the right config file for Claude Code, Cursor, Windsurf, or a custom MCP client.
shipeasy mcp statusShow the current MCP registration state for the detected client.
shipeasy mcp uninstallRemove the registration.
shipeasy mcp startRun 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 subset

setup 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 high
Pipe-friendly by design

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

NEXT

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.

Install the MCP
$shipeasy mcp install
Then restart your agent
$# pick up the new MCP config
Was this page helpful?
✎ Edit this page

On this page