---
name: daemon
kind: syntax
since: 0.1
stability: stable
---

Long-running listener over channels and streams.

```axon
daemon Name() {
  goal:   "what this daemon achieves"
  shield: ShieldName
  listen ChannelA as a {
    step Process { given: a, ask: "..." }
  }
}
```

A `daemon` is the dual of a `flow`: where flows are invoked and
return, daemons are spawned at program start and run until the
program halts. Daemon bodies use `listen` blocks to subscribe to
typed channels; each block's body runs once per delivered
message.

Daemons must declare a `shield` if any channel they listen on
demands compliance coverage.
