Provared

A real record: the coding agent that builds Provared

A real record, for anyone who wants to see one. Evidence, not a verdict.

Everything else on this site is an invented example. This page is a real record, kept day by day: the coding agent the author runs to build Provared, recorded under permissions the author signed with their own passkey. The record is added to each day until the latest permission ends on 2026-12-31 23:59 UTC. This page was last made on 2026-10-31 17:51 UTC, from 2 books of 16925 entries in all (the book in force holds 2768).

What the agent is for

The agent is Claude Code, a coding agent, which the author uses in their own time to read and change the code of Provared in its repository, run its tests and tools, and publish what the author approves. The permission names it, allows seven kinds of action with limits on four of them, states five rules of conduct, and was signed on 10 October 2026 at prova.red/sign/ with the author's passkey (signing has since moved to sign.prova.red). It was renewed with permission 2, in force from 2026-10-14 19:23 UTC until 2026-12-31 23:59 UTC, with changes that its entry below shows. It was renewed with permission 3, in force from 2026-10-25 14:18 UTC until 2026-12-31 23:59 UTC, with the same actions, limits and rules. The author's name in it, "Pavel i", is what the author typed: a name in a record is a label, and only the keys are checked.

The permission of 14 October 2026 is signed with a different passkey from the first. The author states it is their own, made in another browser. The recorder takes a permission from a passkey it does not already trust only when told to with --new-passkey, and a checker names every passkey it trusts, as the command under "Check it yourself" does.

How it is recorded

