CLI
The `shipeasy` command — manage flags, experiments, keys, translations, 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://edge.shipeasy.dev{"\n"} App URL: https://shipeasy.ai
shipeasy gate list
shipeasy value list
shipeasy experiments list
shipeasy keys list
shipeasy i18n scan ./src
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
SHIPEASY_PROJECT.prod. Only relevant for commands that read or write env-scoped state.NO_COLOR=1.Auth
| Command | Description |
|---|---|
shipeasy login | PKCE browser flow. Saves credentials to ~/.shipeasy/credentials. |
shipeasy logout | Wipe credentials. Add --revoke to also invalidate the refresh token server-side. |
shipeasy whoami | Show the active project, email, and endpoint URLs. |
shipeasy projects list | List every project you have access to. |
shipeasy projects use <id> | Set the active project. |
Gates (boolean flags)
| Command | Description |
|---|---|
shipeasy gate list | List every gate in the project. --json for raw output. |
shipeasy gate create <name> | Create a new gate. Options: --rollout, --rules, --salt, --killswitch. |
shipeasy gate rollout <name> --percent N | Set the rollout %. --percent 0 is an instant kill-switch. |
shipeasy gate enable <name> | Set the gate's enabled bit to true. |
shipeasy gate disable <name> | Set enabled to false (keeps rules). |
shipeasy gate delete <name> | Permanent. Use with care. |
--rules accepts a JSON array of { attr, op, value } rules — the same shape the dashboard produces:
shipeasy gate create new-ui \
--rollout 25 \
--rules '[{"attr":"plan","op":"eq","value":"pro"}]'Dynamic values (configs)
| Command | Description |
|---|---|
shipeasy value list | List every dynamic config. |
shipeasy value create <name> --type json | Create a config. --type is string, number, boolean, or json. |
shipeasy value set <name> <json> | Update the value (env-scoped — pair with --env). |
shipeasy value get <name> | Read the current value. |
shipeasy value delete <name> | Permanent. |
shipeasy value set pricing '{"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 create <name> | Define a new metric. Options: --type, --source-event, --aggregation. |
shipeasy metrics latest <name> | Latest daily aggregation row. |
SDK keys
| Command | Description |
|---|---|
shipeasy keys list | List keys (id, kind, last used). The raw token is never shown after creation. |
shipeasy keys create | Create a key. Asks for kind (server / client). Token is shown once. |
shipeasy keys revoke <id> | Revoke by id or id-prefix. First match wins. |
API tokens
| Command | Description |
|---|---|
shipeasy tokens list | List API tokens (id, kind, scopes, last used). |
shipeasy tokens create | Create a long-lived token for CI. Token is shown once. |
shipeasy tokens revoke <id> | Revoke. |
API tokens are different from SDK keys — see Authenticate → SDK keys vs API tokens.
i18n (Polylang)
| Command | Description |
|---|---|
shipeasy i18n install-loader | Inject the loader script tag into the right file (auto-detects framework). |
shipeasy i18n scan [paths...] | Discover t("key") calls in source. --rewrite enables the codemod. --keys-only skips fuzzy candidate discovery. |
shipeasy i18n push <file> | Push a JSON of keys to a profile. --chunk to bucket. |
shipeasy i18n profiles create --name en:prod --locale en | Create a profile. |
shipeasy i18n profiles list | List profiles. |
shipeasy i18n translate --profile fr:prod --ai | Generate AI translations as a draft. |
shipeasy i18n publish --profile en:prod | Push the merged profile to KV (live in seconds). |
shipeasy i18n validate --profile en:prod | Fail if any key referenced in code is missing from the profile. Use in CI. |
Codemod
| Command | Description |
|---|---|
shipeasy codemod i18n [paths...] | Run the i18n codemod standalone — same as i18n scan --rewrite but exposed as a top-level command for easy CI use. |
MCP server
| Command | Description |
|---|---|
shipeasy mcp install | Patch the right config file for Claude Code, Cursor, Windsurf, or a custom MCP client. |
shipeasy mcp uninstall | Remove the registration. |
shipeasy mcp serve | Run the MCP server in the foreground. Used by the install command — rarely needed by hand. |
See MCP server for the tool inventory.
Project detection
| Command | Description |
|---|---|
shipeasy detect | Detect project language, framework, source root, loader script presence, SDK install status. Useful as a one-liner in CI to confirm wiring. --json for raw. |
Plugin
| Command | Description |
|---|---|
shipeasy plugin install <name> | Install a CLI plugin (e.g. private experiment templates). Plugins live in ~/.shipeasy/plugins. |
shipeasy plugin list | List installed plugins. |
shipeasy plugin uninstall <name> | Remove a plugin. |
Skills
| Command | Description |
|---|---|
shipeasy skills list | List installed Claude Code skills exposed by the CLI. |
shipeasy skills install <name> | Install a packaged skill into your ~/.claude/skills directory. |
Environment variables
https://shipeasy.ai).https://edge.shipeasy.dev).--project flag is passed.--env flag is passed.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 gate list --json | jq '.[] | select(.enabled == true) | .name'Examples
# Create a gate, set targeting, roll out to 5%, then promote to 100%.
shipeasy gate create checkout-v2 --rules '[{"attr":"plan","op":"eq","value":"pro"}]'
shipeasy gate rollout checkout-v2 --percent 5
shipeasy gate rollout checkout-v2 --percent 100
# Scan a Next.js app for translatable strings, push to source profile, AI-translate, publish.
shipeasy i18n install-loader --profile en:prod
shipeasy i18n scan ./src --rewrite --profile en:prod
shipeasy i18n push --profile en:prod --source codemod
shipeasy i18n profiles create --name fr:prod --locale fr
shipeasy i18n translate --profile fr:prod --ai
shipeasy i18n publish --profile fr:prod
# CI smoke test — fail the build if a translatable key is missing from prod.
SHIPEASY_API_TOKEN="$CI_TOKEN" shipeasy i18n validate --profile en:prod ./srcEvery 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.