---
title: 'Every session starts with one question: what’s the budget?'
canonical: 'https://www.dealmobile.co.uk/writing/every-session-starts-with-one-question'
url: 'https://www.dealmobile.co.uk/writing/every-session-starts-with-one-question'
type: Post
published: '2026-10-25'
summary: 'A Claude Code hook opens each session by asking how much to spend and how much to delegate to cheaper models, then makes Mullet’s jobs follow the answer.'
---

# Every session starts with one question: what’s the budget?

Published 2026-10-25

![The commands that record a session’s choice: mullet strategy set with a budget of 3 dollars and the ladder, then the three delegation choices. Ladder tries cheap and free models first and Claude last. Claude-only runs one Claude Code worker. Off delegates nothing.](https://www.dealmobile.co.uk/sites/default/files/styles/almanac_shot_md/public/content/images/posts/every-session-starts-with-one-question/hero.png.webp?itok=83LmxKH-)

After [the bill](https://www.dealmobile.co.uk/writing/we-checked-the-bill-and-our-ledger-was-wrong-by-half.md), I wanted spending to be a decision I make at the start of a session, not something I find out about afterwards. So every Claude Code session I open now starts with one question.

## The question

Mullet 2.2.0 adds a `SessionStart` hook called `session-strategy`. It’s opt-in:

```bash
mullet setup-claude --hooks session-strategy

```

When a session starts, the hook gives Claude a handful of local facts: how much of the daily and weekly envelope is left, how much of Claude’s own week is used, which preset is active and whether night mode is on. It also gives Claude a recommendation, and asks me two things in one short question: a budget in dollars for the session, and a delegation strategy.

Claude then records my answer:

```bash
mullet strategy set --budget 3 --delegation ladder
mullet strategy          # what is set, when, and when it expires
mullet strategy clear

```

## The three strategies

| Choice | What it means |
|:--|:--|
| `ladder` | Cheap and free models first, Claude last |
| `claude-only` | Claude Code alone, no cheaper workers |
| `off` | Nothing is delegated |

## What follows from the answer

While the answer is fresh, Mullet acts on it. `mullet job plan` uses the budget as the job’s spending cap when I haven’t passed `--max-spend`. A `claude-only` choice plans a job with one Claude Code worker and no ladder. `off` makes `job plan` refuse, and turns delegation off the way `MULLET_DELEGATION=off` always did: the MCP delegation tools refuse and the delegation hooks go quiet.

Flags on the command line still win, and the daily and weekly envelope still applies when the job runs, so a generous answer can’t get past it. The answer lasts 12 hours by default, long enough for a working day and short enough that yesterday’s choice doesn’t linger.

## How it recommends

The recommendation follows a few plain rules, in code you can read. If there is no room left under the envelope, it suggests `claude-only`, or `off` if Claude’s own week is also running high. Otherwise it suggests `ladder`, with a budget equal to the default job cap or the room left under the envelope, whichever is smaller. If a strategy is already fresh, the hook tells Claude not to ask again.

## Turning it off

If you’d rather not be asked, set this in your config and the hook goes silent:

```yaml
session:
  ask_at_start: false
  strategy_ttl_hours: 12     # how long an answer stays in force

```

## What it doesn’t do

The budget is a cap on each job. Nothing adds up the spend of several jobs inside one session. The daily and weekly envelope is what limits the total, which is why the question comes alongside it and doesn’t replace it.

The code is at <https://github.com/tomgould/mullet-public>.

- **Projects:** [Mullet](https://www.dealmobile.co.uk/projects/mullet.md)
- **Tags:** [Python](https://www.dealmobile.co.uk/writing/tag/python.md), [AI](https://www.dealmobile.co.uk/writing/tag/ai.md), [Mullet](https://www.dealmobile.co.uk/writing/tag/mullet.md)

---

Index of this site: [llms.txt](https://www.dealmobile.co.uk/llms.txt)
