<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Arun Rajiah</title>
    <description>The latest articles on DEV Community by Arun Rajiah (@arunrajiah_11).</description>
    <link>https://dev.to/arunrajiah_11</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3909239%2Fe43ee18d-ec31-4f41-866b-f7ff39575213.jpeg</url>
      <title>DEV Community: Arun Rajiah</title>
      <link>https://dev.to/arunrajiah_11</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arunrajiah_11"/>
    <language>en</language>
    <item>
      <title>Your team uses Odoo — without logging in to Odoo: Introducing OdooPilot</title>
      <dc:creator>Arun Rajiah</dc:creator>
      <pubDate>Sat, 02 May 2026 16:23:17 +0000</pubDate>
      <link>https://dev.to/arunrajiah_11/your-team-uses-odoo-without-logging-in-to-odoo-introducing-odoopilot-470d</link>
      <guid>https://dev.to/arunrajiah_11/your-team-uses-odoo-without-logging-in-to-odoo-introducing-odoopilot-470d</guid>
      <description>&lt;p&gt;Your warehouse manager shouldn't need to learn Odoo to update a stock count. Your sales rep shouldn't need a VPN to log a call note. Your HR assistant shouldn't need the Odoo UI to approve a leave request.&lt;/p&gt;

&lt;p&gt;They just need to send a message.&lt;/p&gt;

&lt;p&gt;That's the problem &lt;strong&gt;OdooPilot&lt;/strong&gt; solves.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is OdooPilot?
&lt;/h2&gt;

&lt;p&gt;OdooPilot is an open-source Odoo 17 Community addon (v17.0.11.0.0) that gives every employee an AI assistant on &lt;strong&gt;Telegram or WhatsApp&lt;/strong&gt; — connected to the same Odoo instance, scoped to the same permissions they already have.&lt;/p&gt;

&lt;p&gt;No login. No training. No extra server. No Docker. No SaaS fees. Everything runs inside your Odoo instance.&lt;/p&gt;

&lt;p&gt;Here's what it looks like in practice:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Mira (WhatsApp):   "I need 3 days off next month — Mar 14–16."
OdooPilot:         "Filed leave request for 3 days (Mar 14–16). Carlos has been notified."

Carlos (Telegram): [inline button: ✅ Approve   ❌ Refuse]
Carlos:            taps Approve.
OdooPilot:         "✅ Leave approved. Mira has been notified."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Odoo adoption problem solved: data is no longer stale because the people who generate it finally have a way to reach Odoo that fits their day. Same data, same permissions, same audit trail — just lower friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical architecture
&lt;/h2&gt;

&lt;p&gt;Everything runs &lt;strong&gt;inside the Odoo addon&lt;/strong&gt; — no separate Python service, no cloud deployment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTTP Controllers&lt;/strong&gt; — verify webhook HMAC signatures in constant time, per-(channel, chat_id) sliding-window rate limit, idempotency dedup on message IDs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent loop&lt;/strong&gt; — loads session, builds messages, runs the LLM tool loop&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read tools&lt;/strong&gt; execute immediately; &lt;strong&gt;Write tools&lt;/strong&gt; → preflight → resolve target record → stage pending args + per-write nonce → ask Yes/No&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;On confirmed Yes&lt;/strong&gt; → execute under the linked Odoo user's environment (all record rules apply)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  LLM support — swap in Settings, no restart needed
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Default model&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;anthropic&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;claude-3-5-haiku-20241022&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Best reasoning per dollar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;openai&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;gpt-4o-mini&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Widest ecosystem&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;groq&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;llama-3.3-70b-versatile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Free tier, very fast&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ollama&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;(set in config)&lt;/td&gt;
&lt;td&gt;100% local — data never leaves your server&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Security (passed public audit April 2026)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Webhook HMAC-SHA256 verification in constant time — mandatory for both Telegram and WhatsApp&lt;/li&gt;
&lt;li&gt;Per-write nonce — the confirmation click is cryptographically bound to the exact staged write; prompt injection can't swap it&lt;/li&gt;
&lt;li&gt;SHA-256 hashed magic-link tokens, single-use, 1-hour expiry&lt;/li&gt;
&lt;li&gt;Two-step CSRF-protected account linking flow&lt;/li&gt;
&lt;li&gt;Bounded thread pool + sliding-window rate limiting&lt;/li&gt;
&lt;li&gt;Immutable audit log for every tool call (timestamp, user, tool, args, result)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What it covers today
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Domain&lt;/th&gt;
&lt;th&gt;Read&lt;/th&gt;
&lt;th&gt;Write (with confirmation)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Project &amp;amp; Tasks&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ mark task done&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Sales &amp;amp; CRM&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ confirm order · update stage · create lead&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Invoices &amp;amp; Accounting&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Inventory&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HR &amp;amp; Leaves&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ approve leave&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Purchase&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Write tools always show an inline Yes/No confirmation before touching any data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Community feedback wanted
&lt;/h2&gt;

&lt;p&gt;I'm building this for the Odoo community and I'd love your input:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;👉 Which modules do you need most? (Manufacturing? Timesheets? Point of Sale?)&lt;/li&gt;
&lt;li&gt;👉 Telegram or WhatsApp — which does your team actually use?&lt;/li&gt;
&lt;li&gt;👉 What's missing that would make you install it today?&lt;/li&gt;
&lt;li&gt;👉 If OdooPilot saves your team time, consider &lt;a href="https://github.com/sponsors/arunrajiah" rel="noopener noreferrer"&gt;sponsoring&lt;/a&gt; to keep development going!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;📦 &lt;strong&gt;Odoo App Store&lt;/strong&gt;: &lt;a href="https://apps.odoo.com/apps/modules/17.0/odoopilot" rel="noopener noreferrer"&gt;https://apps.odoo.com/apps/modules/17.0/odoopilot&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🐙 &lt;strong&gt;GitHub&lt;/strong&gt; (LGPL-3 open-source): &lt;a href="https://github.com/arunrajiah/odoopilot" rel="noopener noreferrer"&gt;https://github.com/arunrajiah/odoopilot&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;♥ &lt;strong&gt;Sponsor&lt;/strong&gt;: &lt;a href="https://github.com/sponsors/arunrajiah" rel="noopener noreferrer"&gt;https://github.com/sponsors/arunrajiah&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Current release: 17.0.11.0.0 — pure Odoo 17 Community addon, no external dependencies beyond what Odoo already ships.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>odoo</category>
      <category>opensource</category>
      <category>aiops</category>
      <category>erp</category>
    </item>
  </channel>
</rss>
