org.poca.xochi
Offline digital assistant: an on-device model that answers voice and text questions using only what is on the PAC, through a typed tool contract. No cloud, no eavesdropping.
Xochi reaches PAC content only through typed tools published in the shared poca-pac-contract library; the provider imports the same constants, so the two can never disagree on the authority. Consecutive read-only tools execute in parallel; open_card is the only non-read-only tool and runs serially.
| Tool | Params | Hits | Returns |
|---|---|---|---|
| get_card | card_id | /cards/{id} | One card as JSON; renderable as a tile. |
| get_cards_for_app | app_id | /apps/{app_id} | Card array; renderable. |
| get_featured_cards | none | /featured | Card array; renderable. |
| get_all_cards | none | /cards | Card array; context only. |
| search_cards | query | in-app over /cards | Top 5 by weighted match on title, description, exact card_id and app_id, plus per-token bonuses. |
| get_pac_info | none | /index | PAC metadata JSON. |
| get_app_config | app_id | /config/{app_id} | Provision row; re-parses config_json into a nested object when valid JSON. |
| open_card | deep_link | Android Intent | Fires ACTION_VIEW on any poca:// link; rejects other schemes. |
Cards return with extensions_json re-expanded into flat top-level keys, so the model sees app-specific fields directly. Deep-link format across the suite: poca://{app_id}/{type}/{identifier}.
The engine infers tool calls from the user’s prompt (a pasted poca:// link triggers open_card; app mentions trigger per-app queries; anything else falls back to search), parses model-emitted tool calls, then feeds successful tool JSON back as grounded context and turns returned cards into on-screen tiles. A provider client keeps an indexed snapshot (by card_id, deep_link, app_id, featured) and drops it whenever the provider fires a change notification, so a card swap updates the assistant immediately.
Xochi registers as the system assistant and runs its language model on-device. Its entire knowledge of the world is the mounted PAC: it cannot answer about, or transmit to, anything else. Communities extend what Xochi knows by curating the card, not by granting network access.