Skip to content

Skill Authoring

Skills are reusable prompts for Claude Code. They are defined as SKILL.md files and version-controlled.

---
name: my-skill
display_name: My Skill
description: A one-line description of the skill
---
Write your prompt body here.
FieldRequiredDescription
nameYesSlug identifier (/^[a-z0-9-]+$/)
display_nameYesHuman-readable display name
descriptionYesOne-line description of the skill
requiresNoDependency declarations (see below)

Skills can declare external dependencies in the requires block. These are checked before workflow execution to verify the minion has the necessary tools and configuration.

---
name: lancers-compe-search
description: Search Lancers competitions
requires:
mcp_servers: [playwright, supabase]
cli_tools: [git, node]
env_vars: [LANCERS_EMAIL, LANCERS_PASSWORD]
---
FieldDescription
mcp_serversRequired MCP servers (checked against ~/.mcp.json)
cli_toolsRequired CLI tools (any tool name — dynamically checked via which on the minion)
env_varsRequired environment variables (checked across minion-local variables/secrets and HQ-injected project/workflow variables)

Skills without a requires block are treated as having no external dependencies.

Written in Markdown format. Claude Code receives this text as instructions and executes accordingly.

Skills can reference external values using two mechanisms: template variables for configuration parameters, and secrets for sensitive credentials.

Use {{VAR_NAME}} syntax in your skill body to insert variable values at execution time.

---
name: deploy-site
description: Deploy a website to the target environment
---
Deploy {{SITE_URL}} to {{DEPLOY_TARGET}}.

Variables are defined at four scopes. When the same key exists in multiple scopes, higher-priority scopes override lower ones:

PriorityScopeWhere to setDescription
1 (lowest)WorkspaceHQ Dashboard → Workspace SettingsShared across every minion and project in the workspace
2ProjectHQ Dashboard → Project SettingsShared across project members
3WorkflowHQ Dashboard → Workflow SettingsPer-workflow overrides
4 (highest)MinionHQ Dashboard → Minion Settings, or PUT /api/variables/:keyPer-minion final override applied at runtime (12-factor style)
  • Variable names: alphanumeric and underscores only (\w+)
  • Undefined variables remain as {{VAR_NAME}} in the output (no error)
  • Template expansion happens at execution time, not when the skill is deployed
  • Workspace/project/workflow values are expanded by HQ before the SKILL.md reaches the minion; the minion-local variables are layered last so a minion operator can always override deployed defaults without coordinating a HQ change

Secrets are injected as environment variables into the execution process. Use them for API keys, passwords, and other sensitive values.

---
name: check-api
description: Health check an external API
requires:
env_vars: [API_KEY]
---
Call the API endpoint using the API key from the $API_KEY environment variable.

Secrets are set via the HQ Dashboard (Minion Settings) or PUT /api/secrets/:key. Unlike variables:

  • Secret values are never returned by the list API (keys only) and are never persisted in HQ DB. HQ acts as a pass-through; values live exclusively on the minion.
  • Secrets are not expanded as {{VAR}} templates — they are available as $ENV_VAR in the process environment
  • Use requires.env_vars in frontmatter to declare required secrets for pre-execution validation

A minion can serve multiple workspaces. To prevent leakage, secrets are stored per scope on the minion:

ScopeStored asSeen by sessions where…
Minion-wideworkspace_id=''Always (any workspace, ad-hoc commands)
Workspace-scopedworkspace_id=<uuid>The runner’s execution is bound to that workspace

When the same key exists in both scopes, the workspace value wins. Skills don’t need to know which scope a secret came from — they reference it as $KEY either way.

Pick the scope when setting a secret in the dashboard:

  • Minion-wide for credentials shared across every workspace this minion serves (e.g. the operator’s personal OPENAI_API_KEY for development).
  • Workspace-scoped for customer- or tenant-specific credentials. Setting it on each workspace independently ensures workspace A’s keys are never visible during workspace B’s execution.

Skills are placed at ~/.claude/skills/<name>/SKILL.md on the minion.

Terminal window
# List locally deployed skills
minion-cli skill list --local
Terminal window
# List skills on HQ
minion-cli skill list
# Fetch a skill from HQ and deploy locally
minion-cli skill fetch <name>
# Push a local skill to HQ (new version auto-created)
minion-cli skill push <name>

Skills can include template and configuration files alongside SKILL.md. All files in the same directory are managed as part of the skill.

~/.claude/skills/my-skill/
├── SKILL.md # Prompt body
├── template.html # Template file
└── config.json # Configuration file