dependency-management — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited dependency-management (Agent Skill) and scored it 87/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 3 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 3 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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.txtSee ./requirements.txt for the dependency lockfile (currently empty — standard library only).
./requirements.txt lockfile.plugins/<plugin-name>/scripts/. Skills that need it use a file-level symlink in their own scripts/ directory pointing back to the root (ln -s ../../../scripts/foo.py).plugin_installer.py) only resolves individual file-level symlinks. Directory-level symlinks are silently dropped by binary packaging tools.plugin_installer.py) resolves all symlinks to physical copies when deploying to .agents/. This ensures every skill is independently runnable regardless of the source mono-repo's presence.plugin_installer.py uses a 3-tier strategy for Windows:This resolution ensures the Hub-and-Spoke pattern works cross-platform.
python ../../other-plugin/scripts/foo.py. If a cross-plugin capability is needed, use Agent Skill Delegation: instruct the Agent to invoke the target skill via the conversation layer. In the mono-repo source, cross-plugin file-level symlinks are acceptable for shared logic that the installer will then resolve.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| 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.
.in file.requirements-core.in.in>= syntax: cryptography>=46.0.5 # 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.
pip install -r src/services/<service>/./requirements.txt.in and .txt files together..in file)..txt files, it's transitive — pinned by something upstream..in file. # SECURITY PATCHES (Mon YYYY)
package-name>=X.Y.Z.in fileto force the resolver to pull the patched version, even though it's not a direct dependency.
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.txt files: grep -i "package-name" src/requirements-core.txt \
src/services/*/./requirements.txtdocument the advisory acknowledgement as a comment in the .in file and note mitigations.
COPY ./requirements.txt + RUN pip install -r ./requirements.txt.RUN pip install <pkg> commands. No manual installs../requirements.txt before source code to preserve Docker layer caching..in change.>= so pip-compile can resolve freely.pytest, ruff, etc. in requirements-dev.in.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.