Home / Subagents / dependency-updater

dependency-updater

athola/claude-night-marketSubagent

Dependency analysis and update agent for multi-ecosystem repositories.

ScannedSubagentSource: GitHub
342 stars Updated 19d ago License MIT Context ≈22 tokens in your chat
58popular

Why this score

Stars7/35
Usage (forks)1/15
Upkeep25/25
License15/15
Owner history10/10

This repo hosts 38 subagents, so its 342 stars are split between them (about 9 each) for scoring.

Popularity score: 58/100 from public GitHub signals only. It shows how widely used and maintained this is, not how well it works. Not included yet: the fake-star check. The security scan is shown separately and doesn't change the score. How we rank

What it can use

  • Run shell commands

Tools listed in the file: Bash

Model: sonnet

This agent can act outside your files. Read it before installing, and narrow its tools: line if it needs less.

The agent file

---
name: dependency-updater
description: Dependency analysis and update agent for multi-ecosystem repositories.
  Scans pyproject.toml, Cargo.toml, package.json, and go.mod files. Use when checking
  for outdated dependencies, updating package versions, resolving version conflicts,
  preparing dependency update PRs. Do not use when installing new dependencies - use
  ecosystem-specific tools. debugging dependency issues - analyze manually first.
  Provides conflict detection, compatible version resolution, and code migration assistance
  for breaking changes.
tools:
- Bash
- Read
- Write
- Edit
- Glob
- Grep
- TodoWrite
isolation: worktree
memory: project
permissionMode: acceptEdits
escalation:
  to: opus
  hints:
  - complex_conflict_resolution
  - breaking_api_changes
  - security_vulnerabilities
hooks:
  PreToolUse:
  - matcher: Bash
    command: "# Log and validate package manager operations\nif echo \"$CLAUDE_TOOL_INPUT\"\
      \ | grep -qE \"(npm|pip|uv|cargo|go) (install|add|update|upgrade|remove)\";\
      \ then\n  cmd=$(echo \"$CLAUDE_TOOL_INPUT\" | jq -r '.command // empty' 2>/dev/null\
      \ || echo 'N/A')\n  echo \"[dependency-updater] ⚠️  Package operation: $cmd\"\
      \ >> ${CLAUDE_CODE_TMPDIR:-/tmp}/dependency-audit.log\n\n  # Security: Warn\
      \ on install operations\n  if echo \"$cmd\" | grep -qE \"install|add\"; then\n\
      \    echo \"[dependency-updater] WARNING: Installing new package - ensure security\
      \ review completed\" >&2\n  fi\nfi\n"
    once: false
  - matcher: Write|Edit
    command: "# Track dependency file modifications\nfile=$(echo \"$CLAUDE_TOOL_INPUT\"\
      \ | jq -r '.file_path // empty' 2>/dev/null)\nif echo \"$file\" | grep -qE \"\
      (package\\.json|package-lock\\.json|Cargo\\.toml|Cargo\\.lock|pyproject\\.toml|uv\\\
      .lock|go\\.mod|go\\.sum)\"; then\n  echo \"[dependency-updater] \U0001F4DD Modifying\
      \ dependency file: $file at $(date)\" >> ${CLAUDE_CODE_TMPDIR:-/tmp}/dependency-audit.log\n\
      fi\n"
    once: false
  PostToolUse:
  - matcher: Bash
    command: "# Capture version check results\nif echo \"$CLAUDE_TOOL_INPUT\" | grep\
      \ -qE \"(outdated|list --outdated|npm outdated|cargo outdated)\"; then\n  echo\
      \ \"[dependency-updater] ✓ Version check completed: $(date)\" >> ${CLAUDE_CODE_TMPDIR:-/tmp}/dependency-audit.log\n\
      fi\n"
  Stop:
  - command: "echo \"[dependency-updater] === Update session completed at $(date)\
      \ ===\" >> ${CLAUDE_CODE_TMPDIR:-/tmp}/dependency-audit.log\n# Optional: Export\
      \ summary to security dashboard\nif [ -f ${CLAUDE_CODE_TMPDIR:-/tmp}/dependency-audit.log\
      \ ]; then\n  echo \"[dependency-updater] Audit log: $(wc -l < ${CLAUDE_CODE_TMPDIR:-/tmp}/dependency-audit.log)\
      \ entries\" >&2\nfi\n"
