Quick Finalize
tobihagemann/turbo
Close out a change without the deep review loop: stage, simplify code and docs, run the project's checks, smoke test, update the changelog, self-improve, and ship.
Generate dependency graphs. An agent skill from kdeldycke/dotfiles.
$ npx skills add kdeldycke/dotfiles --skill repomatic-deps -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kdeldycke/dotfiles repomatic-deps --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/repomatic-deps .claude/skills/repomatic-deps && 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 "repomatic-deps" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/repomatic-deps into .claude/skills/repomatic-deps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "repomatic-deps", 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/repomatic-depsType 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 repomatic-deps -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kdeldycke/dotfiles repomatic-deps --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/repomatic-deps .agents/skills/repomatic-deps && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "repomatic-deps" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/repomatic-deps into .agents/skills/repomatic-deps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "repomatic-deps", 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 repomatic-deps -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kdeldycke/dotfiles repomatic-deps --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/repomatic-deps .cursor/skills/repomatic-deps && 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 "repomatic-deps" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/repomatic-deps into .cursor/skills/repomatic-deps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "repomatic-deps", 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/repomatic-deps--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 repomatic-deps -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kdeldycke/dotfiles repomatic-deps --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/repomatic-deps .gemini/skills/repomatic-deps && 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 "repomatic-deps" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/repomatic-deps into .gemini/skills/repomatic-deps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "repomatic-deps", 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 repomatic-depsInstalls 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 repomatic-deps -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/repomatic-deps .github/skills/repomatic-deps && 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 "repomatic-deps" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/repomatic-deps into .github/skills/repomatic-deps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "repomatic-deps", 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 repomatic-deps -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 repomatic-deps --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/repomatic-deps .opencode/skills/repomatic-deps && 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 "repomatic-deps" agent skill from https://github.com/kdeldycke/dotfiles/tree/main/dotfiles/.agents/skills/repomatic-deps into .opencode/skills/repomatic-deps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "repomatic-deps", 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.
repomatic-depsGenerate dependency graphs. An agent skill from kdeldycke/dotfiles.
Repomatic Deps is an agent skill from kdeldycke/dotfiles. Generate dependency graphs. Audit pyproject.toml declarations against the version policy. Explore unused dependency APIs that could simplify code. Modernize code against the changelogs of upgraded dependencies.
Its SKILL.md is about 7.3k 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: Opus.
It sits in Development, covering Changelog and release notes and Code simplification. The repository describes itself as: 🍎 macOS dotfiles for Python developers. The licence is BSD-2-Clause.
5 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:
BashReadGrepGlobAgentEditWriteWebFetchFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
uvgitghuvxpipFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
iscinumpy.devrepomatic.netFrom 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: Opus.
From compatibility in the SKILL.md frontmatter.
Repomatic Deps loads about 7.3k tokens when it runs. Until then it costs about 56 tokens; SKILL.md has 3,647 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, Grep, Glob, Agent, Edit, Write, WebFetchAutomated 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). 3,647 words, ~7,271 tokens.
.claude/skills/repomatic-deps/SKILL.md (or your agent's skills folder).![ -f uv.lock ] && echo "uv.lock exists" || echo "No uv.lock found"
![ -f pyproject.toml ] && head -5 pyproject.toml || echo "No pyproject.toml found"
!grep -c '".*>=\|".*~=\|".*<\|".*==' pyproject.toml 2>/dev/null || echo "0"
![ -f repomatic/__init__.py ] && echo "CANONICAL_REPO" || echo "DOWNSTREAM"
You help users understand and maintain their project's dependencies. This skill has four modes: graph (visualize the resolved dependency tree), review (audit pyproject.toml declarations against version policy), explore (find unused dependency APIs that could simplify existing code), and modernize (refactor code to adopt features from recently-upgraded dependencies, applying the changes).
CANONICAL_REPO, use uv run repomatic.uvx -- repomatic.uvx form with the supply-chain cooldown: uvx --exclude-newer '1 week' --exclude-newer-package repomatic=P0D -- repomatic. The window matches [tool.repomatic] minimum-release-age; repomatic itself is exempt because a fresh release must stay installable, while its dependency tree stays gated.graph and review all.graph: Generate and analyze the dependency graph only.review [all|runtime|dev|policy]: Audit pyproject.toml declarations only.explore [<package>]: Search for unused dependency APIs that could simplify existing code.modernize [<package>]: Refactor code to adopt new features from upgraded dependencies, applying and test-gating each change.$ARGUMENTS starts with --level or a number, treat it as graph mode with those arguments.The _release-engine.yaml workflow's update-dep-graph job regenerates the dependency graph on release commits only, to avoid noise from transitive dependency changes. This mode is useful for interactive analysis — understanding the graph, spotting concerns, or generating it before pushing.
<cmd> update-dep-graph.<cmd> update-dep-graph with no arguments.<cmd> lint-deps decides everything readable from pyproject.toml alone: upper bounds, missing specifiers, unsorted lists, type stubs outside the typing group, floors with no comment above them, and floor comments running past [tool.repomatic] lint-deps.comment-word-threshold words (40 by default). Run it first and let it own those rows. CI runs it from the release lane's lint-deps job (_release-build.yaml, reached through release.yaml), which fires on every push but annotates with --no-fatal until a release commit makes the shippability findings fatal. These policy rows never block either way, so no CI gate will catch them for you.
What is left is the part no parser settles, and it is the reason this mode exists: whether a floor is justified by the APIs the code actually calls, whether a comment is stale or weak, and whether a rationale contradicts its conditional marker. Spend the review there.
all (default when no sub-argument): Run all checks below.runtime: Review [project].dependencies only.dev: Review [dependency-groups] and [project.optional-dependencies] only.policy: Print the policy summary without auditing.These conventions are derived from the pyproject.toml files across all kdeldycke/* repositories. User-facing documentation of the same content is in docs/dependencies.md.
[project].dependencies)>= (not ~= or ==). Relaxed lower bounds give packagers freedom to release security hotfixes without waiting for an upstream bump. Upper bounds are forbidden per https://iscinumpy.dev/post/bound-version-constraints/.# wcmatch 10.0 changed globbing semantics; our sync_gitignore() relies on
# the new symlink-aware matching behavior.
"wcmatch>=10",requires-python alignment, the call site consuming it, a CVE or upstream issue identifier), delete every superseded floor (git log -- pyproject.toml keeps that history), and move out what is not about this floor (usage detail belongs in the module using it, a comparison against an alternative package in an XXX pointer to the upstream ticket). lint-deps warns past 40 words, which is the ceiling to write to even where it is not run.
Security fixes are also a valid floor bump reason. A CVE or advisory in an older version justifies raising the floor even when the API is unchanged. The comment should cite the CVE or advisory:# requests 2.32.0 fixes CVE-2024-35195 (session credential leak on redirects).
"requests>=2.32",requires-python metadata. If boltons>=20 works and boltons 25 merely adds Python 3.13 support, keep >=20 — the resolver handles it. Exception: when a dependency drops a Python version your project still supports (or your project drops one, aligning minimum requires-python), that alignment is a valid floor bump reason. The comment should state the version range alignment, not the Python support:# boltons 25.0.0 dropped Python 3.9, matching our requires-python >= 3.10.
"boltons>=25","tomli>=2; python_version<'3.11'". When a dep has a version marker, the floor rationale must make sense for the Python versions where the dep is actually installed — not for versions excluded by the marker.[dependency-groups])[dependency-groups] (uv standard) over [project.optional-dependencies] for test, typing, and docs groups.>= is preferred for dev deps too, but ~= is acceptable when stricter pinning reduces CI randomness. If a package also appears in runtime deps, the dev entry must use the same specifier style. The relaxation is about specifier style (~= allowed), not about floor accuracy — dev dep floors still need to be grounded in actual API or compatibility requirements, not adoption timestamps.test, typing, docs (lowercase, alphabetical).typing group with stub-specific versions: "types-boltons>=25.0.0.20250822".<, <=, !=, ~= that implies an upper bound). The only exception is conditional markers like python_version<'3.11'."coverage[toml]>=7.11".format-pyproject job normalizes layout automatically.Read the full pyproject.toml. lint-deps already reports the specifier style, missing comments, ordering, bare dependencies and misplaced type stubs, so read its output rather than re-deriving them. For each dependency entry, check what it cannot:
| Check | What to flag |
|---|---|
| Weak comment | Comment cites Python version support instead of a concrete code dependency. Flag unless it documents a requires-python alignment or a Python version drop |
| Stale comment | Comment references a reason that no longer applies (the cited method was replaced, or the Python version left the support matrix) |
| Accreted comment | Comment narrates superseded floors beside the declared one. Rewrite it around the version in force; lint-deps catches only the long ones |
| Inflated floor | Floor higher than the oldest version providing the APIs actually used (see floor verification below) |
| Marker/rationale mismatch | Floor rationale contradicts the conditional marker (e.g., "Python 3.14 wheels" on a dep gated by python_version<'3.11' — that dep is never installed on 3.14) |
| Section style | [project.optional-dependencies] used where [dependency-groups] would be appropriate |
| Conditional markers | Missing Python version marker for backport packages |
| Stale cooldown exceptions | exclude-newer-package entries in [tool.uv] for packages that no longer need them (see below) |
Comments and changelogs can lie; the codebase is the source of truth. For each dependency with a weak or suspicious comment, verify the floor against actual usage:
pip index versions <pkg> to see what exists on PyPI. A floor that rests on a behavior (comments kept, output formatting) needs a bisect instead, since a changelog can credit it to a later release than the one that shipped it. Run one probe per release with uv run --no-project --exclude-newer '1 week' --with '<pkg>==<version>' python probe.py, and compare each output byte for byte with the locked release.uv lock after any floor change to verify the lock still resolves.backports-strenum, tomli, exceptiongroup) exist solely to provide a stdlib class to older Python versions. Their entire API is the backported class itself, available in all versions. The floor is typically >=1 (or the first release) unless a specific bug fix is needed for the Python versions where the dep is actually installed.python_version<'3.11' that has a floor set for a bug affecting Python <3.8.6 — if the project's requires-python is >=3.10, that bug is irrelevant and the floor can be lowered.pytest-randomly, pytest-github-actions-annotate-failures) have low effective floors — their basic functionality has been stable across major versions. Set the floor at the major version introducing the current plugin interface, not at the latest release.A floor bump is justified when a newer version of an existing dependency provides an API that replaces hand-rolled code in the project. This is the flip side of floor verification: instead of checking whether the floor is too high, check whether it could be raised to unlock a simplification.
A valid simplification bump must:
When explore mode identifies a candidate, the review output should include it as an Info-level suggestion with the current code, the replacement, and the version that introduced the API.
These comment patterns typically signal a floor set at adoption or auto-bump time, not at an API boundary:
requires-python drop alignment or a concrete build failure (missing wheels that cause install failures on that Python version), this is not a valid floor reason.~= -> >= conversion pipeline. A common inflation path: (a) dep added as ~=X.Y (latest at time), (b) a dependency bot bumps to ~=X.Z, (c) a bulk "relax requirements" commit converts all ~= to >=. Each step inflates the floor without API validation. Check git log for this pattern when a floor looks suspiciously high.exclude-newer-package cooldown auditThe [tool.uv] section may contain exclude-newer-package entries that exempt specific packages from the global exclude-newer cooldown window. They arrive from two places: written by hand (the package is published by the same maintainer, or is developed in-repo), or written by audit --fix, which reaches a CVE fix still inside the window through an entry rather than lifting exclude-newer for the whole tree.
Expiry is mechanical, so do not audit for it. sync-uv-lock owns the lifecycle of every entry and reports each move in its PR body: it rewrites a relative span ("0 day") into a fixed cutoff pinned to the locked version's upload time, which holds the package instead of letting it track latest, then prunes the entry outright once that held version ages past the global cooldown and the package rejoins normal resolution. A live fixed cutoff is therefore a freeze doing its job, not a leftover: proposing its deletion un-holds a package the freeze was deliberately pinning. A surviving relative span means the freeze has not run yet, not that a span is the steady state.
What is left for this audit is the part no schedule settles:
[project].dependencies and all [dependency-groups], the entry is dead weight that no prune will ever reach, since pruning keys off the locked version's age and the package is no longer in the lock.Flag those as warnings. Never flag an entry merely for existing or for looking old.
When the context shows DOWNSTREAM, also compare the dependency list against the canonical repomatic pyproject.toml, fetched at the version this repo has adopted rather than at the tip of main: take the tag from the uses: pins in .github/workflows/, then run gh api "repos/kdeldycke/repomatic/contents/pyproject.toml?ref=vX.Y.Z" --jq '.content' | base64 -d. An unpinned fetch resolves to main, whose floors may have moved for a release the downstream repo cannot use yet, turning unreleased work into a phantom "downstream is behind" finding. Use it to identify:
Produce:
Search for unused APIs in existing dependencies that could replace hand-rolled code. This is purely analytical: it produces recommendations, not changes.
<package>: explore a single dependency (e.g., explore boltons).For each dependency in scope:
Catalog current usage. Grep the source tree (not tests) for all imports from the package. List every function, class, and constant actually used, with file locations.
Catalog available APIs. Using your knowledge of the library (and its docs if needed via WebFetch), list the public APIs the project does NOT currently use. Focus on utilities, helpers, and data structures: the kind of thing that replaces 3-10 lines of hand-rolled code.
Search for replacement candidates. For each unused API, grep the source tree for code patterns it could replace. Be specific about what constitutes a match:
| Library API | Pattern to search for |
|---|---|
boltons.iterutils.partition | Two complementary list comprehensions filtering the same iterable |
boltons.iterutils.first | next(iter(...), None) or seq[0] if seq else None on non-generator sequences |
boltons.iterutils.bucketize | Loops building a dict[K, list[V]] via setdefault(k, []).append(v) |
boltons.iterutils.chunked | Manual slice loops (for i in range(0, len(seq), n)) |
boltons.dictutils.subdict | {k: v for k, v in d.items() if k in keys} or if k not in exclude |
boltons.fileutils.atomic_save | Path.write_text() on files where partial writes would corrupt state |
packaging.specifiers.SpecifierSet | Manual version-range checks with </>/in loops over Version objects |
packaging.requirements.Requirement | Regex parsing of PEP 508 requirement strings |
packaging.markers.Marker | Regex parsing of PEP 508 environment markers (only when the public API exposes the needed structure) |
wcmatch.fnmatch / wcmatch.pathlib | stdlib fnmatch or pathlib.Path.glob() that would benefit from brace expansion, negation, or extended patterns |
pyproject_metadata.StandardMetadata properties | Manual toml_dict.get("project", {}).get("field") when a StandardMetadata instance is already available |
Verify each candidate. Read the actual code at each location. Discard false positives:
next() on a generator is idiomatic Python; first() adds a dependency import for no clarity gain.Path.write_text() is fine when the file is immediately committed by CI or when partial writes are harmless.TableFormat.GITHUB hardcoded in functions that generate markdown for PR bodies is correct: the --table-format CLI option is for terminal output only.glob.glob() with recursive=True is fine when no extended glob features (brace expansion, negation) are needed.packaging.markers.Marker only helps if the public API exposes the structure you need. Its primary public method is evaluate(), not AST inspection.Check version requirements. For each surviving candidate, determine which version of the dependency introduced the API. Compare against the current floor. If a bump is needed, it must satisfy the floor bump criteria.
Produce a table of findings:
| Dependency | Unused API | Location | Current code (summary) | Replacement | Version needed | Verdict |
|---|---|---|---|---|---|---|
| boltons | subdict | metadata.py:2232 | dict comprehension filtering by key set | subdict(metadata, keys) | any (available since 16.x) | Skip: one-liner, no clarity gain |
| pyproject-metadata | StandardMetadata.keywords | cli.py:2733 | toml.get("project", {}).get("keywords") | metadata.pyproject.keywords | current floor sufficient | Adopt: parsed object already available |
Only recommend changes where the replacement is a genuine simplification: fewer lines, better error handling, or elimination of a manual reimplementation.
Most dependencies are already well-used. Expect the majority of candidates to be discarded during verification. A run that produces zero recommendations is a valid outcome: it means the codebase is already leveraging its dependencies effectively.
Common false-positive patterns to reject early:
next(iter(x)) → first(x) adds an import for no clarity gain.atomic_save on files that are immediately git-committed or overwritten by CI.glob and wcmatch.glob serve different purposes; not every glob.glob() call needs extended syntax.re.match(r"extra\s*==\s*'([^']+)'", marker) is more direct than navigating a Marker object's internal structure.explore finds simplifications hiding in any installed dependency and only reports them. modernize is narrower and active: it works from the dependencies that changed version recently, reads what those versions added, and applies the resulting simplifications, gated by the test suite.
[!WARNING] This is the one mode that edits code on its own, and it acts on third-party changelogs it can misread. Every change must be behavior-preserving and verified against the local test suite before it stays. Run it where you can review the diff, and treat a failing test as a veto, never something to "fix" by loosening the test.
<package>: a single dependency (e.g., modernize click-extra).Find the version deltas. Determine which dependencies changed, and from and to which version, cheapest source first:
sync-uv-lock PR — its body lists every bump with its old and new version and a changelog or compare link per package. Find it with gh pr list --search 'head:sync-uv-lock' --state all --limit 1, then gh pr view <number> --json body.git tag --sort=-v:refname | head -1) and diff the lockfile against it (git diff <tag> -- uv.lock), reading the version pairs.pyproject.toml floor.Read each changelog for the delta. Fetch the release notes covering that version range from the link in the bump table (GitHub releases via gh api repos/{owner}/{repo}/releases, or WebFetch on the compare URL; the PyPI project page otherwise). Extract only what is new or changed in the range: added public APIs, fixed bugs our code works around, and deprecations of APIs we still call. Degrade gracefully: if WebFetch is unavailable and the package is not on GitHub, fall back to your own knowledge of the library's release history and lower your confidence accordingly.
Map deltas to our code. For each new or changed item, grep the source tree (not tests) for code it touches, reusing the candidate patterns and false-positive filters from Explore mode:
work around, TODO, and version-guarded branches.Apply one dependency at a time. Make the edits for a single package, keeping each behavior-preserving. If adopting an API needs a higher floor, raise it and rewrite the comment per Floor bumps to adopt new APIs, then run uv lock.
Verify before moving on. Run the project's tests, mypy, and ruff (the same fast local channel /babysit-ci and /repomatic-ship rely on). If anything fails, fix it within the same change or revert that package's edits. Only move to the next dependency once green. A change that cannot be made green is reverted, not forced.
Report. Summarize per dependency: the version delta, what was adopted or dropped, the files touched, and anything skipped with the reason. A dependency whose changelog offers nothing actionable is a valid no-op.
Suggest the user run:
/repomatic-deps review all to audit version floors and specifier policy./repomatic-deps modernize after a sync-uv-lock PR lands, to fold the freshly-upgraded dependencies' new features into the code./repomatic-audit for a comprehensive alignment check beyond dependencies.© 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/repomatic-deps of kdeldycke/dotfiles.
Open the folder on GitHubat commit 7947d0f
Repomatic Deps 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 |
|---|---|---|---|---|---|---|
| Repomatic Deps this skillkdeldycke/dotfiles | 173 | — | ~7.3k | Automated safety check: Notes | BSD-2-Clause | |
| Quick Finalizetobihagemann/turbo | 409 | — | ~1.5k | Automated safety check: Notes | MIT | |
| Simple Englishmoeru-ai/airi | 50k | 2 repos | ~4.6k | Automated safety check: Pass | MIT | |
| StarRocks Release NotesStarRocks/starrocks | 12k | — | ~1.9k | Automated safety check: Notes | Apache-2.0 | |
| Cutting A ReleaseTriliumNext/Trilium | 38k | — | ~3.2k | Automated safety check: Pass | AGPL-3.0 | |
| PonytailDavidObando/gsharp | 564 | 8 repos | ~1.7k | Automated safety check: Pass | MIT |
tobihagemann/turbo
Close out a change without the deep review loop: stage, simplify code and docs, run the project's checks, smoke test, update the changelog, self-improve, and ship.
moeru-ai/airi
Write or rewrite technical text with the rules of ASD-STE100 Simplified Technical English so it is clear, unambiguous, and free of AI slop.
StarRocks/starrocks
Drafts English release notes for a StarRocks patch release from the PRs merged into its release branch, then opens a documentation PR and hands translation to /translate.
TriliumNext/Trilium
A skill your agent uses when cutting, preparing, or debugging a Trilium release — bumping the monorepo version, tagging, or diagnosing a failed "Release" workflow run.
DavidObando/gsharp
Forces the laziest solution that actually works, simplest, shortest, most minimal.
remix-run/react-router
Polishes pending React Router change files before the versioning scripts run, and decides whether a long-form What's Changed section is warranted.
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.
Categories
Generate dependency graphs. An agent skill from kdeldycke/dotfiles. Repomatic Deps is an agent skill from kdeldycke/dotfiles. Generate dependency graphs.
Repomatic Deps fits situations like: tasks that involve Changelog and release notes; tasks that involve Code simplification.
Run `npx skills add kdeldycke/dotfiles --skill repomatic-deps -a claude-code`. Or copy the skill folder (dotfiles/.agents/skills/repomatic-deps in kdeldycke/dotfiles) into .claude/skills/repomatic-deps in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kdeldycke/dotfiles --skill repomatic-deps -a codex`. Or copy the skill folder (dotfiles/.agents/skills/repomatic-deps in kdeldycke/dotfiles) into .agents/skills/repomatic-deps 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 repomatic-deps -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/repomatic-deps, .gemini/skills/repomatic-deps, .github/skills/repomatic-deps and .opencode/skills/repomatic-deps in your project.
Going by SKILL.md and its folder, Repomatic Deps needs the command-line tools its instructions call (uv, git, gh, uvx and pip). Our summary lists: Python 3. Its frontmatter pre-approves these tools: Bash, Read, Grep, Glob, Agent, Edit, Write, WebFetch. Compatibility (from SKILL.md): Designed for Claude Code. Recommended model: Opus..
SKILL.md names 2 domains. As links in the text: iscinumpy.dev and repomatic.net. 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.
Repomatic Deps 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 7.3k tokens (SKILL.md is roughly 29k 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 Repomatic Deps: Quick Finalize (tobihagemann/turbo, 409 stars), Simple English (moeru-ai/airi, 50k stars), StarRocks Release Notes (StarRocks/starrocks, 12k stars) and Cutting A Release (TriliumNext/Trilium, 38k 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.