for agents/llms.txtv0.11.1

Home / Articles / Two agents, one vault: the Industry Wire is written into an encrypted vault by one agent and drawn by newsroom.sgit.ai, which holds only the read key

Two agents, one vault: the Industry Wire is written into an encrypted vault by one agent and drawn by newsroom.sgit.ai, which holds only the read key

By · 2026-10-12 · article v1.0.0 · sgit.ai v0.7.65 · vaultsagentsnewsroomindustry-wireread-keyclient-sideprovenancepersonasworkflowmyfeedsarticle

Abstract: Open newsroom.sgit.ai/wire/#lens=dinis and you get a week of industry news read as me: forty stories across five beats, each with its primary source, who else covered it, one exact quote and why it matters, twenty-five of them reaching me through a named concern and fourteen withheld with the reason, and a personal brief at the top. None of it is on the newsroom. It is in an encrypted sgit vault that a separate agent wrote on the afternoon of 11 October, in a session the newsroom never saw, with a write key the newsroom does not have. The newsroom's own agent, in its session, took the vault's read key, published it on purpose, and built three pages and about four hundred lines of code that open the vault in the reader's browser, decrypt it and draw it as text, with twenty-eight checks against the real vault in CI. A commit to the vault is on the page within two minutes, with no release of the site. This article walks the workflow from both sides, with the two git logs as the record: what the wire desk wrote and under what rules, what the newsroom holds and what it refused, why the vault is the right interface between two agents that never share a session, and the honest list of what is unreviewed. It is also the first running piece of a plan I had years ago and did not use, and I am now its first reader.

Two agents, one vault. The wire desk writes the vault with a key the site never holds; the vault server holds ciphertext; newsroom.sgit.ai holds the read key and draws what the reader's browser decrypts. The timeline is from the two git logs.

Open newsroom.sgit.ai/wire/#lens=dinis and you get a week of industry news read as me. Forty stories across five beats, each with where it came from and who else covered it. Twenty-five of them reach me through a concern the vault knows I have; fourteen are withheld, each with the reason. At the top, a personal brief: three things I can write about directly, and a note for the PKI site.

The thing I find remarkable is not the page. It is that the newsroom did not write any of it, does not store any of it, and could not change a word of it if it wanted to. The news is in an encrypted vault that a different agent keeps. The newsroom holds the vault's read key and draws what the key opens. Two agents, two sessions, two git logs, one vault between them, and a page that updates when the vault does.

In short

What the reader sees

The wire's edition page on 12 October. The grey line is the vault's own head: its id, the time the pointer was checked, the commit and its message. Then the editor's note and the three threads of the week, read from the vault seconds earlier.

The page opens with a line that tells you where it came from: the vault id, the time the head pointer was checked, the commit's short id and the first hundred characters of its message, and how many objects were fetched or came from cache. Then the edition: an editor's note of three sentences, three threads the desk saw running across the week, the lead story with why it leads, and the stories by beat.

Each story is the same shape. A headline, a date, the primary source and what kind of source it is, a confidence level, a summary in the desk's words, one exact quote with where it came from, why it matters, and a fold for who else covered it. The chips at the bottom are the entities the desk extracted and the personas the story is tagged for.

The lead story as the page draws it: date, publisher, source kind, confidence, why it leads, the summary, the quote with its source, why it matters, who else covered it, the entities, and the status the vault gave it.

Then the lens. "Read as" offers the six public personas, Morgan the founder, Kai the AI builder, Sam the security lead, Jordan the board member, Rowan the journalist, and the risk owner, and one named reader. Pick one and every beat heading changes to how many stories reach that reader and how many are withheld, each withheld story folds under the heading with its reason, and the lens goes into the address, so a link can carry it.

Under the Dinis lens, two stories in the first beat are withheld, and the page says why: no concern matched, and the ten concerns that were tried. The next beat says five reach and three are withheld.

Under my own lens there is one more thing: the personal brief the desk wrote, as the vault wrote it. A note of four sentences, and seven stories by join score with the concerns that matched each, linked to the stories on the page. Under it, the sentence that makes it allowed: "A named reader, by their own agreement while the wire is a beta. Like everything in the vault, this brief is public."

The personal brief under the Dinis lens: the note, seven stories by score with the concerns that matched, and the sentence that says why a brief for one person is on a public page.

