Agent skill

Repomatic Deps

by kdeldycke in kdeldycke/dotfiles

Generate dependency graphs. An agent skill from kdeldycke/dotfiles.

BSD-2-ClauseAuto-check: notesDevelopment

Install Repomatic Deps

skills CLI
$ npx skills add kdeldycke/dotfiles --skill repomatic-deps -a claude-code

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

GitHub CLI
$ gh skill install kdeldycke/dotfiles repomatic-deps --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/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-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
repomatic-deps
GitHub stars
173
Token cost
~7.3k tokens
SKILL.md length
3,647 words
Files
1
Skills in repo
25
Repo updated
First seen
Licence
BSD-2-Clause

At a glance

Generate dependency graphs. An agent skill from kdeldycke/dotfiles.

  • Works in 5 steps: Use >= (not ~= or ==). Relaxed lower… → Every version bound needs a comment… → Python version support is not a valid… → …
  • Tasks that involve Changelog and release notes
  • SKILL.md covers Context, Instructions, Graph mode and Review mode, plus 2 more sections
  • Calls uv, git and gh

What it does

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.

When your agent uses it

  • Tasks that involve Changelog and release notes
  • Tasks that involve Code simplification

Example prompts

  • “/repomatic-deps”

Requirements

  • Python 3
  • Compatibility (from SKILL.md): Designed for Claude Code. Recommended model: Opus.
  • Pre-approved tools (allowed-tools): Bash, Read, Grep, Glob, Agent, Edit, Write, WebFetch

Workflow steps

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

  1. Use >= (not ~= or ==). Relaxed lower bounds give packagers freedom to release security hotfixes without waiting for an upstream bump…
  2. Every version bound needs a comment tying the floor to a concrete code dependency. The comment goes on the line above the dependency and…
  3. Python version support is not a valid reason to bump a floor. The dependency resolver already picks the right version via requires-python…
  4. Use conditional markers for Python-version-gated deps. Example: "tomli>=2; python_version<'3.11'". When a dep has a version marker, the…
  5. Alphabetical order within the list.

What it can do on your machine

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

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash
    • Read
    • Grep
    • Glob
    • Agent
    • Edit
    • Write
    • WebFetch

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • uv
    • git
    • gh
    • uvx
    • pip

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

  • Network

    Links to these hosts (documentation or services it may open):

    • iscinumpy.dev
    • repomatic.net

    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.

  • Compatibility

    Designed for Claude Code. Recommended model: Opus.

    From compatibility in the SKILL.md frontmatter.

Context cost

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.

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

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

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Bash, Read, Grep, Glob, Agent, Edit, Write, WebFetch

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 kdeldycke/dotfiles at commit 7947d0f, republished under its BSD-2-Clause licence (© kdeldycke). 3,647 words, ~7,271 tokens.

