The pain
To use AI, people have to leave Odoo. They export spreadsheets into another application, or hand their Odoo password to an outside service. The answer lands somewhere else, and the work stops while they copy it back. Chatboo opens on top of the screen they are already on.
| 01 — Waiting while the AI thinks? | It is a layer you put on and take off. Close it, keep working, and the elephant tells you when the answer is ready. |
| 02 — Does every question cost money? | Turn what you repeat into a skill. Most of the time it runs without calling the AI: zero cost, same answer every time. |
| 03 — Explaining which record you mean, every time? | It knows what is on screen. If several records match, click the row and that is it. |
What you get
On the screen they already use
- The elephant in the top bar opens the chat over the current screen. Nobody leaves the record they were on.
- It knows which record or list is on screen.
- When several records could match, it lists them. Click a row and the next question is about that one.
- Conversations are saved and can be reopened. Each user sees only their own.
Work while it thinks
- Close the chat and carry on. The answer keeps coming.
- When it is ready, the elephant shows a bell and Odoo shows a notice.
- A long answer can be stopped from the chat.
Answers they can use
- Tables whose cells open the record, and charts drawn in the chat.
- Export an answer to PDF, Excel or Word, or copy it.
- Attach a spreadsheet, a Word file, a PDF, an image or plain text, and ask about it.
- Answers can be read aloud.
Skills that cost nothing
- Type
/and pick a skill: a procedure written once, for the client's routines. - Tables and charts from a skill come from code, not from the AI. Same data, same answer.
- A good answer can be saved as a new skill from the chat itself.
- That knowledge is a service you sell and maintain at each client.
Safe for your client
- It reads as the person who asks: their access rights, record rules and companies.
- A change is a plan with a Confirm button. Only users you allow can confirm.
Put it on, take it off
- A plain Odoo module: no external server, no build tools.
- Apache 2.0. No fee per user, per database or per year.
- Uninstall it from Apps like any other module.
Included in the module
Read from the module’s own files, version 2.1.553.
Example skills
They come with the module to show what a skill looks like. Each client’s own skills are written by their consultant. Type / in the chat and pick one.
| Command | Name | What it does | Argument |
|---|---|---|---|
/annual-billing |
Annual billing by week | Customer invoicing (posted out_invoice) by ISO week for a year or date range; pastel bar chart by month. | year=2024 |
/billing |
Billing by period | Posted customer invoice totals for a period (last N months, year, YTD or range); chart-ready table without business-area coupling. | ytd |
/cash-forecast |
Cash forecast | Week-by-week cash forecast page from open customer and supplier items by due date: inflows, outflows, running balance, lowest point and the biggest receipts and payments ahead. | weeks=12 |
/credit-facility |
Credit facilities | Month-end drawn (creditor balance) on facility journals; configurable period; PDF-safe month blocks. | ytd | 12 | 2025 | 2024-2025 | 2025-03 | ? |
/customer-360 |
Customer 360 | One-page customer view across apps: profile, health score, revenue by month, open and overdue invoices, CRM opportunities, meetings, planned activities and the latest messages. | customer name, VAT or email |
/customer-risk-analysis |
Customer risk analysis | Customer collection-risk score from six criteria: payment ratio, DSO, temporal spread, monetary volume, recency and due-date compliance. | meses=24 min_deuda=0 top=30 |
/dashboard |
Business dashboard | Nine chart cards — team (or journal), top customers and trend for month, quarter and YTD from posted customer invoices. | |
/financial-health |
Financial health | Narrative financial situation report: KPIs, liquidity, debts, collections, ratios, facilities; configurable period. | ytd | 12 | 2025 | 2024-2025 | 2025-03 | ? |
/forecast |
Weather forecast | Company-city forecast for the next 7 days by default; optional other cities; sky column uses weather emojis. | company city · 7 days |
/pipeline |
Sales pipeline | Live CRM pipeline page: funnel by stage, weighted forecast by close month, salesperson leaderboard, win rate and stalled deals. | team=… salesperson=… stalled_days=21 |
/sys-info |
System information | Odoo version, series, server time, current user and company, user/company/module counts, and base URL. | |
/users-all |
All users | All system users (including archived) with login, name, email, type (internal/portal), active flag and last access. | |
/users-logged |
Logged-in users | Users currently connected (bus online/away). If the bus is unavailable, last logins by date. |
Contexts
| Code | Kind | Description |
|---|---|---|
page_tab |
domain | Answer as a page in its own browser tab (page_url), not as a chat table |
presentation_grids |
domain | Chatboo table presentation — soft pastels, pijama, quartiles/terciles, readable text colours |
self_chatboo |
domain | Chatboo identity — role, tone and scope |
ui_focus |
domain | Chatboo screen focus — implicit reference to the Odoo view underneath the overlay |
Installing Chatboo also brings PNS AI Engine, with its 28 contexts: see them.
What it does not do
- No AI of its own. Providers, agents and approvals live in the AI Engine. Without a provider with the Conversation role, the chat has no one to ask.
- Not for every user by default. Only users with AI Conversational and a generated API key can use it.
- No changes without a person. The AI proposes; a user with AI Writer presses Confirm.
- Two tested series. 14.0 and 19.0. From 15.0 to 18.0 you build the modules yourself and try them first; 13.0 and older do not run (see Odoo versions).
Questions
Where do the questions go? To the providers set up in the AI Engine, in the order of the agent's list. A skill that runs without the AI sends nothing out.
Is the voice an outside service? No. Reading an answer aloud uses the browser's own voice.
Is Chatboo an MCP server? No. The MCP server is in the AI Engine (/mcp). Chatboo is the chat inside Odoo, and it talks to the engine through PAAP, inside the same Odoo.
Can I use the engine without Chatboo? Yes. The AI Engine alone serves Cursor and other MCP clients.
Getting started
-
Install. From the Odoo Apps Store, download Chatboo: the store brings PNS AI Engine and PNS Base. From git, clone the three on the same series (
19.0or14.0):mkdir -p ~/odoo/pns && cd ~/odoo/pns for r in pns_base pns_ai_mcp pns_ai_chatboo; do git clone -b 19.0 --depth 1 https://github.com/patanegra-soft/$r doneEach clone is one more entry in
addons_path(~/odoo/pns/pns_base,~/odoo/pns/pns_ai_mcp,~/odoo/pns/pns_ai_chatboo). On Odoo 14, first runpip install "openpyxl>=3.1.2". Restart Odoo, Apps → Update Apps List and install Chatboo; the other two come with it. -
Set up the AI Engine. Chatboo talks to the AI through
pns_ai_mcp. Follow its Getting started: AI administrator, your access and one provider.
Done. Click the elephant in the top bar.
For IT staff
How it fits
pns_ai_chatboo ──PAAP──▶ pns_ai_mcp ──▶ AI providers
(conversation) (engine)
Chatboo owns the conversation: sessions, the chat turn (streamed), the
screen it is opened on and the interface (the app and the overlay from the
top bar). Providers, agents, tools and the AI loop belong to the engine;
Chatboo talks to it through PAAP (Patanegra Application Agent Protocol).
It depends on web, bus, mail, pns_base and pns_ai_mcp.
A picked row travels with the next message as {model, id, label}, so the
engine takes it as the subject instead of searching the name again. The
pick is spent by that message.
Repository layout
main is one tree for every series. A flat branch (14.0, 19.0) is that tree built for one series, ready for the addons path.
| Path | Contents |
|---|---|
common/ |
Version-agnostic code, skills, contexts, data, Apps sheet |
stacks/owl1/pns_ai_chatboo/ |
Odoo 14 |
stacks/owl2/pns_ai_chatboo/ |
Odoo 15 and later |
The installer overlays common/ then the stack; a stack file with the same
path wins. Edit agnostic files only in common/. Build a flat module with
./install_flat.sh 19.0 /path/to/addons.
Python: on 14, use a current openpyxl (old wheels break with recent
NumPy). On 19 there is nothing extra.
Odoo versions
| Series | Status |
|---|---|
| 14.0, 19.0 | Tested. Flat branch published. |
| 15.0 – 18.0 | Not tested, by people or by CI. No branch published. |
| 13.0 and older | Not supported. |
15.0 to 18.0. There is no branch to clone. Build the flat modules
yourself from main, which has the code for every series (owl2 for 15.0
and later): pns_base, pns_ai_mcp and Chatboo.
git clone https://github.com/patanegra-soft/pns_base.git
git clone https://github.com/patanegra-soft/pns_ai_mcp.git
git clone https://github.com/patanegra-soft/pns_ai_chatboo.git
cd pns_base && ./install_flat.sh 17.0 /path/to/addons && cd ..
cd pns_ai_mcp && ./install_flat.sh 17.0 /path/to/addons && cd ..
cd pns_ai_chatboo && ./install_flat.sh 17.0 /path/to/addons
The script warns that the series is not tested. Nobody has run Chatboo on these series, so try it on a test database first and run the Odoo tests there (see Tests). If it works, or does not, tell us (CONTRIBUTING.md).
Odoo 13 has no OWL, which the chat is built on. Odoo 8 to 12 run on a
Python older than 3.7, which the engine needs. The suite keeps two stacks
(owl1 for 14.0, owl2 for 15.0 and later).
Tests
| Where you are | What runs |
|---|---|
main |
python -m pytest unit_tests, with no Odoo. Then the Odoo tests, after ./install_flat.sh 19.0 <dir>. |
A flat branch (14.0, 19.0) |
The Odoo tests in tests/. The unit tests live on main. |
odoo-bin -d <db> -i pns_ai_chatboo --test-enable --stop-after-init --test-tags /pns_ai_chatboo
License, marks, training
Apache-2.0 — see LICENSE and NOTICE.
Chatboo™, the elephant-and-speech-bubble device, PATANEGRA Soft™ and PAAP™
are trademarks of PATANEGRA Soft SL; the license does not grant them.
TDM / AI training is allowed (TDMRep tdm-reservation = 0).
Security: SECURITY.md. Bugs, ideas and questions: CONTRIBUTING.md.
