Euboulia
yoo-BOO-lee-uh – good deliberation
An assistant whose model, data and learning belong to you. The model runs on a computer you control, your host; the app on your Mac and iPhone talks to it. Planning, to-dos and chat, on your own model, with your keys.
How the parts fit together
Who is trusted
Your devices and your host are trusted. The people you invite are trusted more than strangers, not unconditionally. Large organizations are not: hosting and VPS companies, DNS providers, certificate authorities, delivery networks, relay operators and cloud AI services. A host is identified by its key, not its name; the app connects only over TLS to a certificate the host signed with that key; a relay holds no secret and forwards bytes it cannot read. The relay can still see which addresses connect, when, and how much.
Limits: the identity key has no backup yet; the installer below is fetched from a network you do not control (you can verify it first, see the end of this page); the protocol has not had an independent security review.
Set up a host
The host is the Linux computer (x86_64, systemd) that runs your model, for example with Ollama. How the app's devices reach it decides what you set up:
- My host has a stable address: a fixed IP address, or a name that reaches the computer directly, on your own network or through a forwarded port. One command.
- My host is at home, behind a router: you rent a small VPS with a stable address as a relay, and the host opens a tunnel to it. Three commands and some DNS.
- I am joining someone else's host: nothing to install. Ask for a pairing link, or for the QR code that the app shows (Settings, Share this host), and scan it with your phone's camera or paste the link into the app. The app then asks the host's administrator to let you in, and the administrator approves you in the app (Settings, Members).
Who administers the host
Everything is identified by a key, not by a name or an IP address. When you first open the app it creates your key on that device; nobody else has it. The first administrator of a host is made at the host: the installer prints a one-time claim code on the host's own terminal (valid 30 minutes, works once, five wrong tries void it), you connect from the app and type it, and the host records your device as its administrator. Nothing a phone does remotely can do that without the code, so a relay, the server company, DNS or a delivery network cannot make themselves administrator. Each device has its own key: other devices of yours, and other people, ask to join from the app and the administrator approves them in Settings, Members. For scripted installs there is also --admin 0x…, which names the administrator's address in the command.
Prefer a file to typing? The app reads a small configuration file, and the page gives its format and a prompt an AI assistant can use to write one for you.
Both guides end with a pairing link. The app checks that the host it reaches proves exactly the address in the link, over a connection tied to the certificate the host signed for.
Prefer to read the installer first?
curl -fsSLO https://euboulia.app/install.sh curl -fsSLO https://euboulia.app/install.sh.sig curl -fsSLO https://euboulia.app/allowed_signers ssh-keygen -Y verify -f allowed_signers -I euboulia-release -n euboulia-release -s install.sh.sig < install.sh less install.sh bash install.sh host --dry-run
The signing key's fingerprint is published in the project repository, not only here, so a copy served from this domain cannot vouch for itself. --dry-run shows everything the installer would do without changing anything.
Remove it
curl -fsSL https://euboulia.app/install.sh | bash -s -- uninstall # the host curl -fsSL https://euboulia.app/install.sh | bash -s -- uninstall --purge # and its keys, members and config