Web Artifacts Builder
anthropics/skills
Builds multi-component claude.ai HTML artifacts as a small React, TypeScript and Tailwind project, then bundles it into one shareable HTML file.
Build command-line apps in R using the Rapp package. An agent skill from posit-dev/skills.
$ npx skills add posit-dev/skills --skill r-cli-app -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install posit-dev/skills r-cli-app --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/posit-dev/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/r-lib/r-cli-app .claude/skills/r-cli-app && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "r-cli-app" agent skill from https://github.com/posit-dev/skills/tree/main/r-lib/r-cli-app into .claude/skills/r-cli-app/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "r-cli-app", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/posit-dev/skills/tree/main/r-lib/r-cli-appType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add posit-dev/skills --skill r-cli-app -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install posit-dev/skills r-cli-app --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/posit-dev/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/r-lib/r-cli-app .agents/skills/r-cli-app && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "r-cli-app" agent skill from https://github.com/posit-dev/skills/tree/main/r-lib/r-cli-app into .agents/skills/r-cli-app/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "r-cli-app", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add posit-dev/skills --skill r-cli-app -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install posit-dev/skills r-cli-app --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/posit-dev/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/r-lib/r-cli-app .cursor/skills/r-cli-app && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "r-cli-app" agent skill from https://github.com/posit-dev/skills/tree/main/r-lib/r-cli-app into .cursor/skills/r-cli-app/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "r-cli-app", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/posit-dev/skills.git --path r-lib/r-cli-app--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add posit-dev/skills --skill r-cli-app -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install posit-dev/skills r-cli-app --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/posit-dev/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/r-lib/r-cli-app .gemini/skills/r-cli-app && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "r-cli-app" agent skill from https://github.com/posit-dev/skills/tree/main/r-lib/r-cli-app into .gemini/skills/r-cli-app/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "r-cli-app", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install posit-dev/skills r-cli-appInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add posit-dev/skills --skill r-cli-app -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/posit-dev/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/r-lib/r-cli-app .github/skills/r-cli-app && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "r-cli-app" agent skill from https://github.com/posit-dev/skills/tree/main/r-lib/r-cli-app into .github/skills/r-cli-app/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "r-cli-app", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add posit-dev/skills --skill r-cli-app -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install posit-dev/skills r-cli-app --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/posit-dev/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/r-lib/r-cli-app .opencode/skills/r-cli-app && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "r-cli-app" agent skill from https://github.com/posit-dev/skills/tree/main/r-lib/r-cli-app into .opencode/skills/r-cli-app/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "r-cli-app", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
r-cli-appBuild command-line apps in R using the Rapp package. An agent skill from posit-dev/skills.
R CLI App is an agent skill from posit-dev/skills. Build command-line apps in R using the Rapp package. Use when creating a CLI tool in R, adding argument parsing to an R script, turning an R script into a command-line app, shipping CLIs in an R package, or using Rapp (the alternative Rscript front-end). Also use for shebang scripts, exec/ directory in R packages, or subcommand-based R tools.
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 13 other files, including reference files (for example `.evals/convert-script/eval.md`, `.evals/convert-script/prompt.md` and `.evals/simple-cli/eval.md`).
It sits in Frontend & Design. The repository describes itself as: A collection of Claude Skills from Posit. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 0300946. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (R), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
R CLI App loads about 2.9k tokens when it runs, and up to ~4.3k if it reads all its reference files. Until then it costs about 89 tokens; SKILL.md has 783 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from posit-dev/skills at commit 0300946, republished under its MIT licence (© posit-dev). 783 words, ~2,859 tokens.
.claude/skills/r-cli-app/SKILL.md (or your agent's skills folder). This skill also uses 8 other files; get the full folder from GitHub.Rapp (v0.3.0) is an R package that provides a drop-in replacement for Rscript
that automatically parses command-line arguments into R values. It turns simple
R scripts into polished CLI apps with argument parsing, help text, and subcommand
support — with zero boilerplate.
R ≥ 4.1.0 | CRAN: install.packages("Rapp") | GitHub: r-lib/Rapp
After installing, put the Rapp launcher on PATH:
Rapp::install_pkg_cli_apps("Rapp")This places the Rapp executable in ~/.local/bin (macOS/Linux) or
%LOCALAPPDATA%\Programs\R\Rapp\bin (Windows).
Rapp scans top-level expressions of an R script and converts specific patterns into CLI constructs. This means:
source() and as a CLI tool.Only top-level assignments are recognized. Assignments inside functions, loops, or conditionals are not parsed as CLI arguments.
This table is the heart of Rapp — each R pattern automatically maps to a CLI surface:
| R Top-Level Expression | CLI Surface | Notes |
|---|---|---|
foo <- "text" | --foo <value> | String option |
foo <- 1L | --foo <int> | Integer option |
foo <- 3.14 | --foo <float> | Float option |
foo <- TRUE / FALSE | --foo / --no-foo | Boolean toggle |
foo <- NA_integer_ | --foo <int> | Optional integer (NA = not set) |
foo <- NA_character_ | --foo <str> | Optional string (NA = not set) |
foo <- NULL | positional arg | Required by default |
foo... <- NULL | variadic positional | Zero or more values |
foo <- c() | repeatable --foo | Multiple values as strings |
foo <- list() | repeatable --foo | Multiple values parsed as YAML/JSON |
switch("", cmd1={}, cmd2={}) | subcommands | app cmd1, app cmd2 |
switch(cmd <- "", ...) | subcommands | Same; captures command name in cmd |
n <- 5L means --n 10 gives integer 10L.!is.na(myvar).n_flips → --n-flips.#!/usr/bin/env RappMakes the script directly executable on macOS/Linux after chmod +x.
On Windows, call Rapp myscript.R explicitly.
Hash-pipe comments (#|) before any code set script-level metadata:
#!/usr/bin/env Rapp
#| name: my-app
#| title: My App
#| description: |
#| A short description of what this app does.
#| Can span multiple lines using YAML block scalar `|`.The name: field sets the app name in help output (defaults to filename).
Place #| comments immediately before the assignment they annotate:
#| description: Number of coin flips
#| short: 'n'
flips <- 1LAvailable annotation fields:
| Field | Purpose |
|---|---|
description: | Help text shown in --help |
title: | Display title (for subcommands and front matter) |
short: | Single-letter alias, e.g. 'n' → -n |
required: | true/false — for positional args only |
val_type: | Override type: string, integer, float, bool, any |
arg_type: | Override CLI type: option, switch, positional |
action: | For repeatable options: replace or append |
Add #| short: for frequently-used options — users expect single-letter
shortcuts for common flags like verbose (-v), output (-o), or count (-n).
Scalar literal assignments become named options:
name <- "world" # --name <value> (string, default "world")
count <- 1L # --count <int> (integer, default 1)
threshold <- 0.5 # --threshold <flt> (float, default 0.5)
seed <- NA_integer_ # --seed <int> (optional, NA if omitted)
output <- NA_character_ # --output <str> (optional, NA if omitted)For optional arguments, test whether the user supplied them:
seed <- NA_integer_
if (!is.na(seed)) set.seed(seed)TRUE/FALSE assignments become toggles:
verbose <- FALSE # --verbose or --no-verbose
wrap <- TRUE # --wrap (default) or --no-wrapValues yes/true/1 set TRUE; no/false/0 set FALSE.
pattern <- c() # --pattern '*.csv' --pattern 'sales-*' → character vector
threshold <- list() # --threshold 5 --threshold '[10,20]' → list of parsed valuesAssign NULL for positional args (required by default):
#| description: The input file to process.
input_file <- NULLMake optional with #| required: false. Test with is.null(myvar).
Use ... suffix to collect multiple positional values:
pkgs... <- c()
# install-pkgs dplyr ggplot2 tidyr → pkgs... = c("dplyr", "ggplot2", "tidyr")Use switch() with a string first argument to declare subcommands.
Options before the switch() are global; options inside branches are
local to that subcommand.
switch(
command <- "",
#| title: Display the todos
list = {
#| description: Max entries to display (-1 for all).
limit <- 30L
# ... list implementation
},
#| title: Add a new todo
add = {
#| description: Task description to add.
task <- NULL
# ... add implementation
},
#| title: Mark a task as completed
done = {
#| description: Index of the task to complete.
index <- 1L
# ... done implementation
}
)Help is scoped: myapp --help lists commands; myapp list --help shows
list-specific options plus globals. Subcommands can nest by placing another
switch() inside a branch.
Every Rapp automatically gets --help (human-readable) and --help-yaml
(machine-readable). These work with subcommands too.
Use Rapp::run() to test scripts from an R session:
Rapp::run("path/to/myapp.R", c("--help"))
Rapp::run("path/to/myapp.R", c("--name", "Alice", "--count", "5"))It returns the evaluation environment (invisibly) for inspection, and
supports browser() for interactive debugging.
Use Rapp::run() with testthat snapshot testing. Test computed values by
accessing the returned environment, and test output with expect_snapshot().
See references/advanced.md for detailed testing patterns, including:
#!/usr/bin/env Rapp
#| name: flip-coin
#| description: |
#| Flip a coin.
#| description: Number of coin flips
#| short: 'n'
flips <- 1L
sep <- " "
wrap <- TRUE
seed <- NA_integer_
if (!is.na(seed)) {
set.seed(seed)
}
cat(sample(c("heads", "tails"), flips, TRUE), sep = sep, fill = wrap)flip-coin # heads
flip-coin -n 3 # heads tails heads
flip-coin --seed 42 -n 5
flip-coin --helpGenerated help:
Usage: flip-coin [OPTIONS]
Flip a coin.
Options:
-n, --flips <FLIPS> Number of coin flips [default: 1] [type: integer]
--sep <SEP> [default: " "] [type: string]
--wrap / --no-wrap [default: true]
--seed <SEED> [default: NA] [type: integer]#!/usr/bin/env Rapp
#| name: todo
#| description: Manage a simple todo list.
#| description: Path to the todo list file.
#| short: s
store <- ".todo.yml"
switch(
command <- "",
list = {
#| description: Max entries to display (-1 for all).
limit <- 30L
tasks <- if (file.exists(store)) yaml::read_yaml(store) else list()
if (!length(tasks)) {
cat("No tasks yet.\n")
} else {
if (limit >= 0L) tasks <- head(tasks, limit)
writeLines(sprintf("%2d. %s\n", seq_along(tasks), tasks))
}
},
add = {
#| description: Task description to add.
task <- NULL
tasks <- if (file.exists(store)) yaml::read_yaml(store) else list()
tasks[[length(tasks) + 1L]] <- task
yaml::write_yaml(tasks, store)
cat("Added:", task, "\n")
},
done = {
#| description: Index of the task to complete.
#| short: i
index <- 1L
tasks <- if (file.exists(store)) yaml::read_yaml(store) else list()
task <- tasks[[as.integer(index)]]
tasks[[as.integer(index)]] <- NULL
yaml::write_yaml(tasks, store)
cat("Completed:", task, "\n")
}
)todo add "Write quarterly report"
todo list
todo list --limit 5
todo done 1
todo --store /tmp/work.yml listPlace CLI scripts in exec/ and add Rapp to Imports in DESCRIPTION:
mypkg/
├── DESCRIPTION
├── R/
├── exec/
│ ├── myapp # script with #!/usr/bin/env Rapp shebang
│ └── myapp2
└── man/Users install the CLI launchers after installing the package:
Rapp::install_pkg_cli_apps("mypkg")Expose a convenience installer so users don't need to know about Rapp:
#' Install mypkg CLI apps
#' @export
install_mypkg_cli <- function(destdir = NULL) {
Rapp::install_pkg_cli_apps(package = "mypkg", destdir = destdir)
}By default, launchers set --default-packages=base,<pkg>, so only base
and the package are auto-loaded. Use library() for other dependencies.
NA_integer_, NA_character_) → optional named option.
Test: !is.na(x).#| required: false → optional positional arg.
Test: !is.null(x).input_file <- NA_character_
con <- if (is.na(input_file)) file("stdin") else file(input_file, "r")
lines <- readLines(con)
writeLines(lines, stdout())message("Error: something went wrong") # writes to stderr
cat("Error:", msg, "\n", file = stderr()) # also stderr
quit(status = 1) # non-zero exittryCatch({
result <- do_work()
}, error = function(e) {
cat("Error:", conditionMessage(e), "\n", file = stderr())
quit(status = 1)
})For less common topics — launcher customization (#| launcher: front matter),
detailed Rapp::install_pkg_cli_apps() API options, and more complete examples
(deduplication filter, variadic install-pkg, interactive fallback) — read
references/advanced.md.
© posit-dev, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 8 other files (references) in r-lib/r-cli-app of posit-dev/skills.
Open the folder on GitHubat commit 0300946
R CLI App next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| R CLI App this skillposit-dev/skills | 529 | — | ~2.9k | Automated safety check: Pass | MIT | |
| Web Artifacts Builderanthropics/skills | 180k | 40 repos | ~769 | Automated safety check: Pass | Apache-2.0 | |
| React Doctormakeplane/plane | 60k | 12 repos | ~657 | Automated safety check: Pass | AGPL-3.0 | |
| React Composition Patternsvercel-labs/openreview | 1.7k | 58 repos | ~721 | Automated safety check: Pass | MIT | |
| Impeccablebestofjs/bestofjs | 3.1k | 27 repos | ~2.6k | Automated safety check: Pass | MIT | |
| Figma Design System Builderwarpdotdev/warp | 65k | 2 repos | ~4.4k | Automated safety check: Pass | AGPL-3.0 |
anthropics/skills
Builds multi-component claude.ai HTML artifacts as a small React, TypeScript and Tailwind project, then bundles it into one shareable HTML file.
makeplane/plane
Scans React code for lint, accessibility, bundle size and architecture issues, reports a health score and checks that changes do not lower it.
vercel-labs/openreview
Rules for structuring React components with composition instead of boolean props, covering compound components, lifted state, variants and React 19 changes.
bestofjs/bestofjs
A skill your agent uses when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a…
warpdotdev/warp
Builds or updates a design system in Figma from a codebase in ordered phases: discovery, variables and tokens, components, theming and documentation, with checkpoints.
anonaddy/anonaddy
Always invoke when the user's message includes 'tailwind' in any form.
posit-dev/skills
Guidance for managing R package lifecycle according to tidyverse principles using the lifecycle package.
posit-dev/skills
Creates a pull request from current changes, monitors GitHub CI, and debugs any failures until CI passes.
posit-dev/skills
Build modern Shiny dashboards and applications using bslib (Bootstrap 5).
posit-dev/skills
Advanced theming for Shiny apps using bslib and Bootstrap 5.
posit-dev/skills
Rigorously review code or pull requests for correctness, security, accessibility, maintainability, tests, and edge cases.
posit-dev/skills
Deploy or publish Python and R content to a Posit Connect server using rsconnect-python or the R rsconnect package.
Categories
Build command-line apps in R using the Rapp package. An agent skill from posit-dev/skills. R CLI App is an agent skill from posit-dev/skills. Build command-line apps in R using the Rapp package.
R CLI App fits situations like: creating a CLI tool in R; adding argument parsing to an R script; turning an R script into a command-line app; shipping CLIs in an R package.
Run `npx skills add posit-dev/skills --skill r-cli-app -a claude-code`. Or copy the skill folder (r-lib/r-cli-app in posit-dev/skills) into .claude/skills/r-cli-app in your project. Claude Code loads it when a task matches its description.
Run `npx skills add posit-dev/skills --skill r-cli-app -a codex`. Or copy the skill folder (r-lib/r-cli-app in posit-dev/skills) into .agents/skills/r-cli-app in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add posit-dev/skills --skill r-cli-app -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/r-cli-app, .gemini/skills/r-cli-app, .github/skills/r-cli-app and .opencode/skills/r-cli-app in your project.
Going by SKILL.md and its folder, R CLI App needs R for the scripts in its folder.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
R CLI App is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.4k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with R CLI App: Web Artifacts Builder (anthropics/skills, 180k stars), React Doctor (makeplane/plane, 60k stars), React Composition Patterns (vercel-labs/openreview, 1.7k stars) and Impeccable (bestofjs/bestofjs, 3.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
posit-dev (a GitHub organization) maintains it in posit-dev/skills, which has 529 GitHub stars. The repository holds 17 skills in this directory. The repository was last updated on October 6, 2026.
Source: posit-dev/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.