Audit a Sidequest board for completed, stale, duplicate, or superseded tickets, then safely close clear cases.

MITAuto-check passedDevOps & Cloud

Install Groom

skills CLI
$ npx skills add Eigenwise/eigenwise-toolshed --skill groom -a claude-code

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

GitHub CLI
$ gh skill install Eigenwise/eigenwise-toolshed groom --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/Eigenwise/eigenwise-toolshed.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/sidequest/skills/groom .claude/skills/groom && 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
groom
GitHub stars
277
Token cost
~3.4k tokens
SKILL.md length
1,564 words
Files
1
Skills in repo
14
Repo updated
First seen
Licence
MIT

At a glance

Audit a Sidequest board for completed, stale, duplicate, or superseded tickets, then safely close clear cases.

  • Works in 6 steps: Sweep → Categorize → Act on the safe ones → …
  • DevOps & Cloud work in your project
  • SKILL.md covers Guardrails (non-negotiable), Step 1 — Sweep, Step 2 — Categorize and Step 3 — Act on the safe ones, plus 4 more sections
  • Calls git

What it does

Groom is an agent skill from Eigenwise/eigenwise-toolshed. Audit a Sidequest board for completed, stale, duplicate, or superseded tickets, then safely close clear cases. Use for board grooming, cleanup, or ticket audits.

Its SKILL.md is about 3.4k 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. The repository describes itself as: Six Claude Code plugins for the work that keeps coming back: repo maps, conditional rules, ticketed parallel work, extra subscription models, local usage metrics, and guided setup. The licence is MIT.

When your agent uses it

  • DevOps & Cloud work in your project

Example prompts

  • “/groom”

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Sweep
  2. Categorize
  3. Act on the safe ones
  4. Batch the unclear ones and profile proposals interactively
  5. Apply the answers
  6. Grooming report

What it can do on your machine

Read from SKILL.md and the folder at commit 92c16cd. 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:

    • git

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

  • Network

    No URLs in SKILL.md. Its commands use 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

Groom loads about 3.4k tokens when it runs. Until then it costs about 42 tokens; SKILL.md has 1,564 words of instructions outside code blocks.

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

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 Eigenwise/eigenwise-toolshed at commit 92c16cd, republished under its MIT licence (© Eigenwise). 1,564 words, ~3,389 tokens.

