Event reference

The Action column of the audit log holds one of the names on this page, spelled exactly as here. They come from three places:

  • Storage events — the vault's storage engine seals one for every read that hands data out and every change it makes.
  • Vault events — the vault adds its own for things storage alone can't see: a search, an export, a TOTP code, a sign-in.
  • Refusals — a request the vault turned down is recorded under the name of the request itself, with outcome denied.

Who appears as the actor

ActorMeaning
agent:<name>A connected client, by the name you gave it: the CLI, the browser extension, the proxy, an AI agent. The vault page is a client too — its reads, searches and exports show as agent:Vault holder.
agent:<name>#<id>The client that wrote an app_event: name and client id, so two clients with the same name stay apart.
agent:<id>A client without a name, or a refused token whose client the vault doesn't know.
webSign-in and lock (login, logout) from the vault page.
systemThe vault acting on its own account. Changes (put, tombstone, create_dossier) are currently recorded with this actor rather than the client's; their source IP still shows where the request came from. Also the client lookup that opens every request, and every failure row.

Reads

These are sealed before the data leaves the vault. If the event can't be written, the data isn't returned.

ActionMeansCaused byWho
getOne entry's current content was returned. Entry is its name.Opening an entry; a client fetching a credential; the fetch behind a vault-computed TOTP code; one per entry in an export.web · extension · agent
listEvery entry of one type was enumerated. Entry is the type name (credential, note, agent…), Reason the count.Loading the entry list (one row per type); a search (one row per type searched); URL matching and the extension's picker; scopes and import checks; the clients page. Every request also starts with one list of type agent, actor system: the vault looking up the calling client.web · extension · agent
historyAn entry's full revision history was returned. Reason is the revision count.Opening an entry's history; one per entry in a full export.web
list_deletedThe ids of deleted entries were returned. Reason is the count.A full export.web

Changes

ActionMeansCaused byWho
putAn entry was created (version 1) or revised (each new version). The event carries the version it produced.Creating, editing or upserting an entry; changing its scopes; each entry an import creates or updates; a new scope; creating, renaming or changing a client (clients are entries too); the vault's default category.web · extension · agent
tombstoneAn entry was deleted. Its history stays; the event carries the deleting version.Deleting an entry; removing a client. Both need a hardware-key tap.web
create_dossierThe vault's root record was created.Setting up a new vault — once.the vault itself

Vault events

ActionMeansCaused byWho
searchA search ran. Entry is the query text, Reason the number of hits and whether it was an exact match.A search from the CLI, the proxy or the extension. Written only when the answer goes out; the extension's picker list (an empty query) writes its list rows instead.extension · agent
exportThe vault was exported. Entry is the mode (migration or full) and the entry count.Exporting from the vault page, which needs a fresh hardware-key tap.web
totpThe vault computed a live TOTP code. Entry is the entry's name.A client asking the vault for a code (the CLI's TOTP command). Codes computed on your own device appear only as the get that fetched the entry.agent
loginThe vault page was unlocked. Entry is how: unlock, register (a new vault's first device) or switch_vault.Unlocking with your hardware key.web
logoutThe vault page was locked. Reason is manual or idle.Locking, or the idle timer. Sent as the page closes, best effort.web
app_eventA client's own note in the chain. Entry and Reason are the text the client sent.A client calling audit.log_event. With an entry named, the client must be able to read that entry.agent

Refusals

A refused request is recorded under its request name — entry.get, entry.create, search.query, vault.export, agent.create, session.event and so on — with outcome denied, the client as actor, its source IP, the entry if the request named one, and a Reason of the form <code>: <why>:

CodeWhy
CLAV-AUTH-002Out of the client's scope, or an admin-only action from a non-admin client.
CLAV-AUTH-003No such client in this vault — revoked, or never created.
CLAV-SEC-001Client locked by the two-strike read limit.
CLAV-SEC-002Source address is not on the client's IP whitelist.
CLAV-RATE-003The client's read quota is used up.
CLAV-RATE-004Too many operations per minute.
CLAV-SEC-004An import tried to create clients or scopes.
CLAV-TAP-004The action needs a hardware-key tap and none valid came with it.
CLAV-WL3-REVOKED · CLAV-WL3-NOT-FOUND · CLAV-WL3-UNCONFIRMEDThe tapping device was removed from the vault, is unknown, or could not be confirmed with central.

A burst doesn't flood the log: identical refusals of one client for one code within a minute fold into one row, and the next row recorded carries the count — (+12 identical since the last one recorded).

Failures

A failure row means the vault allowed the request but something carrying a security signal went wrong. Two exist, both with actor system:

  • get · integrity check failed — an entry's stored data didn't verify.
  • put · unique name — a second scope with a name already taken.

What leaves no row

  • A wrong vault key or an unknown vault: there is no vault open to write into. These count against the caller's address instead.
  • A malformed request, a missing entry, or a storage error — none is a refusal.
  • Unlocking a locked client, and removing a hardware key (that is recorded at central, not in the vault).

Next: read and filter the log →