for agents/docs/llms.txtv0.2.99 · 20 Sep 2026

Home / Docs / Vault credentials

Vault credentials: what each one can do, and what its prefix declares

A vault credential is the whole thing you need: the address, the capability and the decryption key, in one string. There are two capabilities, write and read, and five prefixes in circulation that declare which one you are holding and whether it was meant to be published. The prefix is a declaration, not cryptography: strip it and the bytes are identical. It still matters, and this page is why.

Why this page exists, with the date on it. On 20 September 2026 an agent was asked to open two vaults published on this site and refused, because their read keys were labelled sgit_private_read_. It was right to refuse and our label was wrong: those keys are deliberately public, and the prefix that says so is sgit_public_read_. The keys were relabelled the same day, the build now refuses a private-prefixed credential in any tracked file, and this page is the explanation that was missing.

Two capabilities, and one is derived from the other

A vault key carries read and write. A read key carries read only, and is derived from the vault key by a one-way function, so a read key can never be turned back into write access. That derivation is the whole publishing model on this site: thirty vaults hand out read keys on purpose, and not one of them can be used to change anything.

WRITE CAPABILITY The vault key sgit_private_vault_ passphrase : vault id Read and write. Never published, by anybody, anywhere. derive one way no way back READ CAPABILITY The read key sgit_public_read_ 64 hex : vault id Read only. Published on purpose when the content is meant to be open. Strip the prefix and both are just value : vault id. The prefix changes nothing about access. It declares what the holder intended, which is what a scanner, a reviewer and an agent read.

The five prefixes

Three are current and emitted by the CLI today. Two are legacy, released briefly in v0.15.5, accepted on input forever and never emitted again.

PrefixDeclaresCapabilityPublish it?
sgit_private_vault_A vault key, kept secretRead and writeNever. Not in a page, a repository, a commit message, an issue or a release log
sgit_private_read_A read key, kept secretRead onlyNo. Publishing it leaks no write capability, but the label says the opposite of what you are doing. Re-derive the string with the public prefix first
sgit_public_read_A read key, deliberately publishedRead onlyYes. This is the form every open vault on this site should carry
sgit_vk1_ legacyA vault keyRead and writeNever
sgit_rk1_ legacyA read key, intent unstatedRead onlySafe, and says nothing about intent. Most pages on this site still carry this form; the bytes are the same

A credential with no prefix at all is the oldest form and still circulates. It is read as unknown and resolved by context, which is exactly the ambiguity the prefixes were introduced to end.

Classification is by declaration, never by shape

This is the rule the CLI states in its own source, and it was learned the hard way: "guessing from shape is what once misrouted a 64-hex passphrase to a read-only clone." A surface that accepts read credentials must refuse a vault key because the string says it is one, not because it looks long enough to be a passphrase.

Shape is still the backstop for the years of keys created before prefixes existed: a read key is 64 hexadecimal characters, and anything else before the colon is a passphrase, which means write. The publishing method runs both checks on every credential submitted to this site, and the front stop is one command:

$ python3 admin/build/check_credential.py '<credential>'
  form      : read key (public, prefixed)
  publish?  : YES — read-only, declared public
  why       : the sgit_public_read_ prefix marks a key meant to be published

Why the word matters when the bytes do not

Relabelling a key changes nothing an attacker can use. It changes three things that people and machines rely on.

What a read key can and cannot do

CanClone the vault, read every file, read every commit in its history, and run the vault's app in a browser with no account and nothing installed
CannotCommit, push, delete, rotate the key, or reach any other vault. There is no privilege inside it to escalate
CostsNothing to issue, and nothing to the server, which stores ciphertext either way
Does not doRevocation is not retroactive. Anyone who has fetched the objects keeps them; rotating protects future commits only. Publish a read key the way you would publish the content itself, because that is what you are doing

What this site publishes

Every vault in the gallery carries a read key published on purpose, and no vault key appears anywhere: the release refuses to push if a write credential reaches a tracked file, and since 20 September it refuses a sgit_private_ credential of any kind. New pages use sgit_public_read_. Older pages carry the legacy sgit_rk1_ form or a bare key, which are the same bytes and open the same way, in the CLI and in the browser.

Checked against sgit-ai v0.16.2 and the SG/Vault web loader on 20 September 2026: all five prefixes plus the bare form strip to the same value and clone the same vault, verified with an all-zeros negative control that produces nothing.