dreb can create skills. Ask it to build one for your use case.
Skills are self-contained capability packages that the agent loads on-demand. A skill provides specialized workflows, setup instructions, helper scripts, and reference documentation for specific tasks.
dreb implements the Agent Skills standard, warning about violations but remaining lenient.
- Locations
- How Skills Work
- Invocation
- Skill Structure
- Frontmatter
- Content Substitution
- Validation
- Example
- Built-in Skills
- Skill Repositories
Note: Skills can instruct the model to run commands and may include executable code. Skim what you're loading, same as any other dependency.
dreb loads skills from:
- Global:
~/.dreb/agent/skills/~/.agents/skills/
- Project:
.dreb/skills/.agents/skills/incwdand ancestor directories (up to git repo root, or filesystem root when not in a repo)
- Packages:
skills/directories ordreb.skillsentries inpackage.json - Settings:
skillsarray with files or directories - CLI:
--skill <path>(repeatable, additive even with--no-skills)
Discovery rules:
- Direct
.mdfiles in the skills directory root - Recursive
SKILL.mdfiles under subdirectories
Disable discovery with --no-skills (explicit --skill paths still load).
To use skills from Claude Code or OpenAI Codex, add their directories to settings:
{
"skills": [
"~/.claude/skills",
"~/.codex/skills"
]
}For project-level Claude Code skills, add to .dreb/settings.json:
{
"skills": ["../.claude/skills"]
}- At startup, dreb scans skill locations and extracts names and descriptions
- The system prompt includes available skills in XML format per the specification
- When a task matches, the agent uses the
skilltool to load the full SKILL.md with content substitution applied - Users can also invoke skills directly via
/skill:name [args]slash commands - The agent follows the instructions, using relative paths to reference scripts and assets
This is progressive disclosure: only descriptions are always in context, full instructions load on-demand.
The agent can invoke skills programmatically via the built-in skill tool:
skill(skill: "review-pr", args: "123")
The tool reads the SKILL.md, strips frontmatter, applies content substitution, and returns the expanded content. Skills with disable-model-invocation: true are hidden from the system prompt and return a warning if the model tries to invoke them.
Skills register as /skill:name commands in interactive mode:
/skill:brave-search # Load and execute the skill
/skill:pdf-tools extract # Load skill with argumentsArguments after the command are passed through content substitution into the skill content.
Skills with user-invocable: false are hidden from the / menu but remain available to the model via the skill tool.
Toggle skill commands via /settings in interactive mode or in settings.json:
{
"enableSkillCommands": true
}A skill is a directory with a SKILL.md file. Everything else is freeform.
my-skill/
├── SKILL.md # Required: frontmatter + instructions
├── scripts/ # Helper scripts
│ └── process.sh
├── references/ # Detailed docs loaded on-demand
│ └── api-reference.md
└── assets/
└── template.json
---
name: my-skill
description: What this skill does and when to use it. Be specific.
argument-hint: "<input file>"
---
# My Skill
## Setup
Run once before first use:
\`\`\`bash
cd ${DREB_SKILL_DIR} && npm install
\`\`\`
## Usage
Process the input file: $1
\`\`\`bash
${DREB_SKILL_DIR}/scripts/process.sh $1
\`\`\`Use relative paths from the skill directory:
See [the reference guide](references/REFERENCE.md) for details.Per the Agent Skills specification, plus dreb-specific fields:
| Field | Required | Description |
|---|---|---|
name |
Yes | Max 64 chars. Lowercase a-z, 0-9, hyphens. Must match parent directory. |
description |
Yes | Max 1024 chars. What the skill does and when to use it. |
argument-hint |
No | Hint text shown in the / menu (e.g. "[PR number or URL]"). |
user-invocable |
No | Default true. When false, skill is hidden from the / menu but remains available to the model via the skill tool. |
disable-model-invocation |
No | When true, skill is hidden from system prompt. Users must use /skill:name. |
- 1-64 characters
- Lowercase letters, numbers, hyphens only
- No leading/trailing hyphens
- No consecutive hyphens
- Must match parent directory name
Valid: pdf-processing, data-analysis, code-review
Invalid: PDF-Processing, -pdf, pdf--processing
The description determines when the agent loads the skill. Be specific.
Good:
description: Extracts text and tables from PDF files, fills PDF forms, and merges multiple PDFs. Use when working with PDF documents.Poor:
description: Helps with PDFs.When a skill is invoked (via the skill tool or /skill:name), placeholders in the body are replaced before injection:
| Placeholder | Replaced with |
|---|---|
$ARGUMENTS, $@ |
All arguments joined |
$0 |
First argument (alias for $1) |
$1, $2, ... |
Positional arguments (bash-style parsing: supports quoting) |
${@:N} |
Arguments from the Nth position |
${@:N:L} |
L arguments starting at N |
${DREB_SKILL_DIR} |
Absolute path to the skill's directory |
${DREB_SESSION_ID} |
Current session ID |
Example:
---
name: review-file
description: Review a specific file for issues.
argument-hint: "<filename>"
---
Read ${DREB_SKILL_DIR}/checklist.md for the review criteria.
Review the file: $1
Focus areas: ${@:2}Usage: /skill:review-file src/main.ts "security" "performance"
dreb validates skills against the Agent Skills standard. Most issues produce warnings but still load the skill:
- Name doesn't match parent directory
- Name exceeds 64 characters or contains invalid characters
- Name starts/ends with hyphen or has consecutive hyphens
- Description exceeds 1024 characters
Unknown frontmatter fields are ignored.
Exception: Skills with missing description are not loaded.
Name collisions (same name from different locations) warn and keep the first skill found.
brave-search/
├── SKILL.md
├── search.js
└── content.js
SKILL.md:
---
name: brave-search
description: Web search and content extraction via Brave Search API. Use for searching documentation, facts, or any web content.
---
# Brave Search
## Setup
\`\`\`bash
cd ${DREB_SKILL_DIR} && npm install
\`\`\`
## Search
\`\`\`bash
./search.js "query" # Basic search
./search.js "query" --content # Include page content
\`\`\`
## Extract Page Content
\`\`\`bash
./content.js https://example.com
\`\`\`dreb ships with mach6, a development workflow that orchestrates the full issue-to-merge lifecycle using GitHub as shared memory. Six skills cover each stage:
| Skill | What it does |
|---|---|
mach6-issue |
Assess an existing issue or create a new one |
mach6-plan |
Explore codebase, plan, create branch and draft PR |
mach6-push |
Commit, push, post progress comment |
mach6-review |
Explicit round-aware review with delta re-reviews, three-gate assessment, and later-round adversarial counter-pressure |
mach6-implement |
Implement plans, fix review findings, or fix CI failures |
mach6-publish |
Pre-merge checks, docs update, merge, tag, release |
model-routing-guide |
Research scoped models and sanitized local subagent evidence into a validated routing guide |
Built-in skills are always available and can be overridden by placing a skill with the same name in any user or project location. mach6-review is model-invocable when the user directly asks an agent to run it, as well as user-invocable through its slash command. Agents must never start formal review autonomously; implementation must first be committed and pushed.
See docs/mach6.md for full documentation.
model-routing-guide is an explicit, potentially expensive research workflow with exactly two supported scope sources.
Pass comma-separated model patterns directly to make them authoritative:
/skill:model-routing-guide anthropic/claude-*,openai/gpt-5.6-sol
Or invoke it without arguments to use the effective non-empty enabledModels array:
/skill:model-routing-guide
When model scope rotates, update the existing guide incrementally instead of regenerating every retained entry:
/skill:model-routing-guide update
/skill:model-routing-guide update anthropic/claude-*,openai/gpt-5.6-sol
update must be the first argument. The skill validates the existing guide against its own coverage, diffs that coverage against the newly resolved authoritative scope, preserves retained model sections, removes unscoped sections and summary references, and researches only newly added canonical models. It refreshes scope/local-evidence metadata and performs the same complete final validation before atomically replacing the guide. A missing or malformed existing guide fails loudly and requires normal generation.
Model-pattern arguments after the optional update keyword take precedence over enabledModels; the skill selects one source and does not search for any other runtime or session scope. Because this Stage 1 workflow is implemented only as a skill, it cannot discover the current session's --models value or later in-session scope changes. To research that runtime scope, pass the same comma-separated patterns as skill arguments.
The skill refuses missing/empty and effectively all-model scopes. It obtains available candidates with dreb --list-models, resolves the selected patterns to canonical provider/model IDs, and snapshots subagent evidence before launching research children. It reads global-only subagentSessionDir using AgentSession path semantics, then also reads the legacy <agent-dir>/subagent-sessions root when different, in that order with canonical deduplication; project settings cannot redirect this evidence scan and no files are migrated. It combines sanitized aggregate local observations with official documentation, model cards, benchmarks, issue trackers, forums, and practitioner reports. Existing unreadable or malformed snapshotted child logs fail the run; genuinely empty history across all discovery roots is labeled cold-start.
The generated ~/.dreb/agent/model-routing-guide.md is human-readable Markdown with schema-versioned YAML frontmatter and one validated section per canonical candidate. Evidence is labeled as vendor claims, measured benchmarks, community reports, or local observations, with dates, confidence, sample counts, contrary findings, and explicit unknowns. The workflow prohibits copied prompts, outputs, tool arguments, secrets, paths, and identifying project details.
Semantic local-evidence assessment uses normal dreb tools, so inspected session content is processed by the active research model's configured provider. The persisted guide is sanitized and generalized, but invoking the skill is still a decision to send the inspected evidence to that provider.
Its primary routing safeguards are practical: Explore is for factual collection and navigation, not planning or implementation; routine lookup, extraction, repetitive file inspection, and straightforward summarization should use the least expensive scoped model demonstrated adequate by the evidence.
The optional global-only Dispatch Arbiter now consumes this file before every subagent spawn. Its live scope is the current session's exact explicit candidate set, so guide frontmatter and model headings must match that set exactly. A guide generated from enabledModels will work when the session uses the same resolved scope; for runtime --models, pass those patterns to the skill. Missing/stale/malformed guide coverage fails the child launch rather than bypassing arbitration.
- Anthropic Skills - Document processing (docx, pdf, pptx, xlsx), web development
- Pi Skills - Web search, browser automation, Google APIs, transcription (from pi-mono, dreb's upstream fork)