devin-skill-valid¶
Devin-native SKILL.md frontmatter must use Devin's documented field shapes
| Severity | error (auto) |
| Autofix | - |
| Since | v0.20.0 |
| Repo Types | devin |
| Category | Devin |
Why¶
Skills in .devin/skills/ use Devin's native dialect. Unlike portable Agent
Skills under .agents/skills/ and .windsurf/skills/, their frontmatter is
optional and the directory name supplies the default name.
When frontmatter is present, however, values with the wrong shape can keep
tools, permissions, activation, or delegation settings from taking effect.
This rule validates Devin's documented fields while tolerating unknown keys for forward compatibility. The skill body still receives skillsaw's shared content-quality and security checks.
Severity¶
Malformed YAML and invalid field types are errors. Setting both a named
agent and subagent: true is informational: Devin uses the named agent, so
the finding explains the precedence without treating a documented
combination as invalid.
Examples¶
Bad — tool permissions and triggers have the wrong shapes:
Good — a configured native skill:
---
argument-hint: "[path]"
model: sonnet
allowed-tools: Bash(openspec:*)
permissions:
allow:
- Read(src/**)
triggers:
- user
- model
---
Review the selected path and report actionable findings.
A native skill with no frontmatter is also valid.
How to fix¶
- Use strings for
name,description,argument-hint,model, andagent, and a boolean forsubagent. - Make
allowed-toolsa string or a list of strings. - Make
permissionsan object; itsallow,deny, andaskvalues must be lists of strings. - Make
triggersa non-empty list containing onlyuserand/ormodel. - When both delegation fields are present, remove
subagent: trueif the namedagentalready expresses the intended behavior.
Configuration¶
Run skillsaw explain devin-skill-valid to see this documentation and the rule's effective configuration in your terminal.