Skip to content

Developer preview · Claude Code demonstrated today · Built for model- and framework-agnostic agent operations

Behavioral evidence for agent operations

Investigate what your AI agent did.

GMAN turns observed agent activity into a source-aware session record of tools, files, decisions, denials, and delegation — demonstrated today on Claude Code, built for custom agents across models and frameworks. Facts, inference, and unknowns stay separate.

Developer preview · Claude Code demonstrated today · Metadata-only cloud record

Agent Activity Sessionc1-session · synthetic

2026-08-22 · 04:58:35 → 15:34:22 UTC

635 recorded activity rows over 10h 36m · 321 tool calls · 1 write with success status · 1 denied decision · 2 observed failures · outcome not derivable

1 tool denial · 05:00:39 UTC
    • tool.callBash · decision deny05:00:39denied

task outcome not derivable from cloud evidence

Sanitized production session. Identifiers transformed. Counts are recorded evidence from this one session.

One real session, accounted for.

recorded activity rows
635
tool calls
321
denied decisions
1
observed failures
2

Task outcome is not derivable from cloud evidence.

One sanitized Claude Code session. Every figure on this page comes from it.

See how the evidence is modeled.

Investigation

Follow a signal to the exact events.

Attention appears only when there is something to look at. Related moments cluster by kind and time span, then expand to the individual events.

Attentionunanchored time present· informational · 147

Anchored events, in recorded event time

04:58:5515:34:22

largest interval between anchored events · 10h 14m · 97% of the anchored span · recorded event time, not arrival time

146 of the rows on this rail carry no recorded time and cannot be placed on the timeline at all — including, possibly, inside that interval

1 tool denial · 05:00:39 UTC
  • tool denial·
    • llm.requestclaude-opus-5 · 627 out tok05:00:38success
    • tool.callBash · decision accept05:00:39success
    • tool.callBash · decision deny05:00:39denied

showing 627 of total 635 · crop centred on the denied decision

Denied is a decision, not a failure.

A denial renders indigo. Red is reserved for an observed execution failure — a different state, counted separately. This session records 1 denied decision and 2 observed failures. The record keeps them apart because they mean different things.

Co-occurrence only, not causality.

The cluster groups moments that share a kind and a time span. It does not claim they share a cause, and nothing here explains why the decision was denied.

Evidence

Fact, inference, and unknowns stay separate.

GMAN keeps execution, decisions, normalization, source provenance, time anchoring, arrival finality, conflicts, and delegation as eight independent readings. It does not fuse them into a grade.

Rows failing validation (content withheld)0

Provenance

which capture channels observed the row

otel and hook
229
otel only
259
hook only
147

an independent dimension; it is not the time-anchoring count

one of eight independent dimensions

Eight independent readings. Never fused into a grade.

Each dimension answers one question about the record. A high count in one is not evidence about another, so they are never averaged, scored, or reduced to a health colour.

Four distinct states that are not failures

  • unsupported adapter coverage
  • degraded normalization
  • incomplete correlation
  • independently established absence

GMAN does not make the record look complete. It makes the record explainable.

Read the methodology.

Precise evidence

See what the record kept out.

Cloud-facing evidence is metadata-scoped. Previews and paths are absent, and the fields removed before delivery are listed on the event itself.

llm.requestsuccess

What was kept out

content_scope
metadata_only
preview_state
absent
paths
absent

stripped_fields

  • organization.id
  • terminal.type
  • user.account_id
  • user.account_uuid
  • user.email
  • user.id
Full event detail

What this is

occurred_at
05:13:01
observed_at
05:13:06
normalization
parsed

Why we believe it

otel
true
hook
false
normalizer
0.1.0

attributed by the OTel channel only

Measured

model
claude-opus-5
output_tokens
25485
input_tokens
2
cache_read
179964
cache_create
5290
cost_usd
duration_ms
309775

Kept local by design.

The cloud record carries metadata about the event, not the event's content. Previews and paths are absent because they are never sent, and the fields removed before delivery are named on the event itself.

A formatted number never hides its exact value.

The cost reads $0.7800. Focus it, or copy it, and the canonical value is there in full.

