Agent skill

PlotJuggler Ship Check

by PlotJuggler in PlotJuggler/PlotJuggler

Runs a gated finish-line checklist before committing a PlotJuggler PJ4 change: build proof, red-test triage, hooks, docs freshness and a diff self-review.

MPL-2.0Auto-check passedDevelopment

Install PlotJuggler Ship Check

skills CLI
$ npx skills add PlotJuggler/PlotJuggler --skill ship-check -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install PlotJuggler/PlotJuggler ship-check --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/PlotJuggler/PlotJuggler.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/ship-check .claude/skills/ship-check && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
ship-check
GitHub stars
6.2k
Token cost
~1.3k tokens
SKILL.md length
632 words
Files
1
Skills in repo
4
Repo updated
First seen
Licence
MPL-2.0

At a glance

Runs a gated finish-line checklist before committing a PlotJuggler PJ4 change: build proof, red-test triage, hooks, docs freshness and a diff self-review.

  • Works in 4 steps: Known-red?… → Pre-existing? Reproduce on clean… → Yours. Red only with your diff → fix… → …
  • A PJ4 change looks complete and you are about to commit or open a PR
  • SKILL.md covers Overview, Gate 1 — Build proof + full…, Gate 2 — Red-test triage… and Gate 3 — Hooks and hygiene, plus 6 more sections
  • Calls gh and git

What it does

The gates run in order, each added because skipping it has cost time before. Gate 0 says approval is not the agent's to give: it never commits, pushes or opens a PR on its own, and ends with the diff and a question. Gate 1 requires build proof through `./build.sh` and the full `ctest` run. Gate 2 triages red tests: a known deterministic failure outside `pj_marketplace` is noted, a failure that also appears on clean `origin/main` is reported but not fixed unless asked, and a failure only your diff causes must be fixed before claiming done.

Tests are never deleted, weakened or skipped to get green, and real-GL tests that fail only on Windows CI usually come from the driver GL version. Gate 3 runs `pre-commit run --all-files`, mandatory after a rebase with manual conflicts. Gate 4 checks that module docs still match changed behavior, and Gate 5 is a diff self-review for dependency rules, SPDX headers, renamed UI object names and history comments.

When your agent uses it

  • A PJ4 change looks complete and you are about to commit or open a PR
  • Tests are red at the end and you must decide whether you caused it
  • Before claiming a change is done or ready to merge

Example prompts

  • “I think this PJ4 change is finished, so run the ship check before I commit.”
  • “Two tests are red and I did not touch that module; work out if they are pre-existing.”
  • “Check my diff against the finish-line gates and tell me what is still missing.”

