OpenInspect
Administration

Audit log

What the workspace audit log records, how to read an event, and how to use it to answer who changed what and why a request was denied.

Last reviewed View as MarkdownEdit on GitHubGive feedback

The audit log is a durable, read-only record of workspace operations and authorization decisions, shown newest first under Settings › Audit log.

Settings, Audit log: a list of Request authorized events with actor, resource, request id, reason, and a Structured details toggle
Settings › Audit log lists events newest first with the actor, resource, and authorization reason.

Prerequisites

  • The workspace.audit.read permission. Owners and Administrators have it; Members and Viewers do not, and the Settings entry is hidden for them.

What an event records

Each event is shown as a card with the action as its heading, the local timestamp and relative time beneath it, and an outcome badge on the right. The card lists four fields, plus a Structured details expander with the raw event ID, action, principal kind, and metadata.

FieldWhat it contains
WhenThe time the event occurred, shown in your local time and as a relative time.
RequestThe request ID of the HTTP request that produced the event. Use it to correlate with support reports and logs.
Principal kinduser, service, or sandbox: whether a signed-in person, a bot or operator tool, or a session sandbox acted.
ActorA snapshot of the acting user ID, the acting service, or both (a service acting on behalf of a user shows both).
ActionThe operation, for example workspace.member_role_updated.
ResourceThe resource type and, when there is one, its ID (for example user / <id> or http_route / /sessions).
Target userThe user the operation was about, appended to the resource as Target user <id> when present.
ReasonA short reason code, such as member_role_updated, member_status_unchanged, or the denial code for a refused request.
OutcomeApplied, No change, Denied, or Rejected.
MetadataStructured details specific to the action, shown as JSON under Structured details.

Actor and target values are snapshots taken when the event was written. They do not change if the user is later renamed or merged.

Which operations are recorded

The control plane writes these event families today:

ActionShown asWhen it is written
workspace.member_role_updatedMember role updatedA member's role is changed from Settings › Workspace access. Outcome is Applied, or No change with reason member_role_unchanged when the role was already set. Metadata records the role before, requested, and after.
workspace.member_status_updatedMember status updatedA member is suspended or restored. Outcome is Applied, or No change with reason member_status_unchanged. Metadata records the suspension state before, requested, and after.
authorization.request_deniedRequest deniedAn authenticated request was refused by authorization. The resource is the HTTP route, the reason is the denial code, and metadata includes the HTTP method, path, status, the permission that failed, and the principal's effective permissions.
authorization.request_allowedRequest authorizedA request passed authorization on a route gated by a management permission (automations, environments, secrets, integrations, MCP servers, provider accounts, source control settings, session lifecycle and archive, skills, member management, ownership transfer, and similar), and on every route reserved for a bot service (the GitHub and Slack bots' automation-event deliveries). Ordinary reads are not recorded.
workspace.owner_bootstrapped(raw action name)An operator ran the Owner bootstrap command. The principal is service, the actor is operator-cli, and the target user is the new Owner.

Actions without a friendly label are shown by their raw name.

Reading the log

Events are listed newest first, 25 per page. The page has no filter, search, or export, and no retention period is stated. Use Previous and Next to move between pages; the current page number is shown between the buttons. After changing pages the list scrolls back to the heading.

When there are no events, the page shows "No audit events yet" with the note "Workspace activity will appear here as it is recorded."

If a refresh fails while events are already loaded, a banner reads "Unable to refresh the audit log. Showing the most recently loaded events." with a Retry button. If the first load fails, the page shows "Unable to load the audit log." with Retry.

Typical uses

Who changed a role. Look for Member role updated events. The Actor is the person who made the change, the Resource line names the target user, and Structured details shows the role IDs before and after.

Why a request was denied. Look for Request denied events. The Reason field carries the denial code; Structured details shows the HTTP method and path, the permission that was required, and the permissions the principal actually had.

Correlating with a support request. Ask the person for the request ID from the error they saw, then match it against the Request field. Every event carries the request ID of the call that produced it.

Confirming an Owner bootstrap. After an operator runs the bootstrap command, a workspace.owner_bootstrapped event with actor operator-cli appears with the new Owner as the target user.

Troubleshooting

Next steps

On this page