purposeos

How PurposeOS is put together

A thin local executor, a set of small daemons, and apps that declare what they can do. Everything talks over Unix sockets on your machine.

The layers

ShellQuickshell on Hyprland: bar, launcher, app grid, settings, dictation HUD. Never speaks the executor protocol itself. Apps (.papp)Journal, Scratchpad, yours.A UI window plus optional services.Declare actions, phrases, permissions. Built-in servicesactiond · voiced · listend · inferdindexd · settingsdSame manifests and same path as third-party. Executor (execd)Routes every action. Retry and fallback, per-app sockets, permission checks, encrypted activity log. Arch Linux, LTS kernel plannedLandlock sandbox, PipeWire audio, the OS filesystem. No blob store, no Postgres.

What happens when you speak

  1. 1

    listend Hears your wake word

    Audio features live in its own memory for a few seconds. Only “heard it” crosses over.

  2. 2

    voiced Turns speech into text, live

    A 120 second ring buffer in RAM. A fast engine shows words as you speak, Whisper replaces them with the final text.

  3. 3

    actiond Decides what you meant

    Matches your sentence to an intent that an app declared. Opens, closes, or starts a capture.

  4. 4

    execd Runs it, only if allowed

    Each app has its own socket. The executor checks what that app may call, then logs the command without its content.

  5. 5

    your app Does the work

    Journal saves one file per entry under its own data folder. Nothing else can read it.

The executor

The executor is a local-only command runner. It never opens a TCP port. A command is data (an id, an action and a JSON input), so it can be retried, logged and replayed.

Where things live

~/.local/share/purpose/apps/<id>/        app code (read-only) and data/
~/.local/share/purpose/plugins/          generated service manifests
~/.local/share/purpose/session.d/        generated start hooks
~/.config/purpose/                       settings, wake word, keys
~/.local/state/purpose/activity_log/     encrypted daily logs
$XDG_RUNTIME_DIR/purposeos/execd.sock    the main executor socket
$XDG_RUNTIME_DIR/purposeos/services/     one socket per service
$XDG_RUNTIME_DIR/purposeos/apps/<id>.sock  each app's own executor socket

Install model

Everything ships prebuilt as static executables. Nothing is compiled on your machine. Apps install per user with no root, from a checksum-verified .papp bundle, and an upgrade carries the app's data across.

The installer is layered on stock Arch and records every change in a ledger, so cleanup.sh removes exactly what it added and restores files it replaced.