From agent-almanac
Manages R package dependencies with renv: init, snapshot, restore, update, and CI/CD integration.
How this skill is triggered — by the user, by Claude, or both
Slash command
/agent-almanac:manage-renv-dependenciesThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Set up and maintain reproducible R package environments using renv.
Set up and maintain reproducible R package environments using renv.
renv.lock file (for restore)renv::init()
This creates:
renv/ directory (library, settings, activation script)renv.lock (dependency snapshot).Rprofile to activate renv on loadExpected: Project-local library created. renv/ directory and renv.lock present. .Rprofile updated with activation script.
On failure: 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().
Install packages as usual:
install.packages("dplyr")
renv::install("github-user/private-pkg")
Then snapshot to record the state:
renv::snapshot()
Expected: renv.lock updated with new packages and their versions. renv::status() shows no out-of-sync packages.
On failure: If renv::snapshot() reports validation errors, run renv::dependencies() to check which packages are actually used, then renv::snapshot(force = TRUE) to bypass validation.
renv::restore()
Expected: All packages installed at the exact versions in renv.lock.
On failure: 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).
# Update a specific package
renv::update("dplyr")
# Update all packages
renv::update()
# Snapshot after updates
renv::snapshot()
Expected: Target packages are updated to their latest compatible versions. renv.lock reflects the new versions after snapshot.
On failure: If renv::update() fails for a specific package, try installing it directly with renv::install("package@version") and then snapshot.
renv::status()
Expected: "No issues found" or a clear list of out-of-sync packages with actionable guidance.
On failure: If status reports packages used but not recorded, run renv::snapshot(). If packages are recorded but not installed, run renv::restore().
.Rprofile for Conditional Activationif (file.exists("renv/activate.R")) {
source("renv/activate.R")
}
This ensures the project works even if renv isn't installed (CI environments, collaborators).
Expected: R sessions activate renv automatically when starting in the project directory. Sessions without renv installed still start without errors.
On failure: If .Rprofile causes errors, ensure the file.exists() guard is present. Never call source("renv/activate.R") unconditionally.
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
Expected: renv.lock, renv/activate.R, and renv/settings.json are tracked by Git. Machine-specific directories (renv/library/, renv/cache/) are ignored.
On failure: If renv/library/ accidentally gets committed, remove it with git rm -r --cached renv/library/ and add it to .gitignore.
In GitHub Actions, use the renv cache action:
- uses: r-lib/actions/setup-renv@v2
This automatically restores from renv.lock with caching.
Expected: CI pipeline restores packages from renv.lock with caching enabled. Subsequent runs are faster due to cached packages.
On failure: 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.
renv::status() reports no issuesrenv.lock is committed to version controlrenv::restore() works on a clean checkout.Rprofile conditionally activates renvrenv.lock for dependency resolutionrenv::init() in wrong directory: Always verify getwd() firstrenv::init(), only use the project libraryrenv::snapshot()--vanilla flag: Rscript --vanilla skips .Rprofile, so renv won't activaterenv.lock is designed to be diffable JSONrenv::install("bioc::PackageName") and ensure BiocManager is configuredcreate-r-package - includes renv initializationsetup-github-actions-ci - CI integration with renvsubmit-to-cran - dependency management for CRAN packagesnpx claudepluginhub pjt222/agent-almanacScaffolds a new R package with DESCRIPTION, NAMESPACE, testthat, roxygen2, renv, Git, and GitHub Actions CI. Follows usethis conventions. For starting packages from scratch or converting scripts.
Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.