Only an Administrator can open Audit. The event-type filter lists all 42 event types the platform can record, including the ones that have not happened yet on this device, so a filter never silently has nothing behind it.
Records can be filtered by time range (last 24 hours or last seven days), user, role, event type, and result. Every record names who performed an action, when, what it targeted, the result, and—when it failed or was refused—why.
Row format
| Field | Meaning |
|---|
actor | USER means a signed-in account performed the action. SYSTEM means the platform recorded it itself—startup, scheduling, or service credential handling—with no account behind it. |
result | SUCCESS: the action completed. FAIL: it was attempted and failed. DENY: permissions or device state stopped it before it was attempted. ALLOW: an observation, not a refusal. |
reason_code | Meaningful only when the result is not SUCCESS. OBSERVED is the fixed value on observational rows. |
target_id | What the event acted on: an account ID, Agent name, Task ID, model name, or retention period. |
producer | The component that recorded it, such as dashboard.auth or dashboard.retention. Task events leave it empty. |
The actor's display name and role are read from the account table when the record is written, never carried in with the event, and an event type the platform does not recognise is discarded.
Sign-in and sessions
| Event | Trigger | result / reason_code |
|---|
| Signed in | A sign-in attempt | SUCCESS; DENY = LOGIN_RATE_LIMITED for too many attempts from one source, INVALID_CREDENTIALS, or an account-specific blocking code. If the account cannot be identified, the actor is SYSTEM. |
| Signed out | An account signs out | SUCCESS |
| Session ended | A session is invalidated | SUCCESS = SUPERSEDED_BY_NEW_LOGIN when a new sign-in replaces the old session, or ADMIN_FORCED when an Administrator forces the sign-out; detail.sessions holds how many were ended. DENY = FIXED_ADMIN_REQUIRED when the actor is not the bootstrap admin. |
| Expired session reused | A reconnect with an expired session is blocked | DENY only |
| Password changed | An account changes its own password | SUCCESS; DENY = PASSWORD_CHANGE_RATE_LIMITED, or INVALID_CREDENTIALS when the old password is wrong. |
| Administrator password reset | The administrator password is reset locally on the device | SUCCESS / LOCAL_BREAK_GLASS, actor SYSTEM |
| Default administrator created | The bootstrap admin is created during first startup | SUCCESS / DEFAULT_ADMIN_CREATED, actor SYSTEM |
Accounts and preferences
| Event | Trigger | result / reason_code |
|---|
| Account created | An account is created | SUCCESS; FAIL = the username is taken, REQUEST_INVALID, ACCOUNT_INVALID, AGENT_NOT_FOUND when an assigned Agent does not exist, or an authorization code. |
| Account updated | A role, display name, or enabled state changes | SUCCESS; DENY = FIXED_ADMIN_PROTECTED when the bootstrap admin cannot be changed, or SELF_DISABLE_FORBIDDEN. FAIL = REQUEST_INVALID or ACCOUNT_INVALID. |
| Account deleted | An account is deleted | SUCCESS; detail records the username, role, and reassigned resources. FAIL carries an authorization code. |
| Preferences updated | Navigation, theme, or language is changed | SUCCESS; FAIL = REQUEST_INVALID or PREFERENCE_INVALID. |
| Invitation email sent | An invitation email is sent | SUCCESS; FAIL carries the delivery failure code. |
Access control
| Event | Trigger | result / reason_code |
|---|
| Agent access granted | An Agent is assigned to an account | SUCCESS, with the account as the target; FAIL = AGENT_NOT_FOUND or AGENT_INVALID. |
| Agent access revoked | An assignment is removed | Same as above. |
| Access denied | A signed-in account is refused a route | DENY / AUTHORIZATION_DENIED only, with the route as the target. |
Agents and models
| Event | Trigger | result / reason_code |
|---|
| Agent imported | An Agent package is imported | SUCCESS; FAIL carries the package validation code, defaulting to PACKAGE_FAILED. When a scan result exists it is recorded in detail.risk. |
| Agent updated | A delta ZIP is merged into an existing Agent | Same as above. |
| Agent removed | An Agent is deleted | Same as above. |
| Agent model changed | An Agent is pointed at a different model | SUCCESS; DENY = MODEL_INVALID or another applicable code, with the model name as the target. |
Tasks and materials
| Event | Trigger | result / reason_code |
|---|
| Material uploaded | A Material ZIP is extracted into the Agent's materials/ | SUCCESS; FAIL carries a workspace error code. |
| Task created | A Task Markdown file is added | SUCCESS; FAIL carries a format or path validation code, and detail.filename holds the rejected filename. |
| Task deleted | A Task Markdown file is deleted | Same as above. |
| Task started | A Task is started from the Dashboard or through a service credential | SUCCESS records the Task ID; DENY = PLAN_INPUT_INVALID, PLAN_NOT_FOUND, or a dispatch error code. A start made with a service credential is recorded under the Server actor. |
| Task stopped | A running Task Run is stopped | SUCCESS; FAIL = TASK_STOP_FAILED; DENY = TASK_STOP_INPUT_INVALID, TASK_NOT_FOUND, or TASK_NOT_RUNNING. Stopping a Task someone else started is recorded here too. |
| Task log not found | A Task log is requested that the account does not own, or that does not exist | DENY / TASK_LOG_NOT_FOUND only. Both cases share one code so the response cannot reveal whether the Task exists. Reading a log successfully writes nothing. |
Main Agent Chat
| Event | Trigger | result / reason_code |
|---|
| Chat session opened | A chat session is opened | SUCCESS, with the first 16 characters of the session key hash as the target. |
| Chat access denied | Access to a chat is refused | FAIL = CHAT_SESSION_NOT_FOUND, CHAT_SESSION_NOT_OWNED when the session belongs to someone else, or an authorization code. |
| Chat request method | A disallowed method is blocked, or the method used is noted | FAIL = METHOD_NOT_ALLOWED; ALLOW / OBSERVED is observational, with the method in detail.method. |
| Chat response fields | The first agents.list response of a session is inspected | ALLOW / OBSERVED only—observational, with the field names in detail.fields. |
| Chat connection rejected | A WebSocket connection has an invalid Origin | FAIL / ORIGIN_INVALID |
Device settings
| Event | Trigger | result / reason_code |
|---|
| Data retention changed | The Token & Task Run history period is changed | SUCCESS, with DAY, WEEK, MONTH, or FOREVER as the target; FAIL = DATA_RETENTION_INVALID or DATA_RETENTION_UNAVAILABLE. |
| OverlayFS turned on | Write protection is enabled | SUCCESS; FAIL = OVERLAYFS_TASKS_RUNNING when Tasks are still running, or an operation-specific code. |
| OverlayFS turned off | Write protection is disabled | Same as above. |
| Device rebooted | A reboot is triggered from that page | SUCCESS / FAIL |
| OverlayFS password rejected | The operating-system password check on that page fails | FAIL = OVERLAYFS_RATE_LIMITED after too many attempts, or a verification failure code. |
| Event | Trigger | result / reason_code |
|---|
| System database backed up | An encrypted backup is created (ENCRYPTED_BACKUP_CREATED), or one is taken before a restore (PRE_RESTORE_BACKUP_CREATED) | SUCCESS, actor SYSTEM |
| System database restored | The control database is restored from a backup | SUCCESS / ENCRYPTED_BACKUP_RESTORED |
| Old records cleared | Audit events and notifications older than 90 days are removed automatically; recorded only when something was actually deleted | SUCCESS / RETENTION_POLICY_90_DAYS, actor SYSTEM |
| Service credential issued | A service credential is issued | SUCCESS, actor SYSTEM |
| Service credential revoked | An active service credential is revoked | SUCCESS |
| Service credential already revoked | An already-revoked credential is revoked again | SUCCESS / ALREADY_REVOKED |
| Service credential authenticated | A service credential is rejected | DENY only, with the rejection reason. A successful authentication writes nothing: every REST call and every 30-second recheck passes through it, so the rows would be machine keepalive rather than anything a person did. |
Two common misreadings
Editing a Task appears as two rows. A Task definition cannot be changed in place, so an edit is a Task deleted row followed by a Task created row naming the same file.
Success is not always recorded. Reading a Task log you own writes nothing—only the refusal does. The same is true of service credential authentication.