Runi Help

My sessions start without a brief

Emission, ingestion and relevance are three different failures with three different fixes.

"My session started with no context" is three different failures wearing one sentence. Work out which one you have before trying to fix it.

FailureQuestion it answersEvidence
Emission Was a packet built and handed over at all? The delivery receipt exists, or does not.
Ingestion Did the model read it? The attribution line: relevant, none, or absent.
Relevance Was there anything worth carrying? The packet was delivered and read, and reported nothing relevant.

First: is this a failure at all?#

Two states look like a broken brief and are not.

“N team items loaded, none relevant”
Means

Delivered, read, and judged not to bear on the work at hand. A working system reporting a real result, and more useful than one claiming every briefing was valuable.

A new or single-seat workspace
Means

There is nothing to brief with. A brief is made of other sessions, and the first one has none behind it. See What to expect in the first hour.

Emission: no packet was handed over#

The critical hook is missing#

SessionStart is the delivery mechanism. Without it, sessions start with no briefing and adopt no task, while everything after it keeps publishing. The session looks alive and arrives empty.

output
 FAIL  hooks     SessionStart not registered — sessions start with no
                team briefing and adopt no task

Reconnect the agent from Settings → Agents.

The repository is not tracked#

An untracked folder receives nothing and publishes nothing, by design. The doctor's this repo line is the check. See Repositories.

The agent has no push channel#

Three cases where nothing can push. The fix is to pull instead.

CaseWhyDo
Codex Desktop or VS Code Runi does not launch those sessions, so nothing can hand them a packet. Use the relay-codex wrapper for the CLI; otherwise rely on the runi_brief guidance block. Details.
OpenClaw with prompt injection off An operator can set allowPromptInjection: false, and Runi cannot detect it. Check openclaw.json. Details.
OpenCode without the experimental hook Injection depends on a hook OpenCode marks experimental. Call runi_brief through MCP instead. Details.

Receipts are not being filed#

If receipts cannot be filed, briefings may well be landing while the app cannot show it. You lose the evidence, not the feature:

output
 warn  receipts  delivery receipts not filed — not found (1 h ago);
                sessions cannot show whose briefing they reached

A receipt failure is a health note, never a broken session. It is filed after the context is already on its way to your agent.

Ingestion: delivered, apparently unread#

A receipt marked absent means the first reply carried no attribution line, so nothing evidences the packet being read. Tool availability is not evidence either. An agent having Runi's tools does not establish that it fetched anything.

What to try, in order
1

Ask the session directly. The briefing arrives as ordinary context in every adapter, so the session can tell you what it was given. That settles emission versus ingestion in one question.

2

Check the guidance block for Codex, then start a new session. Guidance is read at session start and is not applied retroactively.

3

Restart agent sessions after an update. MCP servers are long-lived and keep running the previous daemon. The doctor's generation line names them.

Relevance: delivered, read, and thin#

The packet ranks under a token budget. If the right thing existed but did not make the cut, these are the levers, most effective first.

  1. Confirm your memory entries#

    Unconfirmed entries ride nothing at all. This is nearly always the answer for a team a fortnight in: the material exists, sitting in proposed, unsigned.

  2. A linked task's own records take up to half the packet ahead of ranking. A session on the wrong card is being briefed for the wrong job.

  3. Answer “useful / not”#

    Records that rode a briefing you called useful get a tiebreak next time. It will never lift a memory entry over an open blocker, so it cannot be used to bury what is on fire.

  4. Use the pull channel for the tail#

    Everything below the budget line is still reachable by asking: runi_search, runi_task, runi_continue. See Asking Runi from inside your agent.

  5. Raise the budget, last#

    contextBudget in ~/.relay/config.json, 1,000 to 12,000, default 4,000. Bigger is not automatically better: a packet that fills the window is a packet the agent skims.

Check exactly what a session would receive#

From the repository, on the machine in question. This is the same packet builder the hooks use, so it is not an approximation:

terminal
$ node ~/.relay/daemon/relay-cli.js brief

The app's packet inspector runs the same module, if you would rather read it there.

A briefing that arrived incomplete#

When a collection is unreachable at build time, the packet says so inside itself. The agent is told its briefing is partial instead of being handed a confident subset. The doctor repeats it for you under context. It is usually transient; if it persists, tell us.

Did this solve it?