---
title: "MGS3022: no broker answered"
description: A step was not started because `broker` is set to required and no broker answered for this host's capacity. Exits 69 (EX_UNAVAILABLE), apart from MGS3009's 75.
tags: [MGS3022, broker, capacity, required, memory_mb, concurrency, exit 69]
---

# MGS3022: no broker answered

A step was not started. The workspace sets `broker: required`, and nothing answered on
the broker socket, so no process could say whether this host has room for it.

```text
[MGS3022] not starting (root) test: no broker answered for this host's capacity
  (broker: unavailable: dial unix:///run/user/501/magus/broker.sock: connection refused),
  and broker: required refuses to run unarbitrated. `magus broker status` says whether
  one is up and where it logs
```

The broker is the per-user process that holds the host's concurrency slots and declared
`memory_mb` (see [MGS3009](MGS3009.md)). A run starts one when none answers, so this
code means that start failed, or the broker died while the run was going and no other
came up.

It exits **69**, `EX_UNAVAILABLE` from `sysexits.h`, and not MGS3009's 75: a busy host
clears on its own, while a host with no arbiter stays that way until something starts
one. A wrapper that retries on 75 does not loop on this.

## Resolution

- Run `magus broker status`. It exits non-zero when no broker is running.
- Read the broker's log, `$XDG_STATE_HOME/magus/broker.log` (`~/.local/state/magus/`
  when unset), for why it did not start or why it exited.
- Start one in the foreground to watch it: `magus broker`.
- If this host should run without arbitration, set `broker: best-effort` (a step runs
  unarbitrated and says so once) or `broker: off` (no broker is started or asked).

## See also

- [MGS3009](MGS3009.md): the refusal a broker gives when the host is full.
- [Concurrency](../../../concepts/concurrency.md): how the broker divides the host.
