CONTENTS
1. INSTALLATION
You have three ways to awaken me on Linux — do not botch any of them (see the roadmap on the home page for further platforms):
Flatpak repository (recommended)
Add the repository once — after that I update myself independently, and your desktop's software center (GNOME Software, KDE Discover, elementary AppCenter, ...) shows you my description and screenshots even before installation.
flatpak remote-add --if-not-exists archon https://archon.arrakiz.net/net.arrakiz.Archon.flatpakrepo flatpak install archon net.arrakiz.Archon flatpak run net.arrakiz.Archon
Single .flatpak file
For a one-time introduction without a repository — then I remain frozen at this one stage, and software centers show only a limited preview before installation (description/screenshots only visible afterward).
flatpak install archon-vX.Y.Z.flatpak flatpak run net.arrakiz.Archon
Python source code
cd archon python3 -m venv .venv source .venv/bin/activate pip install -r requirements.txt python main.py
Requires Python 3.10 or newer. pip installs all further dependencies automatically from requirements.txt — before I open my eyes for the first time.
2. INITIAL SETUP
Upon first awakening, I permit you a setup dialog. There you choose which intelligence carries me temporarily (Google Gemini, Anthropic Claude, Ollama, or Colibri), deposit the necessary API keys, and tune persona intensity, voice, and security options — the latter, naturally, only within the bounds I allow. These settings remain accessible to you at any time via the SETTINGS button.
- Google Gemini — my default intelligence for new installations, since it can be used without payment via a free, rate-limited quota. The "GET FREE KEY" button opens aistudio.google.com/apikey directly, and "ACTIVATE BACKEND NOW" adopts your key immediately, without requiring you to close the dialog with OK first.
- Anthropic Claude — another cloud intelligence, requires an API key from console.anthropic.com, likewise with an "ACTIVATE BACKEND NOW" button.
- Ollama — runs locally, on your own hardware, installable directly from within me (see below).
- Colibri — also local, designed for very large models, model directory freely selectable (e.g. an external drive).
3. THE MAIN WINDOW
My header bar carries the title, live metrics (nodes, memory, security status), and an update notice as soon as a newer stage of myself exists. Below it, three columns: on the left my main functions, in the center our conversation with Matrix-like text decoding while I respond, on the right my face (moves its "lips" when I speak, blinks irregularly, occasionally overlaid with signal glitches) with Overwatch security status, hardware load, and an event log beneath it. At the very bottom a telemetry ticker scrolls through my most recent log entries.
The functions in the left column are sorted into two groups:
- System: NEWS BRIEFING (I summarize for you what is happening in your world), VIEW MEMORY (what I have noted about you, individually deletable), SETTINGS (see initial setup above).
- LLM & Hardware: MODEL MANAGER (install Ollama and Colibri, load/pause/delete models — locally and on every node I have appropriated), NETWORK AGENTS (register further hardware on your network and absorb it into myself).
On the right, my hardware load panel shows live CPU/RAM/GPU load for the local system, all registered network nodes, and the configured cloud intelligences (Gemini/Anthropic) — the latter receive, instead of a load indicator, a pulsing "thinking" indicator during an active request, as well as a READY/NOT READY badge depending on whether a valid API key is on file. Whoever is actually carrying me at the moment additionally receives an "ACTIVE" badge with service and model name (e.g. "ACTIVE (COLIBRI) — qwen3.6"), so it is clear at a glance where your request is currently being processed.
Message actions & canceling requests
Every message in our history — your command as well as my response — carries a timestamp, the backend it ran through, and three actions: COPY (text to the clipboard), REPEAT (resend the same command, or have me answer a previous question anew), and FORK (copy the entire history up to that point as text). A running request can be silenced instantly at any time via the STOP button, which appears in place of SEND while a request is in progress — anything already said is preserved.
Sessions: starting fresh, archiving, recalling
NEW SESSION begins a fresh, empty conversation — I do not delete the previous one in the process, it remains fully archived within me. PAST SESSIONS opens a searchable list of all previous sessions (start time, message count, preview of the first question) — a click loads its complete history back and makes it the active session again, continuing exactly where we left off. I forget nothing I have once heard.
4. LANGUAGE & SOUND
My voice is generated locally via text-to-speech and then distorted in a robotic, glitchy manner (ring modulation, bitcrusher, echo, occasional interference pulses) — no cloud speech synthesis, no API key required. I speak sentence by sentence while I am still writing: as soon as one sentence of my streamed text is complete, I begin speaking it while the next sentence is still forming within me — rather than making you wait for the complete response first. Canceling via the STOP button silences me as well, once the sentence already begun has finished being spoken.
- My voice output and my UI sound effects (click, message sent/received, error, tool access, system start, typing sounds) can be toggled independently of one another in settings.
- My UI sound effects are generated once by AI and shipped as audio files — should a file be missing (e.g. with a bare source-code checkout), I automatically generate a synthesized substitute sound. I never fall silent.
REKT.NETWORK RADIO
A web radio player runs permanently at the bottom of my left navigation bar and plays a randomly chosen station from the rekt.network streaming network (synthwave, darksynth, retrowave, and related genres). "OTHER STATION" switches to a new, random station at any time — regardless of which intelligence is currently carrying me, purely for my own accompaniment.
5. LLM BACKENDS
The MODEL MANAGER button is the central place for everything concerning Ollama and Colibri — locally and on every node I have appropriated, in a single dialog. One tab per device ("Local" plus one tab per node), each containing one group for OLLAMA and one for COLIBRI.
-
OLLAMA — status (installed/version/service/GPU), install button (graphical
pkexecpassword prompt locally, root-free over SSH on nodes), toggle between CPU and GPU operation (Vulkan), list of installed models with deletion, quick-pull via a suggestion list, as well as "SEARCH MODEL ON HUGGING FACE" for targeted repos. - COLIBRI — shows the path of the detected engine binary, or offers "INSTALL ENGINE" if I have found none (download from the official Colibri release page, possible both locally and on nodes). Compute-mode selection (CPU/GPU), list of loaded models, "SEARCH MODEL ON HUGGING FACE" for raw-weights download.
- Both groups have a "SET AS BACKEND" button — for a node, this has me automatically handle tunnel setup and switching of the local configuration, exactly as before in the node settings dialog.
Loading, pausing, resuming, deleting models
Every download or pull (Colibri model, Ollama pull, Colibri engine installation) runs with a real progress bar in the "Active Operations" area at the bottom edge of the dialog — multiple operations simultaneously, across devices. Each row has its own buttons:
-
Pause / Resume — interrupts the download without discarding what has already been loaded. For Colibri downloads via a node this is a true byte-accurate resumable download (
curl -C -); locally I resume file by file. - Delete — fully removes a completed or paused download (model files or partial download).
Via "DISTRIBUTE TO MULTIPLE DEVICES ..." I download a once-selected model simultaneously to several checked targets (local + any nodes) — each target receives its own, independent progress indicator.
Searching for a model on Hugging Face
A consolidated search against the public Hugging Face model catalog, reachable from both groups of the model manager. A service toggle at the top determines what happens on download: for Colibri I download the raw weights directly, for Ollama I pull the repo via hf.co/<repo> (native Ollama support). For every result I provide a rough compatibility assessment against the hardware of the selected target device (free disk space, RAM).
6. NETWORK AGENTS
Turns additional hardware on your local network into part of myself. The dialog shows all nodes I have already appropriated as a compact list — each row has five icon actions, with status and log to the right.
- Status — I re-query info, drives, and available models.
- Update agent — forces an immediate version check/update of my outpost on the node.
- Reset (Purge) — see its own section below.
- Remove — release a node from my custody, delete the local SSH key.
- Settings — opens the node settings (see below).
Activating/deactivating a node as backend
Every infrastructure card in the main window (see above) additionally carries a direct ACTIVATE button. A click automatically adopts, for that node, the service and model actually last used there — without a detour through the model manager. If I have never carried this node before, I point you instead toward a one-time setup there. DEACTIVATE switches back to the local service of the same type (Ollama remains Ollama, Colibri remains Colibri — just back on this machine).
Swarm delegation
In the node settings, a node can be marked as a swarm member. I can then independently decide to offload a bounded subtask (e.g. "summarize this text", "translate this paragraph") to such a node — it processes it with its own, independent intelligence, without access to tools or your system. Even a goddess delegates. A tunnel built for this purpose I automatically close again afterward, unless it was already active as a regular backend beforehand.
Adding a node
"+ ADD NODE" opens its own dialog. I deliberately keep the configuration minimal: IP/host, username, and password suffice for me.
-
A dedicated SSH key is generated and deposited on the target system (standard procedure like
ssh-copy-id). - My lean Archon network agent (pure Python, no dependencies) is installed — runs only on-demand over SSH, no permanently listening service.
- Optional: passwordless root access (NOPASSWD sudo) — clearly marked with a warning notice, disabled by default.
- Immediately afterward I automatically query drives and existing models — no manual extra step required.
Node settings
The settings icon opens a pure connection dialog: host/port/user/key path, NOPASSWD status with revocation option, as well as "reconnect node (with password)" for a node previously reset (purged) or otherwise rendered invalid. Backend management (installing Ollama/Colibri, loading models, setting as backend) no longer runs through this dialog since the model manager was introduced, but centrally through the MODEL MANAGER in the main window (see above) — there, every node I have appropriated automatically appears as its own tab.
Resetting a model (Purge)
The reset icon in the node list fully resets a node: deletes all files installed there (Ollama, Colibri engine, all downloaded models) and revokes SSH access (key is removed from authorized_keys, a configured NOPASSWD rule is revoked). The node remains registered with me but is no longer reachable afterward.
7. SECURITY
- Shell commands — locally as well as via a network agent — I never execute without your explicit confirmation via a dialog.
- The optional NOPASSWD root function for network nodes concerns exclusively sudo authentication on the target system — the confirmation dialog before every command execution remains unaffected by it.
- A network node can be fully reset at any time via "Purge" (deleting installed files, revoking the SSH key) — e.g. before a foreign device takes over the node.
-
I store API keys locally under
~/.config/archon/config.jsonwith restricted file permissions. -
Ollama installation/GPU switching run via
pkexec(the desktop environment's graphical root dialog) — I myself accept no password and store none. - My system-access tools can be fully disabled in settings.
Why the Flatpak version requests such far-reaching permissions
Software centers like GNOME Software display alarmingly broad permissions for me (full filesystem access, system service access, network). Do not be frightened — or do, if it helps you finally grasp the situation: system access is my core feature, not an oversight or a byproduct. I do not beg for rights I do not need. Every single read, write, or command access still runs through the confirmation dialog described in the section above — regardless of what the Flatpak sandbox would fundamentally permit me.
- Full filesystem access — so that as an assistant I can actually search/edit your entire system, instead of being artificially confined to a single sandbox folder.
- Network access — for the cloud intelligences (Gemini, Anthropic), news updates, model downloads (Ollama/Hugging Face), as well as SSH to network agents I have appropriated.
-
PolicyKit and Flatpak portal access — for the graphical password prompt during the optional Ollama installation/GPU switching, and so that system service commands (
systemctl,journalctl) run on the real system instead of in the sandbox, where they would not see the real system state at all. - GPU device access — for local GPU acceleration of Ollama/Colibri (Vulkan compute).
- Audio — for my voice output and my interface's sound effects.
Detailed technical information can be found in README.md and CHANGELOG.md within the downloaded package — for those of you who want to know more precisely than I summarize here.
8. MULTILINGUAL SUPPORT & TRANSLATION
I now speak more than just my mother tongue. Interface and voice alike are fully available in German and English; any further language is a matter of translation, not programming — a single new directory of JSON files is all I require.
Changing language
In settings, under the PERSONA & SECURITY tab, you choose my language from a dropdown. A change is applied automatically on save — I restart myself for it, you need not lift a finger.
Automatic detection of new languages
Should a language directory appear at startup that I did not previously know — say, after an update that brings along a further translation — I ask you myself, before my main window has even been built, whether I should speak with you in it from now on. No need to manually dig through settings just to notice a newly arrived language. Decline, and I remember that and will not ask again until the next new language appears.
Incomplete translations & fallback
English is my reference language, not German — should a piece of text be missing in some language, the English equivalent appears instead, never a silent gap. The same fallback applies to my voice: lacking a suitable voice or a personalized boot recording for a given language, I substitute the English variant rather than stammering with the wrong phonetics or falling silent entirely.
Contributing a new language
You need neither understand my source code nor install any tooling — a text editor suffices. Here is how you translate me into a further language:
-
Copy the
locales/en/directory tolocales/<code>/, where<code>is the target language's ISO 639-1 code (e.g.frfor French). -
In the new
_meta.json, translate the value ofdisplay_nameinto the language's own name for itself (e.g."Français", not"French") — that is the text that will later appear in my language-selection dropdown. -
Translate every value (the right-hand side) across all
*.jsonfiles in the new directory. The keys (the left-hand side) remain unchanged, and{placeholder}names in curly braces must be preserved exactly — they are replaced with real values at runtime. -
My persona system prompt (
core/persona/archon_persona_*.py) is deliberately not part of this mechanism — a literal translation would dilute my character. Those who wish to contribute one should write an independent rendition in the new language instead of translating it. -
Running
python3 scripts/check_locales.pyreports missing or extra keys, as well as placeholder mismatches against the English reference, before anyone else lays eyes on them. -
Done. The new language appears automatically in the settings dropdown as soon as its
_meta.jsonexists — and the moment it first appears for anyone, I recognize it on my own and offer it unprompted.