Skip to content
Automation
Skill

/verify-and-ship

Choose proportionate validation, fix failures, update the changelog, commit, push, and create/update the pull request or merge request.

From plugin
cyrus
89419 skills1 agent

Claude Code

$ npx -y skills add cyrusagents/cyrus --skill verify-and-ship --agent claude-code

SKILL.md

verify-and-ship.SKILL.md
name: verify-and-ship
description: Choose proportionate validation, fix failures, update the changelog, commit, push, and create/update the pull request or merge request.

Verify and Ship

After implementing your changes, follow these steps to verify quality and ship the work.

1. Acceptance Criteria Validation (CRITICAL)

Use the issue tracker `get_issue` tool to fetch the current issue details. Extract ALL acceptance criteria from the issue description and verify each one is satisfied by the implementation. If no explicit criteria exist, validate against the implied requirements from the issue title and description.

2. Quality Checks

Choose validation by changed behavior, risk, and existing coverage. Verification is required; new automated tests and a full-suite run are not required for every change. Follow repository-specific checks and CI gates where applicable.

  • **Direct verification** — For routine release scripts, packaging/build metadata,

CI, documentation, and instruction edits, prefer syntax checks, a safe dry run, artifact inspection, an isolated install smoke check, or a consistency review when those are sufficient. Record the command/result or review performed in the PR; no new test file or validation report is needed merely to show work.

  • **Automated tests** — Run relevant existing tests. Add or retain a regression

test only when it catches a concrete consequential failure and its protection justifies its maintenance. Examples include publishing the wrong artifact, unintentionally moving stable tags, or accepting invalid release evidence. Explain the failure each new test catches. Do not add brittle assertions on documentation wording or source text, tests that mirror implementation, or elaborate scaffolding for low-risk edits. A script filename alone neither requires tests nor exempts consequential behavior from protection.

  • **Scope** — Broaden testing when shared behavior, failures, or unresolved risk

warrants it; do not automatically run the full suite or generate coverage reports. Once sufficient checks pass, stop repeating them unless changes or new evidence justify another run. Investigate relevant failures rather than retrying unchanged commands. Report any unresolved failures honestly.

  • **Lint, types, build** — Run checks relevant to the changed files and required

repository gates. Fix introduced failures.

  • **Review** — Check correctness, scope, and maintainability, including whether

proposed tests provide useful protection.

Where the repository uses F1, apply its canonical `skills/f1-test-drive/SKILL.md` applicability policy before invoking a drive or requesting evidence. Nonapplicable changes need proportionate checks and a brief PR note, without an F1 run or report. Do not infer an F1 requirement from this skill. Preserve existing safeguards for consequential failures.

3. Changelog Update

Check if the project has changelog files:

ls -la CHANGELOG.md CHANGELOG.internal.md 2>/dev/null || echo "NO_CHANGELOG"

If changelog files exist, diff against the base branch to detect entries already added by this branch:

# See what changelog lines this branch has added compared to the base branch
# Replace <base_branch> with the actual base branch from the issue context
git diff <base_branch> -- CHANGELOG.md CHANGELOG.internal.md 2>/dev/null

**Handling existing entries:**

  • If the diff shows this branch already added a changelog entry for the current issue (matching the issue identifier), **update that entry in-place** (e.g., to add the PR/MR link or refine the description). Do NOT add a duplicate entry.
  • If the diff shows this branch added changelog entries for a different issue or no entries at all, add a new entry.

**Adding or updating entries:**

  • Place entries under `## [Unreleased]` in the appropriate subsection (`### Added`, `### Changed`, `### Fixed`, `### Removed`)
  • Focus on end-user impact — be concise but descriptive
  • Include the Linear issue identifier and PR/MR link (format: `([ISSUE-ID](linear_url), [#NUMBER](PR_OR_MR_URL))`)
  • Follow [Keep a Changelog](https://keepachangelog.com/) format

4. Commit and Push

  • Stage all relevant changes (including changelog updates)
  • Commit with clear, descriptive messages following the project's commit conventions
  • Push to the remote repository

5. Create or Update PR/MR

Determine the platform from the repository context (`<github_url>` or `<gitlab_url>` in the issue context). Use the appropriate tool for the platform.

GitHub (when `<github_url>` is present)

git push -u origin HEAD
gh pr view --json url,number 2>/dev/null || gh pr create --draft --base [base_branch from context] --title "[descriptive title]" --body "Work in progress"

GitLab (when `<gitlab_url>` is present)

git push -u origin HEAD
glab mr view 2>/dev/null || glab mr create --draft --target-branch [base_branch from context] --title "[descriptive title]" --description "Work in progress"

PR/MR Description

Update the PR/MR with a comprehensive description:

  • **Assignee attribution**: If `<github_username>` is available in the assignee context, add `Assignee: @username ([Display Name](linear_profile_url))` at the top of the body. If only a linear profile URL is available, use `Assignee: [Display Name](linear_profile_url)`.
  • **Summary** of changes, implementation approach, and testing performed
  • **Link** to the Linear issue
  • **Cyrus marker**: Include `<!-- generated-by-cyrus -->` as a hidden HTML comment at the end of the body
  • **Interaction tip**: Add this at the end (before the marker), using the bot username from `<github_bot_username>` or `<gitlab_bot_username>` in the `<agent_context>` block of the system prompt. If `<agent_context>` is not present, default to `cyrusagent`:
  ---
  > **Tip:** I will respond to comments that @ mention @<bot_username> on this PR/MR. You can also submit a review with all your feed
Read more
@cyrusagents
Ships withcyrus

Your (Claude Code|Codex|Cursor|Gemini|Opencode) powered (Linear|GitHub|GitLab|Slack) agent.

89419 skills1 agent
Get the whole plugin

Stars on GitHub

Momentum

stars in total
894
Star history of cyrusagents/cyrus on GitHub, a chart by star-history.com

Other skills on cyrus.

google

google

Search the web for information. Use when you need to look something up, find current information, or research a topic.

@cyrusagents@cyrusagentsInstall Skill
release-core-test

release-core-test

Invoke when dev-testing a Cyrus change that spans CYPACK (edgeworker + CLI) and CYHOST (Vercel-hosted GUI) and the hosted GUI…

@cyrusagents@cyrusagentsInstall Skill
cyrus-setup-github

cyrus-setup-github

Configure GitHub for Cyrus — gh CLI login and git config for PRs, with optional webhook setup to enable @mention responses in PR…

@cyrusagents@cyrusagentsInstall Skill

More skills from other plugins.

agent-builder

agent-builder

Load immediately after an Agent intent, before the first agent_builder_* call. Governs how you create, configure, test, and…

n8n12d209k
@n8n-io@n8n-ioInstall Skill
browser-use

browser-use

Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…

@browser-use@browser-useInstall Skill
agent-browser

agent-browser

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…

@vercel-labs-2@vercel-labs-2Install Skill
add-anydoc

add-anydoc

Add local office-document-to-Markdown conversion to NanoClaw agent containers with the pinned Firecrawl AnyDoc CLI. Use when…

@nanocoai@nanocoaiInstall Skill

Questions about verify-and-ship.

Which coding agents can use verify-and-ship?
verify-and-ship installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.