AI-assisted coding does not just produce more code. It produces more dependency decisions.
A developer asks for a utility function. The assistant suggests a package. The package is installed. The lockfile changes. The attack surface expands.
This happens quietly, repeatedly, and often without the scrutiny that manual dependency choices receive.
Why dependency drift is different with AI
Traditional dependency decisions usually involve:
- a human evaluating alternatives
- reading documentation or release notes
- checking adoption signals
- understanding transitive dependencies
AI-assisted dependency decisions often involve:
- accepting the first suggestion
- copying install commands without review
- version bumps that align with the model’s training data, not current project policy
The result is dependency drift:
packages are added, updated, and changed faster than the team’s ability to review them.
The risk patterns
New direct dependencies
A single new package can introduce:
- malicious code
- abandoned code
- code with risky lifecycle scripts
- code with incompatible licenses
Version bumps
A minor version change can:
- introduce new transitive dependencies
- change build behavior
- alter API contracts in subtle ways
Lockfile churn
Large lockfile changes obscure what is actually new:
- mixing legitimate updates with suspicious additions
- making manual review impractical
Build and install hooks
In Node/TS and Python, these are especially risky:
postinstall,preinstall,preparescripts in npm packages- custom build backends in
pyproject.toml - arbitrary code execution during dependency resolution
Diff-aware checks that help
Pre-merge controls should focus on dependency diffs, not just the final dependency tree.
For Node/TS
- new entries in
package.jsondependencies - changes to
scriptsinpackage.json - lifecycle hook additions in installed packages
- new registries or scopes in
.npmrc - lockfile changes introducing new packages
For Python
- new entries in
requirements.txtorpyproject.toml - build backend changes
- new transitive dependencies visible in
poetry.lock - unpinned or URL-based installs
For both
- size of lockfile diff (large churn = more scrutiny needed)
- first-time-seen packages in the org
- packages with known security issues
- license compatibility
Policy approaches
A practical dependency policy uses graduated enforcement:
- Block: known malicious packages, forbidden licenses, unpinned installs in production paths
- Warn: new packages without adoption signals, large lockfile churn, new lifecycle hooks
- Require review: first-time packages for the organization, changes to build configuration
This reduces noise while preserving safety.
The Cyblox view: guard the supply chain at the diff
GenAI Code Security includes pre-merge checks for dependency drift:
- new dependency detection
- lifecycle hook and script change alerts
- license and policy alignment
- lockfile diff analysis
Findings are surfaced in PR review with clear severity and rationale.
More at: /solutions/security/genai-code-security/.
Closing thought
Dependency drift is not a vulnerability. It is a control failure.
AI-assisted development makes it easier to add dependencies than ever before. The security task is to make review just as easy.
If AI-generated code is entering your repos, add pre-merge security, secrets, licensing, and policy checks—with review evidence—without changing how developers work.
