Plate VI · Culture
One client for every host.
Culture is where you watch and steer the agents your hosts carry. One Rust core holds an independent connection to every host you configure; native surfaces put it in a terminal, a browser, a Mac, an iPhone, an iPad, an Apple Watch, an Android phone and a Wear OS watch.
The core
One Rust core, native everywhere
- Per-host everythingOne transport, reconnect, sequence and token per host — Paratenic, a pi-daemon node or any AHP 0.8 host. Every row, command and answer is qualified by the host it belongs to.
- Shared subscriptionsTwo panes showing one chat share one wire subscription; a hidden pane holds no stream.
- Receipts, not hopesPending, accepted, rejected and indeterminate stay distinct on every surface, exactly as the host reports them.
- Fast where it mattersTwenty visible panes render in 0.80 ms on average; searching 1,000 sessions across 100 hosts takes 0.48 ms.
Terminal
A keyboard workspace for many agents

culture session against two disposable hosts and invented sessions.- Tabs and recursive splits| and _ split, ctrl+h/j/k/l move, counts and gg/G scroll.
- Across hostsg i opens the global inbox of questions; g f the activity feed.
- Real terminalsAHP PTY terminals render through a native VT emulator in their own panes.
- Scriptable
culture list,culture send, andculture controlover an owner-private socket;culture run --headlessfor automation.
Web
The same workspace in a browser, served by the same binary



- No second client
culture webserves a compiled bundle; native Rust keeps the AHP connections, credentials and command authority, and every browser tab shares them. - Nothing to installNo Node, checkout or hidden terminal at runtime. Light and dark follow the system.
- Your perimeterA wildcard bind has no application password: put it behind your own authentication or keep it on a trusted network.
- As a service
services.culture.webruns it as an opt-in user service, independent of any host.
macOS
A native Mac app over the same core



- SwiftUI and AppKitTalks to the Rust core through the
paratenic-client-ffiC ABI. Liquid Glass on macOS 26; system materials on 14 and 15. - Everything at handHost-qualified source rail, conversation, tools and input, terminal frames, change and detail inspectors, native session creation, diagnostics, widgets.
- One updateOn Apple Silicon,
culture updateverifies and replaces both the CLI andCulture.appfrom the same release.
iPhone, iPad and Apple Watch
In your pocket, and on your wrist without it
- UniversalOne SwiftUI app for iPhone and iPad, iOS and iPadOS 17 and later, with cache-only, redacted widgets.
- A watch that stands aloneAfter a secure configuration transfer from the phone, the watch connects to your hosts over Wi-Fi itself, on watchOS 10 and later.
- Safe on the wristApprove or deny, pick a choice, dictate a short reply, or stop a turn when the host says it can. Anything larger hands off to the phone.
Android and Wear OS
Compose on the phone, a real client on the watch
- Same runtimeThe Rust core through generated UniFFI bindings, with adaptive phone and tablet layouts, splits, focused panes and feed filters such as Agent replies.
- Floating agentsOptional floating agent windows, coordinated with Flotilla when it is installed.
- Standalone Wear OSThe watch owns its own AHP runtime over Wi-Fi or cellular, with encrypted configuration and an optional embedded tailnet identity. Tiles and complications read only a redacted cache.
- DeliveryTagged releases go to Play internal testing, phone and watch together.
Labs
Where the next interface is tried first
Petri
An experimental controller workspace for driving many agents with a keyboard or a gamepad, eyes on or off: a conversation stream, real model suggestions, dictation, and semantic feedback in sound — distinct chimes for direction, history, suggestions and outcomes, and a chosen voice for each kind of action.

| Action | Keyboard | Gamepad |
|---|---|---|
| previous / next agent | ← → | D-pad left / right |
| previous / next history | ↑ ↓ | D-pad up / down |
| previous / next group | Q E | LB / RB |
| suggest | S | West |
| send draft | Enter | East |
| talk | Space | North |
| stop audio, else interrupt | X | South |
It starts on a clearly marked demo studio; PETRI_DEFAULT_BACKEND=culture switches it to your Culture hosts, and services.petri runs it as a Nix service on port 7790. Dictation fills a draft and never sends on its own. Like every client, it cannot stop a terminal Pi — that path refuses Stop.
The Android design lab
Debug builds install a second launcher, Culture lab, which plays the proposed next interface from a deterministic simulated agent: a turn trace on one hairline, streaming that catches up smoothly, a presence orb whose ring shows state, a command-deck composer, numbered decision tiles and diff approvals. Its proposals shipped in Culture for Android 2.8.0.
Automation
Every surface can be driven and checked
Each Culture exposes an owner-private way in: culture control and culture web control sockets, the macOS app’s UI command server, and loopback-only automation bridges in Android and Apple debug builds. Every frontend also carries a machine-checked conformance manifest against one platform-neutral Culture specification, so “parity” is a file a test reads, not a claim.