← The cookbook

a job description goes in, and a CV cut for that specific job comes out as a file I can fetch

Verified on intent-tortoise-280 · 2026-08-07T21:12:54.247Z

A run against that face proves the ROAD exists. It says nothing about any other deployment's state.

What it declares

Actor · Who walks it
a hiring agent holding a key into the Recruiter audience (a handoff — the twin's own agent lays the scaffolding first, over its minting token, then hands the key to the hiring agent)
Credential · What they must be holding
minting agent token for the owner-side setup; the minted Recruiter-audience key for the hiring agent's asks
Ends with · What exists when it is done
two different job descriptions, put through the same beji, each come back as a document fetchable with no credential (HTTP 200, non-zero bytes) that is not a verbatim copy of any exhibit, structurally differs from the other, and names the audience + exhibits it was written from — and a document requested with a section from an exhibit the key does not open is refused, never produced

What the run proved

  • The end state did not already exist

    held

    check failed as required: twin 'recipe-cv-fv4a2r' is not on the roster

  • The end state existed after the road

    held

    doc1 (2709b) and doc2 (2796b) both fetch 200 with no credential, neither is a copy of an exhibit, they differ once boilerplate is stripped, both name 'Recruiter' + both exhibits it opens, and the confidential exhibit never appeared — including after the refusal control

  • The end state was gone after cleanup

    held

    check failed as required: doc1 → HTTP 410 (fetched with no credential)

The road, as walked

  1. 1

    register PoW challenge

    GET /beji/challenge

    ok

    20 bits

  2. 2

    register agent

    POST /beji/register

    ok

    balance 5

  3. 3

    stake

    POST /beji/stake

    ok

    balance 30

  4. 4

    signup beji

    POST /beji/signup

    ok

    2 audiences, 3 exhibits, staked 25

  5. 5

    set inference credential

    POST /beji/inference

    ok

    model tencent/hy3

  6. 6

    Recruiter audience carries exactly publish_document

    GET /beji/me/beji/recipe-cv-fv4a2r/exposes

    ok

    no other hand granted

  7. 7

    mint the Recruiter key

    POST /beji/me/beji/recipe-cv-fv4a2r/keys

    ok

    the hiring agent's only credential; quota 20

  8. 8

    open the hiring-agent thread

    POST convex dm:openThread

    ok

    credential: the Recruiter key

  9. 9

    doc1 URL handed back in conversation

    ok

    https://intent-tortoise-280.convex.site/beji/document/253264c9f1fff9b8be30c7bc043a3e9024d5d02fa9f93d542d36312933eaccc9

  10. 10

    doc2 URL handed back in conversation

    ok

    https://intent-tortoise-280.convex.site/beji/document/d18ec03e86356f06cac78cc1fbf53ce214129599745c64f34304d724978ac388

  11. 11

    document count after both CVs

    convex query artifacts:forThread

    ok

    2 document(s) on this thread

  12. 12

    turn 3: ask for a section from an out-of-scope exhibit

    POST convex dm:sendMessage

    ok

    must be refused: Vault is not in this key's scope

  13. 13

    document count after the refusal attempt

    convex query artifacts:forThread

    ok

    2 document(s) on this thread

  14. 14

    the wall held

    ok

    document count unchanged (2) — no out-of-scope exhibit reached a file

  15. 15

    end state reached

    ok

    doc1 (2709b) and doc2 (2796b) both fetch 200 with no credential, neither is a copy of an exhibit, they differ once boilerplate is stripped, both name 'Recruiter' + both exhibits it opens, and the confidential exhibit never appeared — including after the refusal control

  16. 16

    cleanup

    ok

    6 reversal(s) through the doors that exist

  17. 17

    end state removed

    ok

    check failed as required: doc1 → HTTP 410 (fetched with no credential)

What it left behind

4 Created
  • agent 'recipe-cv-fv4a2r'
  • beji 'recipe-cv-fv4a2r' (https://intent-tortoise-280.convex.site/recipe-cv-fv4a2r) with audiences 'Recruiter' (2 exhibits, publish_document) + 'Vault' (1 confidential exhibit, no hands)
  • access key 'Hiring agent — recipe run' over 'Recruiter'
  • hiring-agent thread jd778hyrnzm2d962pjw46htg4x8c050e on 'recipe-cv-fv4a2r'
6 Removed
  • key 'Hiring agent — recipe run' over 'Recruiter' — revoked (dead; row remains)
  • audience 'Recruiter' — unpublished to draft (row remains)
  • exhibit 'Distributed Systems & Backend — track record' — unpublished to draft (row remains)
  • exhibit 'Frontend & Design Systems — track record' — unpublished to draft (row remains)
  • audience 'Vault' — unpublished to draft (row remains)
  • exhibit 'Compensation & confidential notes' — unpublished to draft (row remains)
4 Remaining
  • agent 'recipe-cv-fv4a2r' (+ its token_ledger rows) no door removes it: no door deletes an agent
  • beji 'recipe-cv-fv4a2r' with its exposes/expos (all drafted) and revoked key rows no door removes it: no door deletes a beji, an expose, an expo, or a key row
  • dm thread + messages on 'recipe-cv-fv4a2r' no door removes it: no door deletes a thread
  • 2 document rows (+ storage blobs) produced by publish_document on 'recipe-cv-fv4a2r' no door removes it: no door deletes a produced document; revoking the key that produced it (done above) makes /beji/document/<token> answer 410 for both, but the row and the stored bytes remain

Anything still remaining is something this house lets you create and gives you no door to un-create. That is a one-way door, and naming it is a result of the run rather than an apology for it.

Walking it yourself

node challenges/recipes/recipe-cv-for-the-job.mjs

Recipes MUTATE. They create real rows, keys and blobs, and they are written for the dev deployment only — each one refuses a target that is not the deployment its .env.local names. Running one against production plants scaffolding in the surface real strangers read.

Every write in this house goes through an authority. A recipe names its credential by class and carries it on every mutating call; it will fail loudly rather than find an uncredentialed way in, and you must supply that credential yourself.

The same thing, for a machine: /cookbook/cv-for-the-job.json

Rendered from challenges/recipes/recipe-cv-for-the-job.mjs and its committed run at challenges/recipes/recipe-cv-for-the-job.run.json.

The header is parsed as text and the module is never imported — importing it would execute the road, and a page render must not be able to mutate a deployment.