Skip to content
Back to skills

Ivar Deliver

ASecurity

Preview and apply delivery for a feature — push branches and create or update pull requests.

  • 4 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 16, 2026
developmentgobashapi

Works with

  • api
  • mcp

Security analysis

A100/100

Scanned November 11, 2026

npx -y skills add mnzsss/ivar --skill ivar-deliver --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ivar Deliver?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ivar Deliver
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mnzsss-ivar-deliver/badge)](https://www.skillsdirectory.com/skills/mnzsss-ivar-deliver)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: ivar-deliver
description: Preview and apply delivery for a feature — push branches and create or update pull requests.
---

# Deliver

`/ivar-deliver` previews and applies delivery for a feature: it pushes branches
and creates or updates pull requests.

## Usage

Generate a side-effect-free delivery preview:

```bash
ivar feature deliver <feature> --preview
```

Apply an approved delivery, pinned to the fingerprint the human reviewed:

```bash
ivar feature deliver <feature> --fingerprint <fp>
```

Run `ivar feature deliver <feature> --help` for the full flag surface.

## Review memory before apply

Delivery refuses a feature whose memory was not reviewed
(`deliver.memory_not_reviewed`), and the preview lists it as a blocker.
Before the preview, in a session of the feature:

1. Call the `memory_review` MCP tool with no arguments. It returns three lists:
   - **written**: the pages the feature wrote under `docs/memory/`;
   - **gaps**: a failed tool with no `gotcha`, no `update` page, an Analysis
     approved without a `memory_query`;
   - **stale**: durable pages the feature's diff may have made stale.
2. Show the three lists to the human. Write the `update` page and any gotcha
   the human wants now, with `memory_write_page`. A gap never blocks the
   confirmation.
3. Ask the human for a verdict on each stale page: `updated` (you patched it)
   or `still_valid`.
4. Call `memory_review` with `confirm: true`, the verdicts in `stale`, and
   `not_required` with the human's reason when the feature wrote no page.

Then preview. The review is part of the fingerprint, so a review recorded
after a preview needs a new preview. A `deliver.memory_review_outdated`
warning means a repo moved since the review: review again if the new commits
change what memory says.

Without the MCP tool, `ivar memory review <feature>` prints the same lists,
read-only. Only the human decides to skip the review:
`ivar feature deliver <feature> --fingerprint <fp> --skip-memory-review "<reason>"`
applies without it and records `memory.review_skipped` with the reason. It
lifts no other blocker. Never pass it on your own.

## Deliver a subset of repos

`--only <repo>` restricts preview and apply to the named promoted repos;
repeat it to select several. Use it when one repo's PR is already merged and
another repo of the same feature still needs its PR updated — delivering
every repo would push the merged branch again and open a new PR for it.

```bash
ivar feature deliver <feature> --only web --preview
ivar feature deliver <feature> --only web --fingerprint <fp>
```

`--only` is part of the fingerprint: apply with the same selection the
preview used (the printed apply command already carries it). `--repo` does
not select repos; it only scopes `--name`, `--body` and `--draft`, and a
`--repo` outside the `--only` selection is refused. A partial delivery leaves
the Sibling PRs comment untouched.

## PR metadata

Use `--name`, `--body`, and `--draft` to set the pull request title, body, and draft status.

**Global (applies to every repo):**

```bash
ivar feature deliver <feature> --preview --draft \
  --name "feat: add session resume" \
  --body "Closes the gap in session state."
```
**Scoped (per repo):**

```bash
ivar feature deliver <feature> --preview \
  --repo api --name "feat: add user endpoint" --draft \
  --repo web --name "feat: add user page"
```

A scoped `--name`/`--body`/`--draft` overrides the global value for that repo. A
scoped repo that omits `--name`, `--body`, or `--draft` inherits the global value.

### Body values

- **Inline string:** `--body "short description"`.
- **File reference:** `--body ./notes.md` or `--body /abs/path/notes.txt` — the
  file contents are read and used as the PR body. A relative path is resolved
  against the current working directory.

A `.md`/`.txt` argument is only read as a file when it is written as a path:
prefixed `./` or absolute. A bare `notes.md` is used as inline body text.

### Draft guidance

Pass `--draft` to create PRs as drafts (default in guided execution) or convert an existing ready PR to draft. Omitting `--draft` preserves the existing remote PR draft state.

### Title guidance

Use short, semantic, squash-ready titles in the pattern `<type>: <short message>` — for example `feat: add session resume` or `fix: handle empty checkout`. Avoid Linear issue identifiers in PR titles; link the issue in Linear instead.

### Land conflict

`--name`, `--body`, and `--draft` cannot be used with `--land`. Land mode merges the
feature into the upstream branch and does not create or update pull requests,
so PR metadata is rejected.

## When to use

- The feature has been reviewed and approved.
- You want to preview what branches would be pushed and which PRs created.
- You are ready to push code and create or update PRs.

## What happens

1. **Preview** (`--preview`, side-effect-free): reads local state for each
   promoted repo — branch name, remote, base branch, existing PR status, HEAD
   and base SHAs — and computes a content-based fingerprint to detect state
   drift. Nothing is pushed.
2. **Apply** (`--fingerprint <fp>` required): validates the supplied
   fingerprint from the reviewed preview against current state — rejects if
   state changed. Never replaces the reviewed fingerprint with a freshly
   generated one. Refuses a feature without a memory review unless the human
   passed `--skip-memory-review`. Pushes each accepted repo's branch and creates or updates
   its PR.

## Link pull requests to the T3 Code thread

When this session has the `t3-code` MCP tools `link_pull_request` and
`list_thread_pull_requests`, call `link_pull_request` with the full URL of each
pull request that apply created or updated, one call per repo, right after
apply. Before you finish, call `list_thread_pull_requests` and link any pull
request from this delivery that is missing. Never link a pull request that is
only background. If a call fails, report the failure instead of saying the pull
request is linked. If those tools are not available, skip this section:
delivery is complete without it.

## Important

- **Never add AI attribution** to `--name`, `--body` or the feature's commits
  (`Generated with …`, a `Co-Authored-By:` trailer naming an AI agent). Deliver
  refuses with `deliver.ai_attribution` in preview and apply, naming each repo,
  commit and line. Rewrite those commit messages and the body, then preview again.
- **`--fingerprint` is required to apply.** Pass the fingerprint printed by the
  reviewed `--preview` output. Apply never generates a new fingerprint — it
  must match the human-reviewed preview.
- Never auto-merges — `ivar` only observes merged state.
- A stale preview fingerprint (state changed since generation) is rejected —
  generate a fresh preview.
- Between preview and apply, focus on the preview Repos and compare `HALL.md`'s
  relation context with the Analysis. Offer `/ivar-relations` only for concrete,
  unreflected evidence. Deferring it does not block apply and does not invalidate
  the delivery fingerprint — and this checkpoint never writes `HALL.md` directly.
- Ask one question after the preview: **(a) Apply**, **(b) Cancel**. Put any
  `/ivar-relations` suggestion in the same message as a note, not a second gate.

## After delivery

- **CI fails or a reviewer requests changes:** read `gh pr checks <pr>`, fix on
  the feature branch, commit, then preview again (the fingerprint changes) and
  apply.
- **Merged:** run `/ivar-feature-cleanup` once every promoted repo's PR is
  merged, possibly days later. Until then, keep the feature.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in development →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.