Skip to content
Agentmart
Submit a tool

cad-land

Land finished work - report git state, then ask how to publish (push / MR or PR / tag / leave local).

Skill by crenshawdev

IndexedMIT★ 8
Write a review

Chalk Labs

Need help deploying cad-land?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/crenshawdev-cad-land

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

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

Use cases: documents

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/cad-land

What's inside

Skill 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
License
MIT
Instructions
302 lines in SKILL.md · view on GitHub

Agent Skills spec issues

  • allowed-tools: must be a space-separated string

Files (1)

  • SKILL.md

SKILL.md (first lines)

<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` - 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): commit them first (then continue), leave them out of this
   land, or stop. 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 list
```

   On 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 "${CLAUDE_PLUGIN_ROOT}/cadence-core/bin/git-publish.mjs" authorized --dir <root>
```

   `ok:true` takes 3(b), `ok:false` takes 3(a). It is true only when this
   repository's config and your user-global config BOTH set `git.auto_close`;
   either alone authorizes nothing. When the refusal's `requested` is true,
   print its `detail` as one line first, so a user who set one half learns why
   the ask came back.

   **(a) `git.auto_close` false, or not set in both layers (default): ask the
   mechanism (ask-user seam, NO preselected default):**
   - **Direct push** - push the current branch to its remote.
   - **Open MR / PR** - the detected host's mechanism (`glab mr create` on
     GitLab, `gh pr create` on GitHub, `tea pr create --base <base> --head
     <branch>` on a Forgejo/Gitea remote - `tea` does not push the source
     branch itself, so push it first as part of this same chosen action). If
     no remote, or `tea` holds no login at all, this option is absent.
   - **Tag** - create an annotated tag (ask the name); ask separately
     whether to push it.

From crenshawdev/cadence, MIT.

More from crenshawdev/cadence

Signals

Stars
8
Forks
0
Open issues
4
Last commit (this folder)
Oct 5, 2026 (26 days ago)
Last release
Oct 12, 2026 (19 days ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from crenshawdev

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get cad-land running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying cad-land?

CallGet help
Cite this page

cad-land skill. Agent Mart. https://agentmart.dev/skills/crenshawdev-cad-land (last updated 2026-10-24)