manage-renv-dependencies
About
This skill manages R package dependencies using renv to create reproducible environments. It covers initialization, snapshot/restore workflows, troubleshooting, and CI/CD integration. Use it when setting up new R projects, adding/updating packages, restoring environments, or fixing restore issues.
Quick Install
Claude Code
Recommendednpx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/manage-renv-dependenciesCopy and paste this command in Claude Code to install this skill
Documentation
Manage renv Dependencies
Set up and maintain reproducible R package environments using renv.
When to Use
- Initializing dependency management for a new R project
- Adding or updating package dependencies
- Restoring a project environment on a new machine
- Troubleshooting renv restore failures
- Integrating renv with CI/CD pipelines
Inputs
- Required: R project directory
- Optional: Existing
renv.lockfile (for restore) - Optional: GitHub PAT for private packages
Procedure
Step 1: Initialize renv
renv::init()
This creates:
renv/directory (library, settings, activation script)renv.lock(dependency snapshot)- Updates
.Rprofileto activate renv on load
Got: Project-local library created. renv/ directory and renv.lock present. .Rprofile updated with activation script.
If fail: If it hangs, check network connectivity. If it fails on a specific package, install that package manually first with install.packages() and then rerun renv::init().
Step 2: Add Dependencies
Install packages as usual:
install.packages("dplyr")
renv::install("github-user/private-pkg")
Then snapshot to record the state:
renv::snapshot()
Got: renv.lock updated with new packages and their versions. renv::status() shows no out-of-sync packages.
If fail: If renv::snapshot() reports validation errors, run renv::dependencies() to check which packages are actually used, then renv::snapshot(force = TRUE) to bypass validation.
Step 3: Restore on Another Machine
renv::restore()
Got: All packages installed at the exact versions in renv.lock.
If fail: Common issues: GitHub packages fail (set GITHUB_PAT in .Renviron), system dependencies missing (install with apt-get on Linux), timeouts on large packages (set options(timeout = 600) before restore), or binaries not available (renv compiles from source; ensure build tools are installed).
Step 4: Update Dependencies
# Update a specific package
renv::update("dplyr")
# Update all packages
renv::update()
# Snapshot after updates
renv::snapshot()
Got: Target packages are updated to their latest compatible versions. renv.lock reflects the new versions after snapshot.
If fail: If renv::update() fails for a specific package, try installing it directly with renv::install("package@version") and then snapshot.
Step 5: Check Status
renv::status()
Got: "No issues found" or a clear list of out-of-sync packages with actionable guidance.
If fail: If status reports packages used but not recorded, run renv::snapshot(). If packages are recorded but not installed, run renv::restore().
Step 6: Configure .Rprofile for Conditional Activation
if (file.exists("renv/activate.R")) {
source("renv/activate.R")
}
This ensures the project works even if renv isn't installed (CI environments, collaborators).
Got: R sessions activate renv automatically when starting in the project directory. Sessions without renv installed still start without errors.
If fail: If .Rprofile causes errors, ensure the file.exists() guard is present. Never call source("renv/activate.R") unconditionally.
Step 7: Git Configuration
Track these files:
renv.lock # Always commit
renv/activate.R # Always commit
renv/settings.json # Always commit
.Rprofile # Commit (contains renv activation)
Ignore these (already in renv's .gitignore):
renv/library/ # Machine-specific
renv/staging/ # Temporary
renv/cache/ # Machine-specific cache
Got: renv.lock, renv/activate.R, and renv/settings.json are tracked by Git. Machine-specific directories (renv/library/, renv/cache/) are ignored.
If fail: If renv/library/ accidentally gets committed, remove it with git rm -r --cached renv/library/ and add it to .gitignore.
Step 8: CI/CD Integration
In GitHub Actions, use the renv cache action:
- uses: r-lib/actions/setup-renv@v2
This automatically restores from renv.lock with caching.
Got: CI pipeline restores packages from renv.lock with caching enabled. Subsequent runs are faster due to cached packages.
If fail: If CI restore fails, check that renv.lock is committed and up to date. For private GitHub packages, ensure GITHUB_PAT is set as a repository secret.
Validation
-
renv::status()reports no issues -
renv.lockis committed to version control -
renv::restore()works on a clean checkout -
.Rprofileconditionally activates renv - CI/CD uses
renv.lockfor dependency resolution
Pitfalls
- Running
renv::init()in wrong directory: Always verifygetwd()first - Mixing renv and system library: After
renv::init(), only use the project library - Forgetting to snapshot: After installing packages, always run
renv::snapshot() --vanillaflag:Rscript --vanillaskips.Rprofile, so renv won't activate- Large lock files in diffs: Normal —
renv.lockis designed to be diffable JSON - Bioconductor packages: Use
renv::install("bioc::PackageName")and ensure BiocManager is configured
Related Skills
create-r-package- includes renv initializationsetup-github-actions-ci- CI integration with renvsubmit-to-cran- dependency management for CRAN packages
GitHub Repository
Related Skills
llamaguard
OtherLlamaGuard is Meta's 7-8B parameter model for moderating LLM inputs and outputs across six safety categories like violence and hate speech. It offers 94-95% accuracy and can be deployed using vLLM, Hugging Face, or Amazon SageMaker. Use this skill to easily integrate content filtering and safety guardrails into your AI applications.
cost-optimization
OtherThis Claude Skill helps developers optimize cloud costs through resource rightsizing, tagging strategies, and spending analysis. It provides a framework for reducing cloud expenses and implementing cost governance across AWS, Azure, and GCP. Use it when you need to analyze infrastructure costs, right-size resources, or meet budget constraints.
quantizing-models-bitsandbytes
OtherThis skill quantizes LLMs to 8-bit or 4-bit precision using bitsandbytes, achieving 50-75% memory reduction with minimal accuracy loss. It's ideal for running larger models on limited GPU memory or accelerating inference, supporting formats like INT8, NF4, and FP4. The skill integrates with HuggingFace Transformers and enables QLoRA training and 8-bit optimizers.
dispatching-parallel-agents
OtherThis Claude Skill dispatches multiple agents to investigate and fix 3+ independent problems concurrently. It is designed for scenarios involving unrelated failures that can be resolved without shared state or dependencies. The core capability is parallel problem-solving, assigning one agent per independent problem domain to maximize efficiency.
