fix: update documentation to use load_skills instead of skills parameter (#1088)
All documentation, agent prompts, and skill descriptions were still referencing the old 'skills' parameter name for delegate_task, but the tool implementation requires 'load_skills' (renamed in commit aa2b052). This caused confusion and errors for users following the docs. Fixes #1008 Co-authored-by: sisyphus-dev-ai <sisyphus-dev-ai@users.noreply.github.com>
This commit is contained in:
parent
fd72ce5ce7
commit
24d065c43a
@ -70,12 +70,12 @@ A Skill is a mechanism that injects **specialized knowledge (Context)** and **to
|
|||||||
|
|
||||||
### Usage
|
### Usage
|
||||||
|
|
||||||
Add desired skill names to the `skills` array.
|
Add desired skill names to the `load_skills` array.
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
delegate_task(
|
delegate_task(
|
||||||
category="quick",
|
category="quick",
|
||||||
skills=["git-master"],
|
load_skills=["git-master"],
|
||||||
prompt="Commit current changes. Follow commit message style."
|
prompt="Commit current changes. Follow commit message style."
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
@ -110,17 +110,17 @@ You can create powerful specialized agents by combining Categories and Skills.
|
|||||||
|
|
||||||
### 🎨 The Designer (UI Implementation)
|
### 🎨 The Designer (UI Implementation)
|
||||||
- **Category**: `visual-engineering`
|
- **Category**: `visual-engineering`
|
||||||
- **Skills**: `["frontend-ui-ux", "playwright"]`
|
- **load_skills**: `["frontend-ui-ux", "playwright"]`
|
||||||
- **Effect**: Implements aesthetic UI and verifies rendering results directly in browser.
|
- **Effect**: Implements aesthetic UI and verifies rendering results directly in browser.
|
||||||
|
|
||||||
### 🏗️ The Architect (Design Review)
|
### 🏗️ The Architect (Design Review)
|
||||||
- **Category**: `ultrabrain`
|
- **Category**: `ultrabrain`
|
||||||
- **Skills**: `[]` (pure reasoning)
|
- **load_skills**: `[]` (pure reasoning)
|
||||||
- **Effect**: Leverages GPT-5.2's logical reasoning for in-depth system architecture analysis.
|
- **Effect**: Leverages GPT-5.2's logical reasoning for in-depth system architecture analysis.
|
||||||
|
|
||||||
### ⚡ The Maintainer (Quick Fixes)
|
### ⚡ The Maintainer (Quick Fixes)
|
||||||
- **Category**: `quick`
|
- **Category**: `quick`
|
||||||
- **Skills**: `["git-master"]`
|
- **load_skills**: `["git-master"]`
|
||||||
- **Effect**: Uses cost-effective models to quickly fix code and generate clean commits.
|
- **Effect**: Uses cost-effective models to quickly fix code and generate clean commits.
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -131,7 +131,7 @@ When delegating, **clear and specific** prompts are essential. Include these 7 e
|
|||||||
|
|
||||||
1. **TASK**: What needs to be done? (single objective)
|
1. **TASK**: What needs to be done? (single objective)
|
||||||
2. **EXPECTED OUTCOME**: What is the deliverable?
|
2. **EXPECTED OUTCOME**: What is the deliverable?
|
||||||
3. **REQUIRED SKILLS**: Which skills should be used?
|
3. **REQUIRED SKILLS**: Which skills should be loaded via `load_skills`?
|
||||||
4. **REQUIRED TOOLS**: Which tools must be used? (whitelist)
|
4. **REQUIRED TOOLS**: Which tools must be used? (whitelist)
|
||||||
5. **MUST DO**: What must be done (constraints)
|
5. **MUST DO**: What must be done (constraints)
|
||||||
6. **MUST NOT DO**: What must never be done
|
6. **MUST NOT DO**: What must never be done
|
||||||
|
|||||||
@ -160,7 +160,7 @@ Available agents: `oracle`, `librarian`, `explore`, `multimodal-looker`
|
|||||||
Oh My OpenCode includes built-in skills that provide additional capabilities:
|
Oh My OpenCode includes built-in skills that provide additional capabilities:
|
||||||
|
|
||||||
- **playwright**: Browser automation with Playwright MCP. Use for web scraping, testing, screenshots, and browser interactions.
|
- **playwright**: Browser automation with Playwright MCP. Use for web scraping, testing, screenshots, and browser interactions.
|
||||||
- **git-master**: Git expert for atomic commits, rebase/squash, and history search (blame, bisect, log -S). STRONGLY RECOMMENDED: Use with `delegate_task(category='quick', skills=['git-master'], ...)` to save context.
|
- **git-master**: Git expert for atomic commits, rebase/squash, and history search (blame, bisect, log -S). STRONGLY RECOMMENDED: Use with `delegate_task(category='quick', load_skills=['git-master'], ...)` to save context.
|
||||||
|
|
||||||
Disable built-in skills via `disabled_skills` in `~/.config/opencode/oh-my-opencode.json` or `.opencode/oh-my-opencode.json`:
|
Disable built-in skills via `disabled_skills` in `~/.config/opencode/oh-my-opencode.json` or `.opencode/oh-my-opencode.json`:
|
||||||
|
|
||||||
|
|||||||
@ -326,13 +326,13 @@ Skills prepend specialized instructions to subagent prompts:
|
|||||||
// Category + Skill combination
|
// Category + Skill combination
|
||||||
delegate_task(
|
delegate_task(
|
||||||
category="visual-engineering",
|
category="visual-engineering",
|
||||||
skills=["frontend-ui-ux"], // Adds UI/UX expertise
|
load_skills=["frontend-ui-ux"], // Adds UI/UX expertise
|
||||||
prompt="..."
|
prompt="..."
|
||||||
)
|
)
|
||||||
|
|
||||||
delegate_task(
|
delegate_task(
|
||||||
category="general",
|
category="general",
|
||||||
skills=["playwright"], // Adds browser automation expertise
|
load_skills=["playwright"], // Adds browser automation expertise
|
||||||
prompt="..."
|
prompt="..."
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
@ -341,8 +341,8 @@ delegate_task(
|
|||||||
|
|
||||||
| Before | After |
|
| Before | After |
|
||||||
|--------|-------|
|
|--------|-------|
|
||||||
| Hardcoded: `frontend-ui-ux-engineer` (Gemini 3 Pro) | `category="visual-engineering" + skills=["frontend-ui-ux"]` |
|
| Hardcoded: `frontend-ui-ux-engineer` (Gemini 3 Pro) | `category="visual-engineering" + load_skills=["frontend-ui-ux"]` |
|
||||||
| One-size-fits-all | `category="visual-engineering" + skills=["unity-master"]` |
|
| One-size-fits-all | `category="visual-engineering" + load_skills=["unity-master"]` |
|
||||||
| Model bias | Category-based: model abstraction eliminates bias |
|
| Model bias | Category-based: model abstraction eliminates bias |
|
||||||
|
|
||||||
---
|
---
|
||||||
@ -365,7 +365,7 @@ sequenceDiagram
|
|||||||
|
|
||||||
Note over Orchestrator: Prompt Structure:<br/>1. TASK (exact checkbox)<br/>2. EXPECTED OUTCOME<br/>3. REQUIRED SKILLS<br/>4. REQUIRED TOOLS<br/>5. MUST DO<br/>6. MUST NOT DO<br/>7. CONTEXT + Wisdom
|
Note over Orchestrator: Prompt Structure:<br/>1. TASK (exact checkbox)<br/>2. EXPECTED OUTCOME<br/>3. REQUIRED SKILLS<br/>4. REQUIRED TOOLS<br/>5. MUST DO<br/>6. MUST NOT DO<br/>7. CONTEXT + Wisdom
|
||||||
|
|
||||||
Orchestrator->>Junior: delegate_task(category, skills, prompt)
|
Orchestrator->>Junior: delegate_task(category, load_skills, prompt)
|
||||||
|
|
||||||
Junior->>Junior: Create todos, execute
|
Junior->>Junior: Create todos, execute
|
||||||
Junior->>Junior: Verify (lsp_diagnostics, tests)
|
Junior->>Junior: Verify (lsp_diagnostics, tests)
|
||||||
|
|||||||
@ -239,7 +239,7 @@ Ask yourself:
|
|||||||
I will use delegate_task with:
|
I will use delegate_task with:
|
||||||
- **Category**: [selected-category-name]
|
- **Category**: [selected-category-name]
|
||||||
- **Why this category**: [how category description matches task domain]
|
- **Why this category**: [how category description matches task domain]
|
||||||
- **Skills**: [list of selected skills]
|
- **load_skills**: [list of selected skills]
|
||||||
- **Skill evaluation**:
|
- **Skill evaluation**:
|
||||||
- [skill-1]: INCLUDED because [reason based on skill description]
|
- [skill-1]: INCLUDED because [reason based on skill description]
|
||||||
- [skill-2]: OMITTED because [reason why skill domain doesn't apply]
|
- [skill-2]: OMITTED because [reason why skill domain doesn't apply]
|
||||||
@ -256,7 +256,7 @@ I will use delegate_task with:
|
|||||||
I will use delegate_task with:
|
I will use delegate_task with:
|
||||||
- **Category**: [category-name]
|
- **Category**: [category-name]
|
||||||
- **Why this category**: Category description says "[quote description]" which matches this task's requirements
|
- **Why this category**: Category description says "[quote description]" which matches this task's requirements
|
||||||
- **Skills**: ["skill-a", "skill-b"]
|
- **load_skills**: ["skill-a", "skill-b"]
|
||||||
- **Skill evaluation**:
|
- **Skill evaluation**:
|
||||||
- skill-a: INCLUDED - description says "[quote]" which applies to this task
|
- skill-a: INCLUDED - description says "[quote]" which applies to this task
|
||||||
- skill-b: INCLUDED - description says "[quote]" which is needed here
|
- skill-b: INCLUDED - description says "[quote]" which is needed here
|
||||||
@ -265,7 +265,7 @@ I will use delegate_task with:
|
|||||||
|
|
||||||
delegate_task(
|
delegate_task(
|
||||||
category="[category-name]",
|
category="[category-name]",
|
||||||
skills=["skill-a", "skill-b"],
|
load_skills=["skill-a", "skill-b"],
|
||||||
prompt="..."
|
prompt="..."
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
@ -276,12 +276,12 @@ delegate_task(
|
|||||||
I will use delegate_task with:
|
I will use delegate_task with:
|
||||||
- **Agent**: [agent-name]
|
- **Agent**: [agent-name]
|
||||||
- **Reason**: This requires [agent's specialty] based on agent description
|
- **Reason**: This requires [agent's specialty] based on agent description
|
||||||
- **Skills**: [] (agents have built-in expertise)
|
- **load_skills**: [] (agents have built-in expertise)
|
||||||
- **Expected Outcome**: [what agent should return]
|
- **Expected Outcome**: [what agent should return]
|
||||||
|
|
||||||
delegate_task(
|
delegate_task(
|
||||||
subagent_type="[agent-name]",
|
subagent_type="[agent-name]",
|
||||||
skills=[],
|
load_skills=[],
|
||||||
prompt="..."
|
prompt="..."
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
@ -292,13 +292,13 @@ delegate_task(
|
|||||||
I will use delegate_task with:
|
I will use delegate_task with:
|
||||||
- **Agent**: explore
|
- **Agent**: explore
|
||||||
- **Reason**: Need to find all authentication implementations across the codebase - this is contextual grep
|
- **Reason**: Need to find all authentication implementations across the codebase - this is contextual grep
|
||||||
- **Skills**: []
|
- **load_skills**: []
|
||||||
- **Expected Outcome**: List of files containing auth patterns
|
- **Expected Outcome**: List of files containing auth patterns
|
||||||
|
|
||||||
delegate_task(
|
delegate_task(
|
||||||
subagent_type="explore",
|
subagent_type="explore",
|
||||||
run_in_background=true,
|
run_in_background=true,
|
||||||
skills=[],
|
load_skills=[],
|
||||||
prompt="Find all authentication implementations in the codebase"
|
prompt="Find all authentication implementations in the codebase"
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
@ -306,7 +306,7 @@ delegate_task(
|
|||||||
**WRONG: No Skill Evaluation**
|
**WRONG: No Skill Evaluation**
|
||||||
|
|
||||||
```
|
```
|
||||||
delegate_task(category="...", skills=[], prompt="...") // Where's the justification?
|
delegate_task(category="...", load_skills=[], prompt="...") // Where's the justification?
|
||||||
```
|
```
|
||||||
|
|
||||||
**WRONG: Vague Category Selection**
|
**WRONG: Vague Category Selection**
|
||||||
@ -329,11 +329,11 @@ I'll use this category because it seems right.
|
|||||||
```typescript
|
```typescript
|
||||||
// CORRECT: Always background, always parallel
|
// CORRECT: Always background, always parallel
|
||||||
// Contextual Grep (internal)
|
// Contextual Grep (internal)
|
||||||
delegate_task(subagent_type="explore", run_in_background=true, skills=[], prompt="Find auth implementations in our codebase...")
|
delegate_task(subagent_type="explore", run_in_background=true, load_skills=[], prompt="Find auth implementations in our codebase...")
|
||||||
delegate_task(subagent_type="explore", run_in_background=true, skills=[], prompt="Find error handling patterns here...")
|
delegate_task(subagent_type="explore", run_in_background=true, load_skills=[], prompt="Find error handling patterns here...")
|
||||||
// Reference Grep (external)
|
// Reference Grep (external)
|
||||||
delegate_task(subagent_type="librarian", run_in_background=true, skills=[], prompt="Find JWT best practices in official docs...")
|
delegate_task(subagent_type="librarian", run_in_background=true, load_skills=[], prompt="Find JWT best practices in official docs...")
|
||||||
delegate_task(subagent_type="librarian", run_in_background=true, skills=[], prompt="Find how production apps handle auth in Express...")
|
delegate_task(subagent_type="librarian", run_in_background=true, load_skills=[], prompt="Find how production apps handle auth in Express...")
|
||||||
// Continue working immediately. Collect with background_output when needed.
|
// Continue working immediately. Collect with background_output when needed.
|
||||||
|
|
||||||
// WRONG: Sequential or blocking
|
// WRONG: Sequential or blocking
|
||||||
@ -416,7 +416,7 @@ Skills inject specialized instructions into the subagent. Read the description t
|
|||||||
For EVERY skill listed above, ask yourself:
|
For EVERY skill listed above, ask yourself:
|
||||||
> "Does this skill's expertise domain overlap with my task?"
|
> "Does this skill's expertise domain overlap with my task?"
|
||||||
|
|
||||||
- If YES → INCLUDE in `skills=[...]`
|
- If YES → INCLUDE in `load_skills=[...]`
|
||||||
- If NO → You MUST justify why (see below)
|
- If NO → You MUST justify why (see below)
|
||||||
|
|
||||||
**STEP 3: Justify Omissions**
|
**STEP 3: Justify Omissions**
|
||||||
@ -444,14 +444,14 @@ SKILL EVALUATION for "[skill-name]":
|
|||||||
```typescript
|
```typescript
|
||||||
delegate_task(
|
delegate_task(
|
||||||
category="[selected-category]",
|
category="[selected-category]",
|
||||||
skills=["skill-1", "skill-2"], // Include ALL relevant skills
|
load_skills=["skill-1", "skill-2"], // Include ALL relevant skills
|
||||||
prompt="..."
|
prompt="..."
|
||||||
)
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
**ANTI-PATTERN (will produce poor results):**
|
**ANTI-PATTERN (will produce poor results):**
|
||||||
```typescript
|
```typescript
|
||||||
delegate_task(category="...", skills=[], prompt="...") // Empty skills without justification
|
delegate_task(category="...", load_skills=[], prompt="...") // Empty load_skills without justification
|
||||||
```
|
```
|
||||||
### Delegation Table:
|
### Delegation Table:
|
||||||
|
|
||||||
@ -724,7 +724,7 @@ If the user's approach seems problematic:
|
|||||||
| **Error Handling** | Empty catch blocks `catch(e) {}` |
|
| **Error Handling** | Empty catch blocks `catch(e) {}` |
|
||||||
| **Testing** | Deleting failing tests to "pass" |
|
| **Testing** | Deleting failing tests to "pass" |
|
||||||
| **Search** | Firing agents for single-line typos or obvious syntax errors |
|
| **Search** | Firing agents for single-line typos or obvious syntax errors |
|
||||||
| **Delegation** | Using `skills=[]` without justifying why no skills apply |
|
| **Delegation** | Using `load_skills=[]` without justifying why no skills apply |
|
||||||
| **Debugging** | Shotgun debugging, random changes |
|
| **Debugging** | Shotgun debugging, random changes |
|
||||||
## Soft Guidelines
|
## Soft Guidelines
|
||||||
|
|
||||||
|
|||||||
@ -58,7 +58,7 @@ Categories spawn \`Sisyphus-Junior-{category}\` with optimized settings:
|
|||||||
${categoryRows.join("\n")}
|
${categoryRows.join("\n")}
|
||||||
|
|
||||||
\`\`\`typescript
|
\`\`\`typescript
|
||||||
delegate_task(category="[category-name]", skills=[...], prompt="...")
|
delegate_task(category="[category-name]", load_skills=[...], prompt="...")
|
||||||
\`\`\``
|
\`\`\``
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,12 +84,12 @@ ${skillRows.join("\n")}
|
|||||||
**MANDATORY: Evaluate ALL skills for relevance to your task.**
|
**MANDATORY: Evaluate ALL skills for relevance to your task.**
|
||||||
|
|
||||||
Read each skill's description and ask: "Does this skill's domain overlap with my task?"
|
Read each skill's description and ask: "Does this skill's domain overlap with my task?"
|
||||||
- If YES: INCLUDE in skills=[...]
|
- If YES: INCLUDE in load_skills=[...]
|
||||||
- If NO: You MUST justify why in your pre-delegation declaration
|
- If NO: You MUST justify why in your pre-delegation declaration
|
||||||
|
|
||||||
**Usage:**
|
**Usage:**
|
||||||
\`\`\`typescript
|
\`\`\`typescript
|
||||||
delegate_task(category="[category]", skills=["skill-1", "skill-2"], prompt="...")
|
delegate_task(category="[category]", load_skills=["skill-1", "skill-2"], prompt="...")
|
||||||
\`\`\`
|
\`\`\`
|
||||||
|
|
||||||
**IMPORTANT:**
|
**IMPORTANT:**
|
||||||
@ -102,7 +102,7 @@ function buildDecisionMatrix(agents: AvailableAgent[], userCategories?: Record<s
|
|||||||
const allCategories = { ...DEFAULT_CATEGORIES, ...userCategories }
|
const allCategories = { ...DEFAULT_CATEGORIES, ...userCategories }
|
||||||
|
|
||||||
const categoryRows = Object.entries(allCategories).map(([name]) =>
|
const categoryRows = Object.entries(allCategories).map(([name]) =>
|
||||||
`| ${getCategoryDescription(name, userCategories)} | \`category="${name}", skills=[...]\` |`
|
`| ${getCategoryDescription(name, userCategories)} | \`category="${name}", load_skills=[...]\` |`
|
||||||
)
|
)
|
||||||
|
|
||||||
const agentRows = agents.map((a) => {
|
const agentRows = agents.map((a) => {
|
||||||
|
|||||||
@ -144,11 +144,11 @@ ${librarianSection}
|
|||||||
\`\`\`typescript
|
\`\`\`typescript
|
||||||
// CORRECT: Always background, always parallel
|
// CORRECT: Always background, always parallel
|
||||||
// Contextual Grep (internal)
|
// Contextual Grep (internal)
|
||||||
delegate_task(subagent_type="explore", run_in_background=true, skills=[], prompt="Find auth implementations in our codebase...")
|
delegate_task(subagent_type="explore", run_in_background=true, load_skills=[], prompt="Find auth implementations in our codebase...")
|
||||||
delegate_task(subagent_type="explore", run_in_background=true, skills=[], prompt="Find error handling patterns here...")
|
delegate_task(subagent_type="explore", run_in_background=true, load_skills=[], prompt="Find error handling patterns here...")
|
||||||
// Reference Grep (external)
|
// Reference Grep (external)
|
||||||
delegate_task(subagent_type="librarian", run_in_background=true, skills=[], prompt="Find JWT best practices in official docs...")
|
delegate_task(subagent_type="librarian", run_in_background=true, load_skills=[], prompt="Find JWT best practices in official docs...")
|
||||||
delegate_task(subagent_type="librarian", run_in_background=true, skills=[], prompt="Find how production apps handle auth in Express...")
|
delegate_task(subagent_type="librarian", run_in_background=true, load_skills=[], prompt="Find how production apps handle auth in Express...")
|
||||||
// Continue working immediately. Collect with background_output when needed.
|
// Continue working immediately. Collect with background_output when needed.
|
||||||
|
|
||||||
// WRONG: Sequential or blocking
|
// WRONG: Sequential or blocking
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
name: git-master
|
name: git-master
|
||||||
description: "MUST USE for ANY git operations. Atomic commits, rebase/squash, history search (blame, bisect, log -S). STRONGLY RECOMMENDED: Use with delegate_task(category='quick', skills=['git-master'], ...) to save context. Triggers: 'commit', 'rebase', 'squash', 'who wrote', 'when was X added', 'find the commit that'."
|
description: "MUST USE for ANY git operations. Atomic commits, rebase/squash, history search (blame, bisect, log -S). STRONGLY RECOMMENDED: Use with delegate_task(category='quick', load_skills=['git-master'], ...) to save context. Triggers: 'commit', 'rebase', 'squash', 'who wrote', 'when was X added', 'find the commit that'."
|
||||||
---
|
---
|
||||||
|
|
||||||
# Git Master Agent
|
# Git Master Agent
|
||||||
|
|||||||
@ -95,7 +95,7 @@ Interpret creatively and make unexpected choices that feel genuinely designed fo
|
|||||||
const gitMasterSkill: BuiltinSkill = {
|
const gitMasterSkill: BuiltinSkill = {
|
||||||
name: "git-master",
|
name: "git-master",
|
||||||
description:
|
description:
|
||||||
"MUST USE for ANY git operations. Atomic commits, rebase/squash, history search (blame, bisect, log -S). STRONGLY RECOMMENDED: Use with delegate_task(category='quick', skills=['git-master'], ...) to save context. Triggers: 'commit', 'rebase', 'squash', 'who wrote', 'when was X added', 'find the commit that'.",
|
"MUST USE for ANY git operations. Atomic commits, rebase/squash, history search (blame, bisect, log -S). STRONGLY RECOMMENDED: Use with delegate_task(category='quick', load_skills=['git-master'], ...) to save context. Triggers: 'commit', 'rebase', 'squash', 'who wrote', 'when was X added', 'find the commit that'.",
|
||||||
template: `# Git Master Agent
|
template: `# Git Master Agent
|
||||||
|
|
||||||
You are a Git expert combining three specializations:
|
You are a Git expert combining three specializations:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user