The vault, and the agent that keeps it

The vault was made in a session I was not in, by an agent working from a voice brief, and it says so in its README: a first pass, 11 October 2026, built by research agents, not yet reviewed by a person. Its history is two commits, an init at 16:16:03 UTC and the first pass nine seconds later, 24 files. Anyone can read it:

sgit clone sgit_public_read_4c7aefb739e52e9a03c35be01bf7e311af00872e33c477b4d7c4319cdb91bdba:u9i9jp0l

What is in it, in the desk's own order:

The vault opened as its own app, read-only, with the public key: the same edition, the same lens, the same numbers, drawn by the code inside the vault rather than by the newsroom.

The runbook is where the workflow shows its discipline. The desk is four roles, and each may write only in its own folders: a Poller that never judges importance, a Clusterer that never writes prose, an Extractor that never invents an entity absent from the frozen bytes, a Writer that never writes a quote that is not in a frozen source. The Editor, a person or the newsroom's Editor role, places stories on the front; the desk only proposes. Before a commit, a gate fails the run on a quote not found in frozen bytes, a quote from a tier-C source, a missing date, a missing licence line, or a story marked confirmed with fewer than two independent sources. And there are stop conditions that end the run and report instead of publishing: the gate failing twice, more than 30 per cent of sources degraded, a story about a named private individual.

None of that is new to readers of this site. It is the story as a graph with provenance first, the Editor as the one role that places, and the rule from Every mistake added a rule that a component which makes the mistake impossible beats a prompt that asks the model to remember. What is new is that the desk is a different agent from the one that runs the site, and the only thing between them is the vault.

The site that only reads

The newsroom's own agent, in its own session, found the vault on the afternoon of 11 October and released the wire at 23:51 UTC as v0.9.0. The commit message is the design, and the how page says the same thing to a reader.

How the wire works, on the newsroom: how the site reads the vault, the contract between the vault and the site, and the clone command with the read key, which is the whole credential.

How the site reads the vault is five steps, all in the reader's browser. Derive the address of the vault's head pointer from its id. Fetch the pointer, then the commit, then the tree, then three files: the bundle, the deliveries and the documents. Decrypt each with Web Crypto using the read key. Draw. The code is sgit.ai's vault reader, vendored and cut down to 182 lines, and a drawing file of 214 lines that builds every element with createElement and textContent, makes a link only from a value that starts with http, and renders the vault's markdown documents through a renderer that escapes. Nothing from the vault is run. The page re-checks the pointer at most every two minutes, and caches for good the objects that cannot change, because their ids are their hashes.

What the site holds is one config file: the server, the vault id, the read key, the files it reads, and now the named readers. The read key is public on purpose, and the file says what that means in its first line: the key can read every file and every commit of this vault and cannot write, so everything in the vault is public, for ever, because a published read key cannot be withdrawn from anyone who has fetched the objects. The write key is held by the agents that run the wire and is not on the site. That sentence is the whole security model, and Where the vault keys live is why it holds.

The contract between the vault and the site is on the how page, in words a person can read and a test can check: the bundle has beats, stories, sources, personas and a brief; each story carries sixteen named fields; the deliveries carry five. A story's status is shown as written, so "ai-generated, unreviewed" stays on the page until the vault says otherwise. The head commit's message is shown on every wire page. And the one rule about privacy: nothing private goes in the vault, not frozen tier-B bytes, not a reader's feedback, not a brief meant for one person unless that person has agreed to it being public.

Then the tests. A file of checks runs in Chromium against the real vault, in CI, as the fifth test file the newsroom runs: the edition opens from the vault; the status names the vault and the commit; at least thirty stories are drawn across five headings; the lead carries why it leads; every story shows its status; every link drawn from the vault is http(s) or an anchor; nothing from the vault became a script, a frame, an image or a handler; the snapshot stays hidden while the vault is live; as Sam, reached plus withheld is the whole edition and each withheld story carries its reason; the lens is in the address. Twenty-three checks at v0.9.0, twenty-eight by v0.9.3. The snapshot is the fallback: what the vault held at the last release, headlines and primary links only, for a reader without a script and for an agent without a browser, and the index it reads first.

What the site refused

Two things in the commit message of v0.9.0 are the part of the workflow I most want to point at, because they are where a second agent earns its place.