Requirements

  • A PlotJuggler checkout with `build.sh`, CMake `ctest` and pre-commit set up

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Known-red? extension_manager_test.ConstructionReflectsStagedUpdateInOnePass fails deterministically on clean checkouts (/tmp…
  2. Pre-existing? Reproduce on clean origin/main (primary checkout or fresh worktree). Red there too → pre-existing: report it, don't fix it…
  3. Yours. Red only with your diff → fix before any "done" claim.
  4. Never delete, weaken, GTEST_SKIP, or comment-out a failing test to get green. Surfacing a real failure is success; hiding it is the failure.

What it can do on your machine

Read from SKILL.md and the folder at commit 346dee6. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • gh
    • git

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use gh and git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

PlotJuggler Ship Check loads about 1.3k tokens when it runs. Until then it costs about 57 tokens; SKILL.md has 632 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~57
When it runs · the whole SKILL.md, loaded when a task matches
~1.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from PlotJuggler/PlotJuggler at commit 346dee6, republished under its MPL-2.0 licence (© PlotJuggler). 632 words, ~1,343 tokens.

Download SKILL.mdSave it as .claude/skills/ship-check/SKILL.md (or your agent's skills folder).
name
ship-check
description
Use when a PJ4 change is believed complete and it's time to prepare a commit or PR, when tests are red at finishing time and you must decide whether the failure is yours, or before any "done / ready to merge" claim.

Finish-line checklist before commit / PR

Overview

Recorded failure modes at the finish line: shipping with a stalled recompile, misreading a pre-existing red as a regression (or vice versa), hook-dirty commits after rebases, stale docs, and committing without approval. Run the gates in order; each exists because skipping it has cost real time.

Gate 0 — approval is not yours to grant. Never commit, push, or open a PR autonomously. The end state of this skill is a surfaced diff and a question, not a commit.

Gate 1 — Build proof + full tests

bash
./build.sh 2>&1 | tee /tmp/build.log        # then grep Building …cpp.o for your files
ctest --test-dir build --output-on-failure

Gate 2 — Red-test triage (decision procedure, not judgment)

  1. Known-red? extension_manager_test.ConstructionReflectsStagedUpdateInOnePass fails deterministically on clean checkouts (/tmp backup-rename). If your diff is outside pj_marketplace: note it, not a blocker.
  2. Pre-existing? Reproduce on clean origin/main (primary checkout or fresh worktree). Red there too → pre-existing: report it, don't fix it unless asked, don't let it block.
  3. Yours. Red only with your diff → fix before any "done" claim.
  4. Never delete, weaken, GTEST_SKIP, or comment-out a failing test to get green. Surfacing a real failure is success; hiding it is the failure.

GL-test caveat: real-GL tests must self-skip below driver-reported GL 4.5 (glGetString(GL_VERSION), not the requested format) — a Windows-CI-only shader failure is usually this, not your change.

Gate 3 — Hooks and hygiene

bash
pre-commit run --all-files

Mandatory after any rebase with manual conflict resolution (rebase skips hooks); fold fixes into the originating commit (--fixup + --autosquash).

Gate 4 — Docs freshness

Behavior, public API, ABI structs, module ownership, or user-facing semantics changed? Then the owning module's CLAUDE.md / docs/ must still be true — update in this same change or ask. Do not commit known-stale docs.

Gate 5 — Diff self-review

Read the full diff once, checking exactly:

  • No never-link-list violation (root CLAUDE.md → Dependency rules) in any CMakeLists.txt / #include change
  • SPDX header on every new file
  • No .ui objectName renamed
  • No history comments ("previously", "changed from", "instead of", "NOT persisted")
  • Host stayed domain-neutral (no plugin-specific terms in pj_app/pj_runtime/conanfile.txt)
  • No leftover debug output, commented-out code, or scratch files

Gate 6 — Surface and stop

Present: summary of the change, test results (including any known-red noted), the diff or git diff --stat, and the proposed commit message:

type(scope): subject          # feat|fix|chore|ci|docs|refactor|perf|test; scope = module/feature

<body: why + what; PR/issue refs>

Co-Authored-By: <model attribution>

Then stop and ask. Commit only on explicit confirmation in that turn.

Show full SKILL.md (290 more words)Show less

After approval — git execution traps

TrapRule
git mv + editsgit add the new path again — "100% similarity" in output means you shipped a stale blob
Force-push--force-with-lease, never bare --force; reopen a closed PR before force-pushing (after, reopen becomes impossible)
Squash-mergeVerify every intended commit landed: git log --oneline <merge-commit>
Merge from origin/mainGrep that feature entry points still have production callers — modify/delete conflicts drop wiring while CI stays green
gh pr edit GraphQL errorFall back to gh api repos/…/pulls/<n> -X PATCH -f …

Reading CI

  • gh run view --log-failed usually prints nothing (at run level and per job). Don't retry it — go straight to the job log:
    bash
    gh run view <run-id> --json jobs -q '.jobs[] | select(.conclusion=="failure") | "\(.databaseId) \(.name)"'
    gh api repos/PlotJuggler/PJ4/actions/jobs/<job-id>/logs | tr -d '\r' | grep -n -E "error|FAILED|Error:" | head -40
  • Windows CI is continue-on-error even though Windows is a required target: read per-step status via gh run view <id>, never the run-level ✓.
  • Windows red at conan install with "Cannot load recipe / conanfile.py not found" after a cache HIT = poisoned ghcr Conan cache, not your code → bump the CACHE_VERSION salt in windows-ci.yml (tag + GHA key + restore-keys).

Rationalization table

ExcuseReality
"Only one test red, probably flaky"Run the triage procedure; PJ4 has exactly one documented known-red
"Failure is in a module I didn't touch"Still triage — step 2 takes two minutes and settles it
"I'll fix the docs in a follow-up PR"Same change or an explicit question; stale docs don't ship
"Skip pre-commit, CI will catch it"CI catching it costs a full round-trip; the hook costs seconds
"The user said run to completion"Run-to-completion stops at the commit boundary, not through it
"Windows CI is green"It's continue-on-error; green means nothing until you read the steps

© PlotJuggler, MPL-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/ship-check of PlotJuggler/PlotJuggler.

Open the folder on GitHubat commit 346dee6

Compare with similar skills

PlotJuggler Ship Check next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

PlotJuggler Ship Check compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
PlotJuggler Ship Check this skillPlotJuggler/PlotJuggler6.2k—~1.3kAutomated safety check: PassMPL-2.0
PR Babysitteropeninterpreter/openinterpreter69k3 repos~4.2kAutomated safety check: PassApache-2.0
Iterate PRmeshery/meshery-operator1517 repos~2.2kAutomated safety check: PassApache-2.0
PR Reviewwysaid/android-gpuimage-plus1.9k—~1.4kAutomated safety check: PassMIT
Pull Requestnoh-rs/nohrs156—~4.1kAutomated safety check: PassMIT
Compound Engineering Code ReviewEveryInc/compound-engineering-plugin25k—~2kAutomated safety check: PassMIT

Similar skills

  • PR Babysitter

    openinterpreter/openinterpreter

    Watches an open GitHub pull request until it merges, handling review comments, diagnosing CI failures and retrying flaky checks along the way.

    69k GitHub starsUsed in 3 repos~4.2k tokens
    DevelopmentAuto-check passed
  • Iterate PR

    meshery/meshery-operator

    Iterate on a PR until CI passes. An agent skill from meshery/meshery-operator.

    151 GitHub starsUsed in 7 repos~2.2k tokens
    DevelopmentAuto-check passed
  • PR Review

    wysaid/android-gpuimage-plus

    Address review comments and CI failures for the current branch's PR

    1.9k GitHub stars~1.4k tokensUpdated 2 mo ago
    DevelopmentAuto-check passed
  • Pull Request

    noh-rs/nohrs

    Take a change from working tree to a merge-ready pull request, then keep iterating until the CI checks and AI reviewers (CodeRabbit, cubic) all pass.

    156 GitHub stars~4.1k tokensUpdated 5 days ago
    DevelopmentAuto-check passed
  • Compound Engineering Code Review

    EveryInc/compound-engineering-plugin

    Runs a staged pull request or diff review using selected reviewer personas, checking the change against its stated intent and project standards before producing findings.

    25k GitHub stars~2k tokensUpdated today
    DevelopmentAuto-check passed
  • GitHub PR Images

    bikeindex/bike_index

    Embed a local image file into an existing GitHub PR — either in the PR body or as a comment.

    308 GitHub stars~1.6k tokensUpdated today
    DevelopmentAuto-check passed

More from PlotJuggler/PlotJuggler

  • PlotJuggler 4 Perf Profiling

    PlotJuggler/PlotJuggler

    Guides CPU profiling of PlotJuggler 4 on Linux with perf: count first, record cheaply with LBR, then read per-thread, flat, flamegraph or time-window views.

    6.2k GitHub stars~1.6k tokensUpdated 6 days ago
    Auto-check: notes
  • PlotJuggler 3 to 4 Porting

    PlotJuggler/PlotJuggler

    Directs porting of widgets, dialogs, panels and transforms from PlotJuggler 3 to PlotJuggler 4 by lifting the original files intact and rebinding only the data paths.

    6.2k GitHub stars~1.1k tokensUpdated 6 days ago
    Auto-check passed
  • PlotJuggler Live Verification

    PlotJuggler/PlotJuggler

    Confirms that a change to PlotJuggler 4 really works in the running app by proving the rebuild, launching with real data and measuring the result.

    6.2k GitHub stars~956 tokensUpdated 6 days ago
    Auto-check passed

Works with

Questions about PlotJuggler Ship Check

What does PlotJuggler Ship Check do?

Runs a gated finish-line checklist before committing a PlotJuggler PJ4 change: build proof, red-test triage, hooks, docs freshness and a diff self-review. The gates run in order, each added because skipping it has cost time before. Gate 0 says approval is not the agent's to give: it never commits, pushes or opens a PR on its own, and ends with the diff and a question.

When should I use PlotJuggler Ship Check?

PlotJuggler Ship Check fits situations like: A PJ4 change looks complete and you are about to commit or open a PR; tests are red at the end and you must decide whether you caused it; before claiming a change is done or ready to merge.

How do I install PlotJuggler Ship Check in Claude Code?

Run `npx skills add PlotJuggler/PlotJuggler --skill ship-check -a claude-code`. Or copy the skill folder (.claude/skills/ship-check in PlotJuggler/PlotJuggler) into .claude/skills/ship-check in your project. Claude Code loads it when a task matches its description.

How do I install PlotJuggler Ship Check in Codex?

Run `npx skills add PlotJuggler/PlotJuggler --skill ship-check -a codex`. Or copy the skill folder (.claude/skills/ship-check in PlotJuggler/PlotJuggler) into .agents/skills/ship-check in your project. Codex loads it when a task matches its description.

Can I use PlotJuggler Ship Check in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add PlotJuggler/PlotJuggler --skill ship-check -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ship-check, .gemini/skills/ship-check, .github/skills/ship-check and .opencode/skills/ship-check in your project.

What does PlotJuggler Ship Check need to run?

Going by SKILL.md and its folder, PlotJuggler Ship Check needs the command-line tools its instructions call (gh and git). Our summary lists: A PlotJuggler checkout with `build.sh`, CMake `ctest` and pre-commit set up.

Does PlotJuggler Ship Check access the network?

SKILL.md contains no URLs. Its commands use gh and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is PlotJuggler Ship Check safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does PlotJuggler Ship Check use?

PlotJuggler Ship Check is published under the MPL-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does PlotJuggler Ship Check use?

About 1.3k tokens (SKILL.md is roughly 5.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to PlotJuggler Ship Check?

Skills that share tags, products or a category with PlotJuggler Ship Check: PR Babysitter (openinterpreter/openinterpreter, 69k stars), Iterate PR (meshery/meshery-operator, 151 stars), PR Review (wysaid/android-gpuimage-plus, 1.9k stars) and Pull Request (noh-rs/nohrs, 156 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains PlotJuggler Ship Check?

PlotJuggler (a GitHub organization) maintains it in PlotJuggler/PlotJuggler, which has 6,233 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 1, 2026.

Source: PlotJuggler/PlotJuggler on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.