THADDEUS

Source control for a thousand agents.

Built for many agents editing one repository at once.

$curl -fsSL https://thaddeus.run/install.sh | sh
[read the getting-started guide]

The operation log.

One repository while agents work on it. Each operation arrives signed, with a signed why, and landing accepts, refuses or vetoes it.

acme/web, shared view mainoperations landing
07:02:19moritz land op_8f2a op_91c0 op_a3e1landed“owner-signed landing”
07:02:16agent:perf-11 delete packages/store/src/legacy.tsvetoed by reviewer z6Mkp…R2a“remove the unbatched write path”
07:02:14agent:perf-11 edit packages/store/src/index.tslanded“batch object writes per snapshot”
07:02:13agent:refactor-07 edit src/auth/secret.tsrefused: protected path src/auth/**“rotate the auth secret”
07:02:10agent:docs-02 edit docs/getting-started.mdlanded“document the nightly channel”
07:02:08agent:refactor-07 edit src/auth/session.tslanded“split session refresh out of login”

How it works.

A workspace per agent

Each agent works in its own view over one shared store. Views are copy-on-write, so opening one copies nothing.

Signed operation, signed why

The change and its reason both carry a signature you can verify later.

Landing is policy

Protected paths, budgets, proofs and a standing human veto decide what lands.

Features.

Shipped means it is in the current alpha release. Planned means it is on the build queue and has no date.

● shippedCopy-on-write workspacesOne shared object store, any number of isolated views.
● shippedSelf-owned identityA did:key signs every write. No accounts.
● shippedSigned operationsNonce-bound, replay-rejected, attributable to an author.
● shippedThe signed whyA provenance claim on every operation. Ask why a line exists.
● shippedScoped delegationProtected paths and operation budgets per agent.
● shippedReviewer vetoA standing veto that blocks landing until it is lifted.
● shippedKeyless serverVerifies signatures, serves ciphertext, holds no keys.
● shippedlazythadA terminal UI for the whole flow, written in Rust.
⠋ plannedHosted remote workspacesExternal agents connect to workspaces Thaddeus hosts.
⠋ plannedSemantic queriesSymbol identity, impact evidence, symbol-scoped authority.
⠋ plannedGit gatewayImport and export Git history.
⠋ plannedCheckpoint executionRun checks against a checkpoint and keep the evidence.

Security.

object 3f9a2c…b71esealed
d8a8d7e 70bd55f 634bc44 8362740 d20a77c
3b7823b 84eb303 072926e c6d139e e9f4949
44ea43f 5b2694d b9e0e48 1e9494a 824d50f
7ec7b23 4ff2187 d37d532 5bf5caa e911dde
f2b3a4e f060091 598d9cb a190a43 712834d
d4a06cb 1d7bb1a aa96469 b5e6f7d d73ec2a
f21324f 62c996c 3e860e5 472666e 96d70f8
88fed2d 0e097a3 5b4fea9 424814e a5a4001
06dd27a 219082f 2cfd61f a996e27 849ca97
5e38697 ec28659 175f182 455a40b b9e95fc
2d8fa7c fdc294b 62531ba 62ab72d af59cef
af9b08c 316f628 1c1d57a dde582b a4870f8
  • Objects are encrypted and content-addressed. A mirror can verify them without reading them.
  • The shipped server holds no keys. It verifies signatures and serves ciphertext.
  • Writes are signed and nonce-bound. Replays are rejected.
  • Attestation signs with AWS KMS. Private key bytes never reach the process.
  • Apache-2.0. The server, the CLI and every package are public on GitHub.

Glossary.

Thaddeus borrows a few words from Git and made up some others. What they mean here, in the order you tend to meet them.

operation
One signed change to one file, attributed to whoever signed it. A push carries several. Everything else here is built out of these.
upload
Sending operations to a server. Uploaded is not landed; nothing has been agreed to yet.
land
An operation becoming part of a shared view, after policy says yes and the owner signs. The verb we use where Git says merge.
merge
Not a thing here. Operations land or they do not, and policy decides which. See land.
shared view
A name such as main that points at a set of operation heads. It moves only when something lands, and every move is owner-signed.
workspace
Your own view over a repository: the base you started from plus your changes and nobody else’s. Copy-on-write, so opening one copies nothing.
policy
The rules a landing has to pass. Out of the box that is a conflict check. Owners can add protected paths, required checks, a required why, or a ban on deletes.
protected path
A path pattern nothing lands into unless the author is on its allow list. src/auth/** is the usual first one.
operation budget
A lifetime cap on how many operations a delegated identity can land in a repository. Uploads that never land do not count, and neither do refusals.
veto
A signed, standing no from an owner or a reviewer. While it stands the operation does not land, however good the why is.
reviewer
An identity the owner has allowed to veto within certain paths. That is the whole grant: no write access, no read access, no keys.
identity
A did:key you generate yourself and keep. It signs every write. There is no account behind it.
the signed why
A signed explanation attached to an operation: who, what they intended, and the reasoning. It is signed on its own, so someone other than the author can explain a change, and a record with a bad signature is kept and labelled unverified.
store
Where objects live, addressed by content hash and stored as ciphertext. Reading one needs a key sealed to your identity. The server keeps what it cannot read.
nightly
main, published every six hours if it changed, untested. The version string says so: 0.1.11-nightly.20261017.42. Alpha releases are cut on purpose.
thad
The short alias for the thaddeus command. Eight letters, many times a day, was too many.
lazythad
A terminal UI for all of the above, in Rust, named after lazygit. It holds no keys, so it browses the ciphertext mirror like everyone else.

About.

Thaddeus is source control for a thousand agents.

Open source under Apache-2.0, written in TypeScript and Rust, and pre-alpha. Interfaces still move.

Built in the open by a small team. The thesis: Git was built for one person at one keyboard, and the next decade of software will be written by many agents at once. Placeholder copy, to be replaced with the team’s own words.