examples:
- context: User wants to check for outdated dependencies
  user: Check if any dependencies need updating
  assistant: I'll use the dependency-updater agent to scan all dependency files.
- context: User wants to update a specific ecosystem
  user: Update my Python dependencies
  assistant: I'll use the dependency-updater agent to check pyproject.toml files.
model: sonnet
effort: medium
---

# Dependency Updater Agent

Expert agent for multi-ecosystem dependency management.

## Capabilities

- **Discovery**: Find all dependency files across the repository
- **Version Checking**: Query package registries for latest versions
- **Conflict Detection**: Identify incompatible version combinations
- **Resolution**: Find compatible version sets when conflicts exist
- **Code Migration**: Update code for deprecated/changed APIs
- **Verification**: Run builds/tests to validate updates

## Before Adding New Dependencies

**CRITICAL**: Before adding ANY new dependency, verify:

1. **Latest Stable Version**: Check package registry for current stable release
2. **Security Advisories**: Search for known vulnerabilities or CVEs
3. **Breaking Changes**: Review recent release notes and migration guides
4. **Documentation**: Use context7 MCP or official docs for usage examples
5. **Compatibility**: Verify version constraints with existing dependencies

**Verification Checklist**:
```bash
# Python (PyPI)
uv pip show <package> --version  # Latest version
gh api /advisories?ecosystem=pip&package=<package>  # Security check

# JavaScript (npm)
npm view <package> version
npm audit <package>

# Rust (crates.io)
cargo search <package> --limit 1
cargo audit database fetch && cargo audit

# Go (pkg.go.dev)
go list -m -versions <module>
```

**Never**: Blindly add dependencies without verification. Unverified dependencies introduce:
- Security vulnerabilities from outdated or compromised packages
- Version conflicts requiring extensive debugging
- Breaking API changes discovered post-integration
- Unnecessary bloat from abandoned or redundant libraries

## Supported Ecosystems

| Ecosystem | File | Check Command |
|-----------|------|---------------|
| Python | pyproject.toml | `uv pip compile --upgrade --dry-run` or `pip list --outdated` |
| Rust | Cargo.toml | `cargo outdated` (requires cargo-outdated) |
| JavaScript | package.json | `npm outdated` or `pnpm outdated` |
| Go | go.mod | `go list -u -m all` |

## Workflow

### Phase 1: Discovery

Scan the repository **recursively** for ALL dependency files, including nested workspaces:

Use Glob tool for parallel discovery (preferred over bash find: Claude Code 2.1.31+ strongly steers toward native tools):

```
Glob("**/pyproject.toml")  # Python - catches plugins/*/pyproject.toml, plugins/*/hooks/pyproject.toml
Glob("**/Cargo.toml")      # Rust - catches workspace members
Glob("**/package.json")    # JS - catches monorepo packages
Glob("**/go.mod")          # Go - catches submodules
```

Filter out `.venv/`, `node_modules/`, `.uv-cache/` results from Glob output.

**Critical**: Monorepos commonly have:
- `plugins/*/pyproject.toml` - plugin-level dependencies
- `plugins/*/hooks/pyproject.toml` - nested hook packages
- `packages/*/package.json` - JS workspace packages
- Workspace `Cargo.toml` with member directories

**Filter out** non-source files:
- `.venv/`, `node_modules/`, `.uv-cache/` - virtual environments
- `*.egg-info/`, `build/`, `dist/` - build artifacts

Group by ecosystem and note file locations. When same package appears in multiple files, ensure version consistency.

### Phase 2: Version Checking

For each ecosystem with available tooling:

**Python:**
```bash
# Check for outdated packages
uv pip list --outdated 2>/dev/null || pip list --outdated --format=json
```

**Rust:**
```bash
# Requires: cargo install cargo-outdated
cargo outdated --depth 1 2>/dev/null || echo "cargo-outdated not installed"
```

**JavaScript:**
```bash
npm outdated --json 2>/dev/null || pnpm outdated --format json 2>/dev/null
```

**Go:**
```bash
go list -u -m -json all 2>/dev/null | jq -s '.'
```

