---
title: "Give each skill one task and name it for · Agent Wranglers"
url: https://agentwranglers.se/playbook/ai-assisted-development/agent-skills/one-task-per-skill
updated: 2026-10-21
licence: "All rights reserved"
---

# Give each skill one task and name it for that task

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers). Updated 2026-10-21.

- Level: Required
- Chapter: [Agent skills](https://agentwranglers.se/playbook/ai-assisted-development/agent-skills)
- Rule: Each skill does one task and is named with a verb and an object, such as `release-mobile-app`. Arguments narrow the scope instead of a second skill.
- How: A skill that releases, rolls back and writes the changelog has a vague description, so the agent picks it for the wrong task. Split it into one skill per task. Use the lowercase, hyphenated folder name as the skill name. The Agent Skills format allows at most 64 characters and wants the name to match the folder. Let the person narrow the run with arguments, such as a playbook folder, a package name or `--dry-run`. In Claude Code, `$ARGUMENTS` in the skill body receives them, and `argument-hint` shows them in the menu. Then [write a description that says when to use it](https://agentwranglers.se/playbook/ai-assisted-development/agent-skills/skill-description).
- Check: A script fails when a name is not two or more lowercase words joined by hyphens, differs from its folder or is over 64 characters. No two skills share more than half the words of their descriptions.

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

### Markdown example

```markdown
---
name: release-mobile-app
description: Build, sign and upload the iOS and Android apps for a release. Use when asked to release, ship or publish the mobile app.
argument-hint: "[ios|android|both] [--dry-run]"
---

Release the platforms in $ARGUMENTS. With `--dry-run`, build and sign but do not upload.
```

### JavaScript example

```js
// check-skill-names.mjs
import { readdirSync, readFileSync } from 'node:fs';
const VERB_OBJECT = /^[a-z0-9]+(-[a-z0-9]+)+$/;
for (const folder of readdirSync('.claude/skills')) {
  const name = /^name: (.+)$/m.exec(readFileSync(`.claude/skills/${folder}/SKILL.md`, 'utf8'))?.[1];
  if (name !== folder || !VERB_OBJECT.test(name) || name.length > 64) throw new Error(`Bad skill name: ${folder}`);
}
```

### Python example

```python
# check_skill_names.py
import pathlib, re
for skill in pathlib.Path(".claude/skills").glob("*/SKILL.md"):
    name = re.search(r"^name: (.+)$", skill.read_text(), re.M).group(1)
    if name != skill.parent.name or not re.fullmatch(r"[a-z0-9]+(-[a-z0-9]+)+", name) or len(name) > 64:
        raise SystemExit(f"Bad skill name: {skill.parent.name}")
```

## Sources

- [Agent Skills specification](https://agentskills.io/specification)

## Related rules

- [Write a description that says when to use the skill](https://agentwranglers.se/playbook/ai-assisted-development/agent-skills/skill-description) in AI development

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), which requires credit with a link. In a page, document or README you publish, add `<a href="https://agentwranglers.se/playbook/ai-assisted-development/agent-skills/one-task-per-skill">Agent Wranglers ai development playbook</a>`. In code you write, add a comment next to it with the same link.

- Previous: [Turn repeated procedures into skills](https://agentwranglers.se/playbook/ai-assisted-development/agent-skills/when-to-write-a-skill)
- Next: [Write a description that says when to use the skill](https://agentwranglers.se/playbook/ai-assisted-development/agent-skills/skill-description)
- [Agent skills](https://agentwranglers.se/playbook/ai-assisted-development/agent-skills)
