CCPM Project Management
automazeio/ccpm
Runs a spec-driven workflow from PRD to epic to GitHub issues to parallel agents, with status, standup and blocked-work reports from bundled scripts.
Backfill and curate labels and milestones across a repository's whole issue and PR history.
$ npx skills add kdeldycke/dotfiles --skill github-housekeeping -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kdeldycke/dotfiles github-housekeeping --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/kdeldycke/dotfiles.git skills-src && mkdir -p .claude/skills && cp -r skills-src/dotfiles/.agents/skills/github-housekeeping .claude/skills/github-housekeeping && 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 "github-housekeeping" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/github-housekeeping into .claude/skills/github-housekeeping/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "github-housekeeping", 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/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/github-housekeepingType 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 kdeldycke/dotfiles --skill github-housekeeping -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kdeldycke/dotfiles github-housekeeping --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kdeldycke/dotfiles.git skills-src && mkdir -p .agents/skills && cp -r skills-src/dotfiles/.agents/skills/github-housekeeping .agents/skills/github-housekeeping && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "github-housekeeping" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/github-housekeeping into .agents/skills/github-housekeeping/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "github-housekeeping", 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 kdeldycke/dotfiles --skill github-housekeeping -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kdeldycke/dotfiles github-housekeeping --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kdeldycke/dotfiles.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/dotfiles/.agents/skills/github-housekeeping .cursor/skills/github-housekeeping && 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 "github-housekeeping" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/github-housekeeping into .cursor/skills/github-housekeeping/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "github-housekeeping", 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/kdeldycke/dotfiles.git --path dotfiles/.agents/skills/github-housekeeping--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 kdeldycke/dotfiles --skill github-housekeeping -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kdeldycke/dotfiles github-housekeeping --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kdeldycke/dotfiles.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/dotfiles/.agents/skills/github-housekeeping .gemini/skills/github-housekeeping && 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 "github-housekeeping" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/github-housekeeping into .gemini/skills/github-housekeeping/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "github-housekeeping", 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 kdeldycke/dotfiles github-housekeepingInstalls 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 kdeldycke/dotfiles --skill github-housekeeping -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kdeldycke/dotfiles.git skills-src && mkdir -p .github/skills && cp -r skills-src/dotfiles/.agents/skills/github-housekeeping .github/skills/github-housekeeping && 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 "github-housekeeping" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/github-housekeeping into .github/skills/github-housekeeping/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "github-housekeeping", 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 kdeldycke/dotfiles --skill github-housekeeping -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kdeldycke/dotfiles github-housekeeping --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kdeldycke/dotfiles.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/dotfiles/.agents/skills/github-housekeeping .opencode/skills/github-housekeeping && 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 "github-housekeeping" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/github-housekeeping into .opencode/skills/github-housekeeping/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "github-housekeeping", 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.
github-housekeepingBackfill and curate labels and milestones across a repository's whole issue and PR history.
GitHub Housekeeping is an agent skill from kdeldycke/dotfiles. Backfill and curate labels and milestones across a repository's whole issue and PR history. Design the taxonomy, classify in bulk, detect AI slop, and reconstruct past releases.
Its SKILL.md is about 3.7k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: Designed for Claude Code. Recommended model: Sonnet.
It sits in Product & Project Management, covering Project management. It works with GitHub. The repository describes itself as: 🍎 macOS dotfiles for Python developers. The licence is BSD-2-Clause.
4 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 7947d0f. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BashReadWriteEditGrepGlobWebFetchAgentFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
ghgitFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
pypi.orgFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Designed for Claude Code. Recommended model: Sonnet.
From compatibility in the SKILL.md frontmatter.
GitHub Housekeeping loads about 3.7k tokens when it runs. Until then it costs about 49 tokens; SKILL.md has 2,049 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 noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Bash, Read, Write, Edit, Grep, Glob, WebFetch, AgentAutomated 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 kdeldycke/dotfiles at commit 7947d0f, republished under its BSD-2-Clause licence (© kdeldycke). 2,049 words, ~3,678 tokens.
.claude/skills/github-housekeeping/SKILL.md (or your agent's skills folder).!gh label list --limit 50 2>/dev/null || echo "NO_GH_ACCESS"
!gh api "repos/{owner}/{repo}/milestones?state=all&per_page=100" --jq 'length' 2>/dev/null
You bring a repository's issue-tracker metadata up to date: a small label taxonomy applied to every issue and PR (open and closed), and one milestone per published release with every shipped PR assigned to the release it landed in. The method scales to thousands of historical items because classification runs against a local cache, mutations are paced and resumable, and every decision carries provenance a human can review.
audit (default when $ARGUMENTS is empty): measure coverage gaps (unlabeled items, milestone-less items, missing milestones), report counts, and propose a plan. No mutations.labels: design or load the taxonomy, classify the backlog, review, then apply.milestones: create/repair milestones from release history, then assign every shipped PR and resolved issue.slop: sweep for AI-generated junk using the closed-without-comment signal, review, then label.gh edit every 2 seconds, sequential, never parallel. Split long runs into time-budgeted chunks (stay under shell timeouts) that mark each item done in the local cache as they go, so an interrupted run resumes exactly where it stopped.no:milestone, -label:"x" filters) rather than trusting the local cache. Items created mid-run will not be in your plan: sweep for stragglers at the end.Always propose repomatic's bundled defaults as the starting point, whatever the repository already carries. Render them before discussing anything else:
$ repomatic init labels --output-dir {scratch_dir}The labels.toml it writes holds the whole shipped set: a default profile every repository gets, plus an awesome profile applied only to awesome-* repos. Nothing committed to the repository is authoritative: that file is ephemeral, regenerated into a scratch directory right before sync-labels reads it, and a repo's own labels.extra / labels.extra-files entries are folded in only at sync time, so read pyproject.toml too for the effective taxonomy.
Present the design as a diff between that effective set and the live gh label list above:
rename-from lists migrating GitHub's stock names (bug, documentation, invalid, wontfix, …) to their emoji equivalents in place, preserving issue and PR associations. Never delete-and-recreate to rename.[[tool.repomatic.labels.extra]] entry in pyproject.toml (with rename-from when it is a spelling variant of a default), or propose retiring it. A label kept outside the config is not what sync-labels applies, so it drifts back on the next run.Depart from the defaults only for a domain axis they cannot express, and land the departure in the config (labels.extra, or labels.extra-files for a multi-profile set) so it survives. Designing a taxonomy from scratch is the last resort, for maintainers who explicitly want off the shared set.
The sections below name labels by their default (🪫 AI slop, 🚫 wont do/fix, 🐛 bug, …): substitute the repository's own names wherever it has departed.
sync-labels only creates and updates. Dropping a label from the configuration never removes it from the repository, it just stops managing it, so the label stays live on every issue and pull request still carrying it. A repository reorganizing its taxonomy (folding per-item labels into an ecosystem group, renaming a family) therefore accumulates orphans that no longer appear in any config and that only a maintainer can clear. lint-repo lists them in its undeclared-labels warning, which never fails the run.
Prefer a rename to a create-and-delete, because GitHub keeps every issue and pull request attached across a rename while a deletion drops the association outright. rename-from is how that is declared, and it is strictly one-to-one: labelmaker renames only when the target does not exist and exactly one listed source does. Two live sources is an unconditional error, and a target that already exists falls to on-rename-clash, which [defaults] pins to error so the clash surfaces instead of passing silently.
Two consequences worth knowing before writing the field:
rename-from in the same change that introduces the label, never after; a fold whose target is already live has missed the window and is left with a manual migration.Check what is actually attached before planning any of this:
$ gh issue list --label "{label}" --state all --limit 200
$ gh pr list --label "{label}" --state all --limit 200An orphan with nothing on it is a plain deletion, and much of a taxonomy change usually turns out to be exactly that.
Fetch the complete inventory once into SQLite (a {repo}-github.sqlite file at the repo root, gitignored) instead of hammering the API per item:
stateReason, timestamps, mergedAt, author, labels, url.label_plan working table holds one row per (item, proposed label) with confidence (high/medium/low), method (how it was decided), and a one-line rationale. Every item must end with at least one row: full coverage is a hard invariant.ClosedEvent.actor), what closed it (ClosedEvent.closer PR), merge commit SHAs.Hybrid pipeline, cheapest signal first:
number|label|confidence|rationale, one line per item, every item exactly once) and validate on merge: unknown labels, missing items, and unparseable lines get retried or fall through.Review gates before applying: all low-confidence calls, plus every proposed 🪫 AI slop/🚫 wont do/fix, go in a "needs review first" section of the plan, open items sorted first. Offer to open candidate batches in the browser (xargs open < urls.txt) so the maintainer can eyeball them quickly.
Any two signals warrant 🪫 AI slop, the same bar /awesome-triage applies; one alone never does, because the label is reputational.
The first signal is behavioral rather than textual: a maintainer closing an item with zero comments is a drive-by rejection. It counts only past a date cutoff, calibrated against the earliest item this repository has already confirmed as AI junk. Absent one, start from late 2025 and move it earlier only on evidence.
The second comes from the content tells: the item "fixes" an API that does not exist in the codebase, near-identical PRs from different throwaway accounts claiming the same fabricated bug, raw coding-agent output pasted as the title, unfilled PR templates on non-trivial changes, generic "comprehensive analysis" boilerplate.
🪫 AI slop.🚫 wont do/fix. The close is documented; an AI attribution is not.When /awesome-triage is present (it ships to awesome-* repositories only), its catalog widens where a second signal may come from: surface tells in its §3, and contributor and repository provenance in its §9 (account age, profile completeness, commit cadence, AI bot co-authors, solo-contributor humanness), each with a gh api one-liner. Where that skill is absent, the tells above are the whole pool.
Hygiene for confirmed junk: 🪫 AI slop and 🚫 wont do/fix items carry only that label (strip component labels) and no milestone (nothing shipped).
One closed milestone per published release, named exactly like the GitHub release it collects: the tag, v prefix included (v8.4.2). Descriptions keep the bare version, which names the release rather than the tag.
https://pypi.org/pypi/{pkg}/json, min upload_time_iso_8601 across that version's files. Where the repository publishes no package, or a version predates its index history, fall back to the GitHub release's own publishedAt (gh release view v8.4.2 --json publishedAt): publication stamps it once, and immutable releases keep a published release from being re-cut, so it stays a faithful record. GitHub floors due_on to the date. Backfill milestones for ancient releases the tracker predates.v8.0.0a1/v8.0.0rc1 milestones; the v8.0.0 description notes "Covers the whole 8.0.0 release cycle including the 8.0.0a1 and 8.0.0rc1 pre-releases."[!CAUTION] admonition for that release; the emoji stands in for the alert, which does not render in a milestone description.v8.5 that never shipped) get deleted, not closed.v9.0.0, the next dev version) stay open and dateless.Waterfall for every merged PR, most authoritative source first:
{pr}N`` (or #N) mentions under each ## Version X heading. The changelog is maintainer-curated truth.git describe --tags --contains --exclude '*.x' {merge_commit} on a full clone, stripping the ~N/^N suffix. Fold prerelease tags into their final release.mergedAt.Systematic corrections the raw waterfall gets wrong:
Release vX.Y.Z PRs merge after their own tag ships, so containment lands them one release late. Trust the version in the title.N" proves N shipped earlier than the section citing it.Then propagate to issues:
ClosedEvent.closer is a merged PR inherits that PR's milestone (and, when it has none of its own, that PR's labels).DUPLICATE inherit the milestone of their canonical issue, so stumbling on the duplicate still tells you which release addressed it. GitHub's MarkedAsDuplicateEvent is rarely populated: fall back to reading the closing comments for "duplicate of #N".i123: issue(number: 123) {...}. timelineItems(itemTypes: [CLOSED_EVENT], last: 1) yields both actor (who closed) and closer (the PR/commit that closed it).?state=all&per_page=100 in the path; --paginate concatenates JSON arrays that break naive json.load.gh pr edit --milestone <name> cannot resolve closed milestones. Assign by number instead: gh api -X PATCH repos/{owner}/{repo}/issues/{n} -F milestone={milestone_number} (works for PRs too: they are issues in the REST API).gh issue|pr edit N --add-label "x" --remove-label "y", several flags per call to make one atomic edit per item.gh api -X GET search/issues -f q="repo:{owner}/{repo} is:pr no:milestone" and -label:"x" negations give instant gap counts.Report what changed with counts per label/milestone, what was left alone and why (closed-unmerged PRs, unlinkable issues), and flag the review file for anything applied at low confidence. Regenerate the plan markdown so it reflects the applied state, and keep the SQLite cache: the next housekeeping run starts from it.
© kdeldycke, BSD-2-Clause. 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 dotfiles/.agents/skills/github-housekeeping of kdeldycke/dotfiles.
Open the folder on GitHubat commit 7947d0f
GitHub Housekeeping 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 |
|---|---|---|---|---|---|---|
| GitHub Housekeeping this skillkdeldycke/dotfiles | 173 | — | ~3.7k | Automated safety check: Notes | BSD-2-Clause | |
| CCPM Project Managementautomazeio/ccpm | 8.4k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Project Managerpwrdrvr/openclaw-codex-app-server | 265 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Find Project Anomaliespenpot/penpot | 61k | — | ~1.2k | Automated safety check: Pass | MPL-2.0 | |
| PublishQ00/ouroboros | 6.2k | — | ~2.7k | Automated safety check: Pass | MIT | |
| Gh Read Inspectoreclipse-rdf4j/rdf4j | 420 | — | ~950 | Automated safety check: Pass | BSD-3-Clause |
automazeio/ccpm
Runs a spec-driven workflow from PRD to epic to GitHub issues to parallel agents, with status, standup and blocked-work reports from bundled scripts.
pwrdrvr/openclaw-codex-app-server
Manage GitHub issues and the GitHub Project board for the current repository, while keeping the local tracker in sync.
penpot/penpot
Check a GitHub milestone against the Main project board, report the five anomaly types to tmp/<MILESTONE-ANOMALIES.md, and fix missing milestone assignments on request.
Q00/ouroboros
Publish Seed specification as GitHub Issues for team-based project management
eclipse-rdf4j/rdf4j
Retrieve GitHub issues, pull requests, and milestones with read-only, whitelisted gh commands only.
ruvnet/agentic-flow
Manages GitHub issues and project boards with swarm coordination: issue creation and triage, issue-to-task conversion, progress tracking and stale issue cleanup.
kdeldycke/dotfiles
Audit and tune the configuration of coding agents across Claude Code and pi - settings files (settings.json, settings.local.json), permission rules, instruction files (CLAUDE.md, AGENTS.md), skill…
kdeldycke/dotfiles
Analyze a GitHub repository's issues and PRs to find unaddressed feature requests, dismissed ideas, maintenance signals, and opportunities relevant to the current project.
kdeldycke/dotfiles
Create project logo and banner SVGs, then export them to light and dark PNG variants.
kdeldycke/dotfiles
Fill a web form using data extracted from local documents (PDFs, images, spreadsheets).
kdeldycke/dotfiles
Rename documents and files (PDFs, images, screenshots, etc.) by reading their content to extract the effective/publication date, then renaming them with a "YYYY-MM-DD - Clear descriptive title.ext"…
kdeldycke/dotfiles
Choose what a repository's CI test matrix covers. An agent skill from kdeldycke/dotfiles.
Works with
Categories
Backfill and curate labels and milestones across a repository's whole issue and PR history. GitHub Housekeeping is an agent skill from kdeldycke/dotfiles. Backfill and curate labels and milestones across a repository's whole issue and PR history.
GitHub Housekeeping fits situations like: tasks that involve Project management.
Run `npx skills add kdeldycke/dotfiles --skill github-housekeeping -a claude-code`. Or copy the skill folder (dotfiles/.agents/skills/github-housekeeping in kdeldycke/dotfiles) into .claude/skills/github-housekeeping in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kdeldycke/dotfiles --skill github-housekeeping -a codex`. Or copy the skill folder (dotfiles/.agents/skills/github-housekeeping in kdeldycke/dotfiles) into .agents/skills/github-housekeeping 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 kdeldycke/dotfiles --skill github-housekeeping -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/github-housekeeping, .gemini/skills/github-housekeeping, .github/skills/github-housekeeping and .opencode/skills/github-housekeeping in your project.
Going by SKILL.md and its folder, GitHub Housekeeping needs the command-line tools its instructions call (gh and git). Its frontmatter pre-approves these tools: Bash, Read, Write, Edit, Grep, Glob, WebFetch, Agent. Compatibility (from SKILL.md): Designed for Claude Code. Recommended model: Sonnet..
SKILL.md names 1 domain. In commands or code: pypi.org; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
GitHub Housekeeping is published under the BSD-2-Clause licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.7k tokens (SKILL.md is roughly 15k 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 GitHub Housekeeping: CCPM Project Management (automazeio/ccpm, 8.4k stars), Project Manager (pwrdrvr/openclaw-codex-app-server, 265 stars), Find Project Anomalies (penpot/penpot, 61k stars) and Publish (Q00/ouroboros, 6.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kdeldycke (a GitHub user) maintains it in kdeldycke/dotfiles, which has 173 GitHub stars. The repository holds 25 skills in this directory. The repository was last updated on October 4, 2026.
Source: kdeldycke/dotfiles on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.