| Title: | Artificial Intelligence Workflow Tools |
| Version: | 0.0.1 |
| Description: | Manage skills for large language model coding agents. Supports installing skills from 'GitHub' or local directories, tracking versions in a lock file, and keeping installations current. Installations can be scoped to a single project or shared globally across projects. |
| URL: | https://christophertkenny.com/wf/, https://github.com/christopherkenny/wf |
| BugReports: | https://github.com/christopherkenny/wf/issues |
| Depends: | R (≥ 4.1.0) |
| License: | MIT + file LICENSE |
| Encoding: | UTF-8 |
| RoxygenNote: | 7.3.3 |
| Imports: | cli (≥ 3.6.0), fs, gh, jsonlite, rlang (≥ 1.1.0), yaml |
| Suggests: | testthat (≥ 3.0.0), withr |
| Config/testthat/edition: | 3 |
| NeedsCompilation: | no |
| Packaged: | 2026-03-15 22:39:56 UTC; chris |
| Author: | Christopher T. Kenny
|
| Maintainer: | Christopher T. Kenny <ctkenny@proton.me> |
| Repository: | CRAN |
| Date/Publication: | 2026-03-19 14:40:02 UTC |
wf: Artificial Intelligence Workflow Tools
Description
Manage skills for large language model coding agents. Supports installing skills from 'GitHub' or local directories, tracking versions in a lock file, and keeping installations current. Installations can be scoped to a single project or shared globally across projects.
Author(s)
Maintainer: Christopher T. Kenny ctkenny@proton.me (ORCID)
See Also
Useful links:
Report bugs at https://github.com/christopherkenny/wf/issues
Install a skill
Description
Installs a skill from a GitHub repository or a local directory into a skills directory.
Usage
add_skill(source, skill = NULL, path = NULL, overwrite = FALSE)
Arguments
source |
One of:
|
skill |
For multi-skill repositories that store skills under a
|
path |
The skills directory to install into. Can be one of:
|
overwrite |
If |
Value
The path to the installed skill directory, invisibly.
Examples
src <- tempfile()
dir.create(src)
writeLines(
c('---', 'name: example', 'description: An example skill.', '---'),
file.path(src, 'SKILL.md')
)
add_skill(src, path = tempfile())
Check installed skills for available updates
Description
Compares each installed skill's recorded commit SHA against the latest commit on GitHub. Local skills are reported as not updatable.
Usage
check_skills(path = NULL)
Arguments
path |
The skills directory to check. Can be one of:
|
Value
A data frame with columns:
-
name: skill name. -
installed_sha: the SHA recorded at install time (NAfor local). -
latest_sha: the current HEAD SHA on GitHub (NAfor local or on network failure). -
update_available:TRUEif installed and latest SHAs differ.
Examples
check_skills(tempfile())
Search for skills on GitHub
Description
Searches GitHub for repositories tagged with a skill topic and matching
a keyword query. Searches across all supported agent topic conventions
(e.g. claude-skill, cursor-skill).
Usage
find_skill(query)
Arguments
query |
Keyword to search for. |
Value
A data frame with columns:
-
name: repository name. -
description: repository description. -
owner: repository owner login. -
url: full URL of the repository. -
stars: number of GitHub stars.
Examples
find_skill('rstats')
Create a new skill template
Description
Creates a new skill directory at path/name/ containing a template
SKILL.md file ready to be filled in.
Usage
init_skill(name, path = NULL)
Arguments
name |
Skill name. Must be 1-64 characters, lowercase alphanumeric with
single hyphens (no consecutive |
path |
Directory in which to create the skill. The skill directory
itself will be
|
Value
The path to the new skill directory, invisibly.
Examples
init_skill('my-skill', tempfile())
List installed skills
Description
Returns a data frame describing all skills installed in a skills directory.
Usage
list_skills(path = NULL)
Arguments
path |
The skills directory to inspect. Can be one of:
|
Value
A data frame with columns:
-
name: skill name fromSKILL.mdfrontmatter. -
description: skill description fromSKILL.mdfrontmatter. -
source: the source URL or local path the skill was installed from. -
installed_at: ISO 8601 timestamp of when the skill was installed.
Examples
list_skills(tempfile())
Remove an installed skill
Description
Deletes a skill directory from a skills directory and removes it from the lock file.
Usage
remove_skill(name, path = NULL, force = FALSE)
Arguments
name |
The name of the skill to remove. |
path |
The skills directory where the skill is installed. Can be one of:
|
force |
If |
Value
The name of the removed skill, invisibly.
Examples
src <- tempfile()
dir.create(src)
writeLines(
c('---', 'name: example', 'description: An example skill.', '---'),
file.path(src, 'SKILL.md')
)
tmp <- tempfile()
add_skill(src, path = tmp)
remove_skill('example', tmp, force = TRUE)
Get the conventional skill path for an agent
Description
Returns the conventional directory path where skills for a given agent are
stored. The path is not expanded (i.e., ~ is not resolved to the home
directory). Use fs::path_expand() if you need an absolute path.
Usage
skill_path(agent = NULL, scope = c("project", "global"))
Arguments
agent |
One of |
scope |
One of |
Value
A length-1 character vector giving the conventional skill path.
Examples
skill_path('claude_code', 'project')
skill_path('claude', 'project') # alias for claude_code
skill_path('github_copilot', 'project')
skill_path('copilot', 'project') # alias for github_copilot
skill_path('posit_ai', 'project')
skill_path('posit', 'project') # alias for posit_ai
skill_path('cursor', 'global')
skill_path() # auto-detects from WF_AGENT, dir scan, or falls back to claude_code
Update installed skills
Description
Checks each installed skill for available updates and re-installs any that have a newer version on GitHub.
Usage
update_skills(path = NULL)
Arguments
path |
The skills directory to update. Can be one of:
|
Value
A character vector of updated skill names, invisibly.
Examples
update_skills(tempfile())