From agent-almanac
Scaffolds 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.
How this skill is triggered — by the user, by Claude, or both
Slash command
/agent-almanac:create-r-packageThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Scaffold a fully configured R package with modern tooling and best practices.
Scaffold a fully configured R package with modern tooling and best practices.
.)usethis::create_package("packagename")
setwd("packagename")
Expected: Directory created with DESCRIPTION, NAMESPACE, R/, and man/ subdirectories.
On failure: Ensure usethis is installed (install.packages("usethis")). Check that the directory does not already exist.
Edit DESCRIPTION with accurate metadata:
Package: packagename
Title: What the Package Does (Title Case)
Version: 0.1.0
Authors@R:
person("First", "Last", , "[email protected]", role = c("aut", "cre"),
comment = c(ORCID = "0000-0000-0000-0000"))
Description: One paragraph describing what the package does. Must be more
than one sentence. Avoid starting with "This package".
License: MIT + file LICENSE
Encoding: UTF-8
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.3.2
URL: https://github.com/username/packagename
BugReports: https://github.com/username/packagename/issues
Expected: Valid DESCRIPTION that passes R CMD check with no metadata warnings.
On failure: If R CMD check warns about DESCRIPTION fields, verify that Title is in Title Case, Description is more than one sentence, and Authors@R uses valid person() syntax.
usethis::use_mit_license()
usethis::use_readme_md()
usethis::use_news_md()
usethis::use_testthat(edition = 3)
usethis::use_git()
usethis::use_github_action("check-standard")
Expected: LICENSE, README.md, NEWS.md, tests/ directory, .git/ initialized, and .github/workflows/ created.
On failure: If any usethis::use_*() function fails, install the missing dependency and rerun. If .git/ already exists, use_git() will skip initialization.
Create .Rprofile:
if (file.exists("renv/activate.R")) {
source("renv/activate.R")
}
if (requireNamespace("mcptools", quietly = TRUE)) {
mcptools::mcp_session()
}
Create .Renviron.example:
RSTUDIO_PANDOC="C:/Program Files/RStudio/resources/app/bin/quarto/bin/tools"
# GITHUB_PAT=your_github_token_here
Create .Rbuildignore entries:
^\.Rprofile$
^\.Renviron$
^\.Renviron\.example$
^renv$
^renv\.lock$
^CLAUDE\.md$
^\.github$
^.*\.Rproj$
Expected: .Rprofile, .Renviron.example, and .Rbuildignore are created. Development files are excluded from the built package.
On failure: If .Rprofile causes errors on startup, check for syntax issues. Ensure requireNamespace() guards prevent failures when optional packages are missing.
renv::init()
Expected: renv/ directory and renv.lock created. Project-local library is active.
On failure: Install renv with install.packages("renv"). If renv hangs during initialization, check network connectivity or set options(timeout = 600).
Create R/packagename-package.R:
#' @keywords internal
"_PACKAGE"
## usethis namespace: start
## usethis namespace: end
NULL
Expected: R/packagename-package.R exists with the "_PACKAGE" sentinel. Running devtools::document() generates package-level help.
On failure: Ensure the filename matches the pattern R/<packagename>-package.R. The "_PACKAGE" string must be a standalone expression, not inside a function.
Create CLAUDE.md in the project root with project-specific instructions for AI assistants.
Expected: CLAUDE.md exists in the project root with project-specific editing conventions, build commands, and architecture notes.
On failure: If unsure what to include, start with the package name, a one-line description, common dev commands (devtools::check(), devtools::test()), and any non-obvious conventions.
devtools::check() returns 0 errors, 0 warnings.Rprofile loads without errorsrenv::status() shows no issues.gitignoreavailable::available("packagename") before committing to a name.Rprofile, .Renviron, renv/) must be excluded from the built packageEncoding: UTF-8 in DESCRIPTION# Minimal creation
usethis::create_package("myanalysis")
# Full setup in one session
usethis::create_package("myanalysis")
usethis::use_mit_license()
usethis::use_testthat(edition = 3)
usethis::use_readme_md()
usethis::use_git()
usethis::use_github_action("check-standard")
renv::init()
write-roxygen-docs - document the functions you createwrite-testthat-tests - add tests for your packagesetup-github-actions-ci - detailed CI/CD configurationmanage-renv-dependencies - manage package dependencieswrite-claude-md - create effective AI assistant instructionsnpx claudepluginhub pjt222/agent-almanacComplete procedure for submitting an R package to CRAN, including pre-submission checks (local, win-builder, R-hub), cran-comments.md preparation, URL and spell checking, and the submission itself. Covers first submissions and updates. Use when a package is ready for initial CRAN release, when submitting an updated version of an existing CRAN package, or when re-submitting after receiving CRAN reviewer feedback.
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.