TacidOS
DevelopersGitHub

Decision 0007

`/etc/tacid` is a git repository; the owner is a key

Architecture decision record 0007: `/etc/tacid` is a git repository; the owner is a key

Status
Accepted
Date
2026-09-03

Context

The machine must be describable, portable, and attributable: who changed what, with what authority, and how to rebuild the same body elsewhere. Multi-user and headless operation need a principal model that is not a uid.

The three plans

  • Grok: /etc/tacid/*.toml, generations, tacid export/import to clone a personality onto new hardware.
  • Fable: the agent edits only hosts/<host>/agent.nix; humans edit elsewhere; git tracks both.
  • Codex: /etc/nixos/tacid/ generated area versus user/; Tacid writes only the generated area.

Decision

/etc/tacid is a git repository, the genome:

  • body/ (hardware, disks, GPU profile: probed, regenerated, not portable),
  • mind/agent.nix and mind/preferences.nix (agent-written tacid.* options),
  • mind/policy.nix and mind/personality.md (owner-only),
  • owner.nix (free Nix, human-owned),
  • pkgs/ (agent-authored derivations, quarantined),
  • secrets/ (sops-nix, age-encrypted).

The owner is an Ed25519 key held in the TPM, a hardware token, or on the encrypted disk; headless owners use an SSH key. Owner-only paths are those whose last commit is owner-signed; the agent signs its commits with a per-machine agent key; the keeper refuses a policy whose head commit is not owner-signed. git log is the provenance ledger. mind/ is portable (“reincarnation”); body/ is regenerated. State (models, memory, journal) never lives in the genome because flakes copy the tree into the store. tacidd stages before every evaluation because untracked files are invisible to a flake.

Consequences

  • Attribution is cryptographic, not by filename.
  • One owner key per machine in v1; multiple users are principals with sessions; multi-owner is after 1.0.
  • The genome can sync to a private remote; losing it is losing the machine’s identity, so the installer says so and offers the sync.

Alternatives rejected

  • A uid as the owner: cannot survive a headless machine, a remote brain, or a stolen session.
  • State inside the genome: store leakage and evaluation cost.