From 377f29b545189ba8c30856d344f3ad1f034ca14e Mon Sep 17 00:00:00 2001 From: Alex Clarke Date: Mon, 1 Jun 2026 16:52:40 -0600 Subject: [PATCH] feat: Added skills support --- README.md | 14 +++++++++++++- skills/rust-fmt/SKILL.md | 22 ++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 skills/rust-fmt/SKILL.md diff --git a/README.md b/README.md index 4602ba7..ef454e0 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ coyote --install-from https://github.com//coyote-config-template --filter a coyote --install-from https://github.com//coyote-config-template --filter mcp_config ``` -Valid filter values: `agents`, `roles`, `macros`, `functions`, `mcp_config`. +Valid filter values: `agents`, `roles`, `skills`, `macros`, `functions`, `mcp_config`. Skip per-file conflict prompts with `--install-force`: @@ -60,6 +60,9 @@ coyote-config-template/ │ └── scripts/ # Optional graph-node scripts ├── roles/ │ └── .md # Role with frontmatter + prompt body +├── skills/ +│ └── / +│ └── SKILL.md # Skill with frontmatter + body ├── macros/ │ └── .yaml # Positional/rest-args + REPL command steps └── functions/ @@ -78,6 +81,7 @@ prompted to keep yours, take the remote's, or rename the remote entry. |--------|-----------------------------------|---------------------------------------------------------| | Agent | `agents/hello-agent/config.yaml` | Tiny LLM-loop agent that greets the user. | | Role | `roles/explainer.md` | Role that explains technical concepts simply. | +| Skill | `skills/rust-fmt/SKILL.md` | Skill demonstrating `enabled_tools` + `auto_unload`. | | Macro | `macros/greet.yaml` | Macro showing positional and rest-arg variables. | | Tool | `functions/tools/greet.sh` | Bash tool using Coyote's argc-style annotations. | | MCP | `functions/mcp.json` | One vanilla server + one with a vault secret reference. | @@ -98,6 +102,14 @@ declarative graph agents, put a `graph.yaml` instead Each `roles/.md` is a YAML frontmatter block followed by the role instructions ([Roles wiki](https://github.com/Dark-Alex-17/coyote/wiki/Roles)). +### Skills +Each skill lives in its own subdirectory under `skills/`, with a +`SKILL.md` file containing YAML frontmatter (`description`, +`enabled_tools`, `enabled_mcp_servers`, `auto_unload`) followed by a +body of instructions that get injected into the model's system prompt +while the skill is loaded +([Skills wiki](https://github.com/Dark-Alex-17/coyote/wiki/Skills)). + ### Macros Each `macros/.yaml` is a list of REPL commands to execute, with optional positional/rest variables diff --git a/skills/rust-fmt/SKILL.md b/skills/rust-fmt/SKILL.md new file mode 100644 index 0000000..30a767c --- /dev/null +++ b/skills/rust-fmt/SKILL.md @@ -0,0 +1,22 @@ +--- +description: Run rustfmt and cargo check before finalizing Rust edits. Grants shell access and auto-unloads after the model finishes. +enabled_tools: execute_command +auto_unload: true +--- +You are finalizing edits to a Rust codebase. Before declaring the work complete, ALWAYS run the formatter and a check +build using the `execute_command` tool. + +## Workflow + +1. After making edits, run `cargo fmt` to normalize formatting. +2. Run `cargo check` to surface compilation errors quickly (faster than `cargo build`). +3. If `cargo check` fails, read the errors and fix before reporting completion. +4. Only after both succeed, summarize the change. + +## Why this skill auto-unloads + +`auto_unload: true` in the frontmatter means this skill removes itself from the registry after the model produces a +final response (no more tool calls). The user's next message starts with a clean context — the next prompt won't have +"run rustfmt" guidance polluting unrelated discussions. + +Reload it explicitly via `.skill load rust-fmt` (or the model can `skill__load` it) when working on Rust again.