docs: updated docs with skill documentation in forgotten places

2026-06-08 11:45:54 -06:00
parent 76d7187333
commit f6b0850139
4 changed files with 80 additions and 22 deletions
+47 -7
@@ -715,18 +715,58 @@ best judgment.
This tool is automatically available to any agent with `can_spawn_agents: true`.
# 9. Auto-Injected Prompts
## 9. Skills
[Skills](Skills) are modular knowledge or capability packs that the model loads and unloads mid-conversation
via `skill__list` and `skill__load`. Where a [role](Roles) defines who the assistant is, a skill layers a
methodology (`code-review`), a toolkit (`git-master`), or a one-shot helper onto whatever role/agent/session is
active. Multiple skills can be loaded at once; their instructions stack and their granted tools/MCP servers union.
Agents can override the global skill policy in their own `config.yaml`:
```yaml
# agents/my-agent/config.yaml
skills_enabled: true # Master switch for this agent (false wins at any level; unset inherits global)
enabled_skills: # Allowlist for this agent (most-specific-wins: agent > role > global)
- code-review
- git-master
inject_skill_instructions: true # Inject the skill-discovery hint into this agent's system prompt
skill_instructions: null # Override the built-in hint text (null uses the default)
```
- **`skills_enabled`** (default unset): Setting `false` disables skills for this agent. `skill__list`,
`skill__load`, and `skill__unload` are not exposed when this agent runs. If unset, the agent inherits the
global setting.
- **`enabled_skills`** (default unset): When set, restricts which skills this agent can load. Skills not in this
list are filtered out of `skill__list`, and `skill__load` rejects them with `"Skill 'X' is not enabled in this
context"`. If unset, the agent inherits the role or global allowlist. Accepts a YAML list or a comma-separated
string.
- **`inject_skill_instructions`** (default `true`): Controls whether Coyote appends a short hint to the system
prompt telling the model to call `skill__list` early in a task. Suppressed automatically when the effective
`enabled_skills` set is empty.
- **`skill_instructions`** (default unset): Replaces the built-in hint text with your own wording.
Skills require function calling (`function_calling_support: true`); the skill subsystem is silently disabled
otherwise. For the full skills model, including the frontmatter format, validation rules, built-in skills, and
the graph-agent variant, see the [Skills Guide](Skills).
For working examples of agents that use skills heavily, see the bundled
[`file-reviewer`](https://github.com/Dark-Alex-17/coyote/blob/main/assets/agents/file-reviewer) and [`code-reviewer`](https://github.com/Dark-Alex-17/coyote/blob/main/assets/agents/code-reviewer) agents.
## 10. Auto-Injected Prompts
Coyote automatically appends usage instructions to your agent's system prompt for each enabled built-in system.
These instructions are injected into both **static and dynamic instructions** after your own instructions,
ensuring agents always know how to use their available tools.
| System | Injected When | Toggle |
|--------------------|----------------------------------------------------------------|-----------------------------|
| Todo tools | `auto_continue: true` AND `inject_todo_instructions: true` | `inject_todo_instructions` |
| Spawning tools | `can_spawn_agents: true` AND `inject_spawn_instructions: true` | `inject_spawn_instructions` |
| Teammate messaging | Always (all agents) | None (always injected) |
| User interaction | Always (all agents) | None (always injected) |
| System | Injected When | Toggle |
|----------------------|----------------------------------------------------------------------------------------------------------|-----------------------------|
| Todo tools | `auto_continue: true` AND `inject_todo_instructions: true` | `inject_todo_instructions` |
| Spawning tools | `can_spawn_agents: true` AND `inject_spawn_instructions: true` | `inject_spawn_instructions` |
| Teammate messaging | Always (all agents) | None (always injected) |
| User interaction | Always (all agents) | None (always injected) |
| Skill discovery hint | `skills_enabled: true` AND `inject_skill_instructions: true` AND effective `enabled_skills` is non-empty | `inject_skill_instructions` |
If you prefer to write your own instructions for a system, set the corresponding `inject_*` flag to `false`
and include your custom instructions in the agent's `instructions` field. The built-in tools will still be
+3
@@ -72,6 +72,9 @@ skills_enabled: true # optional; master switch for skills in `ll
enabled_skills: # optional; the *universe* of skills referenceable by any llm node
- code-review
- git-master
inject_skill_instructions: true # Inject a hint pointing the model at `skill__list`. Defaults to true; suppressed
# automatically when no skills are available.
skill_instructions: null # Custom text for the skill hint (optional; uses the built-in default if omitted).
conversation_starters: # suggested prompts in the UI
- "Research WebAssembly outside of the browser"
variables: # optional; agent variables
+8 -7
@@ -114,13 +114,14 @@ For more information on sessions and how to use them in Coyote, refer to the [se
Coyote lets you build OpenAI GPT-style agents. The following commands let you interact with and manage your agents in
Coyote:
| Command | Description |
|----------------------|-------------------------------------------------------------------|
| `.agent` | Use an agent |
| `.starter` | Display and use conversation starters for the active agent |
| `.edit agent-config` | Open the agent configuration in your preferred text editor |
| `.info agent` | Display information about the active agent |
| `.exit agent` | Leave the active agent |
| Command | Description |
|----------------------|----------------------------------------------------------------------------------------------|
| `.agent` | Use an agent |
| `.starter` | Display and use conversation starters for the active agent |
| `.clear todo` | Clear the todo list and stop auto-continuation (requires `auto_continue: true` on the agent) |
| `.edit agent-config` | Open the agent configuration in your preferred text editor |
| `.info agent` | Display information about the active agent |
| `.exit agent` | Leave the active agent |
![agent](./images/agents/sql.gif)
+22 -8
@@ -227,8 +227,9 @@ have no skill surface. Skills only apply where a model call happens.
## Graph level — the universe
The top-level `skills_enabled` and `enabled_skills` fields in `graph.yaml` work just like they do on a normal agent's
`config.yaml`: they declare the policy ceiling for the whole graph.
The top-level `skills_enabled`, `enabled_skills`, `inject_skill_instructions`, and `skill_instructions` fields in
`graph.yaml` work just like they do on a normal agent's `config.yaml`: they declare the policy ceiling and the
skill-hint behavior for the whole graph.
```yaml
name: coder
@@ -237,6 +238,8 @@ enabled_skills:
- code-review
- git-master
- verification-gates
inject_skill_instructions: true # Inject the skill-discovery hint into every `llm` node's system prompt
skill_instructions: null # Override the built-in hint text (null uses the default)
```
- **`skills_enabled: false`** at the graph level turns skills off for every `llm` node in the graph regardless of
@@ -244,14 +247,19 @@ enabled_skills:
- **`enabled_skills`** at the graph level is the *universe*: the set of skill names any `llm` node in the graph is
allowed to reference in its own `enabled_skills`. The validator rejects per-node entries that aren't in this set at
load time.
- **`inject_skill_instructions`** at the graph level is the agent-layer toggle for the skill-discovery hint.
Defaults to `true`. Suppressed automatically when the effective `enabled_skills` set is empty.
- **`skill_instructions`** at the graph level replaces the built-in hint text with your own wording. Leave `null`
to use the default.
- Omitting `enabled_skills` inherits whatever the role / global cascade resolves to (typically "all visible").
## Per-node: discovery-only on `llm` nodes
`llm` nodes can independently declare `skills_enabled` and `enabled_skills`. The graph-level field gates what's
*allowed* in the graph at all; the node-level field narrows that universe to what *this* node's model can see and
load. Nothing is auto-loaded. The model uses `skill__list` and `skill__load` to bring skills in as it needs them,
matching the rest of Coyote's skill model.
`llm` nodes can independently declare `skills_enabled`, `enabled_skills`, `inject_skill_instructions`, and
`skill_instructions`. The graph-level fields gate what's *allowed* in the graph at all; the node-level fields
narrow that universe to what *this* node's model can see and load, and let you customize the skill-discovery hint
for just that node. Nothing is auto-loaded. The model uses `skill__list` and `skill__load` to bring skills in as
it needs them, matching the rest of Loki's skill model.
```yaml
nodes:
@@ -259,10 +267,12 @@ nodes:
type: llm
prompt: "{{plan_summary}}"
tools: [fs_write, fs_patch, fs_cat]
enabled_skills: # must be a subset of graph-level enabled_skills
enabled_skills: # must be a subset of graph-level enabled_skills
- code-review
- verification-gates
# skills_enabled: false # would disable skills for this node only
# skills_enabled: false # would disable skills for this node only
# inject_skill_instructions: false # would suppress the skill-discovery hint for this node only
# skill_instructions: "..." # would substitue custom hint text for this node only
```
Semantics:
@@ -278,6 +288,10 @@ Semantics:
- **`skills_enabled: false`** at the node level is an off-switch: no `skill__*` meta-tools are exposed and no skills
can be loaded from this node. Useful when one node in an otherwise skill-enabled graph should run with a strict,
narrow context (for example a structured-output extraction step that shouldn't load editorial conventions).
- **Injection cascade.** `inject_skill_instructions` and `skill_instructions` resolve `node > graph > app` (most
specific wins). Setting `inject_skill_instructions: false` on a node suppresses the skill-discovery hint for
just that node; setting `skill_instructions: "..."` substitutes custom hint text for just that node. Both are
optional and inherit the graph-level value when omitted.
- **Skill state carry-over.** Skills the model loads during a node persist into subsequent nodes (they're real
registry insertions, not node-scoped state). If you want a skill to clean up automatically at turn end, mark it
`auto_unload: true` in the skill's own frontmatter.