Customise skills¶
How an agent works on an issue is up to the skill it runs. Each label points to a prompt, and the prompt usually calls a skill. So by choosing the skills, you choose how your agents work.
Start with dream's skills¶
The quickest way to start is with the skills from
dream, a separate plugin for
Claude Code and Codex. dreamcatcher init
installs it and sets up a label for each skill:
| Skill | Label | On its own | Under dreamcatcher |
|---|---|---|---|
dream:smith |
agent-assignment |
Yes | An assignment |
dream:less |
agent-assignment-easy |
Yes | An assignment |
dream:big |
agent-campaign |
No | A campaign |
dream:scout |
agent-conversation |
No | A conversation |
dream:smith plans a change, builds it a commit at a time, and reviews
it thoroughly. dream:less makes an easy change with lighter review.
dream:scout looks into an issue and answers your questions about it.
dream:big leads a campaign, carrying a parent issue's sub-issues
through their assignments to merge.
Write your own¶
If you want your agents to work differently, write your own skill or prompt and point a label to it.
- Write the skill or prompt. An assignment skill must follow the assignment skill contract, so that it picks up the branch and draft pull request that dreamcatcher has already opened. A campaign skill must follow the campaign skill contract, so that the lead coordinates the sub-issues through GitHub and never closes the parent issue or changes its labels or assignees. A conversation skill must follow the conversation skill contract, so that it investigates the issue and returns an answer for dreamcatcher to publish. A conversation or campaign prompt can instead give plain instructions, because dreamcatcher adds the operational requirements.
- If you wrote a skill, make it available where the agent runs. Each
agent works in a fresh worktree of
origin/main, so either install the skill at user scope, or commit it to the repository and push it. - Add a route to
dreamcatcher.tomlthat points a label to a prompt. The prompt calls your skill or gives the conversation or campaign instructions directly. Rundreamcatcher initto create the label on GitHub, commit and pushdreamcatcher.toml, and restart the daemon so that it reads the new route.
A route for an assignment skill looks like this:
[[assignment]]
label = "my-skill"
[assignment.claude]
prompt = "/my-skill GH{issue}"
model = "opus[1m]"
effort = "high"
Then label an issue with your new label, and an agent works on it with your skill. Configure labels and harnesses explains routes in more detail, including how to give a route a Codex recipe too.