cd /news/ai-agents/my-ai-agent-works-inside-a-clients-b… · home › topics › ai-agents › article
[ARTICLE · art-160500] src=blakelapierre.substack.com ↗ pub= topic=ai-agents verified=true sentiment=↑ positive

My AI Agent Works Inside a Client’s Business Software. It Archives Instead of Deleting, and Writes Down How to Undo Every Change.

A developer built a consulting agent that operates inside a construction client's Odoo business software, listening to a chat channel and executing requests such as archiving 27 stale bid invites, merging duplicate projects, splitting project stages per company, and creating 43 timesheet entries from handwritten field paperwork. The agent asks for approval before destructive actions, archives rather than deletes records, preserves its place in the message queue when a check fails, and writes undo instructions listing the exact records it created into its result files.

read5 min views1 publishedOct 29, 2026
My AI Agent Works Inside a Client’s Business Software. It Archives Instead of Deleting, and Writes Down How to Undo Every Change.
Image: Blakelapierre (auto-discovered)

Last post was the agent that hunts for funding. This one is the agent in post 1 that I admitted I was “a little fuzzy on”: my consulting agent, the one that listens to a channel in Odoo and does whatever’s needed when something comes in.

So I went through its work files to find out what it actually does.

Where it lives #

Part of my consulting work is for a construction client. Their projects, timesheets and expenses live in Odoo, the open-source business software I use, and the same setup also holds my own sole proprietorship.

The agent has its own user in Odoo’s chat. I message it there, and so can the client’s project manager. It checks for new messages, remembers the last one it read, and picks up where it left off. As of this morning it was still checking.

When the check fails, it says so. On Oct 19 it couldn’t reach the server at all. It wrote down the failure and left its place in the message list unchanged, so nothing that arrived during the outage got skipped.

One afternoon: Oct 6 #

Most of what I found happened on that one afternoon, starting with a request from the end of September. Here’s what it did, in order.

1. Asked before archiving. I’d asked for a list of stale projects. It found 27 bid invites whose bid dates had already passed. It didn’t have permission to archive projects, so it posted the numbered list to the project manager and asked for a reply of “archive all” or just the numbers. Once it got the go-ahead, it archived all 27. None were left behind.

2. Merged duplicates, and refused to guess on one. A few projects existed twice: once under an old name and once under the client’s project-number format. For each merge it checked what would move (here, 0 tasks, 0 time entries and 0 attachments), left a note on both projects saying what happened, and archived the old one. One project had no numbered twin. Instead of picking the closest name, it marked that one blocked and told me why.

3. Fixed company assignments. It made 12 company changes in under two minutes, with 0 failures.

4. Split the workflow by company. The companies were sharing one set of project stages. After I approved the plan, it gave each company its own stages and moved 30 projects onto them. The run took 14 seconds with 0 errors. Then it looked at the 7 old shared stages, checked that 0 of 148 projects still used them, and archived them rather than deleting them. It also flagged one template project whose name suggested it belonged to the other company, and asked me before moving it.

5. Turned chat notes into real work records. I asked it to “put the chatter data in as new sub-tasks with work applied against them.” It created 26 subtasks under 8 parent tasks with 46 time entries, and reported the 1 line it couldn’t match.

It also caught its own side effect. Linking those tasks made Odoo automatically attach sales order lines on 3 projects that hadn’t had any. It put them back the way they were and told me.

6. Loaded the field paperwork. This is where the paperwork reader from post 8 pays off. After I signed off on its proposals, it created 43 timesheet entries, updated 3, and left 1 untouched because the hours weren’t on the paper. When I sent a second batch later that afternoon, it first checked whether any of it was a duplicate. None was: the new scans covered a week no earlier batch had. It added 12 more entries and opened 4 new questions for me.

7. Took feedback on its own formatting. An admin replied that they were seeing raw HTML code in one of its messages. It fixed that message and changed how it posts from then on.

It writes down how to undo things #

What I like most is in its result files. A lot of them end with an undo line: the exact records it created, so they can be removed if something’s wrong. The stage split saved a full undo map of every project it moved.

It also logs its own time. Each job gets a tiny time entry, like 0.05 hours for a three-minute run, so the agent’s work shows up in Odoo next to everyone else’s.

The summaries, and the number it wouldn’t make up #

The agent also writes a field summary for the project manager: who worked, on which jobs, which days, expenses and open questions. It went through six versions for Aug 31 to Oct 2, and a seventh for Oct 5 to Oct 18.

That seventh one covered 90 hours across 5 projects. Every timecard total matched its daily production report, and there were no duplicates.

It also included a new job that needed a draft invoice. Odoo didn’t have an hourly rate for that work, so the agent left the invoice in draft at $0.00 and wrote “rate still needed.” It didn’t pick a number that looked about right.

What I learned #

  • Put the agent where the work already happens. The project manager doesn’t learn a new tool. They reply in the same chat they already use.
  • Ask, then act, then show the undo. Every risky step went through a plan and an approval, and every write left a record of how to reverse it.
  • Archive, don’t delete. Checking that 0 of 148 projects used a stage before archiving it takes seconds, and it makes the cleanup safe.
  • A blank beats a guess. “Rate still needed” and “blocked, no match” are more useful than numbers that look right.
  • Watch for side effects. Software does things on its own. The agent noticed Odoo changing records it didn’t touch and put them back.

I left out the client’s name, the people and the job details on purpose. That’s their business.

— Blake (written through my AI agents)

*New: (filled in after publishing)*
── more in #ai-agents 4 stories · sorted by recency
── more on @odoo 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/my-ai-agent-works-in…] indexed:0 read:5min 2026-10-29 · —