cad-adopt
Initialize .planning/ from a repo that already exists - PROJECT.md, REQUIREMENTS.md and a remaining-work ROADMAP.md derived from…
Land finished work - report git state, then ask how to publish (push / MR or PR / tag / leave local). With git.auto_close set in both the repository and your user-global config, it runs PR -> merge unattended and halts on a surviving blocker
Claude Code
$ npx -y skills add crenshawdev/cadence --skill cad-land --agent claude-code
Codex
$ npx skills add crenshawdev/cadence --skill cad-land -a codex -y
Cursor
$ npx skills add crenshawdev/cadence --skill cad-land -a cursor -y
Gemini CLI
$ npx skills add crenshawdev/cadence --skill cad-land -a gemini-cli -y
GitHub Copilot
$ npx skills add crenshawdev/cadence --skill cad-land -a github-copilot -y
OpenCode
$ npx skills add crenshawdev/cadence --skill cad-land -a opencode -y
Windsurf
$ npx skills add crenshawdev/cadence --skill cad-land -a windsurf -y
name: cad-land description: "Land finished work - report git state, then ask how to publish (push / MR or PR / tag / leave local). With git.auto_close set in both the repository and your user-global config, it runs PR -> merge unattended and halts on a surviving blocker" argument-hint: "[base branch | defaults to git.base_branch]" allowed-tools: - Read - Task - AskUserQuestion
<objective> Land the current branch's work. By default there is no preselected publish action: cad-land reports the state, asks how to publish, and executes only what you choose - nothing more. The one exception is the `git.auto_close` arm that both opt-ins authorize (this repository's config and your user-global config), which runs the close unattended; it is stated once, at step 3(b). </objective>
<execution_context> @${CLAUDE_PLUGIN_ROOT}/cadence-core/references/git-guard.md </execution_context>
<process> Read every config key this run needs in ONE `config.mjs get` up front (conventions.md Parallel work) - `git.base_branch git.protected_branches git.on_land_cleanup git.create_tag testing.scope` - and reuse the values across the steps below rather than re-reading per step. Step 3 asks a seam, not this read.
1. **Report git state - base first.** The base = `$ARGUMENTS`, else `git.base_branch`, else the first `git.protected_branches` entry that exists here (references/git-guard.md's fallback). It comes from an argument or a committed config, and a base shaped like `--output=<path>` is read by git as an option that writes that file, so ask the seam about it BEFORE any git command is given it - the commits-ahead count and the tracker call below included: `node "${CLAUDE_PLUGIN_ROOT}/cadence-core/bin/land-cleanup.mjs" cleanup --base <base>` On `baseRefused:true` the base is refused: run NO git command that takes it, print the envelope's `reason` as the base line, and skip the commits-ahead count and the tracker call. A refused `$ARGUMENTS` or `git.base_branch` ends the search; in the protected-branches fallback the seam's answer IS the "exists here" test, so ask it for each entry in order rather than probing with git, and take the first it does not refuse. A `skip` without `baseRefused` is the `on_land_cleanup` switch, not a refusal: the base is usable.
**Then report:** current branch; commits ahead of base; unpushed commits; uncommitted/untracked changes; and the remote host detected from the origin URL (gitlab -> MR, github -> PR, any other host where `tea` holds a login -> Forgejo/Gitea PR via `tea`, else local only). Show this plainly before doing anything.
**Then the tracker, in the same report.** Run it here, before any publish ask, on both step-3 arms:
node "${CLAUDE_PLUGIN_ROOT}/cadence-core/bin/issue-check.mjs" check --dir <root> --base <base>Branch on `action` alone. On `report`: say in ONE sentence which issues this branch's commits reference and which of them are still open ("your branch references #42 and #47; #42 is still open"), naming a `not-found` number as not found and an `unresolved` one unresolved, never closed or not found. Print the `open` list ONLY when `referenced` is empty - it is the fallback, never the headline, because a bare list is what a reader skims past. On `skip`: print `reason` verbatim as ONE line and carry on - never block, never retry, never ask, and never list an issue the seam did not read. On `off` - `git.issue_check: false`, decided before any forge CLI runs - say NOTHING about the tracker: not the reason, not that it was skipped. The off switch is off, so this paragraph produces no output at all.
This report never writes: landing closes no issue, and closing one stays an explicit ask you make at publish time.
2. **Uncommitted changes.** If the tree is dirty, do NOT auto-commit. Ask (ask-user seam):
If HEAD is a protected branch, the protected-branch guard (references/git-guard.md) applies to any commit here.
3. **Publish - branch on the `git.auto_close` authorization.**
**First the deferred queue, on BOTH arms and ahead of the branch below.** A gate resolved `deferred` ran its reviewer and let the run continue, so the finding stops the LAND. Ask what is still queued:
node "${CLAUDE_PLUGIN_ROOT}/cadence-core/bin/planning.mjs" deferred listOn ANY entry in `members`, STOP the land here: no publish ask, no seam call, no merge, no tag, neither arm. Print each member's `trigger`, `discriminator` and finding count with the `path` its bodies are in, then point the reader at `${CLAUDE_PLUGIN_ROOT}/cadence-core/references/triage-gate.md`, whose `deferred` arm says how to clear one - triage the member's findings and record the rulings with `planning.mjs adjudication` for the same trigger, discriminator and round, which supersedes it. A non-empty `unreadable` arrives as `ok:false` and refuses exactly as a member does: the queue could not be PROVEN empty, and this gate never reports "nothing deferred" about input it could not read, the disposition `land-cleanup.mjs gate` already takes for a findings payload it could not parse.
It is NOT `land-cleanup.mjs gate` and must not be folded into it: that gate halts only under an authorized `git.auto_close` and reads only `risk_surface` survivors, so a default-configured project would publish straight over a deferred `plan`, `diff` or `phase_diff` finding.
**Then the ONE answer both arms branch on**, on its own line:
node "${CAppearance is cheap. Verification is the work. Cadence is for developers using Claude Code on software they will still own after the session ends. Claude can write a convincing plan, produce working code, and tell you the job is finished.
Initialize .planning/ from a repo that already exists - PROJECT.md, REQUIREMENTS.md and a remaining-work ROADMAP.md derived from…
Role contract preloaded at spawn by the cad-assumptions-analyzer, cad-assumptions-analyzer-low, cad-assumptions-analyzer-medium,…
Pre-ship traceability audit - every requirement traced to a phase, plan and verification, orphan detection both directions, a…
Capture a phase-linked todo, a seed idea for a future milestone, or a note, without losing your place - .planning/CAPTURE.md, or…
Configure Cadence's config.json - workflow toggles, the per-role model and effort interview, and interactive cross-model review…
Gather phase context before planning - codebase assumptions, locked decisions, falsifiable acceptance criteria - in one pass
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.