Skip to content

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.

  1. 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.
  2. 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.
  3. Add a route to dreamcatcher.toml that points a label to a prompt. The prompt calls your skill or gives the conversation or campaign instructions directly. Run dreamcatcher init to create the label on GitHub, commit and push dreamcatcher.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.