Download SKILL.mdSave it as .claude/skills/groom/SKILL.md (or your agent's skills folder).
name
groom
description
Audit a Sidequest board for completed, stale, duplicate, or superseded tickets, then safely close clear cases. Use for board grooming, cleanup, or ticket audits.

groom

A grooming pass is a periodic reality check on the board, not a one-off cleanup. Tickets drift: a fix lands but the ticket stays open, a decision supersedes an old plan, an agent claims something and goes idle, two tickets describe the same work from different sessions, or a real chunk of work landed in the repo with no ticket ever filed for it. This skill runs that check end to end: sweep, categorize, act on what's safe, ask about what isn't, apply the answers, report.

Reference pass this is modeled on: the 2026-07-07 temporal-RL grooming pass — 17 tickets closed with evidence-bearing notes, several dead claims released, and new frontier tickets filed with depends-on links for the work that had already been decided but never ticketed. That's the shape a good pass takes: mostly mechanical cleanup, a handful of real judgment calls surfaced to the user, nothing silently dropped.

Guardrails (non-negotiable)

  • Never sidequest rm a ticket. Closing means an evidence-bearing sidequest groom-close <ref> --reason <evidence>, not deletion. This explicit control-plane operation is for board grooming only; routed executor done cannot close released repository work. If a ticket is genuinely bogus (duplicate, never should have existed), close it with a comment explaining why — the record stays, just off the active board.
  • Never touch a claim held by an active agent. Age is not evidence of death: a 5-hour claim can be a working executor. Only release a claim the board itself calls reclaimable — pulse <ref> reports claim.reclaimable (observed_stop, idle, or abandoned), and claims sweep releases exactly those. If it is null, leave the claim alone even if you don't recognize the --by — another session may genuinely be mid-work. Never pass --force to release or claim during a grooming pass; force overrides a live claim, which is exactly what this guardrail forbids.
  • Every closure needs evidence. A ticket only moves to done (or gets marked superseded) with a comment that cites something concrete — a commit hash, a file path, a doc section, or a quoted decision from another ticket's thread. "Looks done" is not evidence; git log --oneline -- <path> turning up the actual commit is.
  • Don't guess on the unclear ones. Anything you can't back with evidence goes to the interactive round below instead of being closed or left open on a hunch.

Step 1 — Sweep

Pull the full board and the recent project history in parallel:

bash
sidequest list --json                      # every open ticket, this project
sidequest list --status doing --json       # claims in flight, with claim.by / claim.at
sidequest list --archived --json           # already-archived, for duplicate-checking only
sidequest profile hygiene --json           # deterministic profile promotion, drift, and retirement proposals
git log --oneline -30                      # what actually landed recently

For each open ticket, read its thread before judging it — a prior agent may have already left the evidence you need:

bash
sidequest comments <ref>

Then cross-check each ticket against reality: does the repo already contain the change it describes (git log --oneline -- <path>, git log --grep "<keyword>", read the file itself)? Does a newer ticket or a doc override its plan? Is its claim stale?

Also sweep the other direction — work with no ticket: skim recent commits and any docs/changelogs for changes that don't trace back to an open or done ticket. That's a gap, not a cleanup, and it's filed, not fixed, in this pass (see Step 3).

Step 2 — Categorize

Sort every ticket (and every untracked chunk of repo work you found) into one bucket:

  • (a) Done but still open — the change is in the repo/docs already. Evidence: a commit or file diff that matches the ticket's ask.
  • (b) Superseded — a later decision (another ticket, a doc, a design change) replaced this ticket's plan. Evidence: the superseding ticket/doc/commit.
  • (c) Dead claim — status doing, held by an agent, and pulse reports claim.reclaimable (its executor was observed to stop, or it went idle past a backstop). Evidence: that verdict plus the absence of recent activity. A claim that is merely old is not this bucket.
  • (d) Duplicate/overlap — two or more open tickets describing the same work. Evidence: both refs, quoting the overlapping ask.
  • (e) Missing ticket — real work found in the repo/docs with no corresponding ticket at all.
  • (f) Unclear — anything that doesn't cleanly fit (a) through (e): ambiguous scope, contested relevance, a ticket that might still matter depending on a plan you can't confirm, one where the "evidence" you found is circumstantial rather than solid.

Keep a running list per bucket as you go — you'll need it for both the act step and the report.

Keep the profile hygiene result as a separate proposal list. The command already did the detection in plain code: identical canonical local rows become promotion candidates; large or foreign-base local layers become repoint or fork/promotion candidates; unreferenced user or migrated profiles become retirement candidates. Don't reproduce those checks with an LLM and don't auto-apply any of them.

Step 3 — Act on the safe ones

Everything in (a)–(e) gets acted on now, each with a real command and, for closures, a cited comment:

bash
# (a) done but open — close with the evidence
sidequest comment SQ-12 -m "Already shipped: see commit a1b2c3d (2026-07-05), which added the retry
path this ticket asked for. Closing as done."
sidequest groom-close SQ-12 --reason "Already shipped in commit a1b2c3d; see the preceding evidence comment."

# (b) superseded — close, point at what replaced it
sidequest comment SQ-9 -m "Superseded by SQ-40's design: the plan changed from per-request retries to
a single backoff queue (see SQ-40 comment thread, 2026-07-06). This ticket's original approach won't be
built."
sidequest groom-close SQ-9 --reason "Superseded by SQ-40's design; see the preceding evidence comment."

# (c) dead claim — release, don't force, only when pulse says reclaimable
sidequest release SQ-21 --by <you> --status todo
sidequest comment SQ-21 -m "Claim by agent-xyz was reclaimable (observed_stop): its executor stopped
while holding the claim, with no commit or comment since. Released back to todo."

# (d) duplicate — close the newer/thinner one, point at the survivor
sidequest comment SQ-33 -m "Duplicate of SQ-31 (same ask: retry queue for the ingest worker, filed a day
earlier). Closing this one; work continues on SQ-31."
sidequest groom-close SQ-33 --reason "Duplicate of SQ-31; see the preceding evidence comment."

