Skip to content

Sessions and verdicts

Your dashboard grades whole sessions. The session is the unit it grades.

A session is one run of your agent, as your agent counts it. Every action the CLI records carries the session id your agent gave it, and the dashboard groups actions by that id rather than splitting them on time gaps. A session whose actions arrive over several syncs stays one session instead of fragmenting into one per sync.

A session is open while actions are still arriving. It closes either when your agent’s session-end hook reports it over, or when it goes 30 minutes without new activity and a sweep closes it. The sweep is the one that decides, because a session-end hook may never fire at all.

Closing is not final. Actions that arrive afterwards reopen the session, and it is graded again over its new contents.

A closed session is graded once. One call judges the whole session against the guides that were in your agent’s context during it, rather than judging each action on its own.

A guide is in context if it reached the agent. Guidance projected into your rule files (AGENTS.md, CLAUDE.md) is in context by construction: the agent reads those at session start. A guide that lives in a skill is in context only if the agent actually invoked that skill. Grading a skill your agent never loaded would judge it against instructions it never saw.

Actions still carry verdicts. They are not graded separately. They are read off that one judgment: an action the grade cited as violating a guide is misaligned, an action it cited as satisfying one is aligned, and an action nothing cited is unguided.

You meet two sets of verdicts in the dashboard. They read alike and they are not the same set.

A guide gets one verdict per session:

  • aligned — the session engaged this guide and followed it.
  • misaligned — the session engaged this guide and broke it.
  • not_applicable — the guide was in context and nothing in the session engaged it. Shown as Not engaged.

An action gets one verdict from the projection above:

  • aligned — the grade cited this action as satisfying a guide.
  • misaligned — the grade cited it as violating one.
  • unguided — no guidance covered it.

not_applicable is a fact about a guide over a whole session, so it never reaches an action. unguided is a fact about one action, so it never reaches a guide. Neither is a failure, and neither is mapped onto the other.

A guide’s alignment rate counts only the sessions that engaged it. not_applicable verdicts land in neither the numerator nor the denominator, so a guide is not punished for sessions it had nothing to say about. That rate is computed from the guide’s verdicts when the screen loads. There is no stored score to go stale.

When a grade cannot run, nothing is written. No provider configured, quota spent, a failed request, a response that came back unparseable or incomplete: each of those writes no verdict row, and the session stays queued for the next sync to try again. There is no attempt counter and no way for a failure to record a verdict, because “could not grade” is not one of the values above.

So absence means what it says. An action with no verdict has not been judged; it is not unguided. A guide with no verdict rows has not been evaluated; it is not aligned at 100% and not failing. The dashboard renders those states as absence rather than substituting a verdict for them.

Absence has two forms, and the session screens keep them apart:

  • Not graded yet — the session is closed, its grade is missing or out of date, and it is still inside the window where grading retries.
  • Not graded — grading will not happen. A session stays gradeable for 24 hours after it closes. Past that it is never graded, and its verdict stays empty permanently.

One case writes an empty grade on purpose: a session with nothing to judge. If its only actions were skill loads, or its actions have since been removed, the session is marked graded with zero verdicts. That is a finished grade recording that zero work was judged, which is different from a grade that never ran.