> ## Documentation index
> Fetch the complete documentation index at: https://haarness.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Reasoning and ultracode

Reasoning effort is how long the model thinks before it answers. More thinking helps with hard
problems and costs more tokens and time. Ultracode turns thinking up to the maximum and lets the
agent split big work across child agents.

## Change the reasoning effort

1. Press **Alt+R**, or run `/reasoning`.
2. Pick a level. The list shows only the levels the current model supports.

Or name it directly: `/reasoning high`.

| Choice | Means |
| --- | --- |
| provider default | Let the model decide, or use your configured default |
| `none` … `max` | That level, if the model offers it |

The level applies to every message you send until you quit the TUI. If you switch to a model that
does not offer it, Haarness goes back to the default.

To set a default for every chat, in your [configuration](https://haarness.ai/docs/cli/configuration.md),
`haarness.json`:

```jsonc
{
  "defaults": {
    "reasoning_effort": "medium"   // none, minimal, low, medium, high, xhigh or max
  }
}
```

## Show or hide the model's thinking

**Ctrl+T** switches how the model's thinking appears in the transcript, and the TUI remembers it:

- **Compact** (the default): one row shows the latest line while the model thinks, then becomes
  **Thought for 12s**, which you can open.
- **Show**: the thinking in full.
- **Hide**: none of it.

The same switch is at the bottom of the `/reasoning` list.

## Ultracode

Ultracode is for difficult work and work you want checked independently: a large migration, an
audit, a hard bug. When it is on:

- the model uses the strongest reasoning level it offers (`xhigh` for Claude models);
- the agent is guided to split big work into child agents or one [workflow](https://haarness.ai/docs/cli/workflows.md)
  when that helps, and to work directly when it does not;
- child agents it starts use ultracode too.

It uses noticeably more tokens. Leave it off for everyday edits.

| To | Do |
| --- | --- |
| Turn it on or off for this chat | `/ultracode` |
| Use it for one message only | Write the word `ultracode` in the message |
| Turn it off and go back to the default | `/reasoning off` |
| Use it in a script | `haarness run --ultracode "Audit every API boundary"` |

The chat remembers the setting. To have new chats start with it on, in your
[configuration](https://haarness.ai/docs/cli/configuration.md):

```json
{
  "defaults": {
    "ultracode": true
  }
}
```

## Watch the child agents

When the agent hands work to child agents, each one shows as a row under the tool call, with its
own status. The sidebar lists the running ones.

| To | Do |
| --- | --- |
| Watch a child's live transcript | **Ctrl+O** or `/tasks`, then pick one |
| Move between children | ← and → while watching. ↑ returns to your chat |
| Stop waiting for a child | `/background`. It finishes on its own and reports back |
| Stop them all | Esc twice. Stopping a turn stops its children |

A child agent uses your chat's model unless its agent definition names another. It asks for
approval the same way your chat does, and follows the chat's Review, Auto or Yolo mode. How many run at once is set in
[Execution budgets](https://haarness.ai/docs/security/execution-budgets.md).

## Related

- [Run a prompt from a script or CI](https://haarness.ai/docs/cli/headless-runs.md): `--ultracode` and
  `--wait-background` from scripts
- [Slash commands](https://haarness.ai/docs/tui/slash-commands.md): every command in one list
