In production / internal project
An AI assistant we run ourselves
Jarvis is our in-house assistant: a Slack bot built on Claude that triages email, drafts and issues invoices and books sports courts on its own. It has been in production since August 2026. We built it to run SpexSol, and to learn what AI automation really needs before we propose it to clients.
- Status
- In production
- Category
- AI assistants · Workflow automation · Invoicing
- Who it's for
- SpexSol internal operations; the same pattern fits any small team buried in routine admin
The challenge
Where our own time was going
Reading mail for things that need a reply. Writing invoices and the email that goes with them. Chasing court bookings that open at odd hours. Small tasks, every day, each demanding attention at the wrong moment.
What we built
What we built
A Slack-first assistant. Claude decides which tool to call; code decides what is allowed. Anything that spends money or sends a message outside waits for explicit confirmation. Integrations run through self-hosted n8n, so credentials never reach the model. Booking is deterministic browser automation, with the model used only to repair a broken step.
How it works
- 01
Ask
A message in Slack, or a scheduled job at 10:00 each morning.
- 02
Decide
Claude picks a tool from a typed registry and fills in its arguments.
- 03
Gate
The executor checks permissions, budget and retries before anything runs.
- 04
Act
Search mail, draft an email, generate an EN 16931 invoice PDF, check or book a court.
- 05
Confirm
Bookings and outgoing email need a button press or a spoken yes.
- 06
Log
Every call, token and decision lands in Postgres with an audit trail.
What it does
What it does today
- Daily mail digest: what from the last 24 hours actually needs a reply.
- Invoices issued from a Slack message, with the PDF and covering email drafted.
- Court availability across three venues cached and bookable, with a public read-only view.
- An admin UI that shows exactly what the system sends to the model.
Internal deployment, one team. The points above describe scope, not measured client savings.
Design rules
Rules we did not bend
- The model proposes; code enforces. Approval is a gate in the executor, not a line in a prompt.
- Only sender, subject and a short snippet leave the mailbox. Never the body.
- Deterministic automation for predictable steps; AI only where the input is unstructured.
- Everything self-hosted on one server, admin access over a private network only.
What we learned
What it taught us
A second venue broke assumptions the first one hid, so adapters now read their configuration off the page instead of from constants. Token spend had to be measured per turn before it could be managed. These are the lessons we bring to a client project on day one.
Want this for your team?
Most of Jarvis is reusable: the tool gate, the integration layer, the audit trail. Let's talk about which of your routine tasks it could absorb first.