playbook/outfitter-agents/plugins/outfitter/skills/skills-dev/references/invocations.md

224 lines
6.5 KiB
Markdown

# Skills Invocations
How each tool activates and invokes skills.
## Invocation Patterns Overview
| Tool | Pattern | Description |
| ------ | --------- | ------------- |
| Claude Code | Model-invoked | Agent autonomously decides based on request + description |
| Claude (claude.ai) | Auto + Model | Pre-built skills auto-activate; custom skills when relevant |
| GitHub Copilot | Model-invoked | Based on prompt + skill description |
| VS Code (Copilot) | Model-invoked | Auto-activates, follows progressive disclosure |
| OpenAI Codex | Explicit + Implicit | `/skills` command or `$skill` mentions, or model decides |
| Cursor | Model-invoked | Agent determines relevance automatically |
| Amp | Lazy-loaded | On-demand loading when relevant |
| Letta | Tool-based | Agent calls `Skill` tool to load into memory |
| Goose | Model-invoked | Loads skills, accesses files via file tools |
| OpenCode | Tool-based | Skills registered as dynamic tools via plugin |
## Detailed Invocation Methods
### Claude Code
**Type:** Model-invoked (autonomous)
Claude autonomously decides to use skills based on:
- Current request context
- Skill `name` and `description` from frontmatter
**Contrast with slash commands:**
- Skills = model-invoked (agent decides)
- Slash commands = user-invoked (explicit)
---
### Claude (claude.ai)
**Type:** Automatic + Model-invoked
- **Pre-built skills** (document actions): Activate automatically
- **Custom skills**: Load when model determines relevance
---
### GitHub Copilot
**Type:** Model-invoked
Copilot decides activation based on:
- User's prompt content
- Skill `description` field
When activated:
- `SKILL.md` content injected into agent context
---
### VS Code (Copilot)
**Type:** Model-invoked (auto-activation)
- No manual skill selection required
- Follows progressive disclosure pattern
- Model determines when skills are relevant
---
### OpenAI Codex
**Type:** Explicit + Implicit
**Explicit invocation:**
- `/skills` slash command — Opens skill selector
- `$<skill-name>` mention — Reference specific skill in prompt (e.g., `$plan`, `$skill-creator`)
**Implicit invocation:**
- Codex decides based on skill descriptions
- Automatic activation when task matches skill description
**Surface support:**
- CLI and IDE extensions support explicit invocation
- Web and iOS don't support explicit invocation yet (but can prompt Codex to use repo skills)
**Built-in skills:**
- `$plan` — Research and create implementation plans
- `$skill-creator` — Bootstrap new skills
- `$skill-installer` — Download skills from GitHub
---
### Cursor
**Type:** Model-invoked ("agent-decided rules")
- Agent determines relevance automatically
- No manual intervention required
- Skills applied without user selection
**Constraint:** Skills cannot be configured as "always apply" or manually invoked — agent-decided only.
---
### Amp
**Type:** Lazy-loaded
- Skills loaded on-demand when relevant
- Described as "lazy-loaded instructions"
- No explicit invocation required
---
### Letta (Letta Code)
**Type:** Tool-based
**Model invocation:**
- Agent calls the **`Skill` tool** to load skills into memory
- Agent decides when to load based on context
- Skill tool commands: `load`, `unload`, `refresh`
**Explicit invocation:**
- Prompt: "Use the testing skill..." to force specific skill
- `/skill` command: Extract new skill from recent work
**Memory integration (Two Blocks):**
- **`skills` block**: Always visible — list of available skills (names + descriptions)
- **`loaded_skills` block**: Session state — full content of currently loaded skills
- Both blocks are read-only (modified only via Skill tool)
**Alternative access:**
- Can read `.skills/<name>/SKILL.md` directly for one-time preview (without loading)
---
### Goose
**Type:** Model-invoked
- Loads skills when relevant
- Accesses supporting files via file tools
- Treats skills as filesystem resources
---
### OpenCode
**Type:** Tool-based
- `opencode-skills` plugin registers skills as **dynamic tools**
- Skills become tool-like affordances
- Agent invokes skills as it would any other tool
## Invocation Pattern Comparison
### Model-Invoked (Autonomous)
The agent decides when to use skills without explicit user action.
**Pros:**
- Seamless user experience
- Agent can combine skills as needed
- No learning curve for users
**Cons:**
- Less predictable
- May miss relevant skills
- User has less control
**Tools:** Claude Code, Claude, GitHub Copilot, VS Code, Cursor, Amp, Goose
### Explicit Invocation
User directly requests skill usage via commands or mentions.
**Pros:**
- Predictable behavior
- User maintains control
- Clear audit trail
**Cons:**
- Requires user to know available skills
- More friction
- May miss opportunities
**Tools:** OpenAI Codex (`$skill`, `/skills`)
### Tool-Based
Skills are exposed as tools the agent can call programmatically.
**Pros:**
- Fits existing tool-use patterns
- Clear invocation semantics
- Integrates with agent memory
**Cons:**
- Requires tool infrastructure
- More complex implementation
**Tools:** Letta, OpenCode
## Progressive Disclosure in Invocation
Most tools follow a staged loading pattern:
```text
┌─────────────────────────────────────────────────────────────┐
│ Stage 1: Index │
│ Load: name, description │
│ When: Startup / cache refresh │
├─────────────────────────────────────────────────────────────┤
│ Stage 2: Activate │
│ Load: Full SKILL.md body │
│ When: Agent decides skill is relevant │
├─────────────────────────────────────────────────────────────┤
│ Stage 3: Execute │
│ Load: scripts/, references/, assets/ │
│ When: Skill instructions reference them │
└─────────────────────────────────────────────────────────────┘
```
This minimizes context usage while maintaining full capability access.