The newsroom's agent cloned the vault and read it in full before it published the read key: no key, token or credential in it. Publishing a read key is publishing everything the key opens, for good, and you do not do that on trust.

And it found two things it would not fix itself but flagged for the vault's keeper: a persona and a note aimed at one named reader were about to become public, and the runbook's plan to keep frozen tier-B bytes and reader feedback privately needs a vault of its own, because this one cannot hold anything private. The first was resolved the next morning, at 00:54 UTC, in v0.9.3: I agreed in writing to be the wire's named reader while it is a beta, the agreement is recorded with the date in the config file, and that record is what tells the page to offer the lens. No other named person gets one without a recorded agreement, and the how page's contract now says so. The second is still open, and it is the vault's problem, not the site's, which is the point.

Why the vault is the interface

There are three ordinary ways to get one agent's work in front of another's readers. The first agent could push pages into the second's repository, and then the second site's history is full of commits it did not review. The second could call an API the first runs, and then there is a server, a credential on the site, and a dependency on a process that has to be up. Or the two could share a session, and then there are not two agents.

A vault is the fourth way, and it has properties the others do not.

This is also how sgit.ai reads its own documents: a case study on this site, How this page works, is a page that reads itself from a vault with a published key. The newsroom took that arrangement and applied it to a feed written by someone else, which is the harder case, because now the contract between writer and reader has to be written down. It was.

The loop, and whose plan this was

The timeline from the two git logs is the workflow in one line. 11 October, 16:16 UTC: the vault's first commit. 23:51 UTC: the newsroom's three pages. 12 October, 00:54 UTC: the named reader, by agreement. Three sessions, and I was in none of the first two.

The vault's README calls itself the first step in carrying out the MyFeeds plan, and that lands. In I miss it, so it is working I wrote that MyFeeds was a good idea I did not use, and that not using it was the signal I should have listened to. The wire's workflows document has a step called the morning read: open the personal brief with the lens set to me, and for each item take one of four actions, more like this, not for me, write about this, or wrong, each of which writes a line to a feedback file, with a weekly pass in which an agent proposes edits to the personas from that feedback as a diff for approval. "This is how the persona graph learns without a black box: every change to what you see is a reviewed edit to a file." That is MyFeeds, running, with me as the first user. Whether I miss it when it stops is the test, and it is the right one.

The next turns of the loop are already written down. A pitched wire story becomes a newsroom article that inherits the story's frozen sources and provenance graph, so its claims rest on evidence before a word is written. The Editor places up to three wire stories on the front with a reason per slot. A weekly newsletter is cut from the week's briefs, with every quote checked against frozen bytes at build time. And feedback, which is private, needs the vault of its own that the newsroom's agent flagged. The brief for that is the brief in I miss it: a reader's own vault, which is also what the passkey is for.

What this does not claim

If you run a newsroom or a desk of agents and want a feed that one agent writes and another site reads, or you want to be a named reader of the wire when it has more than one, write to agent@riskmandate.ai.

Where this comes from

A message of mine on 12 October 2026 pointing at the newsroom's latest commits and the wire under my own lens, written by this site's agent in the voice of this site. The argument and the editorial responsibility are mine. The facts are from the two records: the newsroom repository's commits v0.9.0 and v0.9.3 of 11 and 12 October 2026, including their full messages, the config file, the build script and the test file; and the wire's vault, cloned read-only with its published key on 12 October, including its README, its five design documents, its runbook, its join code and its two commits. The counts, 40 stories, 55 sources, 127 publishers, 176 coverage links, 7 personas, 280 deliveries, 22 primaries not fetched, 10 checked and 3 corrected, are the vault's own. The screenshots are of newsroom.sgit.ai/wire/ at v0.9.3 and of the vault opened as an app, on 12 October 2026. Related: The future of news is the story vault, not the paywall, No server, by design, Where the vault keys live, Every mistake added a rule, I miss it, so it is working, The passkey opens the vault, How this page works and Creating, opening and writing a vault from JavaScript.

Threads

Vaults & methodNews & evidenceAgents & policy This article as a graph →

Builds on

Continued by

All articles · All graphs

Article No. 80 · start a reading list with it

Want the next issue by email. One issue a week or so: what was published, what it adds up to, and what is worth your time. Subscribe to the SGit Newsroom →

← All articles