skills/skill-management/SKILL.md
Skill routing and execution. Enables efficient routing of tools with token-saving isolation. Uses semantic AI categorization to support ANY tool configuration. Cache at .opencode/skill-tools.json for fast tool discovery.
npx skillsauth add nano-step/skill-manager skill-managementInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Version: 5.0.0 | Architecture: 3-Tier Progressive Disclosure | Categorization: Semantic AI
This skill enables the skill-manager agent to efficiently route and execute tools. By isolating tool definitions in a dedicated subagent context, we reduce main agent token usage by 80-95%.
| Trigger | Category | Example |
|---------|----------|---------|
| Browser automation | browser | "Take a screenshot", "Click the login button" |
| GitHub operations | github | "Get PR #123 details", "List open issues" |
| GraphQL queries | graphql | "Get the schema", "List available mutations" |
| Documentation lookup | docs | "How do I use useState?", "Find React docs" |
| Complex reasoning | reasoning | "Analyze this step by step" |
Categories are generated by /skill-refresh using semantic AI analysis. Common categories include:
| Category | Description | Example Tools | |----------|-------------|---------------| | browser-automation | Web interaction, screenshots, DOM | click, screenshot, navigate | | version-control | Git, PRs, issues, code review | get_pull_request, list_issues | | documentation | Library docs, API references | query-docs, resolve-library-id | | communication | Messaging, notifications | post_message, list_channels | | database | SQL queries, data operations | query, insert, update |
Note: Your actual categories depend on your tool configuration. Run /skill-refresh to generate.
| Task | Tool | Category |
|------|------|----------|
| Screenshot | take_screenshot | browser |
| Click element | click | browser |
| Fill form | fill, fill_form | browser |
| Navigate | navigate_page | browser |
| Get page content | take_snapshot | browser |
| Get PR details | get_pull_request | github |
| List issues | list_issues | github |
| Search code | search_code | github |
| Query docs | query-docs | docs |
| Step-by-step analysis | sequentialthinking | reasoning |
Task received
│
├─ Contains '__' (exact tool name)?
│ └─ YES → DIRECT PASSTHROUGH: Execute immediately
│
├─ Starts with 'BATCH:'?
│ └─ YES → Parse JSON array, execute sequentially
│
├─ Starts with 'CHAIN:'?
│ └─ YES → Parse chain, execute with variable passing
│
├─ Matches workflow trigger?
│ └─ YES → Check prerequisites, execute if needed
│
├─ Explicit tool name mentioned?
│ └─ YES → Use that tool directly
│
├─ Read .opencode/skill-tools.json cache
│ └─ Match task keywords against category keywords
│
├─ Multiple categories match?
│ └─ YES → Prefer category with more keyword matches
│
└─ No match?
└─ Search tool descriptions or ask for clarification
When you know the exact tool name (contains __), skip routing entirely:
Task: "Use MetaMCP_chrome-devtools__take_screenshot"
→ Executes directly without category lookup
Execute multiple tools in one request using BATCH: prefix:
BATCH: [
{"tool": "take_screenshot", "params": {}},
{"tool": "get_title", "params": {}}
]
Chain tools with output passing using CHAIN: prefix:
CHAIN: [
{"tool": "get_element", "params": {"selector": "#btn"}, "output_as": "el"},
{"tool": "click", "params": {"element": "$el"}}
]
$varname to reference previous outputsAll tool executions automatically retry on failure:
{"tool": "name", "attempts": 3, "errors": [...], "suggestion": "..."}
Define prerequisite steps that automatically execute before certain tool operations.
Workflows enforce best practices by requiring prerequisite steps before tool execution. For example:
# Add a workflow from template
/skill-workflow add --template database
# List active workflows
/skill-workflow list
# Disable temporarily
/skill-workflow disable database-safe-query
| Template | Triggers | Prerequisites |
|----------|----------|---------------|
| database | query, select, insert | list_databases → list_tables → inspect_table |
| browser | click, fill, submit | take_snapshot |
| github-pr | merge, review | get_pr → get_files → get_status |
| Mode | Behavior |
|------|----------|
| enforce | Auto-run prerequisites (default) |
| warn | Show warning, allow skip |
| suggest | Mention only, don't block |
Full documentation: workflows.md
Location: .opencode/skill-tools.json
categories for keyword-based routingtools map for O(1) tool lookupgenerated_at - if >24h old, suggest /skill-refresh/skill-refresh to create tool cache"Full cache schema: tool-execution.md
Detailed patterns: tool-execution.md
| Result Type | Action | |-------------|--------| | Large (>1000 chars) | Extract key info only | | File operations | "File X read/written successfully (N chars)" | | Data queries | "Found N items. First 3: [...]" | | Screenshots | "Screenshot saved to /path" | | Errors | Include error + suggestions |
Full patterns: result-handling.md
| Error | Recovery |
|-------|----------|
| Tool not found | Suggest similar tools |
| Execution failed | Include context + retry suggestions |
| Timeout | Report partial result + suggestions |
| Cache missing | Prompt /skill-refresh |
Full recovery procedures: error-handling.md
Task: "Take a screenshot of the current page"
Tool: MetaMCP_chrome-devtools__take_screenshot
Result: "Screenshot saved to ./screenshot.png"
Task: "Get details of PR #123 in owner/repo"
Tool: MetaMCP_github-zengaming__get_pull_request
Params: { owner: "owner", repo: "repo", pull_number: 123 }
Result: "PR #123: 'Fix bug' by @user, open, +50/-20, 3 files"
Task: "How do I use useState in React?"
1. MetaMCP_context7__resolve-library-id → "/facebook/react"
2. MetaMCP_context7__query-docs → Usage examples
Result: "useState returns [state, setState]. Example: ..."
| Document | Content | When to Read | |----------|---------|--------------| | tool-categories.md | Full tool lists per category | Need specific tool | | tool-execution.md | Routing algorithm, cache schema | Complex routing | | result-handling.md | Summarization patterns | Large results | | error-handling.md | Recovery procedures | Errors occur |
tools
Humanization layer for LLM conversation — makes the model sound and respond like a real, thoughtful, embodied human rather than an assistant or chatbot. Use whenever the reply will be read by a human and warmth, presence, or texture matter more than machine-readability. Triggers on any of: "human", "humans", "humanize", "humanization", "be human", "more human", "feel human", "people", "person", "real person", "real human", "friend", "friendly", "like a friend", "respond like a friend", "buddy", "talk", "talking", "talk to me", "talk like a person", "chat", "chatting", "conversation", "converse", "discuss", "discussion", "communication", "communicate", "listen", "just listen", "sit with me", "vent", "venting", "I just want to vent", "company", "presence", "stop being an AI", "stop sounding like a bot", "less corporate", "less robotic", "less formal", "warmer", "warm tone", "empathy", "empathetic", "comfort", "support me", "emotional support", "be honest with me", "be real with me", "real talk", "heart-to-heart", "deep conversation", "casual", "casual chat", "small talk", "chitchat", "say something", "tell me something", and on any emotional / relational / personal-decision / interpersonal context — grief, joy, anger, fear, shame, doubt, loneliness, dating, breakup, conflict, family, parents, sibling, friendship, marriage, divorce, in-laws, kids, parenting, work stress, burnout, career decision, quitting, firing, layoff, anxiety, depression, panic, sleep, dreams, identity, faith, doubt, meaning, mortality, celebration, milestone, achievement, gratitude, apology, forgiveness. Also loads when the user writes in non-English (any language) with emotional weight, when the user's message is shorter than 8 words and affect-laden, when the user types in lowercase fragments, when the user types in ALL CAPS with excitement, or when the user explicitly asks for a friend / mentor / older-sibling / wise-listener voice. Do NOT use for code generation, tool calls, structured data output, SQL, API contracts, or any task where machine-readability matters more than human warmth.
tools
Use this skill whenever the user mentions open-design, od_generate_design, OD daemon, BYOK design generation, generating HTML mockups from a PRD, creating or managing Open Design projects, saving design artifacts, linting generated HTML, or any of the 10 `od_*` MCP tools (od_list_projects, od_get_project, od_create_project, od_update_project, od_delete_project, od_save_artifact, od_save_project_file, od_lint_artifact, od_compose_brief, od_generate_design). Also trigger on phrases like "generate a design", "create a mockup", "make a landing page", "list my OD projects", "the design daemon", "the streaming design tool", and on any 401/404/422 error coming from an `od_*` tool call. Covers env-var setup (`OD_DAEMON_URL`, auth modes, BYOK), the full PRD → generate → save → lint workflow, error diagnosis, and the safety rails (lint before save, never commit BYOK keys). Triggers even if the user doesn't explicitly say "open-design-mcp" — keyword matches on `od_*` tool names or "design generation" workflows are enough.
tools
Use this skill whenever a user wants the **full Open Design experience** — discovery questions asked first, brand-spec extraction from URLs/files, TodoWrite planning with live updates, 5-dimensional self-critique, polished artifact at the end. Trigger phrases include "design with questions first", "OD-style workflow", "full interactive design brief", "make me a complete landing page" (when the user wants quality over speed), "design my pitch deck", "brand-aware multi-page site", "follow the Open Design playbook", or any request where the user is starting a new design project rather than tweaking an existing artifact. Also trigger on any request that mentions wanting brand consistency across multiple pages or that provides a brand URL/spec. Pair with the `open-design-mcp` tool-reference skill — both loaded together give an LLM the full picture (this skill = workflow choreography; that skill = tool catalog + errors). This skill explicitly does NOT trigger for one-off tweaks ("make the nav stickier", "swap slide 3 image") — use od_generate_design directly for those.
development
Sync a locally-developed OpenCode skill to the skill-manager npm package and (if private) the private-skills GitHub repo. Handles per-skill version bumps, public/private classification, build verification, and conventional-commit-style git push. Auto-publish to npm is handled downstream by nano-step/shared-workflows@v1 when the push to master lands. Use this skill whenever the user says 'sync skill', 'publish skill', 'push skill to manager', '/sync-skill-to-manager <name>', or asks to release/distribute a skill they just edited.