Skills

Skills are specialized modules of instructions and knowledge. Posit Assistant loads them automatically when they are relevant to your request, and you can also invoke most skills on demand as a slash command.

Posit Assistant loading a skill during a conversation

Besides the built-in skills and your own custom ones, you can install skills by adding a plugin from a marketplace. A plugin can bundle skills alongside slash commands and MCP servers.

Built-in Skills

SkillDescription
create-skillCreate new Agent Skills following the specification
import-instructionsMigrate Positron, Copilot, Claude Code, and VS Code instruction files into Posit Assistant skills
posit-productsUse Positron IDE and Posit Workbench; deploy to Posit Connect and Posit Connect Cloud
predictive-modeling-pythonModeling and machine learning with scikit-learn in Python
predictive-modeling-rModeling and machine learning with tidymodels in R
quarto-authoringWrite and author Quarto documents (.qmd)
reportCreate Quarto documents or notebooks from conversations
r-package-developmentR package development with devtools, testthat, and roxygen2
shiny-bslibBuild modern Shiny dashboards and apps with bslib
shiny-bslib-themingAdvanced theming for Shiny apps using bslib and Bootstrap 5
snowflakeConnect to Snowflake and query data via semantic views

Adding Custom Skills

You can add your own skills at two levels:

  • User-level~/.posit/assistant/skills/{skill-name}/ or ~/.agents/skills/{skill-name}/ — available across all projects
  • Project-level.posit/assistant/skills/{skill-name}/ or .agents/skills/{skill-name}/ in your project root — scoped to a single project

Use the .posit/assistant/ path for skills meant specifically for Posit Assistant. Use .agents/skills for skills you want to share with other coding assistants that follow the Agent Skills specification, or that came from an installer like npx skills.

In older versions, the directory was ~/.positai/ instead of ~/.posit/assistant/.

Project skills take priority over user skills, and both override built-in skills with the same name. If a skill of the same name exists in both .posit/assistant/skills and .agents/skills at the same level, the .posit/assistant/skills version wins.

Skill Directory Structure

my-skill/
├── SKILL.md        # Required: skill definition with metadata
├── scripts/        # Optional: executable scripts (R, Python, Bash)
├── references/     # Optional: additional documentation
└── assets/         # Optional: templates, schemas, data files

SKILL.md Format

Each skill requires a SKILL.md file with YAML frontmatter:

---
name: my-skill
description: When to use this skill — a clear description that helps the assistant decide when to load it.
---
# My Skill

Instructions, examples, and reference material for the assistant to follow
when this skill is active.

Required fields:

  • name — Lowercase letters, numbers, and hyphens only. Must match the directory name. Max 64 characters.
  • description — Explains when the skill should be used. Max 1024 characters.

Optional fields:

  • license — Licensing terms (e.g., MIT)
  • compatibility — Environmental requirements
  • metadata — Arbitrary key-value pairs (author, version, etc.)
  • argument-hint — A hint shown next to the skill in the slash-command menu (e.g., <file>)
  • user-invocable — Set to false to hide the skill from the slash-command menu while still letting the assistant load it automatically
  • disable-model-invocation — Set to true to keep the skill out of automatic loading, so it only runs when you invoke it as a command, useful for procedural workflows you want to trigger deliberately

Example

To create a skill for your team’s internal API:

mkdir -p ~/.posit/assistant/skills/internal-api

Then create ~/.posit/assistant/skills/internal-api/SKILL.md:

---
name: internal-api
description: Use when the user asks about our internal REST API, including authentication, endpoints, and data schemas.
---

# Internal API

Our API is at https://api.example.com/v2.

## Authentication

Use Bearer tokens from the /auth/token endpoint...

The skill will be available in your next conversation. You can also use the built-in create-skill skill to help generate new skills interactively.

Custom Skill Locations

By default, Posit Assistant searches for skills in these directories. When the same skill name exists in more than one location, the version from the later directory is used:

  1. ~/.agents/skills/
  2. ~/.posit/assistant/skills/
  3. .agents/skills/ — relative to each workspace root
  4. .posit/assistant/skills/ — relative to each workspace root

You can customize these paths with the skills.paths setting in your ~/.posit/assistant/settings.json:

{
  "skills": {
    "paths": [
      "~/.agents/skills",
      "~/.posit/assistant/skills",
      ".agents/skills",
      ".posit/assistant/skills",
      "~/my-company/shared-skills"
    ]
  }
}

Paths starting with ~ expand to your home directory. Relative paths are resolved against each workspace root. If both a global and project-level config define skills.paths, the project value completely replaces the global one — they are not merged.

Running a Skill as a Command

Most skills double as slash commands. Type / in the chat and pick the skill (or type its name) to run it right away, for example /quarto-authoring or a custom /deploy-check.

Unlike automatic loading, this is explicit and deterministic: the skill’s instructions run right then, whether or not the assistant would judge them relevant on its own. You can pass extra instructions after the command, and the assistant hands them to the skill.

See Commands for how the menu works, which skills appear in it, and how a built-in command of the same name takes precedence.

This makes skills a good home for repeatable workflows you want to trigger by hand, not just background knowledge the assistant loads for you.

Importing from Other Tools

If you already have custom prompt files or instructions from another tool (VS Code/Positron *.prompt.md, GitHub Copilot, or Claude Code), run the /import-instructions command to bring them over.

It finds those files, including .github/prompts/*.prompt.md, .vscode/positron/prompts/*.prompt.md, and any locations set via chat.promptFilesLocations, and converts each one into a skill.

Once imported, each becomes a /skill-name command you can invoke the same way you invoked the original prompt.

Further Reading

Skills follow the Agent Skills specification.