From candid
Runs minimal shipping workflow for low-risk changes, executing only explicitly enabled steps (review, install, build, tests, issue tracker, auto-merge, post-merge) via fastShip config toggles, always creating PR.
npx claudepluginhub ron-myers/candid --plugin candidThis skill uses the workspace's default tool permissions.
A minimal shipping path for low-risk changes. Unlike `candid-ship`, which runs all steps by default and lets you opt out, `candid-fast-ship` runs **nothing by default** — only steps explicitly enabled in the `fastShip` config block. PR creation always runs.
Orchestrates shipping workflow: reviews code via candid-loop, runs install/build/tests, creates GitHub PR, optionally auto-merges and updates issues. Use to ship changes safely.
Ships completed feature branches through quality gates, code review, fresh-eyes checks, and PR creation. Fast path for existing PR updates. Reads .beislid/workflow.md config.
Automates code shipping: merges base branch, runs detected tests, performs multi-review with auto-fixes, commits, pushes, creates PR. Use /ship or say 'ship it'.
Share bugs, ideas, or general feedback.
A minimal shipping path for low-risk changes. Unlike candid-ship, which runs all steps by default and lets you opt out, candid-fast-ship runs nothing by default — only steps explicitly enabled in the fastShip config block. PR creation always runs.
Step configuration (commands, target branch, issue tracker details) is inherited from the existing ship block. fastShip is purely a set of on/off toggles that sit on top of it.
Execute these steps in order. The mechanics for each step are defined in skills/candid-ship/WORKFLOW.md. This file specifies the toggle semantics unique to candid-fast-ship.
Run the pre-flight checks from WORKFLOW.md → "Pre-Flight Checks".
Read config per WORKFLOW.md → "Load Configuration", with two top-level fields:
fastShip.* — the boolean toggles (see CLI Flags table below for the schema)ship.* — command values, target branch, issue tracker config (inherited)When loading from project config, output: Using fastShip settings from project config. From user config: Using fastShip settings from user config.
| Flag | Description | Default |
|---|---|---|
--auto-merge | Enable auto-merge (overrides fastShip.autoMerge) | from config |
--no-auto-merge | Disable auto-merge (overrides fastShip.autoMerge) | from config |
--dry-run | Show plan without executing | false |
If both --auto-merge and --no-auto-merge are provided, --no-auto-merge wins.
Priority: fastShip.targetBranch → ship.targetBranch → first mergeTargetBranches entry → "main". Then run target-branch verification and branch-state validation per WORKFLOW.md → "Resolve targetBranch" / "Validate Branch State".
A step is enabled only when its fastShip toggle is true AND the underlying ship config is present:
| Toggle | Required ship config |
|---|---|
fastShip.review | (none — always runnable when enabled) |
fastShip.install | ship.installCommand |
fastShip.build | ship.buildCommand |
fastShip.tests | ship.testCommand |
fastShip.issueTracker | ship.issueTracker with supported provider |
fastShip.autoMerge | (none) |
fastShip.postMergeCommand | ship.postMergeCommand AND fastShip.autoMerge: true |
Calculate totalSteps = 1 (PR creation) + count of enabled steps. Renumber displayed step rows so disabled steps don't take a number.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Candid Fast Ship Plan
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Branch: [currentBranch] → [targetBranch]
Steps (numbers assigned dynamically — only enabled+configured steps get a number):
[N]. 🔍 Review code (candid-loop) [ENABLED | SKIPPED — not enabled]
[N]. 🛠️ Install: [installCommand] [ENABLED | SKIPPED — not enabled | SKIPPED — not configured]
[N]. 🔨 Build: [buildCommand] [ENABLED | SKIPPED — not enabled | SKIPPED — not configured]
[N]. 🧪 Tests: [testCommand] [ENABLED | SKIPPED — not enabled | SKIPPED — not configured]
[N]. 📋 Create pull request
[N]. 🎯 Update issue tracker ([provider]) [ENABLED | SKIPPED — not enabled | SKIPPED — not configured]
[N]. 🔀 Auto-merge [ENABLED | SKIPPED — not enabled]
[N]. 🚀 Post-merge: [postMergeCommand] [ENABLED | SKIPPED — not enabled | SKIPPED — not configured]
If all optional steps are disabled, append (All optional steps disabled — only PR creation will run).
If --dry-run: Output Dry run complete. No changes made. and exit.
Otherwise: Use AskUserQuestion: "Proceed with this fast ship plan?" with options "Yes, ship it" / "No, cancel". On "No, cancel": exit with Fast ship cancelled.
Skip if fastShip.review is false → Skipping review (not enabled in fastShip config). Otherwise execute WORKFLOW.md → "Run Review (candid-loop)". Use ship.additionalPrompt if set.
Skip if fastShip.install is false → Skipping install (not enabled in fastShip config). Skip if fastShip.install is true but ship.installCommand is not set → Skipping install (installCommand not configured in ship). Otherwise execute WORKFLOW.md → "Install Dependencies".
Skip if fastShip.build is false → Skipping build (not enabled in fastShip config). Skip if fastShip.build is true but ship.buildCommand is not set → Skipping build (buildCommand not configured in ship). Otherwise execute WORKFLOW.md → "Run Build".
Skip if fastShip.tests is false → Skipping tests (not enabled in fastShip config). Skip if fastShip.tests is true but ship.testCommand is not set → Skipping tests (testCommand not configured in ship). Otherwise execute WORKFLOW.md → "Run Tests".
Always runs. Execute WORKFLOW.md → "Create Pull Request". Footer should read *Shipped with [candid-fast-ship](https://github.com/ron-myers/candid)*.
Skip if fastShip.issueTracker is false → Skipping issue tracker (not enabled in fastShip config). Skip if ship.issueTracker is absent → Skipping issue tracker (issueTracker not configured in ship).
Otherwise execute WORKFLOW.md → "Update Issue Tracker", using ship.issueTracker.* for provider, state, prompt, and team prefixes.
Note: fastShip.issueTracker: true acts as the enable toggle — ship.issueTracker.enabled is ignored in fast-ship mode.
Skip if fastShip.autoMerge is false → Auto-merge: disabled (manual merge required). Otherwise execute WORKFLOW.md → "Auto-Merge".
Skip if fastShip.postMergeCommand is false → Skipping post-merge command (not enabled in fastShip config). Skip if ship.postMergeCommand is not set → Skipping post-merge command (postMergeCommand not configured in ship). Skip if fastShip.autoMerge is false → Skipping post-merge command (auto-merge not enabled). Skip if auto-merge failed in Step 10 → Skipping post-merge command (auto-merge failed). Otherwise execute WORKFLOW.md → "Post-Merge Command".
Execute WORKFLOW.md → "Display Summary" with header Candid Fast Ship Complete.
Add to .candid/config.json alongside the ship field:
{
"fastShip": {
"review": false,
"install": false,
"build": false,
"tests": false,
"issueTracker": false,
"autoMerge": false,
"postMergeCommand": false,
"targetBranch": "stable"
}
}
All fields are optional. Boolean fields default to false. targetBranch defaults to ship.targetBranch → mergeTargetBranches[0] → "main".
For full validation rules see skills/candid-review/CONFIG.md (the fastShip section).
Minimal — just create a PR:
{ "fastShip": {} }
Build check + PR only:
{ "fastShip": { "build": true } }
Install + build + auto-merge:
{
"ship": {
"installCommand": "pnpm install",
"buildCommand": "pnpm build"
},
"fastShip": {
"install": true,
"build": true,
"autoMerge": true
}
}
Docs change — just PR and issue tracker update:
{ "fastShip": { "issueTracker": true, "autoMerge": true } }
# Fast ship with fastShip config defaults
/candid-fast-ship
# Override auto-merge flag
/candid-fast-ship --auto-merge
/candid-fast-ship --no-auto-merge
# Preview plan without executing
/candid-fast-ship --dry-run
candid-fast-ship is opt-in by default — nothing runs unless you explicitly enable it in fastShip config. Use it for low-risk changes where the full candid-ship review cycle would be overkill: hotfixes, docs updates, config changes, dependency bumps.
For anything that needs review, use /candid-ship or enable fastShip.review: true.