---
title: Session hibernation (a heartbeat session goes quiet between beats)
---

# Session hibernation

## What it is

Some sessions exist to check on things. An overseer wakes on a schedule — every 15 minutes, say — looks around, finds everything fine, and says so. Under the ordinary rules that "everything is fine" is a finished turn like any other, so it lands in your inbox. At a 15-minute cadence that is **96 inbox cards a day from a single session**, every one of them telling you nothing happened.

**Hibernation** lets that agent act on what it already knows. When a scheduled beat finds nothing that needs you, the agent says so and the session simply **stays green and running, quietly, until its next beat** — instead of finishing into your inbox.

It is the same state you already know from a session waiting on a build: alive, green, working as far as anything is concerned. Nothing new to learn, nothing new to look at.

## Where to find it

Hibernation has no screen, button or setting of its own — it is automatic. You never switch it on: it is on by default and simply applies to any session that runs on a heartbeat, and the agent asks for it on its own at the end of a routine turn. Nothing in the app is configured for it, and no menu entry for it exists anywhere.

The one place you meet it is inside the session itself: the turn that starts a quiet spell carries the usual hold notice in the transcript, saying the session is hibernating until its next scheduled wake. A hibernating session shows the ordinary green running state, and you can message it at any moment — it answers like any other session. Turning it off entirely is an operator-level switch rather than a setting in the app.

## How it behaves

### What it is not

- **Not archiving.** The session has to stay alive to be woken again. (For a session whose work is genuinely finished, see [agent-self-archive.md](agent-self-archive.md).)
- **Not pausing.** Nothing is frozen, and you can message a hibernating session at any moment — it answers like any other.
- **Not cheaper.** The session is fully alive; only the interruption goes away. Hibernation saves your attention, not money.
- **Not a schedule change.** How often a session beats is set by its wake schedule, and hibernation never touches it.

### It cannot lose a session

The hold ends two independent ways, and only one of them has to work:

- **The beat arrives.** The session wakes, takes its turn, and either hibernates again or reports normally. This is the ordinary path.
- **The window runs out.** If nothing wakes it, Omniscio checks in with the agent and then surfaces the session to you, exactly as it does for any wait that overran. Nothing stays quietly held forever.

A restart also ends a hibernation: the hold lives in memory, so a session that was hibernating when Omniscio restarted comes back through the normal recovery path and re-hibernates on its next beat.

And a turn that **asks you something** is never hibernated, even if it also asks to be. An agent that asked a question and then said "hold me" is contradicting itself, and your question is the half that matters.

The same goes for a question you **have not answered yet**. If a session is waiting on your answer — a question, a plan to approve, a permission to grant — and a heartbeat or another agent's message wakes it, and the agent finds nothing new and asks to go quiet (or to archive itself), the session goes straight back to your inbox with the same question still waiting, and no new notification. A check-in can never hide a question you still owe an answer to.

### How an agent knows to use it

You do not have to teach it. The offer is attached to every scheduled wake Omniscio delivers, so any session with a heartbeat is told — at the moment it matters — that it can go quiet if the check found nothing. Sessions without a heartbeat are never told about a signal that would be refused for them.

### Turning it off

Hibernation is **on by default** with no setup. To disable it entirely, set `AMC_DISABLE_SESSION_HIBERNATION=1`; with it off, every session behaves exactly as it did before this existed.

## For agents

### How it works

Two things have to be true, and both are checked every time.

**The agent asks for it.** At the end of its turn the agent emits a marker on its own line. Nothing is ever inferred — not from how routine the turn looked, not from its wording. A feature that guessed would eventually swallow a real report.

**Something is actually scheduled to wake it.** A session with no live wake schedule is refused and lands in your inbox exactly as it does today. Hibernation's whole justification is "it will be back"; without that it would just be a session held open for no reason.

When both hold, the session arms the ordinary auto-wait hold, with the window measured **from its own next scheduled beat** rather than a fixed guess. A session that beats every 15 minutes holds for a bit over 15; an hourly one holds for a bit over an hour. Always slightly longer than the gap, so a beat that runs a little late still lands inside it.

**There is a ceiling — four hours.** It is the same limit that caps every other kind of wait in Omniscio, not something invented for this. A session whose next beat is further out than that is simply refused and behaves as it does today, rather than being given a hold that would run out hours early, tell you a window that isn't true, and interrupt the session before its beat ever arrived. In practice this costs almost nothing: the inbox pressure hibernation exists to fix comes from *frequent* beats — a 15-minute heartbeat makes 96 cards a day, a 6-hourly one makes 4.

The turn that starts the hold carries the usual ⏱ hold notice in the transcript, saying it is hibernating until the next scheduled wake — so a quiet session is never a silent one.

**It never goes quiet over an unanswered question.** When a machine wake — a heartbeat, another agent's message, a relaunch — reaches a session that was waiting on the user's answer to a question, a plan or a permission, and the turn raises nothing new, the marker does not hold it: the session is put back on that same question in the inbox, silently. The self-archive marker is treated the same way, and the self-archive route refuses while that wake's turn is running. A turn that raises a NEW question surfaces normally.

In the chat, that whole quiet round — the heartbeat and the reply that signed off this way — folds into one line, `▸ 💓 Heartbeat check-in · nothing new`, with the heartbeat's own time; one tap opens it, hold notice included. A round where the agent did have something to say keeps its reply in full, with only the heartbeat's own instruction prompt shrunk to a `Heartbeat check-in` line. See [cross-session-messaging-part-2.md](cross-session-messaging-part-2.md) ("A quiet sign-off folds too").

## Related

- [waiting-detector.md](waiting-detector.md) — the hold hibernation reuses, and what happens when a hold overruns.
- [agent-self-archive.md](agent-self-archive.md) — the sibling signal, for a session that is genuinely finished rather than between beats.
