Dependency management
Skill richfrem/agent-plugins-skills/plugins/dependency-management/skills/dependency-management
repo for reusable plugins and skills
npx -y skills add richfrem/agent-plugins-skills --skill dependency-managementAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Python dependency and environment management for multi-service or monorepo python backends. Use when: (1) adding, upgrading, or removing a Python package, (2) responding to Dependabot or security vulnerability alerts (GHSA/CVE), (3) creating a new service that needs its own requirements files, (4) debugging pip install failures or Docker build issues related to dependencies, (5) reviewing or auditing the dependency tree, (6) running pip-compile. Enforces the pip-compile locked-file workflow and tiered dependency hierarchy.
SKILL.md
6.9 KB, ~1.5k tokens by cl100k_base, as published. Nobody here has run it
Dependencies
This skill requires Python 3.8+ and standard library only. No external packages needed.
To install this skill's dependencies:
pip-compile ./requirements.in
pip install -r ./requirements.txt
See ./requirements.txt for the dependency lockfile (currently empty — standard library only).
Dependency Management
- One runtime per service. Each isolated service owns its own
./requirements.txtlockfile.
Script Architecture & Packaging
For plugin packaging, DRY script distribution, and Windows symlink/junction compatibility rules, see the authoritative shared plugin packaging guidelines.
Repository Layout (Example)
src/
├── requirements-core.in # Tier 1: shared baseline (fastapi, pydantic…)
├── requirements-core.txt # Lockfile for core
├── services/
│ ├── auth_service/
│ │ ├── requirements.in # Tier 2: inherits core + auth deps
│ │ └── requirements.txt
│ ├── payments_service/
│ │ ├── requirements.in
│ │ └── requirements.txt
│ └── database_service/
│ ├── requirements.in
│ └── requirements.txt
Tiered Hierarchy
| Tier | Scope | File | Examples |
|---|---|---|---|
| 1 – Core | Shared by >80% of services | requirements-core.in | fastapi, pydantic, httpx |
| 2 – Specialized | Service-specific heavyweights | <service>/requirements.in | stripe, redis, asyncpg |
| 3 – Dev tools | Never in production containers | requirements-dev.in | pytest, black, ruff |
Each service .in file usually begins with -r ../../requirements-core.in to inherit the core dependencies.
Workflow: Adding or Upgrading a Package
-
Declare — Add or update the version constraint in the correct
.infile.- If the package is needed by most services →
requirements-core.in - If only one service → that service's
.in - Security floor pins use
>=syntax:cryptography>=46.0.5
- If the package is needed by most services →
-
Lock — Compile the lockfile:
# Core pip-compile src/requirements-core.in \ --output-file src/requirements-core.txt # Individual service (example: auth) pip-compile src/services/auth_service/requirements.in \ --output-file src/services/auth_service/requirements.txtBecause services inherit core via
-r, recompiling a service also picks up core changes. -
Sync — Install locally to verify: Preferred (if available):
pip-sync src/services/<service>/requirements.txtFallback:
pip install -r src/services/<service>/requirements.txt -
Verify — Rebuild the affected Docker/Podman container to confirm stable builds.
-
Commit — Stage and commit both
.inand.txtfiles together.
Workflow: Responding to Dependabot / Security Alerts
-
Identify the affected package and fixed version from the advisory (GHSA/CVE).
-
Determine tier placement:
- Check if the package is a direct dependency (appears in an
.infile). - If it only appears in
.txtfiles, it's transitive — pinned by something upstream.
- Check if the package is a direct dependency (appears in an
-
For direct dependencies: Bump the version floor in the relevant
.infile.# SECURITY PATCHES (Mon YYYY) package-name>=X.Y.Z -
For transitive dependencies: Add a version floor pin in the appropriate
.infile to force the resolver to pull the patched version, even though it's not a direct dependency. -
Recompile all affected lockfiles. Since services inherit core, a core change means recompiling every service lockfile. Use this compilation order:
# 1. Core first pip-compile src/requirements-core.in \ --output-file src/requirements-core.txt # 2. Then each service for svc in auth_service payments_service database_service; do pip-compile "src/services/${svc}/requirements.in" \ --output-file "src/services/${svc}/requirements.txt" done -
Verify the patched version appears in all affected
.txtfiles:grep -i "package-name" src/requirements-core.txt \ src/services/*/requirements.txt -
If no newer version exists (e.g., inherent design risk like pickle deserialization), document the advisory acknowledgement as a comment in the
.infile and note mitigations.
Container / Dockerfile Constraints
- Dockerfiles only use
COPY requirements.txt+RUN pip install -r requirements.txt. - No
RUN pip install <pkg>commands. No manual installs. - Copy
requirements.txtbefore source code to preserve Docker layer caching.
Non-Negotiable Execution Rules
The agent MUST NOT:
- Run
pip install <pkg>directly to resolve dependency issues. - Modify
.txtlockfiles manually. - Bypass
pip-compilefailures. - Ignore missing tools (e.g.,
pip-compilenot installed). - Continue after dependency conflicts without resolution.
If any of the above occurs:
- HALT execution immediately.
- Classify using the self-evolution profile.
- Either:
- Fix within allowed directories, OR
- Log to
map-debt.md.
- Report explicitly to the user.
Workarounds are considered Tier 0 Friction and must be logged.
Self-Evolution Requirements
When this skill encounters friction, failure, ambiguity, or a workaround:
- Do not silently bypass the issue.
- Classify the issue using
references/self-evolution-profile.md. - If fixed within allowed directories, update the relevant skill/reference file.
- Add an entry to
references/evolution-log.md. - If not fixed, add an entry to
references/map-debt.mdwith severity, repeat risk, and recommended fix.
When to Record Map Debt
Log to map-debt.md when:
- Tooling is missing (e.g.
pip-compileis absent). - Conflicts require human resolution.
- The dependency graph is ambiguous.
- Instructions in this plugin are unclear or contradictory.
Do not silently proceed.
Common Pitfalls
- Forgetting to recompile downstream services after a core
.inchange. - Pinning
==instead of>=for security floors — use>=sopip-compilecan resolve freely. - Adding dev tools to production
.infiles — keeppytest,ruff, etc. inrequirements-dev.in. - Committing
.txtwithout.in— always commit them as a pair.
What ships with it: 13 files
6.7 KB alongside SKILL.md
evals/
- evals.json1.6 KB
- results.tsv301 B
references/
- acceptance-criteria.md3.1 KB
- fallback-tree.md1.4 KB
- requirements.in22 B
- requirements.txt22 B