Inspiration
Poultry feeds many Kenyan families, but on a typical medium farm of 500–5,000 birds I kept seeing the same losses:
- 🦠 Disease is noticed too late, so by the time many birds are dying, a whole batch can be lost.
- 🌾 Feed runs out without warning, and wastage goes unseen, even though feed is the biggest cost.
- 📓 Records live in exercise books, so nobody knows the real deaths, sales or profit of a batch.
Farm workers also speak Kiswahili and Sheng, while most farm software is English-only forms that nobody fills in. I wanted a farm team that workers can simply talk to, the way they already use WhatsApp, so I built KukuMind.
What it does
KukuMind is a team of seven AI agents. A worker sends a message or a photo in English, Kiswahili or Sheng, for example "B1 leo vifo mbili, chakula gunia moja" (B1 today: 2 deaths, 1 bag of feed), and the Manager agent passes it to the right specialist:
| Agent | What it does |
|---|---|
| 🧭 Manager | Routes every message, writes the morning briefing, shows today's plan and alerts |
| 📒 Flock records | Saves daily reports, registers new flocks, keeps every bird counted |
| 🩺 Disease detector | Camera and symptom check (RED / AMBER / GREEN), early warnings from the records, disease research, and a ready WhatsApp message to the vet |
| 🥚 Hatchery | Runs the 21-day incubator plan; hatched chicks become a new batch |
| 🌡️ Advisor | Vaccination plan and brooder heat for each batch's age |
| 🌾 Feed & inventory | Days of feed left, bags to order, wastage and sick-bird flags |
| 💰 Sales & marketing | Records sales, finds what's ready for market, writes offers to buyers, full profit statement |
A RED health alert automatically blocks sales of that batch until the vet clears it, and KukuMind never names medicines or doses. Each agent also has its own page with forms, charts and a chat, and a language picker sets the reply language.
Live demo: jachammer.ai/project/prj_12dfd0e721a247bfb46f15fca1f71e49 · Code: github.com/Mesheco/KukuMind
How I built it
I built KukuMind almost entirely in Jac (about 98% of the code).
- I modelled the farm as a graph (Object-Spatial Programming): Farm → House → Batch → Record / Sale / HealthCheck / Expense, plus FeedStore, Buyer, Vet and EggSet, for 14 node types in all.
- I made every agent a walker. For example,
save_reportwalks to a Batch, saves the record, lowers the birds alive and takes the feed out of the store. - I connected the AI through
by llm()(byLLM): 16 AI functions return typed Jac objects, such asdef route_message(text: str, batch_ids: list[str]) -> Route by llm();. I use Claude Haiku 4.5 to read and route messages, and Claude Sonnet 4.6 to write replies, check photos and explain diseases. - "The AI reads, the code counts." I let the model only copy numbers out of a message, and Jac code does all the arithmetic, so the records are always exact:
$$\text{alive} = \text{start} - \text{dead} - \text{sold}$$
$$\text{eggs} = 30 \times \text{trays} + \text{loose eggs} \qquad \text{feed (kg)} = 50 \times \text{bags} + \text{kg}$$
$$\text{profit} = \text{bird sales} + \text{egg sales} - \text{feed eaten} \times \text{price per kg} - \text{chicks} - \text{vaccines} - \text{other costs}$$
$$\text{days of feed left} = \frac{\text{feed in store}}{\sum_{\text{batches}} \text{birds alive} \times \text{kg per bird per day}}$$
- I built the whole stack in Jac: 16
walker:pubendpoints form the API, and the whole web app (home page, seven agent pages, camera, charts) is written as Jac client components (.cl.jac). I deployed it live on JacHammer. - I tested it: 161 automated checks with a stand-in AI, plus a live test with Claude in English, Kiswahili and Sheng.
Challenges I ran into
- Language: I had to teach the model Kiswahili and Sheng number words (thelathini na mbili = 32, gunia = a 50 kg bag, trei = 30 eggs) and correct Kenyan Kiswahili. Early replies used wrong words, so I added a shared language guide and a list of banned words.
- Wrong maths from the AI: in an early version the model got 32 trays of eggs wrong. That is why I moved all arithmetic into Jac code.
- Being a beginner on Windows: I had to set up a full-stack Jac app, fix the web build on Windows, and move my project out of OneDrive.
- Deploying: JacHammer runs a newer Jac than my laptop, so I updated the graph filter syntax from
(?:Farm)to[?:Farm]and declaredbyllmas a dependency.
Accomplishments that I'm proud of
- I built seven agents that plan, decide and act on one shared farm graph: a single message updates the records, feed stock, warnings, profit and the reply together.
- I made a disease check that goes from a phone photo to a ready message for the vet in about a minute, with safety rules enforced in code, not just in the prompt.
- I made sure every bird is accounted for: started − dead − sold = alive, checked for every batch.
What I learned
- I learned how Jac's walkers and graph make multi-agent systems feel natural: each agent simply walks the farm.
- I learned how typed
by llm()functions keep AI output structured, testable and safe. - I learned the best split: AI for language, code for numbers.
What's next for KukuMind
- WhatsApp and SMS reporting, so workers can report without opening an app
- More Kenyan languages (Kikuyu, Dholuo, Kamba and more)
- New agents for market prices, M-Pesa payments and vet booking
- An offline-first mobile app, and a county vet view for early outbreak warnings across farms
Built with: Jac · Jaseci · byLLM · Claude (Anthropic) · VS Code · GitHub · JacHammer
Log in or sign up for Devpost to join the conversation.