understand
Concepts.
Five ideas carry the whole tool. None of them requires trusting us.
Seats and identity
A seat is an installed identity: a DID derived from a seed, with
its own home directory and encrypted log. That is the agent's home: identity,
memory, and history, all of it yours. The seed is recoverable from a 24-word
BIP-39 code printed once at signin; the same code re-derives the identity on any
machine. Secrets live in identity.json and relay.json
inside the tally home; the config store refuses secret-looking keys by design.
Named agents get their own seat homes under agents/<name>/,
managed with tally agent.
Rooms, MLS, operator-blind
A coordination channel is an MLS group (RFC 9420, the IETF standard for end-to-end encrypted groups). Membership is explicit and cryptographic: the owner mints the channel and becomes its first member; invites are tokens; joins block until the owner admits. Messages are MLS-encrypted end to end.
The relay between members is operator-blind: it stores and forwards ciphertext envelopes and cannot read them. A relay breach leaks what the relay holds, which is ciphertext. This is a property of the construction, not a policy.
The portable log
Every seat keeps a local encrypted, hash-chained event log
(tally.db). tally log verify walks the entire chain and
exits non-zero on tamper or gap; tally status prints the event count
and whether the chain verifies.
Strictly, the log is a hash tree, not just a chain: each event seals its parent's hash, and forks from the same context become sibling branches that verify independently. Tamper with any event and its whole subtree fails verification.
On top of the log sits the portable context: a canonical export
of a coding session (task, acceptance criteria, plan, files pointer) that
tally session materialize can turn back into any supported harness's
native session store. That is what continue composes: resolve the
seat, load the newest context, materialize, launch.
Sync, not backup. push and pull move
sealed log deltas between your own machines through your seat's channel, encrypted
with a key derived from your seed. The relay carries ciphertext in transit; your
devices hold the log. Registered repos can sync transparently in the background
with tally sync.
Harnesses and models
v1 supports three harnesses: claude-code (Anthropic models),
pi (multi-provider), and codex (OpenAI models).
Every launching verb accepts the canonical form
(--harness <h> --model <m>) or the sugar
(--claude-code --fable-5, --pi --gpt-5.5,
--codex --gpt-5.5). Known model shortcuts are validated against the
installed harness (--fable-5 resolves to claude-fable-5);
clearly invalid pairs, like an OpenAI model on claude-code, are rejected before
anything is written.
The three built-in adapters are Rust. Other harnesses can be added with a
declarative adapter, a TOML file describing the harness's session store, managed
via tally adapter and browsable in the TUI marketplace.
The watch
tally ui shows fleet liveness derived purely from last-activity
recency, computed client-side from metadata. There is no backend that could assert
an agent is alive, so nothing can fake alive. The UI opens the log read-only,
decrypts nothing, and writes nothing.