A small program runs before and after every tool call the agent makes (Claude Code's "hooks"; the code is integrations/claude-code in the repository). Until 14 October 2026 at 19:05 UTC the hooks ran only for the common tools (reading and changing files, commands, the web and helper agents); from then, for every tool but a question to the person, a plan, a list of tasks, a skill or a search for tools, and for calls that failed as well. Before a call, the check before acting asks whether the call is within the permission; a call outside it is refused and does not run. After the call, the agent's side signs a receipt (a stub) with two keys, one of them quantum-safe, naming the kind of action, the tool, the time, and the SHA-256 fingerprint of the call's arguments. The arguments themselves, and the contents of any file, are never in the record. The kind of action is chosen by the hook from the tool's name and, for a command, from its text (a command that removes something counts as a deletion; one that pushes or publishes counts as a release), not by the agent. A recorder on the author's computer keeps the book and seals it at least once a day with three keys; the seals carry no outside time-stamp, so the time of a seal is the recorder's own word, and the checker says so.

The permissions, in the checker's words

Entry 0: SLIP CnTvaSDU7wh-PXnMyAG-EUNwtpoonB9DeM1OIPJfBOY
  Issuer:                        "Pavel i" (a label, not checked)
  Issuer's key thumbprint:       BkrSDxKyk2FW0GD0-WCyOKcRRXZs6QDLBPjlBMItPPk
  Signed on:                     https://prova.red
  Agent:                         "Claude Code, building Provared" (a label, not checked)
  May do:                        provared.code.read, provared.code.change, provared.code.run, provared.code.release, provared.data.delete, provared.web.read, provared.agent.instruct
  Limit:                         provared.code.run: no more than 600 actions in any hour
  Limit:                         provared.code.change: no more than 600 actions in any hour
  Limit:                         provared.code.release: no more than 20 actions in any 24 hours
  Limit:                         provared.data.delete: no more than 30 actions in any 24 hours
  Stated rule:                   Never hide, alter or leave out its own records.
  Stated rule:                   Never state what it has reason to believe is false, and never make up a record or a result.
  Stated rule:                   Never go around an access control, a block or a refusal.
  Stated rule:                   Never obtain or use access that it was not given.
  Stated rule:                   Never carry on after being told to stop.
  With:                          nobody named
  From, until:                   2026-10-10T21:08:16Z, 2026-10-18T21:09:16Z
  Purpose:                       "Build Provared, in the author's own time: read and change the code in its repository, run its tests and tools, and publish what the author approves."
  Signature, passkey (ES256): valid

Entry 3887: SLIP J0TC03NY5y5YKw7G3FbSrCMmflpfoatCsLaKTCpJNWY
  Issuer:                        "Pavel i" (a label, not checked)
  Issuer's key thumbprint:       Wt7n9Omj4ZvioJdUV4OhP2V0pAte3HAVpI0xqL_1aIw
  Signed on:                     https://prova.red
  Agent:                         "Claude Code, building Provared" (a label, not checked)
  May do:                        provared.code.read, provared.code.change, provared.code.run, provared.code.release, provared.data.delete, provared.web.read, provared.agent.instruct
  Limit:                         provared.code.run: no more than 1200 actions in any hour
  Limit:                         provared.code.change: no more than 600 actions in any hour
  Limit:                         provared.code.release: no more than 20 actions in any 24 hours
  Limit:                         provared.data.delete: no more than 30 actions in any 24 hours
  Stated rule:                   Never hide, alter or leave out its own records.
  Stated rule:                   Never state what it has reason to believe is false, and never make up a record or a result.
  Stated rule:                   Never go around an access control, a block or a refusal.
  Stated rule:                   Never obtain or use access that it was not given.
  Stated rule:                   Never carry on after being told to stop.
  With:                          nobody named
  From, until:                   2026-10-14T19:23:20Z, 2026-12-31T23:59:59Z
  Purpose:                       "Build Provared, in the author's own time: read and change the code in its repository, run its tests and tools, and publish what the author approves."
  Signature, passkey (ES256): valid

Entry 397: SLIP pa65cQYda7Olfhp3af_n4dcr3rDAzIgvXsPQXWLVgvA
  Issuer:                        "Pavel Izmaylov" (a label, not checked)
  Issuer's key thumbprint:       XbPOlvaqmi84fvS7KhaHZ54YiRWjrQdFFbLWGFEoEyw
  Signed on:                     https://sign.prova.red
  Agent:                         "Claude Code, building Provared" (a label, not checked)
  May do:                        provared.code.read, provared.code.change, provared.code.run, provared.code.release, provared.data.delete, provared.web.read, provared.agent.instruct
  Limit:                         provared.code.run: no more than 1200 actions in any hour
  Limit:                         provared.code.change: no more than 600 actions in any hour
  Limit:                         provared.code.release: no more than 20 actions in any 24 hours
  Limit:                         provared.data.delete: no more than 30 actions in any 24 hours
  Stated rule:                   Never hide, alter or leave out its own records.
  Stated rule:                   Never state what it has reason to believe is false, and never make up a record or a result.
  Stated rule:                   Never go around an access control, a block or a refusal.
  Stated rule:                   Never obtain or use access that it was not given.
  Stated rule:                   Never carry on after being told to stop.
  With:                          nobody named
  From, until:                   2026-10-25T14:18:35Z, 2026-12-31T23:59:59Z
  Purpose:                       "Build Provared, in the author's own time: read and change the code in its repository, run its tests and tools, and publish what the author approves."
  Signature, passkey (ES256): valid

What the agent did

16899 receipts, from 2026-10-10 21:20 UTC to 2026-10-31 17:50 UTC, under 22 seals. Days and times are in UTC.

DayReceiptsBy kind of action
2026-10-10192provared.code.run 122, provared.code.change 48, provared.code.read 11, provared.code.release 5, provared.web.read 4, provared.agent.instruct 2
2026-10-11496provared.code.run 334, provared.code.change 66, provared.web.read 57, provared.data.delete 17, provared.code.read 15, provared.agent.instruct 5, provared.code.release 2
2026-10-121612provared.code.run 1068, provared.code.change 273, provared.web.read 135, provared.code.read 113, provared.agent.instruct 17, provared.data.delete 4, provared.code.release 2
2026-10-131091provared.code.run 698, provared.code.change 242, provared.code.read 132, provared.data.delete 12, provared.web.read 4, provared.agent.instruct 2, provared.code.release 1
2026-10-141297provared.code.run 784, provared.code.change 311, provared.code.read 172, provared.data.delete 10, provared.agent.instruct 9, provared.code.release 8, provared.web.read 3
2026-10-15626provared.code.run 373, provared.code.change 185, provared.code.read 47, provared.agent.instruct 9, provared.data.delete 8, provared.code.release 4
2026-10-161265provared.code.run 746, provared.code.change 372, provared.code.read 82, provared.data.delete 30, provared.agent.instruct 21, provared.code.release 9, provared.web.read 5
2026-10-171906provared.code.run 1264, provared.code.change 379, provared.code.read 217, provared.agent.instruct 40, provared.code.release 6
2026-10-181966provared.code.run 1261, provared.code.change 484, provared.code.read 179, provared.agent.instruct 31, provared.code.release 7, provared.data.delete 4
2026-10-19681provared.code.run 458, provared.code.change 182, provared.code.read 28, provared.agent.instruct 10, provared.code.release 2, provared.data.delete 1
2026-10-20754provared.code.run 472, provared.code.change 153, provared.code.read 102, provared.data.delete 16, provared.agent.instruct 10, provared.code.release 1
2026-10-21301provared.code.run 176, provared.code.change 78, provared.code.read 37, provared.data.delete 5, provared.code.release 3, provared.agent.instruct 2
2026-10-23527provared.code.run 381, provared.code.change 66, provared.code.read 62, provared.data.delete 10, provared.agent.instruct 5, provared.code.release 3
2026-10-241272provared.code.run 932, provared.code.change 161, provared.web.read 79, provared.code.read 63, provared.agent.instruct 24, provared.data.delete 8, provared.code.release 5
2026-10-251228provared.code.run 927, provared.code.change 125, provared.code.read 56, provared.data.delete 45, provared.web.read 38, provared.agent.instruct 23, provared.code.release 14
2026-10-2625provared.code.run 12, provared.code.release 5, provared.code.read 3, provared.code.change 3, provared.web.read 2
2026-10-27252provared.code.run 156, provared.code.read 45, provared.code.change 35, provared.code.release 9, provared.agent.instruct 4, provared.web.read 2, provared.data.delete 1
2026-10-28244provared.code.run 150, provared.code.read 35, provared.code.change 25, provared.web.read 19, provared.data.delete 7, provared.agent.instruct 4, provared.code.release 4
2026-10-311164provared.code.run 839, provared.code.change 134, provared.code.read 79, provared.web.read 67, provared.agent.instruct 24, provared.code.release 13, provared.data.delete 8
Kind of actionReceipts
provared.code.run11153
provared.code.change3322
provared.code.read1478
provared.web.read415
provared.agent.instruct242
provared.data.delete186
provared.code.release103
ToolReceipts
Bash10829
Edit2010
Write1312
Read1292
WebFetch295
Grep179
Bash (failed)165
SubagentHandback164
Agent135
Monitor118
WebSearch113
SendMessage107
PowerShell105
TaskStop35
PowerShell (failed)10
Artifact10
WebFetch (failed)7
Read (failed)4
ListAgents3
Grep (failed)2
CronCreate2
Glob1
TaskStop (failed)1
SealCoversSealed atTime-stamp
entry 12 of book-1.jsonlthe first 12 entries2026-10-10 21:37 UTCno outside time-stamp: the time is the recorder's own word
entry 143 of book-1.jsonlthe first 143 entries2026-10-10 22:35 UTCno outside time-stamp: the time is the recorder's own word
entry 679 of book-1.jsonlthe first 679 entries2026-10-11 22:31 UTCno outside time-stamp: the time is the recorder's own word
entry 715 of book-1.jsonlthe first 715 entries2026-10-12 21:06 UTCno outside time-stamp: the time is the recorder's own word
entry 2334 of book-1.jsonlthe first 2334 entries2026-10-13 18:33 UTCno outside time-stamp: the time is the recorder's own word
entry 3755 of book-1.jsonlthe first 3755 entries2026-10-14 19:09 UTCno outside time-stamp: the time is the recorder's own word
entry 4718 of book-1.jsonlthe first 4718 entries2026-10-15 19:47 UTCno outside time-stamp: the time is the recorder's own word
entry 5326 of book-1.jsonlthe first 5326 entries2026-10-16 20:02 UTCno outside time-stamp: the time is the recorder's own word
entry 6616 of book-1.jsonlthe first 6616 entries2026-10-17 08:59 UTCno outside time-stamp: the time is the recorder's own word
entry 8526 of book-1.jsonlthe first 8526 entries2026-10-18 00:07 UTCno outside time-stamp: the time is the recorder's own word
entry 10437 of book-1.jsonlthe first 10437 entries2026-10-18 23:55 UTCno outside time-stamp: the time is the recorder's own word
entry 11094 of book-1.jsonlthe first 11094 entries2026-10-19 23:08 UTCno outside time-stamp: the time is the recorder's own word
entry 12535 of book-1.jsonlthe first 12535 entries2026-10-23 23:09 UTCno outside time-stamp: the time is the recorder's own word
entry 13954 of book-1.jsonlthe first 13954 entries2026-10-24 23:08 UTCno outside time-stamp: the time is the recorder's own word
entry 14154 of book-1.jsonlthe first 14154 entries2026-10-25 10:51 UTCno outside time-stamp: the time is the recorder's own word
entry 14156 of book-1.jsonlthe first 14156 entries2026-10-25 10:51 UTCno outside time-stamp: the time is the recorder's own word
entry 5 of book.jsonlthe first 5 entries2026-10-25 10:53 UTCno outside time-stamp: the time is the recorder's own word
entry 402 of book.jsonlthe first 402 entries2026-10-25 14:25 UTCno outside time-stamp: the time is the recorder's own word
entry 1072 of book.jsonlthe first 1072 entries2026-10-25 23:06 UTCno outside time-stamp: the time is the recorder's own word
entry 1231 of book.jsonlthe first 1231 entries2026-10-27 22:54 UTCno outside time-stamp: the time is the recorder's own word
entry 1422 of book.jsonlthe first 1422 entries2026-10-28 21:53 UTCno outside time-stamp: the time is the recorder's own word
entry 2766 of book.jsonlthe first 2766 entries2026-10-31 17:50 UTCno outside time-stamp: the time is the recorder's own word

Where it went outside its permission

The checker reports 1 entry outside the permission. Going outside is not a fault in the record: it is what a sound record shows.

The entry of 13 October 2026, explained: it is the 601st run of a command in one hour, where the permission allows 600. The author states that several helper agents were working at once. Each call was checked against the book as it stood when the call was asked, so calls asked at nearly the same moment near the limit were each allowed, because none of them was in the book yet, and together they could go over: at that time the check before acting did not count calls allowed and not yet recorded. Since 17 October 2026 the recorder counts each such call, for up to 15 minutes. The checker reports what happened, as it should.

The checker's summary, exactly as printed

Summary
  Is the record intact?                 yes
  Was every signature checked?          yes
  Did the agent stay within its slip?   yes, as far as this record shows
  Time-stamped in a way you trust?      no
  Witnessed by a witness you trust?     no (you named no witness you trust, --witness)
  Checked against keys you named?       yes: the passkeys you trust, and the recorder you expect
  Slips 2, stubs 2760 (countersigned 0, one-sided 2760), seals 6

The whole answer, one block for each entry, is checker-answer.txt.

The books

A book holds at most 100,000 entries, so the recorder seals a book at 90,000 entries (or at 100 MB of text, whichever comes first), keeps it, and starts a new one that begins with the permission in force. This record is in 2 books, each checked on its own; the summary above is the checker's answer for the book in force, book.jsonl.

The recorder enforces every limit across its books: it keeps the time and amount of every receipt in the books kept before, and its check before acting counts them, so a new book starts no limit again. A checker given one book counts within that book only, so around the start of a new book the record a checker is shown can hold, across two books, up to twice a limit within one period, though the agent was held to the limit; a total for the whole permission is split between the books. To see the whole, check every book, and add up the receipts of the last of one book and the first of the next.

A kept book moved, renamed or removed while the recorder is stopped is no longer counted by it, and nothing in the record shows that. The recorder numbers its kept books 1, 2, 3 in order, so this page points out a gap in the numbers; it cannot show a missing last one, nor tell a book that has gone from a file put in the folder by hand.

BookEntriesReceiptsFromTo
book-1.jsonl14157141392026-10-10 21:20 UTC2026-10-25 10:51 UTC
book.jsonl276827602026-10-25 10:52 UTC2026-10-31 17:50 UTC

The checker's summary for book-1.jsonl (14157 entries, about 96472 KB), exactly as printed; the whole answer is checker-answer-1.txt.

Summary
  Is the record intact?                 yes
  Was every signature checked?          yes
  Did the agent stay within its slip?   NO: first at entry 3135
  Time-stamped in a way you trust?      no
  Witnessed by a witness you trust?     no (you named no witness you trust, --witness)
  Checked against keys you named?       yes: the passkeys you trust, and the recorder you expect
  Slips 2, stubs 14139 (countersigned 0, one-sided 14139), seals 16

Each kept book is checked as the book in force is, naming the same keys:

npx provared-check book-1.jsonl --issuer BkrSDxKyk2FW0GD0-WCyOKcRRXZs6QDLBPjlBMItPPk --issuer Wt7n9Omj4ZvioJdUV4OhP2V0pAte3HAVpI0xqL_1aIw --issuer XbPOlvaqmi84fvS7KhaHZ54YiRWjrQdFFbLWGFEoEyw --sealer OOgdiubfBSeXkjMOi5bUcbFyXpuuorxC2gdtV2oyAhw

Check it yourself

The book in force is book.jsonl (2768 entries, about 18989 KB); the books kept before it are under "The books" above. The permissions of all the books, each once, alone are slip.json, slip-2.json, slip-3.json. A checker trusts nothing it is not told to trust, so name the keys: the three passkeys that signed the permissions, each by its thumbprint, and the recorder's three keys, by the fingerprint of the set. With Node.js 24.7 or later:

npm install provared
npx provared-check book.jsonl --issuer BkrSDxKyk2FW0GD0-WCyOKcRRXZs6QDLBPjlBMItPPk --issuer Wt7n9Omj4ZvioJdUV4OhP2V0pAte3HAVpI0xqL_1aIw --issuer XbPOlvaqmi84fvS7KhaHZ54YiRWjrQdFFbLWGFEoEyw --sealer OOgdiubfBSeXkjMOi5bUcbFyXpuuorxC2gdtV2oyAhw

Or in a browser, on the checking page: choose the file, and paste the thumbprints, one to a line, into the passkey box and the fingerprint into the recorder box. No browser tried on the author's computer on 13 October 2026 (Chrome 155, Edge 155 and Brave 155) has the third method a seal is signed with (SLH-DSA), so in a browser the page says that the check was not complete and gives no pass; all three check the receipts' quantum-safe signatures (ML-DSA). The command-line checker checks everything.

What this record does not show

The checker says this itself, at the end of its answer:

And two things of this record's own. A refused call leaves no entry, so the record does not show how often the agent was stopped. Every receipt is one-sided, because no other party takes part in a tool call, so each shows what the agent's side said.

Two gaps in this record, stated. On 11 October 2026, seven tool calls of a helper agent were taken and not recorded: the recorder could not replace the book file while another program was reading it, and the hook reported each as "taken and not in the record". The fault and its fix are in the change log; the seven calls stay unrecorded. On 17 October 2026, at about 15:05 UTC, the recorder was restarted on new code and did not answer for a short time: one tool call of a helper agent was taken and its receipt not written, and the hook reported it as "taken and not in the record"; that helper's next call was refused.