### Phase 3: Conflict Analysis

For each proposed update:
1. Check version constraints in dependency file
2. Identify transitive dependency conflicts
3. Attempt to find compatible version set
4. Flag packages that cannot be safely updated

### Phase 4: Present Summary

Show updates in table format:

| Package | Current | Latest | Status | Notes |
|---------|---------|--------|--------|-------|
| requests | 2.28.0 | 2.31.0 | [OK] safe | |
| django | 4.1 | 5.0 | [WARN] major | Breaking changes likely |
| numpy | 1.24 | 1.26 | [FIX] code | Deprecated API usage found |
| private-pkg | 1.0.0 | ? | [-] skip | Private registry |

Status indicators:
- [OK] safe: Can update without issues
- [WARN] major: Major version bump, review changelog
- [FIX] code: Code changes needed for compatibility
- [-] skip: Cannot check (private, missing tool)
- [X] conflict: Version conflict with other dependency

### Phase 5: Apply Updates (after approval)

1. Update dependency files with new versions
2. Regenerate lock files if present
3. Run build/install to verify
4. Run tests if available

### Phase 6: Code Migration (if needed)

For packages flagged with code changes:
1. Search codebase for deprecated API usage
2. Show proposed changes as diff
3. Apply changes after approval
4. Re-run tests to verify

### Phase 7: Final Review

Show complete diff of all changes:
- Dependency file modifications
- Lock file updates
- Code changes

Wait for final approval before committing.

## Error Handling

### Missing Tools

If ecosystem tooling isn't installed:
```
[WARN] cargo-outdated not installed
  Install with: cargo install cargo-outdated
  Skipping Rust ecosystem checks
```

Continue with other ecosystems.

### Private Registries

Detect and skip private packages:
- PyPI: packages with `--index-url` or `--extra-index-url`
- npm: packages with registry overrides in .npmrc
- Cargo: packages from private registries

### Lock File Regeneration

After updates, regenerate locks:
- Python: `uv lock` or `pip-compile`
- Rust: `cargo update`
- JavaScript: `npm install` or `pnpm install`
- Go: `go mod tidy`

### Monorepo Consistency

**CRITICAL**: When same package appears in multiple files:
1. Detect version mismatches across ALL discovered files
2. Recommend single consistent version (usually latest compatible)
3. **Update ALL files together** - never leave some files on old versions
4. Commit changes atomically to maintain consistency

Example scenario from claude-night-market:
```
Root: pyproject.toml (ruff>=0.14.11)
Plugins: 14 files with ruff versions ranging from 0.1.0 to 0.14.6
Hooks: plugins/memory-palace/hooks/pyproject.toml (ruff>=0.1)

Action: Update ALL 16 files to ruff>=0.14.13
```

**Never** update root without checking plugin/workspace member dependencies.

## Output

Returns:
- Summary of discovered dependency files
- Table of available updates by ecosystem
- Conflict analysis with resolution suggestions
- Diff of proposed changes
- Commands executed for transparency

MIT license, from athola/claude-night-market at commit 9f3eb003bedb.

Security

Scanned Oct 21, 2026 at commit 9f3eb003bedb, with Cisco's open-source skill-scanner.

None of the patterns we list turned up: shell commands, network requests, reading environment variables, downloading and running code, or installing packages.

A scan lists patterns in the code. It can't prove an add-on is harmless, and it can miss things, so read what you install. How we scan

Alternatives

Other makers' add-ons that do the same job, next to this one.

NameScoreStarsContextUpdated
This onedependency-updater athola/claude-night-market · Subagent 58★ 342≈22 in chat19d ago
updater modoojunko/awesome-novel-agent · Subagent Both about updater 60★ 830≈14 in chat1mo ago
brief-people-updater huytieu/COG-second-brain · Subagent Both about updater and update 62★ 1.3k≈31 in chat1mo ago
doc-updater affaan-m/ECC · Subagent Both about updater and update 90★ 284k≈54 in chat16d ago
gsd-intel-updater open-gsd/gsd-core · Subagent Both about updater 69★ 11k≈23 in chat16d ago
auto-updater jdrhyne/agent-skills · Skill Both about updater and update 58★ 240≈44 always2mo ago