# (e) missing ticket — file it, with complexity + why, link it if it depends on something
sidequest add -t "Backfill retry metrics dashboard" --complexity 5 \
  --why "one Grafana panel + one counter in the retry path; scoped, known pattern" \
  -d "Work exists in commit a1b2c3d but was never ticketed. Filing after the fact so it's tracked."
sidequest link SQ-50 depends-on SQ-31
Closing a ticket that still holds a pending submission

A ticket in (a), (b) or (d) may still hold a submitted candidate that was never integrated. Two different closures apply, and picking the wrong one gets refused rather than guessed at:

bash
# the candidate DID land (its commit is reachable from the integration target recorded for this ticket)
# plain grooming records it as delivered, no extra flag needed
sidequest groom-close SQ-14 --reason "Candidate a1b2c3d reached this ticket's prepared integration target; see the evidence comment."

# the candidate never landed and no longer merges — record it abandoned, never as a delivery
sidequest groom-close SQ-15 --abandon-submission \
  --reason "Candidate f00dfeed forked 61 commits back, no longer merges, and main already fixed this in
9bd41f2; see the evidence comment."

--abandon-submission is refused while the candidate is still reachable from the integration target recorded for that ticket. A later board-target or checkout change does not retarget it, so never merge work into another branch just to satisfy this guard. Its evidence has to say why the candidate is dead: the fork depth, that it no longer merges, and where the behavior now comes from instead. "Stale" on its own is not evidence.

Normalize priorities while you're in each ticket if one is obviously miscalibrated against what you now know (e.g. a "todo/low" ticket for something that turned out urgent, or vice versa) — but only when the evidence you already gathered supports the change; don't relitigate priority calls that aren't part of what you found.

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

Step 4 — Batch the unclear ones and profile proposals interactively

Don't guess on bucket (f), and don't apply a profile hygiene proposal without approval. Group both into a small number of AskUserQuestion rounds (2-4 questions per round is plenty). Use one question per unclear ticket, tightly related cluster, or profile proposal. Profile questions name every affected board/profile, the local-row count and ratio, foreign-base count, and the proposed promotion, repoint, fork, or retirement. If a promotion group has more than one taxonomy fingerprint, say it needs separate profiles because the existing promotion command will reject unlike effective taxonomies.

Ticket questions use options like keep / close / re-scope:

  • Question text: "SQ-17 — is this still relevant?"
  • Context: 1-3 sentences on what the ticket asks, what you found that made it unclear, and why you didn't just decide yourself.
  • Options: keep as-is, close (superseded/done/dropped), re-scope (needs new complexity/description), plus a free-text option if the tool supports one.

Profile questions use apply proposal / keep local / choose another profile or name. A repoint question must mention that accepted cleanup removes the listed local rows after selecting the matching profile. A retirement question names the profile source and confirms that active and archived boards have zero pointers.

Present real findings, not a vague "not sure about this one" — the point of asking is that you already did the legwork and the last mile is a judgment call only the user can make (priorities, whether a feature is still wanted, whether a plan changed for reasons not visible in the repo).

Step 5 — Apply the answers

For each answered question, act immediately using the same evidence-comment discipline as Step 3 — the user's answer is the evidence now, so cite it:

bash
sidequest comment SQ-17 -m "Per grooming pass 2026-07-07: user confirmed this is superseded by the new
plan (dropped in favor of X). Closing."
sidequest groom-close SQ-17 --reason "User confirmed this is superseded by the new plan; see the preceding comment."

Apply accepted profile proposals with the existing lifecycle commands. Pick the profile id/name from the user's answer, preview repoints, and pass every board from the proposal to promotion:

