Manor CI Triage
manor-os/manor-ai
A skill your agent uses when Manor GitHub Actions, .github/workflows/ci.yml, OSS smoke/regression jobs, web source smoke, frontend build, lint, or public CI failure logs need diagnosis or repair.
Autonomously cut a Rove (@sma1lboy/rove) release end-to-end — detect the semver bump from pending changesets (flagging an upstream minor you didn't intend), run the release gates, dispatch the…
The automated check flagged lines worth reading first. See the safety section below.
$ npx skills add Sma1lboy/rove --skill release -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Sma1lboy/rove release --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Sma1lboy/rove.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/release .claude/skills/release && rm -rf skills-srcUse ~/.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/
Install the "release" agent skill from https://github.com/Sma1lboy/rove/tree/main/.claude/skills/release into .claude/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Sma1lboy/rove/tree/main/.claude/skills/releaseType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Sma1lboy/rove --skill release -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Sma1lboy/rove release --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Sma1lboy/rove.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/release .agents/skills/release && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "release" agent skill from https://github.com/Sma1lboy/rove/tree/main/.claude/skills/release into .agents/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Sma1lboy/rove --skill release -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Sma1lboy/rove release --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Sma1lboy/rove.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/release .cursor/skills/release && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "release" agent skill from https://github.com/Sma1lboy/rove/tree/main/.claude/skills/release into .cursor/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Sma1lboy/rove.git --path .claude/skills/release--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Sma1lboy/rove --skill release -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Sma1lboy/rove release --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Sma1lboy/rove.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/release .gemini/skills/release && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "release" agent skill from https://github.com/Sma1lboy/rove/tree/main/.claude/skills/release into .gemini/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Sma1lboy/rove releaseInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Sma1lboy/rove --skill release -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Sma1lboy/rove.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/release .github/skills/release && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "release" agent skill from https://github.com/Sma1lboy/rove/tree/main/.claude/skills/release into .github/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Sma1lboy/rove --skill release -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Sma1lboy/rove release --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Sma1lboy/rove.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/release .opencode/skills/release && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "release" agent skill from https://github.com/Sma1lboy/rove/tree/main/.claude/skills/release into .opencode/skills/release/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "release", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
releaseAutonomously cut a Rove (@sma1lboy/rove) release end-to-end — detect the semver bump from pending changesets (flagging an upstream minor you didn't intend), run the release gates, dispatch the…
Release is an agent skill from Sma1lboy/rove. Autonomously cut a Rove (@sma1lboy/rove) release end-to-end — detect the semver bump from pending changesets (flagging an upstream minor you didn't intend), run the release gates, dispatch the Changesets workflow (or run scripts/release.sh locally), then poll the GitHub Actions Release workflow with gh until npm publish completes, diagnosing CI failures (npm token, registry 404, lint, branch mismatch) instead of leaving them silent. Use when the user says "cut a release", "ship a version", "release Rove"…
Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in DevOps & Cloud, covering Failing and flaky tests and CI/CD. It works with npm, GitHub Actions and Git. The repository describes itself as: Rove — the agent multiplexer for your terminal. Run coding agents on parallel tasks with isolated worktrees and persistent sessions. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 8b9f22c. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
gitbunnpmghchangesetFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, npm and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
NPM_TOKENFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Release loads about 3.1k tokens when it runs. Until then it costs about 163 tokens; SKILL.md has 1,438 words of instructions outside code blocks.
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.
The automated check found patterns that need a careful read before installing.
or scope access wrong | Report; check `.npmrc` auth line + `access: public`. Don't mutate published state. |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.
The full file from Sma1lboy/rove at commit 8b9f22c, republished under its MIT licence (© Sma1lboy). 1,438 words, ~3,066 tokens.
.claude/skills/release/SKILL.md (or your agent's skills folder).Autonomous release driver for @sma1lboy/rove. This is the supervised loop the
manual flow in docs/RELEASING.md describes — read
that doc once if anything here is ambiguous; it is the source of truth and this
skill must never contradict it.
Releases are on demand. Merging a PR only banks its changeset; nothing ships until someone runs
.github/workflows/changesets.yml(CI-green wait → version + commit → tag → dispatchrelease.yml). That workflow is the default path: do Step 1 againstorigin/main(the workflow releases whatever is banked there), thengh workflow run changesets.yml --ref main, find the run withgh run list --workflow=changesets.yml --limit 1, watch it withgh run watch <run-id> --exit-status, and go to Step 4. Use the localscripts/release.shflow (Steps 0–3) only when Actions is unavailable or the user asks for it, and never while a changesets.yml run is in flight on the same version (they'd race to tag it).
The job is: detect the bump → gate → bump/tag/push → watch CI → confirm published, or stop with a precise report. Do the whole chain without hand-holding, but stop and surface (never guess) at the two human-judgment gates marked ⚠ ASK below.
git push -f, no --force-with-lease, no
git reset --hard on a shared branch, no retag-over-existing. If a tag or push
conflicts, stop and report — recovery is the user's call.patch. Per AGENTS.md: pre-1.0 Rove ships features as
patches. A minor/major only happens when the user explicitly said so this
turn, OR a pending changeset already carries that bump — and the second case is
exactly the trap to flag (see Step 1).main only. Verify branch before and after. A release on
a stray feature branch is the #1 historical failure — catch it early.--no-verify, no skipping hooks. If a gate fails, fix the cause or stop.chore: release — X.Y.Z. No AI/Claude attribution
anywhere (commit, tag, GitHub release body).Confirm the working tree is sane and you're where you think you are:
git rev-parse --abbrev-ref HEAD # MUST be main (see Step 3)
git status --porcelain # working tree must be clean
git fetch origin && git log --oneline origin/main..HEAD # any unpushed commits?
git log --oneline HEAD..origin/main # are we behind? if so, surface — don't auto-merge
gh auth status # gh must be authed for CI pollingscripts/release.sh itself refuses a dirty tree (except the files it rewrites),
but do this first so you fail fast with a clear message instead of mid-script.
If origin/main is ahead of HEAD, stop and surface — Rove main moves fast
(often several releases/day); releasing from a stale base is how versions
collide. Let the user decide whether to pull/rebase.
The bump is not chosen by you — it's the max of the pending .changeset/*.md
bump types, computed by changeset version. Inspect before consuming:
bun run changeset:status # shows pending changesets + resulting bump
ls .changeset/*.md | grep -v README.md # raw list
# read each one — the first line frontmatter is the bump type:
# ---
# "@sma1lboy/rove": minor ← THIS is the bump that file forces
# ---Then decide:
release.sh will abort. Tell
the user and offer to draft one (the changelog-generator skill does this).patch → proceed silently; this is the normal case.minor or major → ⚠ STOP AND ASK. This is the
documented annoyance: an upstream/peer changeset silently promotes the release
to a minor the user didn't intend. Quote the offending file + its bump line and
confirm: ".changeset/foo.md carries a minor — the release will be X.(Y+1).0,
not a patch. Intended?" Only continue on an explicit yes. Do not edit
someone's changeset bump without permission.Record the predicted next version (current packages/rove/package.json version
applied with the detected bump) so you can verify it later.
scripts/release.sh enforces lint && typecheck && (cd packages/rove && bun run test) itself before touching version/CHANGELOG, and release.yml
re-runs lint + typecheck + test + build + the behavior suite before
npm publish. Running the same set here first just fails fast, before burning a
changeset version cycle:
bun run lint
bun run typecheck
bun run test # fast Vitest + unix-socket daemon/bridge suite
bun run build
cd packages/rove && bun run perf:golden # golden perf doctor (~90s incl. binary compile smoke; docs/HARNESS.md §Performance contracts)perf:golden ceilings are 2-3× the reference numbers, so a FAIL means a real
structural regression (startup, PTY spawn/wake, per-tab memory, park reclaim)
— treat it like a red test, not jitter; rerun once to confirm before digging.
perf:golden is not part of the enforced release.sh/release.yml gate (opt-in,
local/pre-release only per docs/HARNESS.md), so run it manually here.
bun run test:behavior exercises the built CLI against an isolated daemon and
standalone PTY Host with a fake claude shim; cases that drive the outer terminal
also need native node-pty support. release.yml runs the same black-box suite
before npm publish. Running it locally first is optional but catches a failure
before the tag push.
If a gate fails: report the exact failing command + output, fix it if it's an obvious in-scope issue (and re-run the full set), or stop. Never proceed to tag a red tree.
git rev-parse --abbrev-ref HEAD # MUST print: mainIf not on main, stop — do not checkout/merge to "fix" it autonomously
(concurrent sessions + branch juggling is the documented git-tangle failure).
Surface the actual branch and ask.
On main with gates green, run the release script. It is the single source of the
bump→version→CHANGELOG→commit→tag→push sequence — don't reimplement those steps by
hand:
scripts/release.shWhat it does (don't fight it): gate (lint → typecheck → test → build →
behavior) → changeset version → bun install + --frozen-lockfile →
lint:fix on the regenerated JSON → commits chore: release — X.Y.Z (no tag
yet) → prompts, pushes the release commit to main, waits for that
commit's ci.yml run to go green (the Linux/macOS gates the local macOS run
can't prove — v0.8.66 died exactly there), and only then tags vX.Y.Z and
pushes the tag.
CURRENT → NEW (vX.Y.Z) matches your Step 1 prediction. A
mismatch means a changeset changed under you — stop and re-inspect.Push now? [y/N]. Answer y only after the version line checks
out. If the user wanted a dry run / review-before-push, answer N — re-running
the script later resumes (push → wait CI → tag).main (no new changeset) and re-run scripts/release.sh —
with zero pending changesets and an untagged committed version it enters
resume mode and tags the same version at the fixed HEAD.The push of tag vX.Y.Z is what triggers .github/workflows/release.yml.
The tag push starts the Release workflow (publish job: gates → npm publish →
GitHub release). npm is the sole distribution channel — standalone binaries were
dropped 2026-08-02, so an empty release-assets list is normal. Watch the run to
terminal state — don't declare success on push alone:
gh run list --workflow=release.yml --limit 5 # find the run for this tag
gh run watch <run-id> --exit-status # blocks until done; nonzero on failure
# or poll: gh run view <run-id> --json status,conclusion,jobsOn success, verify the packages actually landed (don't trust the green check alone):
npm view @sma1lboy/rove@<new-version> version # the published package; must echo the new version
# Every Rove release checks the SDK's current version and publishes it if missing.
npm view @sma1lboy/rove-plugin-sdk@<sdk-version> version
gh release view v<new-version> --json name -q .name # GitHub release existsConfirm: @sma1lboy/rove and both SDK names report their expected versions,
the Rove version matches the tag and packages/rove/package.json,
and the release landed on main (git log --oneline -1 origin/main is the chore: release commit).
Then report done with the version, the npm dist-tag it went to (latest for
plain semver), and the release URL.
If the run fails, identify the job + step before doing anything:
gh run view <run-id> --log-failedMap the failure to a cause and act. Never retry blindly or force-push.
| Symptom in the log | Likely cause | Action |
|---|---|---|
npm publish → 401/403, ENEEDAUTH, EOTP | NPM_TOKEN secret missing/expired/wrong scope | Code is fine and the tag is published-or-not — stop and report. Token rotation is the user's job (Settings → secrets → NPM_TOKEN, automation token with @sma1lboy publish rights). After they fix it, a re-publish needs a new version (npm won't overwrite) — never retag the same version. |
npm publish → 404 on registry / scope | registry URL or scope access wrong | Report; check .npmrc auth line + access: public. Don't mutate published state. |
Verify tag matches package.json step fails | tag ≠ package.json version (retag drift) | Means the tag and the committed version disagree — surface it; do not force-retag. The fix is to bump+commit then tag fresh, which is the user's call. |
| Typecheck / test / build red | real regression that local gates somehow missed | Reproduce locally (`bun run typecheck |
npm publish → E409/cannot publish over | version already on npm | The version is already out — likely a double-run. Stop; the next release is a new version. |
A sibling job (behavior/render-track/visual-ground-truth) fails but publish succeeded | flake in a non-blocking rerun | npm already has the package; report it. gh run rerun <run-id> --failed is safe for those jobs; re-running publish is NOT — it'll hit E409. |
The principle: anything that changes published artifacts or rewrites history (retag, force-push, republish) is stop-and-report, not auto-fix. Anything local and idempotent (re-run a flaky binary matrix, fix a lint/type error for the next release) you may do.
For vX.Y.Z-<id>.N tags (e.g. v0.7.0-experimental.0), the workflow publishes to
the npm dist-tag named after the identifier (experimental), so latest stays
stable. These come from Changesets prerelease mode (changeset pre enter <id> …
changeset pre exit), not release.sh. If the user asks for a prerelease, follow
RELEASING.md's prerelease section rather than this default flow.
© Sma1lboy, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/release of Sma1lboy/rove.
Open the folder on GitHubat commit 8b9f22c
Release 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Release this skillSma1lboy/rove | 146 | — | ~3.1k | Automated safety check: Warn | MIT | |
| Manor CI Triagemanor-os/manor-ai | 162 | — | ~533 | Automated safety check: Pass | Custom licence | |
| CI Failure Triage and RepairChachamaru127/claude-code-harness | 3.2k | 1 repos | ~1.1k | Automated safety check: Notes | MIT | |
| Lina Community Fix CIlinaproai/linapro | 160 | — | ~1.8k | Automated safety check: Pass | Apache-2.0 | |
| Releasechampionswimmer/pi-context-prune | 246 | — | ~907 | Automated safety check: Pass | None | |
| Publish Releasemolefrog/moi | 182 | — | ~2.5k | Automated safety check: Pass | Custom licence |
manor-os/manor-ai
A skill your agent uses when Manor GitHub Actions, .github/workflows/ci.yml, OSS smoke/regression jobs, web source smoke, frontend build, lint, or public CI failure logs need diagnosis or repair.
Chachamaru127/claude-code-harness
Diagnoses failing CI pipelines and tests, deciding first whether the test or the implementation is at fault, and hands hard cases to a dedicated fixer subagent.
linaproai/linapro
排查并修复给定的 LinaPro GitHub Actions 失败问题;修复完成后保留本地改动, 禁止自动提交、推送或创建 PR。
championswimmer/pi-context-prune
Creates a repository release for this Pi package. An agent skill from championswimmer/pi-context-prune.
molefrog/moi
Release moi-computer to npm — verify locally, hand off to the gated GitHub Actions workflow, then verify the published package.
andymai/brepjs
This skill should be used when a brepjs GitHub Actions job is red or behaving oddly on github.com (a remote CI run, not a local pre-commit/pre-push hook) — "CI failed", "ci-pass is failing", "npm ci…
Sma1lboy/rove
Generate a single image from a text prompt using the MiniMax image generation API.
Sma1lboy/rove
Strip AI writing tells from Rove's user-facing prose — README, the docs/ pages that sync to docs.rove.run, landing copy, and release notes.
Sma1lboy/rove
Non-animation creative direction for HyperFrames videos. An agent skill from Sma1lboy/rove.
Sma1lboy/rove
Draft Rove release notes as Changesets. An agent skill from Sma1lboy/rove.
Sma1lboy/rove
Turn a rough idea, a bug, or a batch of unsolved problems into well-structured GitHub issue(s) and file them with gh, auto-classifying type + labels from the content (recommend, then confirm) and…
Sma1lboy/rove
A skill your agent uses when controlling Rove tasks, parallel coding attempts, hosted agent sessions, task lifecycle, or the daemon-owned issue tracker from a shell.
Works with
Categories
Autonomously cut a Rove (@sma1lboy/rove) release end-to-end — detect the semver bump from pending changesets (flagging an upstream minor you didn't intend), run the release gates, dispatch the…. Release is an agent skill from Sma1lboy/rove.sh locally), then poll the GitHub Actions Release workflow with gh until npm publish completes, diagnosing CI failures (npm token, registry 404, lint, branch mismatch) instead of leaving them silent.
Release fits situations like: the user says cut a release; bump the version.
Run `npx skills add Sma1lboy/rove --skill release -a claude-code`. Or copy the skill folder (.claude/skills/release in Sma1lboy/rove) into .claude/skills/release in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Sma1lboy/rove --skill release -a codex`. Or copy the skill folder (.claude/skills/release in Sma1lboy/rove) into .agents/skills/release in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Sma1lboy/rove --skill release -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/release, .gemini/skills/release, .github/skills/release and .opencode/skills/release in your project.
Going by SKILL.md and its folder, Release needs the command-line tools its instructions call (git, bun, npm, gh and changeset) and credentials named NPM_TOKEN. Our summary lists: A credential in NPM_TOKEN.
SKILL.md contains no URLs. Its commands use git, npm and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md flagged 1 warning(s): mentions a credentials file (ssh keys, cloud or package-manager tokens). Read the flagged lines before installing; the check is not a guarantee either way.
Release is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.1k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Release: Manor CI Triage (manor-os/manor-ai, 162 stars), CI Failure Triage and Repair (Chachamaru127/claude-code-harness, 3.2k stars), Lina Community Fix CI (linaproai/linapro, 160 stars) and Release (championswimmer/pi-context-prune, 246 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Sma1lboy (a GitHub user) maintains it in Sma1lboy/rove, which has 146 GitHub stars. The repository holds 13 skills in this directory. The repository was last updated on October 7, 2026.
Source: Sma1lboy/rove on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.