Skill Creator
Alex YangCommunityCreated by Alex Yang
- Skill
- Meta (authoring, orchestration, planning, memory)
- Agent tooling
- MIT
- Low risk
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
Skill-creator provides a structured lifecycle for agent skill development, covering planning, implementation, and quality assurance. It emphasizes a philosophy of precision, advocating for clear goal-oriented instructions over rigid scripting. The skill includes a robust rubric for evaluating performance, patterns for dynamic tool detection, and architectural templates to ensure skills are maintainable, robust, and user-friendly.
What it does
- Scaffolds new skills using proven architectural patterns like Linear, Router, and Methodology.
- Provides a 10-dimension quality rubric to score and benchmark existing skills.
- Guides the creation of dynamic detection flows for external tools and dependencies.
- Facilitates the conversion of repetitive manual workflows into automated agent skills.
- Offers structured advice on balancing inline instructions with external reference files.
- Supports iterative improvement of existing skills through gap analysis and scorecard reporting.
When to use it
- When you need to build a new agent skill from scratch.
- When an existing skill is underperforming or failing to meet quality standards.
- When you want to audit a skill's design against production-grade best practices.
- When you need to transform a manual, multi-step process into a reliable agentic workflow.
Advantages
- Promotes consistent, high-quality skill design across different domains.
- Reduces agent fragility by enforcing runtime environment detection.
- Improves maintainability by separating complex logic into reference files.
- Provides objective metrics for evaluating skill effectiveness.
- Encourages clear, concise instruction sets that leverage model reasoning.
Usage examples
- “I keep manually checking stock correlations in Excel. Can you turn this into a skill?”
- The agent will initiate the 'Create' mode, gathering requirements to build a structured skill that automates data fetching, correlation analysis, and reporting.
- “Evaluate my current 'data-scraper' skill and tell me why it's failing.”
- The agent will perform a 'Evaluate' mode analysis, scoring the skill against the 10-dimension rubric and providing a prioritized list of improvements.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/himself65/skill-creator/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip skill-creator.zip -d .agents/skills
Documentation by Alex Yang
Skill Creator
Create, evaluate, and iterate on high-quality agent skills. This skill covers the whole lifecycle: planning what the skill should do, writing SKILL.md and reference files, scoring quality against a rubric, and iterating until the skill meets production standards.
Philosophy: A great skill is precise, not long. Its description routes the right requests to it. Its body gives the model the context it can't get anywhere else — the environment, tool contracts, defaults, domain judgment, and the reasons behind each constraint — and leaves out what a capable model already does on its own. Current Claude models follow instructions closely and literally, so every line gets acted on: an over-scripted or shouting skill produces rigid, over-cautious output, while a clear goal and quality bar let the model plan the work itself. references/writing-guide.md covers this in detail.
Runtime adaptation: Skills that touch external tools should detect what is installed, authenticated, and reachable at runtime and adapt, rather than assuming a single method. Offer fallback paths where real alternatives exist. See references/dynamic-calling.md for the pattern catalog.
Step 1: Understand What the User Wants
Classify the request into one of these modes:
| User Intent | Mode | Jump To |
|---|---|---|
| Create a brand-new skill | Create | Step 2 |
| Improve / fix an existing skill | Improve | Step 6 |
| Evaluate / score a skill's quality | Evaluate | Step 7 |
If ambiguous, ask: "Do you want to create a new skill, improve an existing one, or evaluate one?"
Gather Requirements (for Create mode)
Before writing anything, answer these questions (ask the user if unclear):
| Question | Why it matters |
|---|---|
| What task does the skill automate? | Defines the core workflow |
| Who is the target user? | Determines complexity and terminology level |
| What tools/APIs/CLIs does it use? | Determines dependencies and platform restrictions |
| What does the user provide as input? | Defines parameters and defaults |
| What should the output look like? | Defines the output contract |
| Does it need API keys or credentials? | Determines required_environment_variables |
| Should it work on Claude.ai or only CLI? | Determines platform field and dynamic commands |
Step 2: Plan the Skill Architecture
Before writing SKILL.md, plan the structure. Read references/architecture-patterns.md for detailed guidance on each pattern.
Choose a Structural Pattern
| Pattern | When to use | Shape | Example |
|---|---|---|---|
| Linear | Single workflow, no branching | Setup → fetch → analyze → respond | earnings-preview |
| Router | Multiple sub-tasks under one umbrella | Setup + routing table + sub-skills | stock-correlation (4 sub-skills), etf-premium |
| Methodology | Formal domain framework with real gates | Ordered checks, each able to stop the analysis | sepa-strategy |
| Widget | Generates interactive UI output | Extract → compute → render → explain | options-payoff |
| API Wrapper | Wraps an external API with many endpoints | Auth + endpoint map + heavy references | fintel-data |
Plan the Outline
Every skill has three parts:
Setup / detection — detect available tools, auth state, and runtime environment, and decide which method to use. Skills with no external dependencies can skip this.
The work — numbered steps where the order genuinely matters (fetch before compute, a gate that can end the analysis), plus the judgment the model has to exercise, stated as goals, criteria, and domain heuristics rather than a script.
Respond to the user — the output contract: what the answer leads with, what it must contain, which caveats apply, and any verdict scale.
If a skill needs more than about nine steps, split it or use the Router pattern.
Plan the Detection Flow
Skills that touch external tools should start with a runtime detection flow. Read references/dynamic-calling.md for all patterns. The detection flow answers:
| Question | How to detect | Decision |
|---|---|---|
| Is the CLI tool installed? | command -v tool | CLI path vs Python fallback |
| Is the user authenticated? | tool auth status / echo $API_KEY | Skip auth setup vs guide through it |
| Which runtime has the library? | import lib in terminal vs execute_code | Route to correct runtime |
| Is a richer tool available? | gh --version vs git --version | Rich path vs minimal path |
| Is live data reachable? | curl -s endpoint | Live data vs cached/default |
The detection output feeds a decision tree that the rest of the skill follows — check rather than assume.
Plan Reference Files
Decide what goes in SKILL.md vs references/:
| In SKILL.md (under ~250 lines) | In references/ |
|---|---|
| Workflow and decision points | Detailed API documentation |
| Routing/decision tables | Code templates (>20 lines) |
| Parameter defaults table | Formulas and edge cases |
| Output contract | Troubleshooting database |
| Quick examples (1-3) | Comprehensive examples (4+) and dated datasets |
Step 3: Write the SKILL.md
Read references/writing-guide.md for detailed instructions on writing each section. Read references/frontmatter-guide.md for the complete YAML field reference.
Key Rules
Frontmatter first:
name(lowercase-hyphenated, max 64 chars) anddescription(max 1024 chars, no angle brackets) are required. The description is routing text that rides along in every request: say what the skill does, name the categories of requests it serves and the distinctive vocabulary users will use (methods, tools, data types, entities), and point to sibling skills for neighboring requests. Name intent categories instead of listing near-synonymous phrasings.Detection flow for external dependencies: use
!command`` probes with fallback sentinels to detect tools, auth state, and runtime, then route to a method. For Codex and other hosts without command preprocessing, explicitly instruct the agent to run the enclosed commands with its shell tool and use the real output. Offer a second path where a real alternative exists (CLI vs Python library vs built-in tool). Seereferences/dynamic-calling.md.Match specificity to fragility: give exact commands, flags, and code for fragile operations — installs, auth, CLI syntax, API contracts, calculations that must be right. For judgment work — analysis, interpretation, writing — state the goal, the criteria, and the domain heuristics, and let the model plan. Put a pass/fail gate wherever a failed check really ends the analysis.
Defaults table: give every parameter the user might omit an explicit default, so the skill never stalls waiting for input.
Output contract in the final step: what to lead with, what the answer must contain, which caveats apply, and any verdict or grade scale. Pin a section-by-section template only where the format itself matters (scorecards, widgets, checklists). Describe length qualitatively rather than with word or sentence counts, and label examples as illustrative rather than filling them with made-up figures for real companies.
Plain register: state each constraint once, with its reason. Leave out capitalized MUST/NEVER/CRITICAL, repeated warnings, and instructions current models follow by default ("be thorough", "think step by step", "double-check your answer") — they cause over-triggering and over-checking rather than better work. Keep real policy constraints (read-only, no trade execution, privacy) in plain words.
Keep volatile facts honest: fetch live data where you can, date-stamp anything that will go stale, and keep dated datasets in
references/. Verify API names and response shapes against the current library before shipping.
See references/skill-examples.md for annotated examples of each pattern.
Step 4: Write Reference Files
Read references/writing-guide.md for the full reference file authoring guide.
Key Rules
Naming:
lowercase-hyphenated.md, one file per concept-clusterSize: Quick lookup 50-150 lines, deep guide 150-400 lines, catalog 400-900 lines
Structure: H1 title, H2 sections, code blocks, tables, edge cases section at end
Linking: Use backtick paths in SKILL.md steps and a
## Reference Filessection at the end
Step 5: Quality Check Before Delivery
Run the skill through the quality rubric in references/quality-rubric.md. Score each dimension.
Quick Checklist
[ ] Frontmatter has
nameanddescription; the description is under 1024 characters with no angle brackets[ ] Description names what the skill does, the categories of intent it serves, and its distinctive vocabulary — not a list of near-synonymous phrasings
[ ] Description points to sibling skills for neighboring requests, where they exist
[ ] SKILL.md is under 300 lines (ideally under 250)
[ ] Every parameter has an explicit default
[ ] Numbered steps where order matters; judgment work is stated as goals, criteria, and heuristics
[ ] Gates stop the analysis only where a failed check really ends it
[ ] Final step states an output contract: what to lead with, required content, caveats, verdict scale
[ ] No numeric length caps; examples are labeled illustrative
[ ] Constraints are stated once, in plain words, with their reasons — no capitalized MUST/NEVER, no "think step by step" or "double-check" boilerplate
[ ] Complex content is in reference files, not inline
[ ] Reference file pointers use backtick paths
[ ] External dependencies are detected at runtime with
!command`` checks and fallbacks (|| echo "...")[ ] Separate runtimes treated as separate environments (terminal vs execute_code)
[ ] Legal/ethical disclaimers included where appropriate
[ ] No hardcoded ticker lists, tool paths, or undated static data that will go stale
[ ] API names, fields, and code in the skill were checked against the current library
If any item fails, fix it before delivering to the user.
Step 6: Improve an Existing Skill
When the user asks to improve a skill:
6a: Read the Current Skill
Read the SKILL.md and all reference files (on Hermes, skill_view(name) loads them).
6b: Score It Against the Rubric
Use the quality rubric from references/quality-rubric.md. Present the score breakdown to the user (illustrative):
| Dimension | Score | Issue |
|---|---|---|
| Trigger quality | 6/10 | Twenty near-synonym phrasings; misses the ETF use case |
| Defaults coverage | 3/10 | No defaults table |
| Instruction design | 5/10 | Scripted steps for judgment work; capitalized warnings |
| Output contract | 4/10 | Rigid 9-section template with made-up example figures |
| Reference usage | 7/10 | Good split, but missing troubleshooting |
6c: Propose Specific Improvements
List concrete changes ranked by impact:
[Highest impact] Add a defaults table covering every parameter
[High impact] Rewrite the description around intent categories and distinctive vocabulary
[Medium impact] Replace the fixed report template with an output contract
...
6d: Apply Changes
After user approval, edit the skill files (on Hermes, use skill_manage(action='patch', ...) for targeted changes or skill_manage(action='edit', ...) for full rewrites).
Step 7: Evaluate a Skill
When the user asks to evaluate or score a skill:
7a: Load and Analyze
Read the full SKILL.md and all reference files. Count lines, steps, defaults, and reference files, and note the description's length and the intent categories it covers.
7b: Score Against Rubric
Use the comprehensive rubric from references/quality-rubric.md. Score each of the 10 dimensions on a 1-10 scale.
7c: Present the Scorecard
## Skill Quality Scorecard: [skill-name]
| # | Dimension | Score | Notes |
|---|---|---|---|
| 1 | Trigger quality | 8/10 | Covers all four intent categories; one sibling boundary missing |
| 2 | Defaults coverage | 9/10 | All 11 parameters have defaults |
| 3 | Instruction design | 8/10 | Ordered setup and compute; analysis stated as criteria |
| 4 | Reference file strategy | 7/10 | 2 files, could use troubleshooting |
| 5 | Dynamic content | 10/10 | Dep check + live data injection |
| 6 | Output contract | 9/10 | Leads with verdict; required caveats; scale defined |
| 7 | Error handling | 6/10 | Missing data handling unclear |
| 8 | Code/formula quality | 8/10 | Working JS, copy-paste ready |
| 9 | Conciseness & register | 7/10 | 196 lines; two capitalized warnings to restate |
| 10 | Domain accuracy | 9/10 | BS formulas correct, edge cases covered |
**Overall: 81/100** -- Production quality
### Top 3 Improvements
1. ...
2. ...
3. ...Reference Skills
Skills in this repo that show each pattern well:
| Skill | What it demonstrates |
|---|---|
| sepa-strategy | Methodology pattern: real gates, domain criteria in references, a verdict scale |
| options-payoff | Widget pattern: a default for every field, live data injection, a precise render spec |
| stock-correlation | Router pattern: intent routing table, self-contained sub-skills, metrics computed in code |
| earnings-preview | Output contract: a content checklist with one judgment section, lead-with-the-headline guidance |
| fintel-data | API wrapper: key resolution flow, endpoint map, error semantics |
Step 8: Respond to the User
For Create mode
Deliver:
The complete SKILL.md content
All reference files
A README.md for the skill directory
The quality scorecard (from Step 5)
Suggested next steps (test it, iterate, publish)
For Improve mode
Deliver:
Before/after quality scores
Summary of changes made
Remaining improvement opportunities
For Evaluate mode
Deliver:
The full quality scorecard
Comparison to the reference skills
Prioritized improvement list
Reference Files
references/dynamic-calling.md-- Core reference: Detection flows, decision trees, method fallbacks, runtime awareness, and multi-tool adaptation patterns with annotated examples from production skillsreferences/writing-guide.md-- How to write each SKILL.md section for current Claude models: descriptions, detection flows, instructions matched to fragility, defaults, output contracts, and reference filesreferences/architecture-patterns.md-- Linear, Router, Methodology, Widget, and API Wrapper patterns with examples and anti-patternsreferences/frontmatter-guide.md-- Complete YAML frontmatter field reference (name, description, platform, env vars, config, credentials)references/quality-rubric.md-- 10-dimension scoring rubric with 1-10 scales, examples, and score interpretationreferences/skill-examples.md-- Annotated excerpts from top skills showing why specific patterns work
Files
- ATTRIBUTION.mdAdded by AutoGineer885 B
- LICENSELicence file added by AutoGineer1.0 KiB
- README.md3.0 KiB
- SKILL.md15.1 KiB
- references/architecture-patterns.md8.4 KiB
- references/dynamic-calling.md12.1 KiB
- references/frontmatter-guide.md5.4 KiB
- references/quality-rubric.md9.5 KiB
- references/skill-examples.md12.8 KiB
- references/writing-guide.md9.7 KiB
references/dynamic-calling.md
Dynamic Calling Patterns
Skills that touch external tools should detect what's available at runtime and adapt, rather than hardcoding a single tool or method — environments differ, and a hardcoded tool fails for every user who lacks it. This reference catalogs every dynamic pattern used in production skills.
Core principle: The skill should work in as many environments as possible. A user with gh CLI gets the rich path. A user with only git gets the minimal path. A user with nothing gets clear install instructions. The skill never fails silently because a hardcoded tool is missing.
Pattern 1: Detection Flow with Decision Tree
The foundational pattern. Every skill that touches external tools starts here.
Structure
## Step 1: Detection Flow
` ` `
!`(command -v tool_a && tool_a --version) 2>/dev/null || echo "TOOL_A_MISSING"`
` ` `
` ` `
!`(command -v tool_b && tool_b --version) 2>/dev/null || echo "TOOL_B_MISSING"`
` ` `
**Decision tree:**
1. If `tool_a` available and authenticated → use Method 1 (preferred)
2. If `tool_a` available but not authenticated → guide auth setup, then Method 1
3. If `tool_a` missing but `tool_b` available → use Method 2 (fallback)
4. If neither available → install `tool_a` (preferred) or `tool_b` (lighter)Real Example: github-auth (gh vs git)
## Detection Flow
` ` `bash
git --version
gh --version 2>/dev/null || echo "gh not installed"
gh auth status 2>/dev/null || echo "gh not authenticated"
git config --global credential.helper 2>/dev/null || echo "no git credential helper"
` ` `
**Decision tree:**
1. If `gh auth status` shows authenticated → use `gh` for everything
2. If `gh` is installed but not authenticated → use "gh auth" method
3. If `gh` is not installed → use "git-only" method (no sudo needed)Why this works:
Detects 4 dimensions: git existence, gh existence, gh auth state, git credential state
Three clear paths, each self-contained
The skill works for everyone — from minimal git-only setups to full gh installations
Pattern 2: Multi-Stage Detection (Install → Auth → Health)
For tools that need multiple checks before they're usable.
Structure
!`(command -v tool && tool status 2>&1 | head -5 && echo "READY" || echo "SETUP_NEEDED") 2>/dev/null || echo "NOT_INSTALLED"`This single command checks three things:
Is the tool installed? (
command -v tool)Can it run? (
tool status)Is it healthy? (output +
echo "READY")
Real Example: discord-reader (opencli)
` ` `
!`(command -v opencli && opencli discord-app status 2>&1 | head -5 && echo "READY" || echo "SETUP_NEEDED") 2>/dev/null || echo "NOT_INSTALLED"`
` ` `
If `READY`, skip to Step 2.
If `NOT_INSTALLED`, install first: `npm install -g @jackwener/opencli`
If `SETUP_NEEDED`, guide through CDP setup.Real Example: telegram-reader (tdl — two-stage)
` ` `
!`command -v tdl 2>/dev/null && echo "TDL_INSTALLED" || echo "TDL_NOT_INSTALLED"`
` ` `
` ` `
!`tdl chat ls --limit 1 2>/dev/null && echo "TDL_AUTHENTICATED" || echo "TDL_NOT_AUTHENTICATED"`
` ` `
Decision tree:
1. Both OK → proceed to Step 2
2. Installed but not authenticated → run `tdl login`
3. Not installed → install via `go install` or binary downloadWhy two-stage: Some tools pass --version but fail on actual operations because auth is missing. Checking auth separately gives better error messages.
Pattern 3: Library Version Detection with Fallback
For Python skills that need specific libraries.
Structure
!`python3 -c "exec('try:\n import lib\n print(\'lib \' + lib.__version__)\nexcept Exception:\n print(\'LIB_NOT_INSTALLED\')')"`Real Example: stock-correlation (multi-package + algorithm fallback)
` ` `
!`python3 -c "exec('try:\n import yfinance, pandas, numpy\n print(f\'yfinance={yfinance.__version__} pandas={pandas.__version__} numpy={numpy.__version__}\')\nexcept Exception:\n print(\'DEPS_MISSING\')')"`
` ` `
If `DEPS_MISSING`, install:
` ` `python
subprocess.check_call([sys.executable, "-m", "pip", "install", "-q", "yfinance", "pandas", "numpy"])
` ` `And later in the clustering step:
Note: if `scipy` is not available, fall back to sorting by average correlation
instead of hierarchical clustering.Key insight: The detection happens at Step 1, but the fallback logic is also in the core step that uses the optional dependency. Don't just detect — also provide alternatives at each usage point.
Pattern 4: API Key Detection
For skills that wrap external APIs.
Structure
!`echo $API_KEY | head -c 8 && echo "...KEY_SET" || echo "KEY_NOT_SET"`Real Example: fintel-data
` ` `
!`echo $FINTEL_API_KEY | head -c 8 && echo "...KEY_SET" || echo "KEY_NOT_SET"`
` ` `
If `KEY_NOT_SET`:
- Ask the user for their Fintel API key
- Guide them to https://fintel.io/api to get one
- Once provided, export it: `export FINTEL_API_KEY=<key>`Real Example: finance-sentiment (multi-line Python check)
` ` `
!`python3 -c "
import os
key = os.environ.get('ADANOS_API_KEY', '')
if key:
print(f'KEY={key[:8]}...SET')
else:
print('KEY_NOT_SET')
" 2>/dev/null || echo "PYTHON_UNAVAILABLE"`
` ` `Why show partial key: Showing the first 8 characters lets the user verify they have the right key without exposing the full secret.
Pattern 5: Live Data Injection
For skills that need current market data, not stale defaults.
Structure
!`python3 -c "exec('try:\n import yfinance as yf\n p=yf.Ticker(\'^GSPC\').fast_info[\'lastPrice\']\n print(f\'PRICE={p:.0f}\')\nexcept Exception:\n print(\'PRICE_UNAVAILABLE\')')"`Real Example: options-payoff (current SPX price)
**Current SPX reference price:**
` ` `
!`python3 -c "exec('try:\n import yfinance as yf\n p=yf.Ticker(\'^GSPC\').fast_info[\'lastPrice\']\n print(f\'SPX ≈ {p:.0f}\')\nexcept Exception:\n print(\'SPX price unavailable — check market data\')')"`
` ` `Why this matters for options: A default spot price of "5000" becomes wrong within days. Live injection means the payoff chart is immediately useful without manual adjustment.
Fallback design: When live data fails, the skill still works — it just uses a static default and tells the user to check.
Pattern 6: Frontmatter Conditional Activation
Skills can declare themselves as fallbacks or require specific tools at the YAML level.
fallback_for_toolsets — Activate when primary is missing
metadata:
hermes:
fallback_for_toolsets: [web]Real example: duckduckgo-search only appears when the web toolset (with API keys) is NOT configured. Once the user sets up Firecrawl, the skill auto-hides.
requires_toolsets — Only show when tools exist
metadata:
hermes:
requires_toolsets: [terminal]Real example: docker-management only appears when terminal tools are active — it makes no sense on Claude.ai.
Combining with runtime detection
Frontmatter controls whether the skill loads. Runtime detection controls how the skill behaves once loaded. Use both:
# Frontmatter: only load when terminal is available
metadata:
hermes:
requires_toolsets: [terminal]# Runtime: detect WHICH terminal tools are available
!`command -v gh && echo "GH_OK" || echo "GH_MISSING"`Pattern 7: Dual-Method Skills (CLI preferred, Python fallback)
The most common pattern for data-fetching skills.
Structure
## Step 2: Fetch Data
### If CLI detected (preferred)
` ` `bash
ddgs text -k "query" -m 5 -o json
` ` `
### If Python library available (fallback)
` ` `python
from ddgs import DDGS
with DDGS() as ddgs:
results = list(ddgs.text("query", max_results=5))
` ` `
### If neither available
Install the CLI: `pip install ddgs`Real Example: duckduckgo-search decision tree
1. If `ddgs` CLI is installed → prefer `terminal` + `ddgs` (fastest, simplest)
2. If `ddgs` CLI is missing → do not assume `execute_code` can import `ddgs`
3. If the user wants DuckDuckGo specifically → install `ddgs` first
4. Otherwise → fall back to built-in web/browser toolsCritical runtime awareness:
Terminal and
execute_codeare separate runtimes. A successful shell install does not guaranteeexecute_codecan importddgs. Never assume third-party Python packages are preinstalled insideexecute_code.
Pattern 8: Runtime Environment Awareness
Different execution environments have different capabilities. Skills must not assume.
Key distinctions
| Environment | Has shell | Has pip | Has browser | Has internet |
|---|---|---|---|---|
| Claude Code (CLI) | Yes | Yes | No (unless MCP) | Yes |
| Claude.ai (web) | Sandboxed | Limited | No | Restricted |
| Hermes Agent (terminal) | Yes | Yes | Configurable | Yes |
| execute_code sandbox | Isolated | Pre-installed only | No | Varies |
Rule: Test in the runtime you'll use
# WRONG — installs in terminal, uses in execute_code
` ` `bash
pip install ddgs
` ` `
` ` `python
# In execute_code — this might fail because it's a different runtime!
from ddgs import DDGS
` ` `
# RIGHT — verify in the runtime where you'll use it
` ` `python
# Check if available in this runtime
try:
from ddgs import DDGS
print("DDGS available")
except ImportError:
import subprocess, sys
subprocess.check_call([sys.executable, "-m", "pip", "install", "-q", "ddgs"])
from ddgs import DDGS
` ` `Pattern 9: Graceful Degradation Chain
When multiple tools can do the same job, prefer the richest and fall back gracefully.
Structure
Preferred (richest) → Standard → Minimal → Manual instructionExample: Web search degradation
1. web_search tool (if available) → richest, API-backed
2. ddgs CLI (if installed) → free, no key needed
3. ddgs Python library (if importable) → same but in sandbox
4. curl + manual URL → always works but crudest
5. Ask user to search → last resortExample: GitHub operations degradation
1. gh CLI authenticated → full API (PRs, issues, reviews, CI)
2. gh CLI not authenticated → guide auth, then full API
3. git + curl + token → basic API (push, pull, simple operations)
4. git only (no token) → read-only operations on public reposAnti-Patterns to Avoid
Hardcoded single tool
# BAD — fails immediately if yfinance not installed
` ` `python
import yfinance as yf
data = yf.download("AAPL")
` ` `Fix: Always detect first, then use.
Assuming install means available
# BAD — installs in shell, assumes execute_code has it
pip install ddgs
# ... later in execute_code ...
from ddgs import DDGS # might fail!Fix: Check in the same runtime where you'll use the library.
Static tool paths
# BAD — path differs across OS and installs
/usr/local/bin/gh auth statusFix: Use command -v gh to find the tool wherever it is.
No fallback on detection failure
# BAD — no || fallback, command hangs or errors silently
!`tool_a --version`Fix: Always use || echo "SENTINEL" fallbacks.
Detecting once, ignoring later
# BAD — detects scipy in Step 1 but hardcodes scipy.cluster in Step 4Fix: Every step that uses an optional tool should have inline fallback logic, not just the detection step.
Quick Reference: Detection Commands
| What to detect | Command |
|---|---|
| CLI tool exists | command -v tool 2>/dev/null |
| CLI tool version | tool --version 2>/dev/null |
| Tool is authenticated | tool auth status 2>/dev/null |
| Python module available | python3 -c "exec('try:\n import mod\n print(mod.__version__)\nexcept Exception:\n print(\'MOD_NOT_INSTALLED\')')" |
| Env var is set | echo $VAR | head -c 8 && echo "...SET" |
| File exists | test -f ~/.config/tool/creds && echo "OK" |
| API is reachable | curl -sf endpoint | head -c 100 |
| Runtime has internet | curl -sf https://httpbin.org/get > /dev/null && echo "OK" |
All commands should end with || echo "FALLBACK_SENTINEL" for graceful handling.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs an API key
Security
What our scanner noticed· Low risk
- Instructions that use the network
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Alex Yang
- Publisher
- Alex Yang (Community)
- Source
- himself65/finance-skills · plugins/skill-creator/skills/skill-creator · commit a085078
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Alex Yang or Alex Yang.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download skill-creator.zip