bash
sidequest profile promote <new-profile> --from-project <source> --project <board-a> --project <board-b>
sidequest profile repoint <from-profile> <to-profile> --dry-run --json
sidequest profile repoint <from-profile> <to-profile>
sidequest profile retire <profile>

Only use bulk repoint when every board in its preview was part of the accepted proposal. For one-board cleanup, select the profile with profile use, then reset each localRowId listed by the proposal. Re-run sidequest profile hygiene --json after applying the accepted profile choices and report any remaining proposal. This is a single verification read, not a polling loop.

If the answer is "keep", leave the ticket untouched but note in the report that it was reviewed and confirmed. If "re-scope", update the description/complexity per what the user said and say so in a comment on the ticket.

Step 6 — Grooming report

Close the pass with a short report back to the user (chat, not a ticket comment) covering:

  • Totals: how many tickets swept, how many touched, broken down by bucket (a)-(f).
  • What changed and why: a compact list — ref, what happened (closed/released/filed/linked), one-line evidence citation.
  • What was asked and decided: each interactive question, the option picked, and what you did about it.
  • Anything still open/unresolved: an await still pending, a question the user didn't answer, or a bucket-(f) item you couldn't even turn into a good question yet.

Keep the report plain and specific — refs, commit hashes, file paths — not a vague "cleaned things up."

Guidelines

  • Evidence over inference. If you can't point at a commit, doc, or comment, it's unclear — ask, don't assume.
  • One pass, not endless polling. Sweep once, act once, ask once (in a small batch), report once. Don't re-open the same ticket for a second guess mid-pass.
  • Respect other agents. A recent claim, a recent comment, an in-flight doing ticket with signs of life — leave it. Grooming is for drift, not for interrupting live work.
  • Scope to one project per pass unless the user asks for a cross-board sweep — pass --project the same way any other sidequest command does if they want another board.

© Eigenwise, MIT. 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 plugins/sidequest/skills/groom of Eigenwise/eigenwise-toolshed.

Open the folder on GitHubat commit 92c16cd

Compare with similar skills

Groom 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.

Groom compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Groom this skillEigenwise/eigenwise-toolshed277—~3.4kAutomated safety check: PassMIT
Monitor CInrwl/nx29k6 repos~4.7kAutomated safety check: PassMIT
Terraform and OpenTofu Guideagentscope-ai/QwenPaw35k6 repos~4.2kAutomated safety check: PassApache-2.0
Vercel Optimize Auditvercel-labs/agent-skills32k9 repos~4.3kAutomated safety check: PassNone
Openclaw Live Updateropenclaw/openclaw392k—~3.7kAutomated safety check: PassMIT
Analyze GitHub Action Logswithastro/astro63k1 repos~1.3kAutomated safety check: PassCustom licence

Similar skills

  • Monitor CI

    nrwl/nx

    Monitor Nx Cloud CI pipeline and handle self-healing fixes. An agent skill from nrwl/nx.

    29k GitHub starsUsed in 6 repos~4.7k tokens
    DevOps & CloudAuto-check passed
  • Terraform and OpenTofu Guide

    agentscope-ai/QwenPaw

    Guidance for writing and testing Terraform and OpenTofu code: module structure, naming, test approaches, CI/CD workflows, state handling and security scanning.

    35k GitHub starsUsed in 6 repos~4.2k tokens
    DevOps & CloudAuto-check passed
  • Vercel Optimize Audit

    vercel-labs/agent-skills

    Official

    Runs a metrics-first audit of a deployed Vercel project, gating investigations on real signals to produce ranked, citation-backed cost and performance recommendations.

    32k GitHub starsUsed in 9 repos~4.3k tokens
    DevOps & CloudAuto-check passed
  • Openclaw Live Updater

    openclaw/openclaw

    Maintain the canonical live OpenClaw main checkout, macOS LaunchAgent-managed Gateway, local macOS app, exact-head main CI, and recurring full release validation.

    392k GitHub stars~3.7k tokensUpdated today
    DevOps & CloudAuto-check passed
  • Official

    Analyze recent GitHub Actions workflow runs to identify patterns, mistakes, and improvements.

    63k GitHub starsUsed in 1 repo~1.3k tokens
    DevOps & CloudAuto-check passed
  • Creates and queries KubeSphere users, workspaces and projects and assigns built-in roles, defaulting to least privilege and never deleting anything.

    17k GitHub starsUsed in 1 repo~3.1k tokens
    DevOps & CloudAuto-check passed

