Hermes agent streaming means Hermes Agent sends model output to you token by token as it arrives, in the terminal or in chat apps like Telegram and Slack, instead of waiting for the full reply. Hermes Agent is built by Nous Research. Under the hood it also streams API requests to the model and watches those streams with a stale-stream detector. On 1 November 2026 a new opt-in setting landed on main: agent.stream_max_lifetime, a hard cap on how long one streaming response can run.
📺 Watch: NEW Hermes Agent Updates are INSANELY GOOD!
🔥 Get the Agent OS as a free bonus: AI Profit Boardroom members get the full Agent OS zip, prompt libraries, daily tutorials and weekly live coaching calls. → Get inside
This guide covers the three layers: what you see, how Hermes keeps streams healthy, and the new cap. It is written for people running Hermes for real work, where a stuck reply costs time.
How Hermes agent streaming works
There are three separate switches in the Hermes docs. People mix them up all the time.
- display.streaming controls what you see in the CLI. Set it to true and replies appear token by token inside a streaming box. display.show_reasoning also streams thinking tokens. Tool calls are still captured quietly. If the provider can't stream, Hermes falls back to the normal display.
- streaming.enabled controls the messaging gateway. It is false by default. Turn it on and the bot sends a message on the first token, then edits it as more tokens arrive.
- model.streaming controls the API request itself. It is true by default. Setting it to false forces non-streaming calls for the whole session, subagents included.
The docs say model.streaming false is an escape hatch for self-hosted servers whose streaming tool-call path is broken, and that you should leave it alone otherwise. Non-streaming calls lose the liveness checks described below. Hermes also switches a session to non-streaming on its own if the provider says it can't stream, or if a gateway answers with empty keep-alive frames.
If you want the full agent setups I use, the AI Profit Boardroom ($69/mo) has the configs, prompts and walkthroughs.
Hermes agent streaming in Telegram, Discord and Slack
Once streaming.enabled is on, it is decided per platform. Per the docs, Telegram streams out of the box and Discord does not until you flip its toggle. You can change these per-platform switches in the dashboard's Channels toggles or in config.yaml.
Other gateway settings from the docs:
- transport: auto (default), edit, or off.
- edit_interval: 0.8 seconds between message edits by default.
- buffer_threshold: 24 characters before an edit is forced.
- Overflow: past the platform's limit (about 4,096 characters), Hermes finishes the current message and starts a new one.
- No-edit platforms: Signal, Email and Home Assistant are detected on the first try, and streaming turns off for that session.
- Slack: Hermes uses Slack's native streaming when the app has AI features on, and falls back to edit-based streaming if not.
Cron jobs and subagents stream too. The docs say their wire requests are still streaming requests, so every token counts as a sign of life. More on those in the Hermes cron job guide and the Hermes subagents guide.
📺 Watch: NEW Hermes Agent Update Changes AI! 🤯
Hermes agent streaming timeouts and the stale-stream detector
A stream can fail in two ways. It can go quiet. Or it can keep dribbling data and never finish. Hermes had a guard for the first. The new setting covers the second.
| Timeout | Default | Local providers | Where to set it |
|---|---|---|---|
| Socket read timeout | 120s | Raised to 1800s | HERMES_STREAM_READ_TIMEOUT |
| Stale stream detection | 180s | Raised to a 900s ceiling | HERMES_STREAM_STALE_TIMEOUT or agent.local_stream_stale_timeout |
| Stream max lifetime (new, opt-in) | Off (0) | Same | agent.stream_max_lifetime in config.yaml |
| Stale circuit breaker | 5 kills | Same | HERMES_STREAM_STALE_GIVEUP |
What the stale detector does
The stale-stream detector kills a connection that gets keep-alive pings but no real content. Its clock resets on every chunk. When it kills a stream, the retry logic takes over. The default is 180 seconds, and the docs say it rises to 240 seconds above 50k tokens of context and 300 seconds above 100k. An explicit providers stale_timeout_seconds value is used as-is.
The stale circuit breaker
HERMES_STREAM_STALE_GIVEUP is a cross-turn breaker. After 5 stale kills in a row with no completed response, Hermes stops re-waiting and fails each call fast with an error that tells you what to fix. Set it to 0 to disable it. It resets on any completed response, a /model switch, a fallback, or a turn-start restore. See the Hermes slash commands guide for /model.
📺 Watch: NEW Hermes Agent NOW CHANGES HOW AI WORKS! 🤯
New: the Hermes agent streaming lifetime cap
The stale detector has a blind spot. Because it resets on every chunk, a stream that keeps sending data but never ends is never cut. The commit gives two examples: a gateway trickling chunks and a runaway generation. The turn just sits there.
Commit ac8037c, "opt-in cap on a streaming response's total lifetime", was authored on 31 October 2026 and merged to main on 1 November 2026 (UTC). The latest tagged release is v0.22.5 from 23 October 2026, so this is on main and not in a tagged release yet.
Here is how agent.stream_max_lifetime works, per the docs and commits:
- Off by default. The default is 0. Long streams behave as before unless you set it.
- Seconds. The value is the total wall-clock time one streaming response may run.
- Per attempt. The clock starts with each stream attempt, never resets when a chunk arrives, and restarts for each retry.
- Same kill as a stale kill. The connection is cut and the retry or partial-response continuation takes over.
- Never fires before the stale timeout. The cap is floored at the effective stale-stream timeout.
- Doesn't trip the breaker. A cut doesn't count toward HERMES_STREAM_STALE_GIVEUP, because the provider was responding.
- Two stream types only. It covers Chat Completions and Anthropic Messages streams. Codex/Responses streams and Bedrock streams are not capped.
Set it in config.yaml only
The first version also read an environment variable. Follow-up commit b484be5 dropped it, because non-secret behaviour settings belong in config.yaml. So put agent.stream_max_lifetime under the agent section of config.yaml, with a number of seconds.
Commit eee418e fixed an early bug where a cap cut was counted as a stale kill. Before that fix, two capped long replies could trip the breaker and the next healthy request was refused. Cap cuts now name agent.stream_max_lifetime in the error, so you know which limit fired.
When to leave it at 0
The docs are direct here: leave it at 0 if you run long reasoning turns that stream for a long time on purpose. A cap that is too low will cut good work and force a retry. Use it when you've seen a relay or gateway hold a stream open with no end, or when an unattended job must never hang on one reply.
Hermes agent streaming vs JSON event output
Token streaming is not the same as machine-readable event output from the CLI. If you want Hermes to print structured JSON events for scripts and pipelines, that is a separate feature. It's covered in Hermes Agent stream JSON output.
Plugins can also watch the stream. The on_stream_start, on_stream_delta and on_stream_end hooks are observer hooks: they see tokens as they arrive but can't change them. The docs say reasoning deltas need a separate opt-in. See Hermes Agent hooks for the full hook list.
Hermes agent streaming troubleshooting checklist
- No tokens in the terminal? Check display.streaming is true.
- Bot sends one big message at the end? Check streaming.enabled is on and the platform's own streaming toggle is on. Discord is off by default.
- Local model goes silent for minutes, then gets killed? Large prompts can take minutes to prefill. Raise agent.local_stream_stale_timeout or HERMES_STREAM_READ_TIMEOUT. The Hermes local model setup guide covers this.
- Reply streams forever and never finishes? Set agent.stream_max_lifetime once it's in your build, and keep it well above your longest normal reply.
- Every call fails fast after a bad patch of kills? That's the stale breaker. A completed response, a /model switch or a fallback resets it.
- Tool calls leak as plain text on a self-hosted server? That's the case the docs name for model.streaming false.
On Windows? The Hermes Agent Windows guide covers install. For the system I run around agents like Hermes, read the Agent OS guide. For how I test the models that sit behind it, see Goldie Bench.
Want this mapped to your own business? Book a free AI strategy session.
Hermes agent streaming FAQ
Is Hermes agent streaming on by default?
API streaming (model.streaming) is on by default. Gateway streaming (streaming.enabled) is off by default. Turn it on, and Telegram streams while Discord waits for its own toggle.
What does agent.stream_max_lifetime do?
It caps the total time one streaming response can run, in seconds. It's off at 0 by default, set in config.yaml only, never fires before the stale timeout, and doesn't count toward the stale breaker. It covers Chat Completions and Anthropic Messages streams, not Codex/Responses or Bedrock. It merged to main on 1 November 2026 and is not in a tagged release yet.
Should I set a lifetime cap for reasoning models?
No. The docs say to leave it at 0 if you run long reasoning turns that stream for a long time. Only set it when streams hang without ending.
Where can I get help setting up Hermes?
Join the AI Profit Boardroom for the setups, or book a free AI strategy session. For a plan built around your team, start with a strategy session.
Turn on display.streaming, check your gateway toggles, and keep agent.stream_max_lifetime at 0 until you need it. That's Hermes agent streaming set up right.











