Read first
The manifesto for why, the decision records for what has already been settled, and the security model for the invariants that are not up for negotiation.
Development setup
TacidOS is in active development. Its core, installer, Hyprland session, and probe tools exist in source. A supported download and hardware certification are still ahead. Explore the design here, or try the development environment if you have source access.
Use Linux with Rust 1.90 or later, a C toolchain, and Git. Cloning and the first Cargo build need network access to fetch the source and dependencies. The development demo uses a temporary machine directory and does not install TacidOS on your computer.
git clone https://github.com/TacidOS/TacidOS
cd TacidOS
cargo test --workspace
cargo build -p tacid-cliThe source snapshot dated 2026-10-10 reports 1655 tests. No model or Nix is needed for the development demo.
./target/debug/tacid serve \
--root /tmp/machine \
--socket /tmp/tacid.sockLeave this process running. Open a second terminal in the same checkout for the next step.
./target/debug/tacid --socket /tmp/tacid.sock ask --diff install ripgrep
./target/debug/tacid --socket /tmp/tacid.sock ask enable openssh
./target/debug/tacid --socket /tmp/tacid.sock history
./target/debug/tacid --socket /tmp/tacid.sock undoInspect a package change, request a service change, read the history, and undo.tacid do is the same change with no model.tacid flash and tacid serial name a probe by vendor, product and serial.
# Reversible, so the agent acts. The diff is the genome, not a summary of it.
$ tacid ask --diff install ripgrep
I will install ripgrep.
+ install ripgrep (cli)
Reversible: system configuration to generation 1.
--- a/mind/agent.nix
+++ b/mind/agent.nix
@@ -5,4 +5,7 @@
# transaction. Your own configuration belongs in owner.nix, which Tacid never writes.
{ ... }:
{
+ tacid.packages.cli = [
+ "ripgrep"
+ ];
}
# Exposure cannot be undone, so the agent stops and says exactly why.
$ tacid ask enable openssh
I will enable openssh.
+ enable the openssh service
This cannot be fully undone:
! enabling openssh would make this machine reachable from the network
Reversible: not by a generation rollback alone.
Waiting for you. Approve it with the keeper, or say no and nothing happens.
# The hash-chained journal. The refusal is a record too.
$ tacid history
History:
6 asked the owner's policy asks before services.enable
5 proposed enable openssh (enable the openssh service)
4 concluded applied as generation 2
3 health passed
2 activated generation 2 (switch, from 1)
1 allowed every effect of this change can be undone
0 proposed install ripgrep (install ripgrep (cli))
# One command back to the previous generation.
$ tacid undo
I have undone the last change and switched the machine back.
# Provenance, including whether this machine built its own code.
$ tacid version
TacidOS 0.0.1 (dev)
protocol 0.1
autonomy reversible
generation 3
self-built this machine is running code it built itself
tacid-cli at revision 43da513on . This historical demo uses a simulated Nix builder and privileged operations. It shows the change flow, not a production installation.Bootable image builds and an installer exist. A release also needs a supported download, a verified update channel, and evidence from real hardware. These are separate milestones.
For collaborators preparing installation media, see theISO build and USB boot-stick instructions for Windows, macOS and Linux. There is no supported public ISO download yet.
The installation and generation lifecycle have run in emulated machines. Firmware, graphics, storage, networking, and recovery still need validation on supported hardware.
Signed updates and rollback have implementations and tests. The promotion pipeline, published artifacts, and complete end-to-end channel validation remain release work.
The command line, terminal interface, Hyprland session, tacid-shell, andtacid flash / tacid serial exist in source. Daily-driving on hardware and a public image are still ahead.
The manifesto for why, the decision records for what has already been settled, and the security model for the invariants that are not up for negotiation.
Contributions land through the same discipline the machine uses on itself: a written decision before a large change, an acceptance test for every work item, and no hard-coded colours anywhere.
Review the public threat model and test the stated boundaries. Security reports are handled through the process described in the security documentation.