Download SKILL.mdSave it as .claude/skills/repomatic-deps/SKILL.md (or your agent's skills folder).
name
repomatic-deps
description
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.
allowed-tools
Bash, Read, Grep, Glob, Agent, Edit, Write, WebFetch
compatibility
Designed for Claude Code. Recommended model: Opus.
argument-hint
[graph [--level N]|review [all|runtime|dev|policy]|explore [<package>]|modernize [<package>]]

Context

![ -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"

Instructions

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

Determine invocation method
  • If the context above shows CANONICAL_REPO, use uv run repomatic.
  • Otherwise, use uvx -- repomatic.
  • Gate the 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.
Mode selection
  • No arguments: Run both 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.
  • If $ARGUMENTS starts with --level or a number, treat it as graph mode with those arguments.

Graph mode

Mechanical layer

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.

Argument handling
  • Pass remaining arguments through to <cmd> update-dep-graph.
  • If no extra arguments, run <cmd> update-dep-graph with no arguments.
After running
  • Display the Mermaid output.
  • Analyze the graph: count total dependencies, flag deep dependency chains, identify packages with high fan-in (many dependents) or fan-out (many dependencies).
  • Highlight any notable patterns or potential concerns (e.g., single points of failure, overly deep transitive chains).

Review mode

Mechanical layer

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

Scope selection
  • 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.
Version specifier policy

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.

Runtime dependencies ([project].dependencies)
  1. Use >= (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/.
  2. Every version bound needs a comment tying the floor to a concrete code dependency. The comment goes on the line above the dependency and states which feature, method, or API from that version the project actually uses. Prefer referencing the call site or module that depends on it:
    toml
    # wcmatch 10.0 changed globbing semantics; our sync_gitignore() relies on
    # the new symlink-aware matching behavior.
    "wcmatch>=10",
    A good floor comment answers: "if someone installed an older version, what would break and where?" If you cannot point to a concrete usage, the floor may be unnecessarily high. A floor comment documents the floor as it stands, in one short paragraph. It is not a record of how the floor got there. Left alone it drifts that way on its own: each bump appends a paragraph about the newly required version, nothing is deleted, and the comment becomes a private changelog of the dependency with the declared version buried under the floors it replaced. When raising a floor, rewrite the comment rather than extending it: keep what the new version buys (API, fix, 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:
    toml
    # requests 2.32.0 fixes CVE-2024-35195 (session credential leak on redirects).
    "requests>=2.32",
  3. Python version support is not a valid reason to bump a floor. The dependency resolver already picks the right version via 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:
    toml
    # boltons 25.0.0 dropped Python 3.9, matching our requires-python >= 3.10.
    "boltons>=25",
  4. Use conditional markers for Python-version-gated deps. Example: "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.
  5. Alphabetical order within the list.
Development dependencies ([dependency-groups])
  1. Prefer [dependency-groups] (uv standard) over [project.optional-dependencies] for test, typing, and docs groups.
  2. >= 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.
  3. Standard group names: test, typing, docs (lowercase, alphabetical).
  4. Type stubs go in the typing group with stub-specific versions: "types-boltons>=25.0.0.20250822".
  5. Alphabetical order within each group.
General rules
  1. No upper bounds (<, <=, !=, ~= that implies an upper bound). The only exception is conditional markers like python_version<'3.11'.
  2. Extras syntax is fine: "coverage[toml]>=7.11".
  3. One dependency per line for readable diffs. Short groups that fit on one line are acceptable — the format-pyproject job normalizes layout automatically.
Audit procedure

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:

CheckWhat to flag
Weak commentComment cites Python version support instead of a concrete code dependency. Flag unless it documents a requires-python alignment or a Python version drop
Stale commentComment references a reason that no longer applies (the cited method was replaced, or the Python version left the support matrix)
Accreted commentComment narrates superseded floors beside the declared one. Rewrite it around the version in force; lint-deps catches only the long ones
Inflated floorFloor higher than the oldest version providing the APIs actually used (see floor verification below)
Marker/rationale mismatchFloor 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 markersMissing Python version marker for backport packages
Stale cooldown exceptionsexclude-newer-package entries in [tool.uv] for packages that no longer need them (see below)
Floor verification

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:

  1. Grep for imports. Search the source tree for all imports from the package. List the specific APIs used (functions, classes, constants).
  2. Determine the oldest version providing those APIs. Check when the API was introduced — changelogs, release notes, or 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.
  3. Lower the floor when it exceeds the oldest compatible version. Prefer conservative minimums (the major version that introduced the API) over aggressive ones. Update both the version specifier and the comment.
  4. Run uv lock after any floor change to verify the lock still resolves.
Special cases
  • Backport packages (like 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.
  • Conditional deps with stale bug-fix floors. A dep gated by 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 plugins with no special API beyond auto-registration (like 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.
Floor bumps to adopt new APIs

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:

  1. Replace existing code, not add new features. The goal is less code, not more capability.
  2. Be a net reduction in complexity. Swapping a one-line comprehension for a library call is not a win.
  3. Use the public API of the dependency. Private/undocumented attributes do not count.
  4. Update the floor comment to reference the new API and the code it replaces.

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.

Red flag patterns in comments

These comment patterns typically signal a floor set at adoption or auto-bump time, not at an API boundary:

  • "First version we used" / "first version when we last changed the requirement" — the floor is an artifact of when the dep was added or last bumped by a dependency bot, not a deliberate API minimum.
  • "First version to support Python 3.X" — unless it documents a 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.
  • The ~= -> >= 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 audit

The [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:

  1. Is the package still a dependency? If it was removed from [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.
  2. Is a hand-written exemption still justified? A same-maintainer or in-repo package keeps its span indefinitely and correctly. An external package exempted during a migration that has since finished no longer needs one.
  3. Does the comment explain the reason? Like version floors, a hand-written exemption should carry a comment naming why the cooldown does not apply to it.

Flag those as warnings. Never flag an entry merely for existing or for looking old.

Show full SKILL.md (1,449 more words)Show less
Cross-repo reference

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:

  • Shared dependencies where the downstream floor is lower than upstream (may be missing a needed bump).
  • Shared dev dependencies where upstream has moved to a newer group structure.
Output format

Produce:

  1. Policy compliance summary: A table with one row per dependency: name, specifier, has comment (yes/no), issues found.
  2. Grouped findings by severity:
    • Errors: Wrong specifier style, missing version, upper bounds.
    • Warnings: Missing or stale comments, ordering issues, inflated floors, marker/rationale mismatches.
    • Info: Suggestions for floor adjustments based on API verification or cross-repo data.
  3. Suggested fixes: For each error/warning, show the current line and the recommended replacement. For inflated floors, include the verified API minimum and a rewritten comment.

Explore mode

Search for unused APIs in existing dependencies that could replace hand-rolled code. This is purely analytical: it produces recommendations, not changes.

Scope selection
  • No argument: explore all runtime dependencies.
  • <package>: explore a single dependency (e.g., explore boltons).
Procedure

For each dependency in scope:

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

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

  3. 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 APIPattern to search for
    boltons.iterutils.partitionTwo complementary list comprehensions filtering the same iterable
    boltons.iterutils.firstnext(iter(...), None) or seq[0] if seq else None on non-generator sequences
    boltons.iterutils.bucketizeLoops building a dict[K, list[V]] via setdefault(k, []).append(v)
    boltons.iterutils.chunkedManual 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_savePath.write_text() on files where partial writes would corrupt state
    packaging.specifiers.SpecifierSetManual version-range checks with </>/in loops over Version objects
    packaging.requirements.RequirementRegex parsing of PEP 508 requirement strings
    packaging.markers.MarkerRegex parsing of PEP 508 environment markers (only when the public API exposes the needed structure)
    wcmatch.fnmatch / wcmatch.pathlibstdlib fnmatch or pathlib.Path.glob() that would benefit from brace expansion, negation, or extended patterns
    pyproject_metadata.StandardMetadata propertiesManual toml_dict.get("project", {}).get("field") when a StandardMetadata instance is already available
  4. Verify each candidate. Read the actual code at each location. Discard false positives:

    • A one-line comprehension is not worth replacing with a function call.
    • 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.
    • Stdlib 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.
  5. 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.

Output format

Produce a table of findings:

DependencyUnused APILocationCurrent code (summary)ReplacementVersion neededVerdict
boltonssubdictmetadata.py:2232dict comprehension filtering by key setsubdict(metadata, keys)any (available since 16.x)Skip: one-liner, no clarity gain
pyproject-metadataStandardMetadata.keywordscli.py:2733toml.get("project", {}).get("keywords")metadata.pyproject.keywordscurrent floor sufficientAdopt: 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.

Filtering noise

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:

  • Swapping idioms for library calls. next(iter(x)) → first(x) adds an import for no clarity gain.
  • Adding atomicity where none is needed. atomic_save on files that are immediately git-committed or overwritten by CI.
  • Unifying glob implementations. stdlib glob and wcmatch.glob serve different purposes; not every glob.glob() call needs extended syntax.
  • Replacing regex with structured parsing when the regex is simpler. re.match(r"extra\s*==\s*'([^']+)'", marker) is more direct than navigating a Marker object's internal structure.

Modernize mode

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.

Scope selection
  • No argument: every dependency upgraded since the last release tag.
  • <package>: a single dependency (e.g., modernize click-extra).
Procedure
  1. Find the version deltas. Determine which dependencies changed, and from and to which version, cheapest source first:

    • The most recent 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.
    • Failing that, find the last release tag (git tag --sort=-v:refname | head -1) and diff the lockfile against it (git diff <tag> -- uv.lock), reading the version pairs.
    • For a single named package, read its locked version and the pyproject.toml floor.
  2. 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.

  3. 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:

    • A new helper that replaces hand-rolled logic.
    • A bug fix that lets us delete a workaround — search comments for the package name, work around, TODO, and version-guarded branches.
    • A deprecation we still call, which must move to the replacement before the dependency removes it. The test suite's warnings summary names each deprecated call the tests reach, with its file and line.
  4. 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.

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

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

What not to touch
  • New capability. Adopting a feature to add behavior is out of scope: this mode only removes or replaces existing code.
  • Major-version migrations. A breaking upgrade that needs broad rework is a deliberate human project. Report it and stop, do not attempt it autonomously.
  • Speculative adoptions. If no current code is simplified, do nothing.

Next steps

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

Files

Just SKILL.md in dotfiles/.agents/skills/repomatic-deps of kdeldycke/dotfiles.

Open the folder on GitHubat commit 7947d0f

Compare with similar skills

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.

Repomatic Deps compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Repomatic Deps this skillkdeldycke/dotfiles173—~7.3kAutomated safety check: NotesBSD-2-Clause
Quick Finalizetobihagemann/turbo409—~1.5kAutomated safety check: NotesMIT
Simple Englishmoeru-ai/airi50k2 repos~4.6kAutomated safety check: PassMIT
StarRocks Release NotesStarRocks/starrocks12k—~1.9kAutomated safety check: NotesApache-2.0
Cutting A ReleaseTriliumNext/Trilium38k—~3.2kAutomated safety check: PassAGPL-3.0
PonytailDavidObando/gsharp5648 repos~1.7kAutomated safety check: PassMIT

Similar skills

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

    409 GitHub stars~1.5k tokensUpdated today
    Testing & QAAuto-check: notes
  • Simple English

    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.

    50k GitHub starsUsed in 2 repos~4.6k tokens
    DevelopmentAuto-check passed
  • StarRocks Release Notes

    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.

    12k GitHub stars~1.9k tokensUpdated today
    DevelopmentAuto-check: notes
  • Cutting A Release

    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.

    38k GitHub stars~3.2k tokensUpdated today
    DevelopmentAuto-check passed
  • Ponytail

    DavidObando/gsharp

    Forces the laziest solution that actually works, simplest, shortest, most minimal.

    564 GitHub starsUsed in 8 repos~1.7k tokens
    DevelopmentAuto-check passed
  • React Router Release Notes Prep

    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.

    57k GitHub stars~1.1k tokensUpdated today
    DevelopmentAuto-check passed

More from kdeldycke/dotfiles

All 25 skills in this repo
  • Agent Config Self Tune

    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…

    173 GitHub stars~3.4k tokensUpdated 4 days ago
    Auto-check: notes
  • Audit Repo Issues

    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.

    173 GitHub stars~2.5k tokensUpdated 4 days ago
    Auto-check passed
  • Brand Assets

    kdeldycke/dotfiles

    Create project logo and banner SVGs, then export them to light and dark PNG variants.

    173 GitHub stars~4.7k tokensUpdated 4 days ago
    Auto-check passed
  • Fill Web Form

    kdeldycke/dotfiles

    Fill a web form using data extracted from local documents (PDFs, images, spreadsheets).

    173 GitHub stars~2.3k tokensUpdated 4 days ago
    Auto-check passed
  • Rename With Dates

    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"…

    173 GitHub stars~3.5k tokensUpdated 4 days ago
    Auto-check passed
  • Repomatic Test Matrix

    kdeldycke/dotfiles

    Choose what a repository's CI test matrix covers. An agent skill from kdeldycke/dotfiles.

    173 GitHub stars~2.2k tokensUpdated 4 days ago
    Auto-check: notes

Categories

Questions about Repomatic Deps

What does Repomatic Deps do?

Generate dependency graphs. An agent skill from kdeldycke/dotfiles. Repomatic Deps is an agent skill from kdeldycke/dotfiles. Generate dependency graphs.

When should I use Repomatic Deps?

Repomatic Deps fits situations like: tasks that involve Changelog and release notes; tasks that involve Code simplification.

How do I install Repomatic Deps in Claude Code?

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.

How do I install Repomatic Deps in Codex?

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.

Can I use Repomatic Deps 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 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.

What does Repomatic Deps need to run?

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

Does Repomatic Deps access the network?

SKILL.md names 2 domains. As links in the text: iscinumpy.dev and repomatic.net. This is read from the text; nothing was executed.

Is Repomatic Deps safe to install?

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.

What licence does Repomatic Deps use?

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.

How many tokens does Repomatic Deps use?

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.

What are the alternatives to Repomatic Deps?

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.

Who maintains Repomatic Deps?

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.