Skip to content

What the agent did

The chat shows what an agent said. It shows nothing of what it did — that it rewrote its own autostart prompt, sped itself up, wrote a note about you, created an agent, or was refused when it tried. Those are the events you need when something has gone wrong, and the answer is not in the conversation.

Two different records answer two different questions, and they are deliberately kept apart.

ActivityPrompt log
answerswhere the agent went wrongwhy it answered as it did
holdsone readable line per event, plus before → afterthe whole assembled prompt of a turn
who reads itthe agent's owner, in the cabineta platform administrator, in the panel
defaultonoff
kept for30 days7 days

The activity list never contains a prompt or the text of a conversation. That is the boundary; it is what lets one of them be on by default and cheap, and the other off by default and expensive.

Activity — seven kinds, and refusals among them

GET /agents/:id/activity, and the Logs tab of the agent.

kindwhat happened
answeran ordinary turn and its outcome
silent_tickautostart woke up and decided there was nothing to say
heartbeat_updatedthe agent rewrote its own autostart text, cadence or on/off switch
heartbeat_boostedthe agent sped itself up, or ended the speed-up early
memory_writtenthe curator wrote a note, found nothing to write, or was refused
agent_createdthe concierge created an agent
agent_archivedthe concierge archived or restored one

Three properties are the whole point of the list:

  • A change is stored as a pair, not as a sentence. "changed the interval" answers nothing; 60 → 10 answers it on sight, and shows which of three fields actually moved.
  • A refusal is a row like any other, never a gap. An agent refused four times in a row is the trail you came looking for, and it is invisible if refusals are only logged as absences.
  • silent_tick exists because nothing else records it. From outside, an autostart tick that had nothing to say is indistinguishable from an agent that never woke up. Every other event leaves some other trace; this one leaves none.

Filter by kind, by time, and by who started it — the agent on its own, or a person who asked. That last one is the fastest way to tell an agent's own initiative from something it was told to do. Search runs over the text of the event.

The list is short by design, so it has a horizon: 30 days by default (AGENT_ACTIVITY_RETENTION_DAYS, bounded 1…365).

The prompt log — off, per agent, and the owner's decision

A turn's prompt is assembled from the soul, the notes the agent has written about the person, the conversation window and the tool schemas. Recording it therefore means writing down somebody's conversation and the private facts around it, which is a decision about privacy rather than about telemetry.

So:

  • Off by default, and off is the only default that can be wrong for free: recording can be switched on later, but a week of conversations already written down cannot be un-written.
  • Per agent, and switched on by the agent's owner — not globally, and not by an administrator on somebody else's behalf. The text belongs to the person consenting.
  • An imported package cannot arrive with it already on. The flag is absent from the importer's create path.
  • Kept 7 days by default (PROMPT_LOG_RETENTION_DAYS, bounded 1…90). Much shorter than the activity ledger's year-long ceiling, because a year of transcripts is not a retention policy.
  • Read only in the panel, by a platform administrator — never in the cabinet, and never by the person the agent is talking to.

What is not here

  • agentAudit log lines are not this list. Five tools write a structured line to the application log under that context; those lines go to standard output and leave with the container. The activity list is a table, and it is what can be filtered, searched and read back.
  • Administrative actions are not covered. What a platform administrator changes about somebody else's team is a different ledger with a different sensitivity, and the panel stays read-only until it exists.

See also