Skip to content

What you can record

One record per thing a machine did or produced, one entry per event in its life. Here are the shapes an entry takes for the cases people bring us.

Every entry carries the same few fields: a title a person can read, the kind of thing it is in your own word, when it occurredAt, the actorId that did it, and the payloads, which are the fingerprints of the files it names. Everything else is optional. The cases below differ only in what you put in those fields.

One rule runs through them: the first entry's title is the record's name, stored once and never rewritten, even by a later correction of that entry. A record with one entry names itself. A record that will hold many entries, an agent's run, opens with an entry that names the run, and the actions follow as entries of their own.

What an agent did, and on whose instruction

An agent acts, and later someone asks what it did and who told it to. One record per run, one entry per action. The first entry names the run and carries the fingerprint of the instruction it was given; each action is an entry after it. actorId names the agent, instructedBy names the person or system that gave the instruction, and payloads carries the fingerprint of what the agent read or produced.

typescript
// Entry 1 names the run. Its title is the record's name.
await pac.records.emit({
  record: 'run-2026-09-15-0417',
  title: 'Support run for ticket 4471, 15 September',
  kind: 'agent-run',
  occurredAt: '2026-09-15T16:03:51Z',
  actorId: 'support-agent-3',
  instructedBy: 'j.alvarez',
  payloads: [await fingerprint(instruction)],
});

// Each action is an entry of its own.
await pac.records.emit({
  record: 'run-2026-09-15-0417',
  title: 'Closed ticket 4471 and emailed the customer',
  kind: 'ticket-close',
  occurredAt: '2026-09-15T16:04:17Z',
  actorId: 'support-agent-3',
  instructedBy: 'j.alvarez',
  payloads: [await fingerprint(emailBody)],
});

A model release and its settings

A model build passes testing and ships. The entry names the build and carries the fingerprint of the artifact, so a later question about which version was live, and with which settings, has one answer.

typescript
await pac.records.emit({
  record: 'build-2026-09-15-0417',
  title: 'Model build passed testing, 15 September',
  kind: 'model-build',
  occurredAt: '2026-09-15T16:04:17Z',
  actorId: 'ci-runner-7',
  payloads: [await fingerprint(await openAsBlob('./build-2026-09-15.tar'))],
});

What a coding agent changed, and what it reported

A coding agent opens a pull request and writes a summary of what it did. Record both: the fingerprint of the diff and the fingerprint of the summary, in one entry. If the summary is later found not to match the diff, the record holds both exactly as they were at the time.

typescript
await pac.records.emit({
  record: 'pr-8812',
  title: 'Opened PR 8812 against main',
  kind: 'pull-request',
  occurredAt: '2026-09-15T16:04:17Z',
  actorId: 'code-agent-2',
  payloads: [await fingerprint(diff), await fingerprint(summary)],
});

What an agent read before it acted

An agent reads a policy document, a contract, or a set of instructions and then acts. Record the fingerprint of what it read as its own entry in the run's record, before the action's entry. The record then says what version the agent had in front of it.

typescript
await pac.records.emit({
  record: 'run-2026-09-15-0417',
  title: 'Read the refund policy, version of 12 September',
  kind: 'read',
  occurredAt: '2026-09-15T16:03:58Z',
  actorId: 'support-agent-3',
  payloads: [await fingerprint(policyBytes)],
});

Whether a person approved it first

Some actions wait for a person. Record the approval as its own entry, with the person as actorId, and the action that followed as the next entry. The order of entries is part of the record.

typescript
await pac.records.emit({
  record: 'run-2026-09-15-0417',
  title: 'Refund of 240.00 approved',
  kind: 'approval',
  occurredAt: '2026-09-15T16:04:02Z',
  actorId: 'j.alvarez',
  payloads: [await fingerprint(approvalForm)],
});

Records handed to another organization

Your agent did work for another company, and their team wants to check it without trusting you or asking PacSpace. Write the record as usual, then share it. Their browser runs the check when the record opens. See the last step of the quick start.

What you do not send

PacSpace never receives the file. It receives the fingerprint and the size. Storage locations, file names, and the contents of what you fingerprinted are not part of the record. What a person reads in the list is the title, and what the check confirms is that the sealed entry, fingerprints included, is exactly what was committed.