{"slug": "frona-v2026-5-5-self-hosted-personal-ai-assistant", "title": "Frona v2026.5.5 – self-hosted personal AI assistant", "summary": "The Frona v2026.5.5 release introduces a unified identity system where all user-owned entities now use a `Handle` newtype, reshaping policy principals and storage paths under a user handle. Tasks gain a required `result_schema` for rendering results into source chats, alongside a fix for a long-standing CronRun crash-recovery race. The chat UI now paginates history on scroll-up and displays day separators with per-message hover times.", "body_md": "This release is a big push on identity unification and task scheduling robustness. Every user-owned entity (User, Agent, App, McpServer, Channel) now carries a `Handle`\n\nnewtype, Policy principals are reshaped as `{user_handle}/{entity_handle}`\n\nunder a User parent, and all storage and routing paths are keyed by handle. Tasks gain a required `result_schema`\n\nthat drives how cron and one-shot results render back into source chats, with a fix for a long-standing CronRun crash-recovery race. The chat UI now paginates history on scroll-up and shows day separators with per-message hover times. Under the hood, Policy decisions and per-agent permitted tool sets are now cached, sandbox limits accept partial saves, and a Handle migration carries existing installs forward.\n\n**Supported channels:** Slack, Discord, Telegram, Signal, SMS, WhatsApp Cloud, WhatsApp Personal.\n\n### Identity / Handles\n\n- Add a\n`Handle`\n\nnewtype with sanitization rules and a build-script-generated reserved-name list; rename`User.username`\n\nto`handle`\n\nand require`Agent.user_id`\n\n+`Agent.handle`\n\n. - Add\n`App.handle`\n\n,`Channel.handle`\n\n, and rename`McpServer.slug`\n\nto`handle`\n\n; switch all four to handle-keyed paths. - Unify on-disk storage under\n`data/users/{handle}/{subsystem}`\n\nwith per-channel storage paths. - Switch Cedar entity UIDs to\n`Kind::\"{user_handle}/{entity_handle}\"`\n\nwith User parent; refactor`SandboxPrincipalRef`\n\ninto a struct + Kind enum and rewire`policy::service`\n\naccordingly. - Update the Cedar schema, db init indexes, and add a\n`handle_unification`\n\nmigration (cutover at`2026-05-24T00:00:00Z`\n\n); drop`seed_config_agents`\n\n. - Reshape\n`CandidateEvent`\n\nto carry typed`User`\n\n/`Channel`\n\n/`Chat`\n\n/`Message`\n\n/`Contact`\n\nreferences. - Carry user handle through the auth middleware and all API routes: admin/auth, agents, app proxy, files, MCP, browser, skills, tools, messages.\n- Scope agent skills by\n`user_handle/agent_handle`\n\n; update content + sandbox tools, the tool manager, and agent-affecting tools to use Handle paths. - Thread Handle through chat, channel, credential, notification, memory, and inference services.\n- Refresh built-in agent prompts and the\n`manage_service`\n\nprompt + manifest schema for handle-keyed URLs.\n\n### Tasks / Cron\n\n- Add a\n`result_schema`\n\nclassifier and renderer for task result delivery; require`result_schema`\n\non`create_task`\n\n/`create_recurring_task`\n\nand schema-drive source-chat delivery. - Plumb\n`result_schema`\n\nthrough`create_cron_template`\n\n+`spawn_cron_run`\n\n; accept`complete_task.result`\n\nas any JSON value and validate against the schema. - Restrict\n`send_message`\n\nto the agent's heartbeat chat so tasks deliver through`complete_task.result`\n\n. - Fix CronRun crash-recovery race by narrowing the orphan query and reordering\n`resume_all`\n\n. - Thread\n`space_id`\n\nthrough cron templates so CronRuns deliver into the right space. - Wrap the initial task instruction in\n`<task>`\n\nregardless of authoring agent. - Hide task-execution chats from the navigation space view; demote empty task-completion history rows from warn to debug.\n- Remove the unused\n`SCHEDULED_TASK.md`\n\nprompt; advertise recurring digests and briefs as researcher responsibilities.\n\n### Chat / Frontend\n\n- Load older chat messages on scroll-to-top and merge historical messages with SSE-buffered ones when loading a chat.\n- Show day separators, conversation gaps, and per-message time on hover.\n- Split auth, navigation, and session contexts; replace\n`AuthGuard`\n\nwith`AppGate`\n\n+`RequireAuth`\n\nand rewire auth/setup/main layout for the new gating model. - Route apps, notifications, and settings by handle; switch main pages and the conversation panel to the new context APIs; update types and the api-client for handle-based responses.\n\n### Channels\n\n- Skip\n`setWebhook`\n\nwhen the URL is already ours and drop the queue when replacing a stale URL. - Warn when an inbound webhook arrives for an unknown channel.\n- Store\n`Channel.id`\n\nas a bare UUID instead of a SurrealDB record literal. - Cover channel-delete with a test that asserts the spawned task is cancelled and\n`on_disconnect`\n\nruns.\n\n### Policy / Performance\n\n- Add a policy decision cache with prefix-scoped invalidation.\n- Cache per-agent permitted tool sets to cut\n`/api/agents`\n\nfrom O(N·M²) to O(N·M).\n\n### Sandbox\n\n- Smooth tracked CPU via EWMA to absorb transient bursts.\n- Fill missing sandbox limits with server defaults on partial save.\n- Fix\n`sandbox_cache`\n\ninvalidation by aligning`cache_key`\n\nto`user_id`\n\n.\n\n### Build / Infra\n\n- Add a docker task for publishing prod images to a personal preview registry; share constants/helpers via\n`common.sh`\n\nand annotate the image index for GHCR. - Persist cargo registry and git caches across dev container restarts.\n- Send a\n`User-Agent`\n\nheader on crates.io requests in`update-versions`\n\n; bump`smbclient`\n\nand`uv`\n\npackage pins.", "url": "https://wpnews.pro/news/frona-v2026-5-5-self-hosted-personal-ai-assistant", "canonical_source": "https://github.com/fronalabs/frona/releases/tag/v2026.5.5", "published_at": "2026-05-30 20:03:54+00:00", "updated_at": "2026-05-30 20:16:27.476417+00:00", "lang": "en", "topics": ["ai-agents", "ai-products", "ai-tools", "ai-infrastructure", "artificial-intelligence"], "entities": ["Frona", "Slack", "Discord", "Telegram", "Signal", "WhatsApp Cloud", "WhatsApp Personal", "Cedar"], "alternates": {"html": "https://wpnews.pro/news/frona-v2026-5-5-self-hosted-personal-ai-assistant", "markdown": "https://wpnews.pro/news/frona-v2026-5-5-self-hosted-personal-ai-assistant.md", "text": "https://wpnews.pro/news/frona-v2026-5-5-self-hosted-personal-ai-assistant.txt", "jsonld": "https://wpnews.pro/news/frona-v2026-5-5-self-hosted-personal-ai-assistant.jsonld"}}