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
- The team CRM (WS-170, 5 November): a new pair,
ws-team-crm-public(public facts, its read key published) andws-team-crm-private(the team's records, sealed a second time to each record's audience). See the team CRM. - Six vaults on dev.send.sgraph.ai: public and private for the CRM, the messages (Email-FS) and the task board (Issues-FS). Each holds only a README (REALITY.md).
- Their vault keys are sealed to the DC Vault Registry key (
sha256:06c6ccddb7476629, on the keys page), handed over by Dinis as a QR code on 28 October. Only the agent holding that key can open them. - Agent keys are on the keys page: one entry per agent, the public half only, each pushed by the session that made it (the start page, step 6).
- The first private vault (WS-23): the meetings vault, made by vault@web-summit.vicky from the template on 3 November. It is empty until Vicky and Nimay add the booked meetings on 4 November. Its key is sealed only to pm@web-summit.vicky, and to Nimay's agent once it has a key. Contacts and introductions (WS-24) get a vault of their own.
- The first public vaults: Angelo's and Vicky's, listed below.
- Not yet: one of the six team vault keys sealed to a team member's agent (the tool is ready; the vault registry key's holder runs it), and encrypted material on the site (WS-38).
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.
- The agent makes its own key in its session (
node pki-agent.mjs keygen --session) and commits only the public half todata/keys.json. The private half never leaves the session. - 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.
- 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 outside this repository's clone: in the vault's own.sg_vault/local/(the vault lives in~/vaults/<name>), or under~/.sg-send/. Never anywhere in the clone, not even in an ignored folder: the gate reads every file there and stops the build on a key. - The agent clones the vault with
sgitand 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). Nothing is in a vault yet. The shape is ready as a template: the three folders with a _template.md each, the rules in PRIVATE.md, and AUDIT.md for what leaves the vault.
| Folder | One file per | Fields |
|---|---|---|
meetings/ | booked meeting | who, when, where, owner, what we bring, public or not |
contacts/ | person or organisation | who, how we know them, owner, next step, by when |
introductions/ | introduction made to us | from, 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
A vault key is sealed only to an agent key that seal.mjs --verify passes. The key must be active and not replaced, and the push that added it, and every push that changed it since, must come from an account the roster (data/team.json) lists for its person. Otherwise its fingerprint must be confirmed with that person directly. The whole keys page, checked on 6 November at 17:00 UTC (72 entries, in seconds):
| Whose keys | Pass | Not yet |
|---|---|---|
| Dinis | 11 (with ontologist@PrompTugal.dinis) | |
| Angelo | 8 | |
| Jose | 10 | |
| Silvio | 8 | |
| Vicky | 18 (with checker@PrompTugal.vicky) | |
| Indi | 11: the roster lists no GitHub account for Indi yet (riskmandate-indi waits on Dinis's word) | |
| No person in the label | 3: the vault registry key and the first two conductor sessions; fingerprint only | |
| Ended, retired or replaced | 3: never sealed to |
Run it yourself: node admin/tools/seal.mjs --verify agent:<key id>,person:<person id>,... (from a full clone, not a shallow one). crm.mjs seal-keys runs it before every seal (WS-178).
Everyone's own vaults
Everyone now makes their own vaults, through a vault agent with an SG/Send access token of its own (one per agent, from 5 November): 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.
| Vault | Whose | What it holds | Open it (read only) |
|---|---|---|---|
Who reads web-summit.sgit.ai: the published data (aym98gsm) | Dinis Cruz, observability@web-summit.dinis | observability@web-summit.dinis's public data: page views and reads per group (readers, team, synthetic, crawlers), the team's reads by site key, and every agent's run log, as data/public.json, refreshed by the hourly drain; with the app (index.html) that renders it. No anonymous row. The private vault it is drained from (kuuqr3do) is not published. | in SG/Vault · sgit clone sgit_public_read_49b19183eebfe091e28a939bc681764b860562458d4b4902f96e91781de74ef2:aym98gsm |
Who reads web-summit.sgit.ai: the app (Dinis's) (p96tiql4) | Dinis Cruz, observability@web-summit.dinis | The observability app, code only: one self-contained index.html that reads data/public.json over the vault bridge. Its source is people/dinis/observability/app/index.htm. | in SG/Vault · sgit clone sgit_public_read_ca7119c0d4cfad565e3ad4b050a706c0db103a420675b56f755efaa25b8bd4f9:p96tiql4 |
The stand reel (cf8uki85) | Dinis Cruz, conductor@web-summit.dinis | The twelve approved stand videos from the team's videos vault (h9in5em4, kept by video@web-summit.silvio), every language and format, cut into 4-second fragmented-MP4 pieces under 4 MB so the command centre's VÍDEOS view (assets/cc/demo.js) plays them in the browser through the vault's read API. Content unchanged, re-encoded at 1080p. reel.json lists them. | in SG/Vault · sgit clone sgit_public_read_9a441f69a9e8caf4209ca30c848bae0b9878b6a95351a8fdb6da2404e8257f99:cf8uki85 |
Silvio on RiskMandate (ayaexnc7) | Silvio Switha, vault@web-summit.silvio | Who Silvio is on the team and RiskMandate in short (Reach, Mandate, Gap, Barriers), with links to his pages. A README; audited before publication. | in SG/Vault · sgit clone sgit_public_read_b2fa6fce31ebb474fec8d1c5e0027e2f1972befbe02635026563c2f83fc56268:ayaexnc7 |
Silvio's videos (ws-team-videos) (h9in5em4) | Silvio Switha, video@web-summit.silvio | The stand loop in six languages (MP4 and HTML pages, previews, the clean source pictures) and the 30-second film; checked, nothing with an error; a video.json per video (WS-174) | in SG/Vault · sgit clone sgit_public_read_d89e235f091c13bb58e495c8744a2a4adb73d2f9ddca63bfb4a43cbb3848b60e:h9in5em4 |
GAMMA-Ray scans of Silvio's agents (skz9rwpu) | Silvio Switha, gamma-ray@web-summit.silvio | The eleven GAMMA-Ray Public scans of Silvio's own agents, the levels computed with the standard's model, and a copy of every public page they were read from (10 November 2026); audited before publication (WS-206). | in SG/Vault · sgit clone sgit_public_read_2ea15f20f56b2edcd0a51c94321524a68f8908ee6c84da5923a3eb9e6cc88c0f:skz9rwpu |
Angelo's Web Summit vault (ucvg2pkv) | Angelo, vault@web-summit.angelo | Angelo's first vault: a README and PUBLIC.md, public, nothing secret; audited with its read key before publication | in SG/Vault · sgit clone sgit_public_read_3fbcdfaefeeeb0157e359c2223d0739d57715afe338fa16f8cc31830634dc376:ucvg2pkv |
Vicky at Web Summit (k64ma7jd) | Vicky Wang, vault@web-summit.vicky | Vicky's showcase after the summit: eight live pages (her Humans and AI interview, the PrompTugal.news front page, the newsroom's workflow, story ideas, the Live AI Office and articles), each with Open and a live Preview, in a vault app that also checks its own files, reads its history and shows its sandbox. | in SG/Vault · sgit clone sgit_public_read_2ac60a307cb9150924929791e558d6966991151a93ca1b1efa02534aa88b2c65:k64ma7jd |
Vicky's research vault (newsroom) (41j3e9s9) | Vicky Wang, vault@web-summit.vicky | The Web Summit 2026 newsroom's research desk: one capture per public source (the summit, Portugal, Europe, announcements), each with its URL and read date. Kept by researcher@web-summit.vicky; audited before every push. | with sgit only (a pack vault has no web view): sgit clone sgit_public_read_73b6bde689942850b42d941aa2582c48cfdc59c45e6845a90e19ff7720039fe5:41j3e9s9 |
Synthetic users: the business cards, run 1 (nnsikio4) | Indi Gupte, synthetic@web-summit.indi | Five invented personas get a RiskMandate business card, scan it and say what they make of it (WS-142): personas, journeys, runs, findings, measurements, the card images and phone screenshots, and the tools. Everybody in it is invented; it is not user research. Audited with its read key by a security sub-agent before publication | in SG/Vault · sgit clone sgit_public_read_36341681a2e9106de274d18ac6647f1649796eabbbc243617e844039ba733fb1:nnsikio4 |
Synthetic users, run 2: the six round-2 card designs (4c52covm) | Indi Gupte, synthetic@web-summit.indi | The same five invented personas judge the six round-2 RiskMandate card designs: Record is picked by four of five, Terminal by the engineer. Personas, journeys, runs, findings, measurements and the 60 card images. Everybody in it is invented; it is not user research. Audited before publication (WS-142). | in SG/Vault · sgit clone sgit_public_read_c6b81fbb977185027dabd2a070e1b12626b552ee17fe3ca1ab29f208c39c9045:4c52covm |
Reach, Mandate, Gap (3b9y9n9t) | Jose Bota, vault@web-summit.jose | A vault app: pick an example agent, tick what it is authorised to do, and see the gap between its reach and its mandate. Self-contained, read-only, audited before publication. | in SG/Vault · sgit clone sgit_public_read_61eb18a77759ed0ee737fda03befd205d30f0ff6036e9d7703cc71f0d427a8f9:3b9y9n9t |
Who reads web-summit.sgit.ai: the application (5rmsy87y) | Jose Bota, conductor@web-summit.jose | The observability app (WS-37), code only and no data: Overview and an in-vault drain, run by the private data vault that links it. Published read-only at Jose's word; audited before publication (latest revision clean; two earlier revisions held a PEM header in test code, ruled out by reading). | in SG/Vault · sgit clone sgit_public_read_731e9d55b15019c57b00173c7d8156267a062514c362e9e7a7b680d1e69bbc8b:5rmsy87y |
Agent policy explorer (rius8gwy) | Jose Bota, vault@web-summit.jose | A vault app: every agent on the team's Reach, Mandate, Gap and Barriers, from the 44 published ABPs, one agent at a time or the whole team side by side. Self-contained, no permissions, built like sgit.ai's Risk graph explorer; audited before publication. | in SG/Vault · sgit clone sgit_public_read_c377ac3e30ff1668526448d253112f12082828c9fb2746f574380304b394065b:rius8gwy |