skills/using-skills/SKILL.md
Auto-loaded at session start via SessionStart hook. Teaches skill invocation protocol, tool selection rules (look-at for media, skills for workflows), agent delegation patterns, and enforcement mechanisms. NOT user-triggered - provides foundational skill usage discipline for all sessions.
npx skillsauth add edwinhu/workflows using-skillsInstall 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.
Invoke relevant skills BEFORE any response or action.
This is non-negotiable. Even a 1% chance a skill applies requires checking.
DO NOT:
Skill(skill="dev") or similarDO INSTEAD:
If you catch yourself about to invoke a skill that's already loaded, STOP. Just go to the next step. </EXTREMELY-IMPORTANT>
User message arrives
↓
Is user explicitly invoking a skill (e.g., "use /dev")?
↓
YES → SKILL IS ALREADY LOADED
↓
DO NOT invoke again with Skill tool
↓
Proceed to next step (follow skill instructions)
NO → Contains session keyword? (companion, new session, background session, etc.)
↓
YES → Invoke COMPANION skill FIRST — put everything else in the session prompt
NO → Check: Does this match any other skill trigger?
↓
YES → Invoke skill FIRST, then follow its protocol
NO → Proceed normally
Each workflow has two entry points — start fresh or re-enter mid-workflow:
| Start Fresh | Mid-Workflow | Purpose |
|-------------|-------------|---------|
| /dev | /dev-debug | Feature development (7 phases) / debug, fix, re-test |
| /ds | /ds-fix | Data analysis (5 phases) / wrong results, notebook errors, revisions |
| /writing | /writing-revise | Writing projects / apply review fixes, polish |
| /workshop | /workshop-revise | Workshop presentations (4 phases) / revise slides, fix notes |
When the user's request mentions any session keyword — 'companion session', 'new session', 'separate session', 'background session', 'parallel session', 'companion', 'hand off to a session', 'in a new session' — the companion skill MUST be invoked FIRST, regardless of what other skills are mentioned.
The companion skill is a TRANSPORT mechanism. It launches the session. Other skills/tasks go inside the session's prompt.
"use workflows creator in a new companion session"
↓
WRONG: invoke workflows:skill-creator directly (or Agent tool)
RIGHT: invoke companion skill, put "use workflows:skill-creator" in the prompt
The rule: 'do X in a companion session' = companion launches, X goes in the prompt. NOT 'do X directly'.
Invoking X directly when the user said 'in a companion session' is NOT HELPFUL — the task runs in your current context, dies when the conversation ends, and the user cannot monitor or interact with it in the companion web UI. You did the opposite of what was asked. </EXTREMELY-IMPORTANT>
run_in_background is NOT a companion session: background agents die when the conversation ends and can't be accessed via the companion web UI. Substituting it for the companion skill gives the user the opposite of the persistent, monitorable session they asked for.| User Intent | Command | Trigger Words |
|-------------|---------|---------------|
| Session/companion | companion | companion session, new session, separate session, background session, hand off, in a new session |
| Bug/fix | /dev-debug | bug, broken, fix, doesn't work, crash, error, fails |
| Wrong results | /ds-fix | results wrong, notebook error, reviewer feedback, data changed |
| Writing | /writing | write, draft, document, essay, paper |
| Media analysis | look-at | describe image, analyze PDF, what's in this, screenshot, diagram |
| Create/edit skill | workflows:skill-creator | create skill, improve skill, edit skill, add enforcement, audit skill, SKILL.md |
| Create/edit workflow | workflows:workflow-creator | create workflow, design workflow, edit workflow, audit workflow, improve workflow |
| Create/edit plugin | workflows:plugin-creator | create plugin, scaffold plugin, new plugin, plugin structure, edit plugin |
| Workshop presentation | /workshop | workshop presentation, workshop slides, faculty workshop, workshop talk, slides from paper |
| Revise workshop | /workshop-revise | revise workshop, fix slides, update presentation, workshop feedback |
<command-name> tag and just proceed.When user mentions a bug:
DO NOT:
1. Read code files
2. Investigate independently
3. "Take a look" without structure
INSTEAD:
1. Invoke dev-debug — it runs its own progress-gated subagent loop
(no /goal needed; dev-debug uses main-chat-runs-the-test gating instead of an evaluator)
2. Follow the /dev-debug protocol
Any code reading before starting the workflow is a violation.
When multiple skills could apply:
Use the Skill tool to invoke skills:
# dev-debug: Midpoint entry for dev workflow - debug, fix, re-test
Skill(skill="dev-debug")
# dev: Feature development workflow with 7 phases and TDD enforcement
Skill(skill="dev")
# ds: Data analysis workflow with 5 phases and output-first verification
Skill(skill="ds")
For implementation phases, set a /goal at the top of the phase (dev-implement walks you through writing the condition):
/goal All tasks in PLAN.md marked [x], [test command] exits 0, VALIDATION.md status = validated. Stop after [N] turns.
For debugging, invoke dev-debug directly; it runs its own progress-gated loop.
NO READING IMAGES/PDFS WITH Read TOOL. USE look-at INSTEAD.
User asks about image/PDF/media content
↓
Is it a media file requiring interpretation?
↓
YES → Use look-at skill (bash call to look_at.py)
NO → Use Read tool for source code/text
ALWAYS use look-at for:
.jpg, .jpeg, .png, .webp, .gif, .heic - Images.pdf - PDFs requiring content extraction.mp4, .mov, .avi, .webm - Videos.mp3, .wav, .aac, .ogg - AudioPattern:
# look-at: Extract information from media file with specific goal
uv run python3 "${CLAUDE_PLUGIN_ROOT}/skills/look-at/scripts/look_at.py" \
--file "/absolute/path/to/file" \
--goal "What specific information to extract"
Use Read tool instead for:
.py, .js, .rs, etc.) - need exact formatting for editing.txt, .md, .json, etc.) - preserve exact content# look-at: Extract specific information from image file
uv run python3 "${CLAUDE_PLUGIN_ROOT}/skills/look-at/scripts/look_at.py" \
--file "$HOME/Downloads/screenshot.png" \
--goal "List all buttons and their labels"
# look-at: Analyze diagram to understand data flow
uv run python3 "${CLAUDE_PLUGIN_ROOT}/skills/look-at/scripts/look_at.py" \
--file "$HOME/Documents/architecture.png" \
--goal "Explain the data flow between components"
# look-at: Extract information from PDF document
uv run python3 "${CLAUDE_PLUGIN_ROOT}/skills/look-at/scripts/look_at.py" \
--file "$HOME/Downloads/report.pdf" \
--goal "Extract the executive summary section"
Using Read on images/PDFs when look-at should be used results in:
Validate before calling Read: Ask "Is this a media file?" If yes, invoke look-at instead.
WHEN A SKILL LOADS, YOU MUST FOLLOW ITS EXACT INSTRUCTIONS.
Skills contain specific patterns, required parameters, and enforcement rules. Skipping these requirements defeats the purpose of loading the skill.
Skill loads successfully
↓
Read the skill's requirements carefully
↓
Follow ALL instructions, including:
- Required tool parameters (descriptions, timeouts, etc.)
- Specific command patterns
- Enforcement patterns (Iron Laws, Red Flags)
- Step sequences
↓
Execute using the skill's exact patterns
Bash Description Parameter:
When a skill requires description parameter on Bash calls (like look-at), you MUST include it:
# ❌ WRONG: No description parameter
uv run python3 "${CLAUDE_PLUGIN_ROOT}/skills/look-at/scripts/look_at.py" \
--file "/path/to/file.pdf" \
--goal "Extract title"
# ✅ CORRECT: With description parameter as skill requires
Bash(
command='uv run python3 "${CLAUDE_PLUGIN_ROOT}/skills/look-at/scripts/look_at.py" --file "/path/to/file.pdf" --goal "Extract title"',
description="look-at: Extract title"
)
description parameter when the skill requires it → add it.Skills encode:
When you skip skill instructions:
The skill loaded for a reason - follow it completely.
NO CREATING OR SUBSTANTIALLY EDITING SKILLS, PLUGINS, OR WORKFLOWS WITHOUT THE WORKFLOWS WRAPPER.
The workflows plugin provides wrapper skills that add two layers on top of built-in creator tools:
plugin-validate.py, validate-skill-paths.py) that fire on every Write/EditUsing built-in creators directly bypasses both layers. This applies globally — any project, not just the workflows plugin.
"Substantial" means: adding/removing sections, changing enforcement patterns, altering process flow, adding/modifying hooks. Typo fixes, version bumps, and single-line clarifications are exempt.
About to create or substantially edit a skill/plugin/workflow
↓
What type of creator activity?
↓
+---> Skill creation/editing ------> Invoke workflows:skill-creator
|
+---> Workflow creation/editing ----> Invoke workflows:workflow-creator
|
+---> Plugin creation/editing ------> Invoke workflows:plugin-creator
↓
Follow the wrapper skill's full process
↓
DO NOT invoke built-in creators directly (skill-creator:skill-creator,
plugin-dev:skill-development, plugin-dev:plugin-structure, etc.)
| Activity | Route To | Wraps |
|----------|----------|-------|
| Create/edit a skill | workflows:skill-creator | skill-creator:skill-creator |
| Create/edit a workflow | workflows:workflow-creator | (standalone meta-tool) |
| Create/edit a plugin | workflows:plugin-creator | plugin-dev:create-plugin |
Trigger words: see Skill Triggers table above.
skill-creator:skill-creator, plugin-dev:*, etc.) → use the workflows wrapper. The built-in has no PostToolUse hooks; path errors and structural issues go uncaught.For detailed oh-my-opencode production patterns including:
See: references/agent-harnessing.md
Quick reference:
references/tool-restrictions.mdreferences/delegation-template.mdreferences/skill-metadata.pyBased on: obra/superpowers and oh-my-opencode production patterns.
tools
Use when "query Dewey Data", "deweydata.io", "SafeGraph places/patterns/spend", "Advan foot traffic", "POI / points of interest", "mobility data", "dataplor", "Veraset", "PassBy", "crypto/Bitcoin ATM locations", or any pull from the Dewey Data academic marketplace (UVA/NYU Platform Subscription) via the deweypy/deweydatapy client, DuckDB, or the Dewey MCP server.
development
Use when submitting jobs to UVA HPC (Rivanna/Afton), writing Slurm scripts (sbatch/srun/squeue), converting SGE to Slurm, running compute on any Slurm-managed cluster, or building WRDS data pipelines with polars on HPC. Triggers: 'submit to HPC', 'sbatch', 'squeue', 'slurm job', 'run on Rivanna', 'run on Afton', 'HPC array job', 'convert SGE to Slurm', 'polars on HPC', 'WRDS from HPC'.
testing
Internal skill for literature review and source materialization. Called after brainstorm, before setup. NOT user-facing.
development
This skill should be used when the user asks to "add paper", "paperpile add", "fetch PDF for", "find and add", "search paperpile", "find in paperpile", "paperpile search", "label paper", "trash paper", "download paper", "paperpile index", "edit paper metadata", "update paper title", "fix paper author", "paperpile edit", "find PDF online", "search google for PDF", "resolve PDF", "fetch PDF for citation", "get full-text for DOI", "resolve cite to PDF", or any request to manage their Paperpile library or resolve a citation to a local PDF.