More from Eigenwise/eigenwise-toolshed

All 14 skills in this repo
  • Add Rule

    Eigenwise/eigenwise-toolshed

    Create or edit a live-rules instruction in the project's atomic rule set.

    277 GitHub stars~1.9k tokensUpdated today
    Auto-check passed
  • Map Codebase

    Eigenwise/eigenwise-toolshed

    Create a self-maintaining codebase map in .claude/.codebase-info/.

    277 GitHub stars~4.2k tokensUpdated today
    Auto-check passed
  • Setup

    Eigenwise/eigenwise-toolshed

    Set up a Claude Code workspace for a new or existing project, informed by hindsight from the user's whole session history.

    277 GitHub stars~4.5k tokensUpdated today
    Auto-check passed
  • Manage Rules

    Eigenwise/eigenwise-toolshed

    Inspect, audit, enable, or disable project live-rules. An agent skill from Eigenwise/eigenwise-toolshed.

    277 GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Toolshed Doctor

    Eigenwise/eigenwise-toolshed

    Run a read-only health check for Quartermaster and installed Toolshed plugins.

    277 GitHub stars~1.7k tokensUpdated today
    Auto-check passed
  • Enable Project Telemetry

    Eigenwise/eigenwise-toolshed

    Opt the current project into local Claude Code usage telemetry, or verify its setup.

    277 GitHub stars~2.9k tokensUpdated today
    Auto-check: warnings

Categories

Questions about Groom

What does Groom do?

Audit a Sidequest board for completed, stale, duplicate, or superseded tickets, then safely close clear cases. Groom is an agent skill from Eigenwise/eigenwise-toolshed. Audit a Sidequest board for completed, stale, duplicate, or superseded tickets, then safely close clear cases.

When should I use Groom?

Groom fits situations like: devOps & Cloud work in your project.

How do I install Groom in Claude Code?

Run `npx skills add Eigenwise/eigenwise-toolshed --skill groom -a claude-code`. Or copy the skill folder (plugins/sidequest/skills/groom in Eigenwise/eigenwise-toolshed) into .claude/skills/groom in your project. Claude Code loads it when a task matches its description.

How do I install Groom in Codex?

Run `npx skills add Eigenwise/eigenwise-toolshed --skill groom -a codex`. Or copy the skill folder (plugins/sidequest/skills/groom in Eigenwise/eigenwise-toolshed) into .agents/skills/groom in your project. Codex loads it when a task matches its description.

Can I use Groom 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 Eigenwise/eigenwise-toolshed --skill groom -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/groom, .gemini/skills/groom, .github/skills/groom and .opencode/skills/groom in your project.

What does Groom need to run?

Going by SKILL.md and its folder, Groom needs the command-line tools its instructions call (git).

Does Groom access the network?

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

Is Groom 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 Groom use?

Groom is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Groom use?

About 3.4k tokens (SKILL.md is roughly 14k 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 Groom?

Skills that share tags, products or a category with Groom: Monitor CI (nrwl/nx, 29k stars), Terraform and OpenTofu Guide (agentscope-ai/QwenPaw, 35k stars), Vercel Optimize Audit (vercel-labs/agent-skills, 32k stars) and Openclaw Live Updater (openclaw/openclaw, 392k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Groom?

Eigenwise (a GitHub user) maintains it in Eigenwise/eigenwise-toolshed, which has 277 GitHub stars. The repository holds 14 skills in this directory. The repository was last updated on October 7, 2026.

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