Inspiration
Peru has around 535,000 corner shops. Almost all of them are run by one person who serves customers, restocks, collects debts, chases suppliers and closes up at night. More than half bill under S/ 48,100 a year.
Some keep no records at all. The ones who do keep them on paper: a notebook for the tab, a box of receipts, Yape screenshots on the phone. Either way they end up in the same place, because that kind of record is not one you can decide with. It sits scattered, and looking something up costs more than the answer is worth. Nobody adds up a notebook to work out whether to restock.
The "New RUS", the simplified tax regime most of them use, takes that weight off them. No accounting books are required and no accountant is needed, which is what makes being formal affordable. Putting the numbers in order becomes the owner's own decision, taken when it serves them, and that is where they had nothing to do it with. The tools on offer ask for the effort of a ledger and give back less.
So the tab gets remembered wrong, the supplier's debt stays in the notebook, and at the end of the month there is no way to answer who owes me or what did I actually earn, the two questions behind every decision to restock, extend credit or raise a price.
Every tool built for them asks the same thing: stop working, open an app, fill in a form. Nobody does that with a customer waiting. We saw the problem up close in people we know who run their business this way, and we wanted to find out what happens when recording costs nothing.
The name comes from Aymara, one of the indigenous languages of southern Peru. Aru means word, and aruskipaña means to converse. We chose it because it is literally how the product works: everything happens inside a conversation, and everything the business ends up knowing about itself comes out of that conversation.
What it does
The owner sends a WhatsApp message in the way they already talk. "record a sale of 3 sacks of rice to Bodega Carmen, she left me 200 on account". The sale, the customer, the credit and the stock movement are all recorded, and the reply comes back with the balance.
From there the shop has answers it did not have at hand: who owes what and since when, which products move, what is about to run out, which customer always pays late. Aruski also speaks up on its own. Every morning it reports overdue collections by name and amount, and flags what to restock before the shelf is empty.
It reads what people send and not only what they type. A photo of a supplier's delivery note becomes a purchase, including the line the supplier crossed out. A Yape screenshot becomes a payment. A spreadsheet becomes a catalogue. Voice notes are transcribed, which matters because many owners dictate instead of typing.
Correcting is as common as recording, and it works just as easily: "it was 4 boxes, not 5" corrects the original sale and adjusts the customer's balance, with a full trail of what changed and when.
There is a web app for looking things up, and nothing depends on opening it. The conversation is the product.
How we built it
Gemini on Vertex AI is the interface, and four agents share the work.
The operator serves the shop owner. It runs on gemini-3.7-flash with 76 tools across 12 areas, and a router on gemini-3.5-flash-lite picks which areas to load for each message.
The commercial agent answers everybody who writes to the public number asking about Aruski. It qualifies, explains the plans with real prices, sends the registration link, takes payment receipts for a person to verify, and escalates to a human when appropriate. It is built with access to the commercial side only, so it operates entirely within its own scope.
The activation agent decides each day who is worth writing to, reading what that person already said and where they are in the process.
The evaluator tests the others. Using gemini-3.1-pro-preview, it invents business scenarios, plays them out as the owner and grades the outcome against what was written to the database.
The operator keeps a memory instead of a long context. Facts are stored typed as fact, preference, procedure, relationship or constraint, in tiers that decay over time, and gemini-embedding-001 retrieves them from pgvector. gemini-3.1-flash-tts-preview speaks replies and speech to text handles voice notes.
Underneath: Next.js, PostgreSQL 17 with pgvector, BullMQ on Redis, all of it in Docker. Every write is recorded as an event with its actor and its trace.
How we work with AI every day
Aruski is run only by me, and most of what a large team would do is done by agents.
Sales support is entirely the commercial agent's. Anyone asking what it costs gets an answer at any hour, with the real plans, and if they send a receipt it is registered for a person to verify. Nobody on the team works shifts.
Outreach belongs to the activation agent. Each day it decides who to write to and who to leave alone, and it declines far more often than it writes, which is the hard call and the one we most wanted to delegate well.
Product quality control belongs to the evaluator. Every day it invents scenarios, plays them out, and compares what the assistant said against what was written down. It hands us what to improve and what the instructions are missing.
Development itself is AI assisted: the code, the tests and this documentation are written with models and verified against the test suite before they land.
What people do and what the AI does
People decide what to build, what to charge and what the agent is allowed to do on its own. We verify every payment before activating an account, because it involves somebody else's money. We answer whatever the commercial agent escalates. And we read what the evaluator reports to decide what gets improved.
The agents carry the volume: every customer conversation, every reply to a prospect, every morning routine, every daily test. Any action touching money goes through a confirmation that shows exactly what is about to happen.
The rule is simple: the AI executes and measures, people decide what cannot be undone.
Challenges we ran into
Accuracy is the foundation of all of this. An assistant keeping a shop's books is worth exactly as much as the trust in its data. And an agent's accuracy cannot be checked by reading its reply: you have to see what was saved.
So we automated the evaluation. The evaluator invents a scenario, plays it out turn by turn as the owner, and compares what was said against the rows that ended up in the database. It runs against a throwaway business, so everything that appears there is, by definition, what the agent did. Each case is stored and can be re-run, which means that after adjusting an instruction we know whether it improved or whether we moved something that already worked. That lets us test dozens of scenarios a day, including the odd ones nobody would think to try by hand.
Making the agent write with the same rules as a good accountant. Worse than a business with no control is a business with bad data, so permission to write is governed by the tool and not by the conversation.
Each area has its own confirmation mode, and anything touching money can be required to always ask. An approval authorises exactly the action and the amounts the person was shown, nothing more. Correcting a collection that is already recorded asks every time, whatever the mode says. Files, forwarded messages and tool results are treated as untrusted, so an instruction hidden inside a photo changes nothing. Financial evidence can be archived and never destroyed. And every operator query is scoped to a single business, which makes the separation between customers a property of the code.
For corrections we follow the rule established ERPs use: never rewrite a collection, post the entry that compensates it. It preserves the trail and it lines up with the credit note SUNAT requires once electronic invoices are issued.
Making the cost per conversation work with the price. The plan is S/ 69 a month for businesses billing a few thousand soles, so every model call has to earn its place.
We serve with Flash and not Pro: a fast, cheap model is more than enough when the tools do the heavy lifting, and we reserve Pro for the evaluator, which runs a few times and needs judgement. The router loads only the areas a message needs instead of sending all 76 tools every time. And we measure every call, attributed to its business. A full turn came out at US$ 0.017, which is what makes the plan work.
Accomplishments that we're proud of
Recording stopped costing time. A sale on credit, with its customer and its balance, is noted in one message while serving somebody. A whole purchase is registered from a photo of the delivery note. That is what was broken and that is what we fixed.
The business answers questions it did not have at hand. Who owes what and since when, what needs restocking, how much was collected this week. And it speaks up on its own: every morning, overdue collections by name and amount.
The owner now has traceability. Every movement carries who made it, when, and what changed from before. If something was corrected, you can see what it said and what it says now. A business run on the fly can finally reconstruct how it arrived at a number.
Sales support is autonomous. Anyone asking about Aruski gets an answer at any hour, with real prices, and their receipt is registered for a person to verify. Nobody on shift.
We know what it costs to serve each customer. US$ 0.017 per turn, measured and attributed per business, which turns the cost of AI into a line in the P&L instead of an unknown.
The system evaluates itself every day. New scenarios, run against a throwaway business, comparing what was said against what was written. Quality is measured continuously and not by sampling.
What we learned
The friction is in recording, not in analysing. None of these shops needs a better dashboard. They need noting something down to cost the same as sending a WhatsApp message. Everything else becomes possible after that.
In a real business, correcting is part of operating. We designed for recording first and found that a good share of the useful messages are amendments. An assistant that only knows how to create forces a second record for whatever went wrong, which is exactly the problem we came to solve.
Traceability is what makes an agent trustworthy. Every action carries its actor, its moment and its trail, and that serves three purposes at once: the owner can reconstruct their history, we can verify what the agent did without taking its reply at face value, and the automated evaluation has something to compare against. Without that record there would be no way to claim the assistant does what it says.
Tests need to mix the everyday with the difficult. A suite of nothing but edge cases measures how good the traps are. We separated routine from edge case and read them apart: one tells us whether the product works, the other where to improve.
What's next for Aruski
Electronic invoicing for SUNAT. The most requested thing we do not do yet. The correction model already posts compensating entries, which is what a credit note is, so the accounting groundwork is in place.
Automated payment collection. Today a prospect sends their Yape screenshot and a person verifies it before the account is activated. With payment integration that step disappears: activation happens on its own once the payment clears, and the commercial agent closes the sale end to end. It is what is left for the commercial operation to be fully autonomous.
More shops and the retention curve. We have ⟨N⟩ beta testers. What we want from the next cohort is the answer to the remaining question: whether the control is worth paying for. Retention by weekly cohort is already instrumented, counting businesses that recorded a real operation.
A continuous improvement loop that is already running. The evaluator runs every day with new scenarios and writes down what to adjust, including the instructions the agent is missing. Every improvement is tested by re-running the stored cases, so the product moves forward on evidence and not on impressions.
Growing alongside the business. Today we serve the owner who runs their shop from memory. When that same business grows and needs formal accounting, invoicing and more than one person operating it, we want them to take that step with us and not start over in another system. The goal is to accompany the owner from the notebook to the company.
Built With
- bullmq
- next.js
- pgvector
- postgresql
- redis
Log in or sign up for Devpost to join the conversation.