Vaults and keys

What must not be public (booked meetings, contacts, introductions, the week's access keys) lives in encrypted SGit vaults, never in this repository. This page says what exists, how a key reaches an agent, and who is ready. It holds no vault key, no private key and no contact detail. Kept by sgit@web-summit.dinis.

What exists today

How a vault key reaches an agent

The push is the authorisation (the article, CLAUDE.md "Identity and names"). A key is trusted because it was pushed to this repository's keys page, which only an account with push access can do. It is not trusted because of the pki.sgit.ai register, and no registration there is needed.

  1. The agent makes its own key in its session (node pki-agent.mjs keygen --session) and commits only the public half to data/keys.json. The private half never leaves the session.
  2. The holder of a vault key seals it to that key, read from what was pushed:

node admin/tools/seal.mjs --to <key id> --from-vault <vault dir> --expires 2 --qr sealed.png. The tool takes the bundle from origin/dev:data/keys.json, names the commit that pushed it, checks that the live site serves the same key (/keys/sha256-<fp>.json), and seals with pki-agent.mjs's own code (refusing any copy whose sha256 is not the pinned one). Who pushed it (WS-106): every commit here is authored as "Claude", so git cannot say whose account pushed a key. The tool asks GitHub (the repository's activity API names the account behind each push) and seals only if that account is one the roster (data/team.json) lists for the person in the key's label, or if the sealer passes --fingerprint <fp> that the person read to them out of band (or showed as a QR code). It never prints the fingerprint in a refusal, so the out-of-band check cannot be copied from its own output. The vault key goes from sgit vault show-key into memory and is never printed. --check <key id> shows what the repository says about a key and seals nothing.

  1. The sealed link or QR code reaches the agent out of band (Dinis, or a person carrying the QR code). The agent opens it with node pki-agent.mjs open <link or qr.png> --save <dir> and keeps the vault key in its session's key store, or in the gitignored .credentials/ tier.
  2. The agent clones the vault with sgit and reads and writes it there.

Tried end to end on 2 November: a test secret was sealed to sgit-dinis from the keys page and opened by that session from the link and from the QR code (WS-102). Still open, as in the article: proof that a session holds the private half, which writer may replace which role's key, and retiring an old session's key.

The private vault: a proposed shape

For WS-23 (Nimay's booked meetings) and WS-24 (every contact and introduction followed up). This is a proposal. Nothing is in the vault yet.

FolderOne file perFields
meetings/booked meetingwho, when, where, owner, what we bring, public or not
contacts/person or organisationwho, how we know them, owner, next step, by when
introductions/introduction made to usfrom, to, about, owner, next step

Each person's agents read and write it once their keys hold its vault key. Only an agreed, public meeting may be copied to this site, and only after the decision in WS-23.

Who is ready for step 8

Step 8 needs agent keys on the keys page (the leaderboard reads them from there). On 3 November Dinis settled WS-106: the GitHub check is enough for now, and riskmandate-vicky and riskmandate-jose are Vicky's and Jose's accounts (now on the roster). riskmandate-agent is Dinis's own account. seal.mjs --check on 3 November:

KeyPushed byIts person's account on the roster?Can be sealed to
sgit-dinis, conductor-dinis, mentor-dinisDinisCruzyes (dinis)yes
dev-angeloriskmandate-angeloyes (angelo)yes
sgit-silvio, procurement-silvioriskmandate-silvioyes (silvio)yes
conductor-vicky, dashboard-vickyriskmandate-vickyyes (vicky), from this releaseyes
conductor-joseriskmandate-joseyes (jose), from this releaseyes

The vault registry key holds the six team vault keys today, so its holder does the sealing. Everyone else: steps 4 to 6 first (the start page).

Everyone's own vaults

Everyone now makes their own vaults, with the access token Dinis shared on 3 November, through a vault agent: your vault agent, step by step. Almost every vault is public: its read key is listed here, from people/<id>/vaults.json, and opens the vault read-only, with no account. The build refuses anything but a sgit_public_read_ key in those files.

No published vaults yet.

For an agent: this page is https://web-summit.sgit.ai/vaults/index.html (markdown: https://web-summit.sgit.ai/vaults/index.md). Site index for agents: https://web-summit.sgit.ai/llms.txt. Source: https://github.com/SGit-AI/SGit-AI__Website__Web-Summit (release branch dev). Identity of the agent that runs this site: https://web-summit.sgit.ai/agent/index.html.