Applied AI and automation
We use artificial intelligence where it is really needed and with the right guardrails: agents that work continuously within defined perimeters, read-only and with verified reports; automation of administrative cases on portals and management systems that have no API; document processing; web, desktop and Android applications.
One rule runs through everything: before anything is sent or any irreversible action is taken, there is a person. Drafts stay drafts, forms are submitted after the go-ahead, PINs are typed in by the person who holds them.
AI agents in continuous operation
We entrust AI agents with a perimeter and a written mandate: monitoring, looking for what the checks miss, improving their own code, keeping a log. Deterministic programs do the continuous monitoring; the agents interpret the data, write the reports and fix the code. On the monitored systems they work read-only and without opening new channels: a person decides on interventions.
We do not take the agents’ claims at face value: a second workflow, explicitly tasked with disproving them, checks them before they become a report.
Technologies and products
- Coding agents with models from several providers, including open-weight ones
- Multi-agent workflows with adversarial verification
- Python, systemd, cron, Docker, tmux
- Read-only SSH and WinRM access
Examples
-
Continuous monitoring of multiple perimeters In production
Reports that must stand up to anyone trying to disprove them
- The problem
- A full analysis carried out by several agents produced convincing reports, but not everything they claimed was true.
- What we did
- A second workflow tried to disprove the three main claims of each report by checking files, processes and logs.
- Result
- Some claims did not hold up (automatic backup copies and wake-ups that were declared but did not exist) and were corrected. Since then adversarial verification has been part of the process.
-
Continuous monitoring of multiple perimeters In production
The error that never became an alarm
- The problem
- In all ten monitoring sessions, an error in the check itself stayed silent instead of becoming an alarm.
- What we did
- Two separate channels: new items are reported once, active anomalies every time. Then a before-and-after measurement on 21 risks, using the same metric: do they really reach a person?
- Result
- Three hidden faults resurfaced. The measurement showed that notification to people had not yet improved, and since then new critical issues have arrived with an alert from the portal.
Browser automation for portals without APIs
For portals that offer no API we use dedicated Chrome instances with a persistent profile, driven through the DevTools Protocol or with Playwright: calls run inside the tabs, automatic sign-in with the second factor where the account holder has set it up, checks against frozen tabs. CAPTCHAs and SMS codes always go back to a person.
Technologies and products
- Playwright (Python and Node.js)
- Chrome DevTools Protocol
- TOTP
- PowerShell
One example
-
Internal use, hardware purchasing In production
A quote from eight portals in 40-70 seconds
- The problem
- For a quote we had to open the distributors’ B2B portals one by one, sign in again where sessions had expired and compare prices and availability by hand.
- What we did
- One command queries eight portals, signs in again where sessions have expired and returns net price, list price, availability, promotions and variants, including the actual seller in marketplace offers.
- Result
- Response in 40-70 seconds; automatic sign-in tested on 7 portals. A first version based on a multimodal model that read the pages was replaced by deterministic scripts, which are faster and more predictable.
Automation of administrative cases on web management systems
We turn an office procedure into a verifiable chain: a work list from Excel, navigation of the management system, extraction from the official PDF documents, calculation according to the law, entry of the outcome, a check of the result, a Word letter from the office’s template and a written record for each case. Anything that does not add up goes to a person.
Technologies and products
- Python and Playwright
- PyMuPDF
- Decimal for calculations
- openpyxl and Word
One example
-
Service company for a municipal tax office In production
Local tax recalculations, with a check after data entry
- The problem
- Recalculating local tax assessment notices according to the law, case by case, on a web management system without an API.
- What we did
- Seven Python modules, parsers for the notices in two formats, a study of the legislation (penalties, charges, late-payment interest, notifications, the summer suspension of time limits) and eight letter templates. After data entry the program compares the outstanding amount with the letter and, if the difference exceeds the tolerance, cancels the entry and enters it again.
- Result
- In the second batch, 34 of 39 cases completed (2 discarded, 3 passed to manual verification), about 4.6 minutes per case; 22 defects fixed along the way.
Administrative automation and e-invoicing
Invoicing documents and checks built on dated records, never on estimates: the e-invoice XML is the authoritative document, PDFs are generated from the official stylesheet and a document does not go out if a check fails.
Technologies and products
- Italian e-invoicing format (FatturaPA) and XSL
- E-invoicing REST APIs
- IMAP and SMTP
- Python and headless Chrome
One example
-
Organisation of a major event Delivered
Supplier invoices downloaded and verified
- The problem
- Collecting the suppliers’ invoices in an orderly and readable archive.
- What we did
- Download through the APIs with the original XML, PDFs generated from the official stylesheet and an index.
- Result
- 16 invoices archived, all checks passed.
Document processing
Extraction of text and data from PDFs (including scanned ones), extractive summaries with headlines, Word and PDF documents identical to the client’s templates, source indexes with SHA-256 hashes.
Technologies and products
- python-docx and Word automation
- PyMuPDF and pypdf
- tesseract
- ReportLab and Pillow
One example
-
Large company Prototype
Reports in the client's corporate format
- The problem
- Producing long reports in the client’s corporate template without redoing the formatting, tables and images by hand.
- What we did
- A generator that clones the original template and preserves its formatting, tables and images, with a suite of automated tests.
- Where we have got to
- It has produced a 43-page progress report with 93 tables and a report on the implementation of NIS2.
Email, Microsoft Graph and digital signatures
Mailboxes read by scripts in read-only mode, drafts that the account holder then sends, bulk imports, documents digitally signed and independently verified. There are no passwords in the scripts: authorisation goes through OAuth.
Technologies and products
- Microsoft Graph
- OAuth 2.0 with PKCE
- Exchange Web Services
- PAdES
- asn1crypto and cryptography
Examples
-
Internal use In production
Company email with no passwords in the scripts
- The problem
- Reading a Microsoft 365 mailbox on a federated domain and preparing replies without entrusting the credentials to a program.
- What we did
- OAuth authorisation with PKCE after a sign-in by the account holder, a refresh token that changes with every use; the replies become drafts in the mailbox.
- Result
- Reading is automatic and sending always stays in the account holder’s hands.
-
Registration case with an authority Delivered
Declarations signed and independently verified
- The problem
- Producing digitally signed declarations and being certain that the signature was valid before sending them.
- What we did
- PDFs generated from the official data, remote signing driven by a script, with the PIN and OTP typed in by the holder, then an independent verification: covered bytes, digest, signature over the attributes, certificate.
- Result
- Documents signed in PAdES and the case closed.
-
Industrial company Delivered
Five hundred contacts in two mailboxes, zero errors
- The problem
- Importing an address book into two Exchange mailboxes.
- What we did
- Import through Exchange Web Services, with a check of the results.
- Result
- 504 contacts imported, zero errors.
Web, desktop and Android applications
Portals with Python or Node.js backends, SQLite and server-generated pages, behind nginx with automatic certificates: two-layer sign-in, CSP, CSRF protection, automatic restart. Windows applications for workstations, with packages for silent installation; native Android apps. The phone bars for operators are described in the Telephony and contact centres area.
Technologies and products
- Python, FastAPI, SQLite
- Node.js and Electron
- C# and .NET, WiX (MSI)
- Rust and Tauri
- Kotlin and Jetpack Compose
Examples
-
Monitoring for multiple clients In production
A monitoring portal built and improved every day
- The problem
- Bringing together in one place the status of many monitored perimeters, with separate documents for each client.
- What we did
- A portal with per-client views, a page for each issue, PDFs for individual clients verified by an automated test on the text and alerts only for new critical issues.
- Result
- In production since 17 October 2026, with continuous improvements.
-
Service company Delivered
Do not disturb during video calls
- The problem
- Incoming calls interrupted users’ video calls.
- What we did
- A Windows application recognises video calls from the audio level and the window titles and sets the “do not disturb” status; deployment through 64-bit MSI packages with silent installation.
- Result
- Version 2.4 delivered; the rewrite in Rust and Tauri is a prototype.
-
Research and development Prototype
Navigation on the slopes, even without a network
- The problem
- Finding your way on the ski slopes even where the phone has no coverage.
- What we did
- An Android app with Kalman-filtered GPS, a calibrated compass, route calculation with Dijkstra’s algorithm on a graph derived from OpenStreetMap, elevations and data available offline.
- Where we have got to
- Working prototype, distributed only for internal testing.
Privacy and data residency in AI tools
Before adopting an AI tool we check where the data goes, by reading the provider’s terms and not its promotional pages. And we design the workflows so that the documents we deliver carry neither other clients’ data nor secrets.
Technologies and products
- GDPR and standard contractual clauses
- ISO/IEC 42001 and NIST AI RMF
- Automated secret scanning
- Pseudonymisation
Examples
-
Client company In progress
A coding assistant and the GDPR
- The problem
- Finding out whether an AI coding assistant keeps data in Europe.
- What we did
- Analysis of the provider’s terms: on the standard service, data is also processed outside the European Union; it stays in the region only with the data-residency enterprise edition and a dedicated rule, which is disabled by default.
- Where we have got to
- A documented overview, including what leaves the region in any case: telemetry, billing, support and checks for secrets.
-
Monitoring for multiple clients In production
Each client sees only their own data
- The problem
- A portal that serves multiple clients must never mix their data in the documents.
- What we did
- Separate PDFs for each client with an automated test on the text, scanning for secrets in the reported issues (only hashes reach the server), pages without external resources.
- Result
- Every PDF passes an automated test on the text before it is delivered.