BEROUNOS for AI-native devices

Caroline

The assistant is part of the system.

A privileged service with two ways in, a tool for every system call, and updates that roll themselves back.

Caroline is the owner's assistant and part of the system, not an app. Her service is never stopped for memory, keeps running while the device sleeps and may take the screen. She works through the system's own interfaces rather than by imitating a person in front of a screen. Her own repository has its own documentation; this page covers how she lives inside Beroun.

Two ways in

WayWhat
The first tile of the launcherHer text chat: tabs, typing, voice input and playback one message at a time. MODE closes it
R2Her continuous voice dialogue over whatever is on the screen: her talking head on a transparent background while an invisible page runs the chat. Press R2 again to end it

Both show the same Caroline: the conversations live in her backend. Settings has a Caroline row that opens her panel, and her start wizard is served by her backend.

Caroline's chat on the Beroun launcher
The text chat.
Caroline's voice dialogue with her face over the screen
The voice dialogue, over whatever is open.
Caroline is the first tile of the launcher
Caroline is always the first tile.

How she runs

The shell runs her supervisor as the privileged service caroline-backend, once there is an account and a network, and watches it.

// system services list (excerpt) { "id": "caroline-backend", "privileged": true, "priority": 100, "memory_mb": 350, "sleep": true, // keeps working while the device sleeps "takeover": true } // may take the window when something is urgent
  • Her workspace and data live on the device, her ports follow the instance, and her runtime sits outside her repository.
  • No remote listener is opened.
  • When the shell stops, her processes stop with it.

One account, one edition

Beroun answers through the owner's SquirrelWisdom account. Her repository builds an edition for it: third-party model sources, their sign-in, model choice and wizard step are cut out, and the runtime carries no external model client.

The overlay

Code that has to run inside her process is applied from outside when it starts, so her checkout stays exactly as released.

PartWhat
Service keysLoaded from a local file, never kept in the OS repository
ic_messagingThe Communicator's backend: store, accounts, and adapters for mail, WhatsApp, Telegram, Signal and Slack, mounted on her API
Message toolsmessages_history, messages_search, messages_unread, messages_mark_read
ic_appsTool groups for apps (app-<id>), the beroun_* system group, agents, hooks and a pool for page tools
Browser driverHer browser tool drives the system's own Browser

A tool for every call

The rule is simple: every API of the system has a tool for Caroline. The beroun_* group covers files, settings, the clock, network, power, sleep, services, notifications, MessageBox, sound, vibration, her updates, the external display and the store. A test walks every route under /api/ and fails if one has no tool and no explained exemption.

App page Carolineberoun_* tools shelldone system API Dialogs · soundvibration Files · settings Network · power what a person can do, the assistant can do — through the same call
No special doors: the assistant uses the interface the apps use.

Apps ask her through POST /api/caroline/ask (permission caroline.ask); the answer goes back to that app only. Adding or editing an account needs the owner's passwords, so Settings gives her tools to list and remove accounts and to open the accounts page, and she opens the page for the owner to fill in.

An app asking Caroline
curl -XPOST localhost:8765/api/caroline/ask \ -d '{"text":"Summarise today for the notepad","timeout":60}' # Caroline's answer goes back to the app that asked, and to no other

Updates that undo themselves

The rule: inactive, she updates herself. In use, the owner is asked quietly. A ready update installs at the first inactive moment.

Checkevery 30 min Verifysignature · sha256 · size Readyinstall · ask · none Apply overlaystop · swap · restart Probation150 seconds Staysanswers on her port Rolled backmarked failed "ask" while she is in use: a notification and a MessageBox Install now / Later (asks again in 4 hours)
A broken release removes itself and is not tried again.
  • Her backend checks the signed release list every 30 minutes (and shortly after start), downloads the platform's artifact, and verifies signature, sha256 and size.
  • The shell's updater stops her, applies the overlay (owned paths only, directory swaps with rollback) and restarts her.
  • The system's copy is read-only and never touched. Updates go to a writable copy that runs only when its version is newer; a newer system image removes it.
  • The way back: an updated tree is on probation. It must answer on her port within 150 seconds and her supervisor must not die twice in a minute. Otherwise the previous copy is put back, and that version is marked failed and not tried again.
  • A release that needs a higher runtime waits until the platform itself is updated.
  • Tools: beroun_update_status, beroun_update_check, beroun_update_now (only on the owner's yes).

Resource figures

ItemFigure
Runtime on diskAbout 470 MB
Backend, idle or in a turn293–314 MB (about 350 MB with her supervisor)
Chat layer in the web viewAbout 530 MB with one tab, about 5 MB more per extra tab
Talking head42–68 MB while on screen