arizuko › products › Supermarket price agent
Supermarket price agent
“Where’s milk cheapest this week?” — the agent searches, compares, and replies with sources. One shared folder serves everyone who asks.
system shape
This is the minimal end of the product spectrum. One folder, one catch-all route, no per-user state. The six primitives at their leanest:
- Event. A Telegram message, a web-chat widget message, or a webhook POST — all land as rows in the same inbox. The agent doesn’t know or care which channel sent them.
-
Routing. One catch-all rule maps every inbound
event to the single
supermarketfolder. No per-user routing, no topic logic. First rule wins, every time. -
Agent (folder-as-data). The folder holds a
PERSONA.md(the agent’s instructions for how to answer price queries), aCLAUDE.md(allowed tools, citation format, refusals), andfacts/retailers.md— operator-seeded list of the retailers to check, their URLs, and any known quirks (price date lags, members-only prices, etc.). - Authorization. The route is the fence: anyone who reaches the bot or the chat URL can ask. No per-user ACL rows.
-
Turn. One ephemeral container per query. The agent
reads
facts/retailers.md, searches the named retailers on the live web, and writes a reply. Results are cached infacts/cache/by item + date; a second query for the same item today skips the search. -
State. The shared DB (per-turn message rows) and
the folder on disk (
facts/retailers.md,facts/cache/). No per-user sub-folders. No memory files. Nothing accumulates between users.
Ten users or ten thousand — the structure doesn’t change.
The limit is concurrent container slots
(MAX_CONCURRENT_CONTAINERS, default 5), not registered
users. There is no registration to do.
example
telegram · DM
user where's the cheapest whole milk this week?
agent Checked Tesco, Sainsbury's, Lidl (prices as of today):
Tesco: 2L semi-skimmed £1.09 (Clubcard price £0.95)
Sainsbury's: 2L whole milk £1.10
Lidl: 2L whole milk £0.99
Cheapest: Lidl £0.99.
source: lidl.co.uk/grocery/dairy, tesco.com/groceries, sainsburys.co.uk
The agent cites three retailers and links sources. No login, no sign-up, no memory of who asked. The next person to ask gets the same search, same sources — unless the cache already holds today’s prices, in which case the answer is instant.
where this sits — the minimal end
This is the simplest possible arizuko deployment:
- No per-user memory. Every user starts fresh.
- No folder tree. One level, one folder.
- No grants table. The route is the auth fence.
- No scheduled tasks. The agent only runs when a message arrives.
- No OAuth. No linked identities. No web dashboard for users.
The other end of this spectrum is the company brain — folder tree as org chart, per-team memory, scheduled briefs, multi-source ingest, per-folder ACL. Same pipeline, very different folder contents. Start here; reach for that shape only when you need the structure.
data & trust
-
Your server. Message history and cached prices live
under
/srv/data/arizuko_<name>/. Backup is onetar; no DB dump. - Default outbound paths. The configured channel (Telegram or web chat) for bot traffic; Anthropic for model calls. Web search egress via crackbox — allowlist the retailer domains you want the agent to reach.
- No user data collected. There are no per-user memory files, no linked identities, no email addresses. The only persistent state is the cache and the message log.
setup
arizuko create shop
cd /srv/data/arizuko_shop
$EDITOR .env # set TELEGRAM_BOT_TOKEN or leave blank for web-chat only
arizuko group shop add web:supermarket supermarket # register the folder
arizuko route shop add '' supermarket # catch-all: every channel
$EDITOR groups/supermarket/facts/retailers.md # seed retailer list
arizuko run shop
Full step-by-step is in the operator setup guide. A web-chat token gives you a chat URL you can open or embed anywhere without any platform adapter — good for a quick internal deployment.
go deeper
- primitives — the minimal recomposition: one shared folder (Agent), a single catch-all route (Routing), a web-search Turn, no per-user State. The same pipeline, a smaller folder
- routing — how the single catch-all rule works; route table match keys
- crackbox — per-folder egress allowlist for retailer domains
- web skill — how the agent searches the live web; how to enable it
- web chat tokens — mint a widget URL without a platform adapter
- company brain — the other end of the spectrum: folder hierarchy, per-team memory, scheduled briefs
- deployment guide — first instance, first channel, first invite