Custom agents
Create agents with their own prompt, model and permissions, or change how the built-in agents behave.
An agent is a named setup for Hull: a system prompt, an optional model, and the tools it's allowed to use. Hull comes with built-in agents, and you can add your own, such as a docs writer that only edits Markdown or a reviewer that can't change files.
Older versions of Hull called these modes. They're now agents. Hull still loads your old mode files: see Migrate legacy modes.
Built-in agents
| Agent | Type | What it does |
|---|---|---|
code | Primary | The default. Reads, writes and runs commands, within your permissions. |
plan | Primary | Plans work. It can only edit plan files. |
ask | Primary | Answers questions without changing your code. |
debug | Primary | Diagnoses and fixes problems step by step. |
general | Subagent | Handles multi-step research and tasks in parallel. |
explore | Subagent | Searches the codebase quickly. Read-only. |
Primary agents are the ones you pick and talk to. Subagents are started by other agents for a focused piece of work. See Subagents.
Switch primary agents with Tab in the CLI, Cmd+. / Ctrl+. in VS Code, or the agent picker. Set default_agent in hull.json to start with a different agent.
Create an agent
Ask Hull
The quickest way is to describe the agent you want:
Create an agent called docs-writer that can read anything but only edit Markdown files.In the CLI, hull agent create walks you through the same thing and writes the file for you.
Write a Markdown file
Create a .md file in an agents folder. The file name becomes the agent's name, the frontmatter sets its options, and the body is its prompt:
| Scope | Folder |
|---|---|
| Project | .hull/agents/ |
| Global | ~/.config/hull/agents/ |
Hull also reads agent/ as well as agents/, and the legacy .hullcode/ folders.
.hull/agents/docs-writer.md:
---
description: Writes and edits technical documentation
mode: primary
color: "#10B981"
permission:
edit:
"*": deny
"*.md": allow
bash: deny
---
You are a technical writer. Write clear, well-structured documentation
with short examples. Only edit Markdown files.Or use config
Define the same agent under agent in hull.json:
{
"agent": {
"docs-writer": {
"description": "Writes and edits technical documentation",
"mode": "primary",
"prompt": "You are a technical writer...",
"permission": {
"edit": { "*": "deny", "*.md": "allow" },
"bash": "deny"
}
}
}
}To keep a long prompt in its own file, use "prompt": "{file:./prompts/docs-writer.md}".
In VS Code you can also create and edit agents in Settings > Agent Behaviour > Agents, and import or export agent definitions there.
Options
| Option | Description |
|---|---|
description | What the agent is for. Shown in the picker, and used by other agents to decide when to start a subagent. |
mode | primary (you pick it), subagent (other agents start it) or all (both). Custom agents default to all. |
prompt | The system prompt. In a Markdown file, the body is the prompt. |
model | A model as provider/model. Without it, the agent uses the model you've selected. |
variant | Default model variant, such as a reasoning effort, when the agent uses its own model. |
permission | Which tools the agent can use. See Permissions. |
steps | The most tool-calling rounds the agent can take before it has to answer. |
temperature, top_p | Sampling settings for the model. |
color | Hex color (#FF5733) or a theme color such as primary or accent. |
hidden | For subagents: hide it from the @ menu. Other agents can still use it. |
disable | true removes the agent. |
Other options are passed to the model provider, so you can set provider-specific parameters.
Change a built-in agent
Use a built-in agent's name to change only the parts you specify. Everything else stays the same:
{
"agent": {
"code": {
"steps": 50,
"permission": { "bash": { "*": "ask", "npm test *": "allow" } }
},
"general": { "disable": true }
}
}Where agents come from
Hull merges agent settings from built-in defaults, your global config, the project's config and agent Markdown files. When the same agent is defined in several places, the settings are merged field by field, so you can override a single option.
If you belong to a Hull organization, your admins can also provide agents. They appear in your agent list next to your own, can't be removed locally, and take priority over a built-in agent with the same name. To change one, ask whoever manages Hull for your organization.
Project agents load only after you trust the project. To check what an agent ends up with, run hull debug agent <name>, or hull agent list to see all agents.
Migrate legacy modes
Hull converts custom modes from older versions into agents when it starts. It reads them from:
.hullcodemodesin the project~/.hullcodemodescustom_modes.yamlin the old extension's settings folder
Each mode becomes a primary agent: its role definition and custom instructions become the prompt, and its tool groups (read, edit, command, browser, mcp) become permission rules. Groups a mode didn't have are denied. Modes named after built-in agents (code, architect, ask, debug) are skipped, and the retired Orchestrator mode is not migrated: use subagents instead.
To edit a migrated mode, create an agent file with the same name in .hull/agents/.