Stripped fields show construction, not discovery.

This is a list of fields the recorder removes before delivery. It is not a scan, not detection, and not a claim about what the local source material contains.

Delegation

Delegation, on the record.

GMAN recorded 54 subagent lifecycle moments in this session, 5 starts and 49 stops. None of them carries a known time, so they are labelled and listed last rather than placed in a sequence the evidence does not support.

Lifecycleactivity without a known time appears last
  • subagent.lifecycle · starttime unanchored
  • subagent.lifecycle · starttime unanchored
  • subagent.lifecycle · starttime unanchored
  • subagent.lifecycle · stoptime unanchored
  • subagent.lifecycle · stoptime unanchored
  • subagent.lifecycle · stoptime unanchored
  • 48 further lifecycle moments are recorded and counted, and are not listed here

Lifecycle moments

5 subagent start · 49 subagent stop

no known time on any of them

Agent tool

5 Agent tool calls

calls to the tool named Agent · not a count of subagents

Time anchoring

unanchored time present · 147

informational · a separate dimension of the record

three independent readings · not summed, not paired, not mapped onto one another

Lifecycle observed. Time absent, and labelled.

A start and a stop are events the record captured. They do not say a subagent is running, how long it ran, how deep the delegation went, or that every subagent's stop was observed.

Identity is withheld, not missing.

Agent attribution is recorded for this session. An agent id is a real identifier, so it is not published here. That is a sanitization decision, and it is a different thing from a gap in the evidence — the record knows, this page does not say.

What a reader can reconstruct

  • that 5 subagent starts were recorded
  • that 49 subagent stops were recorded
  • that the session made 5 calls to the Agent tool
  • that none of the 54 moments can be placed on the timeline

What a reader cannot conclude: how many distinct subagents ran, which lifecycle moment belongs to which Agent tool call, or which start pairs with which stop. The record does not evidence any of the three, so the page does not draw them.

How it works

Two sources, one record.

Evidence reaches GMAN from the machine the agent runs on. Nothing is scraped from a model provider, and no prompt or response text leaves the machine.

Two capture sources converge into one normalized session recordNative Claude Code hooks and OpenTelemetry both report from the machine the agent runs on. Both feed a durable local journal. The journal delivers over an authenticated, metadata-scoped channel into the session record.native hooksOpenTelemetrylocal journalauthenticateddeliverymetadata-scopedsession record

Capture fails open: if delivery is unavailable the agent keeps working. Delivery fails closed: an unauthenticated record is not accepted.

  1. Observe. Native Claude Code hooks and OpenTelemetry both report activity from the machine the agent runs on. Two sources, so a row can be evidenced by one, the other, or both.

  2. Hold locally. A durable local journal keeps what was captured. If delivery is unavailable, the agent keeps working and the record waits.

  3. Deliver and normalize. Authenticated delivery sends a metadata-scoped record. Normalization states are recorded, not smoothed.

What arrives is metadata about the event, not its content. Which source evidenced each row stays on the row, so a reader can tell a joined record from a single-source one.

Read the methodology.

Scope

Today, next, and where this is going.

Claude Code is the integration GMAN can demonstrate today, and the record it produces is the one this page has been showing. The system is being built for custom agents across models, providers, frameworks, and enterprise environments.

Today

What operators can use or see now.

  • Investigate demonstrated Claude Code sessions.
  • Inspect activity, decisions, actions, provenance, timing, and where the evidence stops.
  • Read a metadata-scoped cloud record that discloses removed fields per event.

Next

Actively being built.

  • A guided path from signup to a first recorded session.
  • Recorder access beyond internal operation.
  • Investigation summaries an operator can hand to a teammate.

North star

Where GMAN is going.

  • Reconstruct custom-agent journeys across models and frameworks.
  • Connect actions, delegation, evidence, and outcomes across enterprise systems.
  • Give operators defensible answers about what an agent did, what the evidence behind it is, and what remains unknown.

A capability moves into Today when a session on this page can demonstrate it. That is the whole rule, and it is the one every claim on this site is written against.

Read the record for yourself.

Open the session account, then follow one moment to the event behind it.