Skip to Content
DocsCore FeaturesCandid Fast Ship

Candid Fast Ship

Ship low-risk changes with a minimal, opt-in workflow.

Quick Start

/candid-fast-ship

candid-fast-ship is the opposite of candid-ship: instead of running everything by default and letting you skip steps, it runs nothing by default and only executes the steps you explicitly enable in your fastShip config. The only step that always runs is PR creation.

This makes it ideal for changes where a full review cycle would be overkill — docs updates, config changes, dependency bumps, or hotfixes you’ve already verified locally.

How It Works

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Candid Fast Ship Plan
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Branch: feature/update-readme → stable

Steps:
  1. 🔍 Review code (candid-loop)           SKIPPED — not enabled
  2. 🛠️  Install: pnpm install              ENABLED
  3. 🔨 Build: npm run build                ENABLED
  4. 🧪 Tests: npm test                     SKIPPED — not enabled
  5. 📋 Create pull request
  6. 🎯 Update issue tracker (linear)       SKIPPED — not enabled
  7. 🔀 Auto-merge                          ENABLED

Before executing, the plan shows exactly which steps are enabled and which are skipped. Use --dry-run to preview without executing.

Configuration

CLI Flags

FlagDescriptionDefault
--auto-mergeEnable auto-merge after PR creationfrom config
--no-auto-mergeDisable auto-merge even if config enables itfrom config
--dry-runShow plan without executingfalse

fastShip Config Block

Add to .candid/config.json alongside your ship block:

{
  "fastShip": {
    "review": false,
    "install": false,
    "build": false,
    "tests": false,
    "issueTracker": false,
    "autoMerge": false,
    "postMergeCommand": false
  }
}

All fields default to false. Set any to true to enable that step.

FieldTypeDefaultDescription
reviewbooleanfalseRun candid-loop code review before creating the PR.
installbooleanfalseRun ship.installCommand. Skipped if ship.installCommand is not set.
buildbooleanfalseRun ship.buildCommand. Skipped if ship.buildCommand is not set.
testsbooleanfalseRun ship.testCommand. Skipped if ship.testCommand is not set.
issueTrackerbooleanfalseUpdate issue tracker after PR creation. Uses ship.issueTracker for provider/state/prompt config.
autoMergebooleanfalseAuto-merge the PR after creation via gh pr merge --squash --auto.
postMergeCommandbooleanfalseRun ship.postMergeCommand after auto-merge succeeds.
targetBranchstringfrom ship or mergeTargetBranchesPR target branch override.

Relationship to the ship Block

fastShip is purely a set of on/off toggles. The actual commands and configuration for each step come from the existing ship block:

fastShip toggleWhere the config comes from
install: trueship.installCommand
build: trueship.buildCommand
tests: trueship.testCommand
issueTracker: trueship.issueTracker (provider, state, teamPrefixes, prompt)
postMergeCommand: trueship.postMergeCommand

This means you configure your commands once in ship and use them from both /candid-ship and /candid-fast-ship.

Use Cases

Docs and config changes — just create a PR

{
  "fastShip": {}
}

Nothing runs except PR creation. The plan still confirms before executing.

Build check + auto-merge, skip review and tests

{
  "fastShip": {
    "install": true,
    "build": true,
    "autoMerge": true
  }
}

Useful for dependency bumps where CI handles testing but you want to confirm the build locally first. Enabling install makes the build run against fresh dependencies — the most common cause of “works on my machine” failures in PRs.

Issue tracker update only (docs shipped, no code change)

{
  "fastShip": {
    "issueTracker": true,
    "autoMerge": true
  }
}

Creates the PR, moves the Linear issue to “In Review”, and enables auto-merge — without touching review or tests.

Everything except review

{
  "fastShip": {
    "install": true,
    "build": true,
    "tests": true,
    "issueTracker": true,
    "autoMerge": true,
    "postMergeCommand": true
  }
}

Full pipeline minus the code review loop. Useful when you’ve already done review via a different mechanism.

When a Step Is Skipped

If you enable a step but the required configuration isn’t in your ship block, the step is skipped silently with a message:

SituationOutput
install: true but no ship.installCommandSkipping install (installCommand not configured in ship)
build: true but no ship.buildCommandSkipping build (buildCommand not configured in ship)
tests: true but no ship.testCommandSkipping tests (testCommand not configured in ship)
issueTracker: true but no ship.issueTrackerSkipping issue tracker (issueTracker not configured in ship)
postMergeCommand: true but autoMerge not enabledSkipping post-merge command (auto-merge not enabled)

Output Example

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Candid Fast Ship Complete
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Review:   SKIPPED
Build:    PASS
Tests:    SKIPPED
PR:       https://github.com/org/repo/pull/42
Issue:    Updated DIS-509 → In Review
Merge:    Auto-merge enabled

Choosing Between candid-ship and candid-fast-ship

/candid-ship/candid-fast-ship
Default behaviorRuns all configured stepsRuns nothing (PR only)
Skipping stepsUse --skip-* flagsDon’t enable them in config
Best forFeature work, any change needing reviewHotfixes, docs, config, low-risk changes
Code reviewAlways runs (unless skipped)Only if review: true

If you want to ship with just a subset of steps for a one-off run, use /candid-ship --skip-review --skip-tests (flags are per-run). If you have a class of changes that consistently need fewer checks, use /candid-fast-ship with those steps enabled in config.

Examples

# Fast ship with fastShip config defaults
/candid-fast-ship
 
# Override auto-merge for this run
/candid-fast-ship --auto-merge
/candid-fast-ship --no-auto-merge
 
# Preview the plan without executing
/candid-fast-ship --dry-run

Full Config Example

{
  "version": 1,
  "tone": "constructive",
  "mergeTargetBranches": ["stable"],
  "ship": {
    "installCommand": "pnpm install",
    "buildCommand": "pnpm build",
    "testCommand": "pnpm test",
    "targetBranch": "stable",
    "autoMerge": false,
    "postMergeCommand": "curl -X POST https://deploy.example.com/trigger",
    "issueTracker": {
      "provider": "linear",
      "enabled": true,
      "teamPrefixes": ["DIS", "ENG"],
      "state": "In Review"
    }
  },
  "fastShip": {
    "install": true,
    "build": true,
    "issueTracker": true,
    "autoMerge": true
  }
}

Then /candid-fast-ship runs build, creates the PR, updates the Linear issue, and enables auto-merge — no review, no tests.

See Also

  • Candid Ship — full pipeline with review, tests, and PR creation
  • Focus Modes — scope what Candid Ship reviews when you do want a review
  • Candid Loop — run review iterations before shipping
Last updated on