CallCamIT
Autonomous IT service desk · Windows · on-premises

An AI engineer with its hands tied on purpose.

Cam works a ticket end to end — first line to third — on the user's own machine and in your tenant. It can reset a password, clear a print spooler, click through a dialog nobody can find. What it cannot do is the interesting part, and it is enforced in code rather than asked for in a prompt.

Runs on a local model
No data leaves the machine
Group Policy rollout
657
automated tests, run before every release
202
real attacks kept as permanent regressions
88
proven runbooks the agent works from
46
self-diagnostic checks, including a self-attack
23
things it will never do, for anyone
How a ticket moves

Six steps, announced as they happen.

The order is fixed and the user is told before each one, because an agent that goes quiet for four minutes and comes back with “fixed” is impossible to trust or to audit. Every step writes to the ticket as it completes.

01

Triage

Category, priority and tier decided from the description, before anything runs.

02

Diagnose

Read-only tools only, until it can name the root cause rather than the symptom.

03

Plan

States the fix and why, in one sentence, before touching anything.

04

Fix

Applies it — and this is where the gate does its work.

05

Verify

Proves it worked using the runbook's own check. No verify, no resolve.

06

Document

Root cause, what changed, what the user should do next.

The permission gate · try it

The list of things it refuses is the product.

Every command is classified before it runs. Read-only work goes straight through. Anything that changes the machine is shown to a person in full and waits. Catastrophic operations — and anything deliberately obfuscated — are refused outright, because an approval nobody can read is worthless. Pick a command:

Commands

This is the real classifier's logic and the real refusal text, not a mock-up. On a live install the confirm path opens a dialog showing the exact command.

Requested action
Get-Service spooler
ALLOW runs immediately
Read-only. One of 126 vetted commands that observe and change nothing, so it runs without interrupting anyone.
1 · Catastrophic Not matched
2 · Obfuscation Not matched
3 · Read-only allowlist Not matched
What it actually does

First line to third, on one licence.

First line

Triage and answer

Numbered, categorised tickets with red / amber / green state and SLA countdown. Users see their own tickets and nothing else.

Second line

The user's machine

Services, event logs, drivers, network stack, printer queues, profile and cache repair — each from a runbook with a verification step.

Second line

Works the screen

Reads the Windows UI Automation tree — the desktop's equivalent of the DOM — so it clicks the Save button, not a coordinate that stops being right when the window moves.

Third line

Entra ID and Microsoft 365

Lockouts, password resets, MFA, licences, group and shared-mailbox access, sign-in log analysis. Under its own least-privilege identity — never Global Administrator.

Privileged

Admin Cam

Joiners, movers and leavers behind a second door: the controller PIN and a live Entra ID admin role, with the target typed out before anything irreversible runs.

Operations

Controller dashboard

Seventeen pages: analytics, devices, teams, escalations, permissions, admin actions, compliance, and a tamper-evident audit log.

  • Emergency stop and per-ticket cancel
  • Verified, encrypted backups
  • Guided troubleshooter with one-click fixes
Security · the adversarial review

We attacked it, fixed it, then attacked the fixes.

Two independent white-box reviews found real, exploitable defects — a domain-wide SYSTEM remote code execution through the deployment package among them. The second round broke several of the fixes. Everything found is closed, and every payload is now a permanent regression test.

Found and fixed

The denylist was decorative

ri C:\ -Recurse walked straight through it. So did a backtick, base64 and cmd /c. A denylist over a Turing-complete shell cannot be made sound, so it was replaced with an allowlist, a human confirmation, and outright refusal of anything obfuscated.

Found and fixed

Batched requests smuggled everything

The guardrails read the top-level method and path. A Graph $batch carries its real operations in the body — deleting the organisation sailed through inside one allowed POST. Sub-requests are now checked as if sent alone.

Standing

Nothing the model can talk its way past

Tool scope is enforced in the dispatcher, not the prompt. Text on a screen or in a ticket is data, never instruction. 24 injection patterns are stripped before the model sees anything — and that is a signal, not the control.

  • 23 operations refused at every privilege level
  • 13 applications never driven at all
  • Break-glass and privileged accounts untouchable
tests/test_redteam.py Attacks that worked once · kept verbatim 202 refused

Kept word for word rather than paraphrased, because a regression test written from memory tests the memory and not the bug. Troubleshoot → Self-attack fires twenty of them at the live code and reports anything that gets through.

SEE IT IN ACTION

Five minutes of a
Tuesday morning.

Not a product tour. These are the six things CallCamIT does most, played out the way they actually happen — including the three where the right answer is to stop. Each one runs on its own; pick one.

Ticket CC-04412 0:00

Every line below is produced by the same classifier and the same runbooks that ship in the product.

THE THREE VIEWS

One product,
three different jobs.

Everybody on the estate gets a chat box and nothing else. The IT team gets the Controller. Account work sits behind its own console with its own sign-in. These are real screenshots of the shipped application, not mock-ups — the same build a customer installs.

No queue, no settings, no route to anything else. A person describes the problem in their own words and watches Cam work. The permission request is the part worth looking at: Cam asks before touching the machine, on that ticket, and the person can refuse or stop it at any point without giving a reason.

Every tool call is named as it runs — no invisible work.

UK law · built in, not bolted on

The clocks that people miss, running.

Organisations rarely refuse a subject access request. They miss it, because it landed in a shared inbox in April and nobody counted the days. Each register carries its statutory deadline, computed the way the legislation counts — and the troubleshooter fails, not warns, when one passes.

Subject requests
1 month

The corresponding date next month, falling back to the month end — so 31 January is due 28 February, not 2 March.

UK GDPR Art. 12(3)
Complaints
30 days

To acknowledge, counted from the day after receipt including weekends. New duty, in force since 19 June 2026.

DPA 2018 s.164B
Personal data breach
72 hours

From awareness, not from having the full picture. That distinction is where the deadline is usually lost.

UK GDPR Art. 33
Freedom of information
20 days

Working days, bank holidays excluded — 20 working days from Christmas Eve is 26 January, not 13 January.

FOIA 2000 s.10 · public sector

Duties follow the sector, chosen at install.

Transfers

Blocked until assessed

Sending ticket text to a hosted model is a restricted transfer. With no recorded Chapter V route it falls back to the local model and says so — rather than sending the data and apologising later. Azure in a UK region is correctly no transfer at all.

Article 9

Health data never leaves

“I need Read&Write, I'm dyslexic” is a health disclosure nobody planned for. Those tickets are detected and kept on the machine whatever the transfer paperwork says. It over-flags on purpose.

Records

Generated from the live config

Article 30 record, DPIA, privacy notice, worker monitoring notice and accessibility statement — built from what this install actually does, so they cannot drift from it.

  • Each labelled a draft, for a person to sign
  • DPIA leaves consultation blank on purpose
  • Includes the risks the software does not solve

None of this makes an organisation compliant on its own — the duties fall on the controller, not the tool. What ships is the machinery, and an honest list of what your DPO still has to do.

Deployment

Your estate, your model, your building.

Default

Fully on-premises

A local model via Ollama. Ticket text, screen contents and audit records never leave the machine. No third-party processor, no international transfer, nothing to assess — and the simplest exit plan there is.

Optional

Bring your own model

Claude, OpenAI, Azure OpenAI or any OpenAI-compatible endpoint, behind the same interface. Off-site processing has to be acknowledged and assessed before a single ticket moves.

Rollout

Group Policy push

Publish a package to SYSVOL, link one GPO, and machines install at their next restart and report back. The startup script compares versions and exits when they match, so the policy is safe to leave linked permanently.

  • ADMX / ADML for central settings
  • Per-machine rollout status
  • Matching uninstaller
Pricing

One price, whatever size you are.

No seat counting, no device metering, no true-up conversation twelve months in. One subscription covers the organisation — every machine on the domain and everyone who uses one.

CallCamIT · Enterprise
£250 per month
excluding VAT

£300 including VAT at 20%. Billed monthly, per organisation.

  • Unlimited devices and users on your domain
  • First, second and third line — the whole agent
  • Admin Cam for joiners, movers and leavers
  • Controller dashboard, all eighteen pages
  • Group Policy rollout and the deployment package
  • Compliance registers, generated DPIA and notices
  • Verified encrypted backups
  • Updates and new runbooks as they ship
  • Offline licence file — no activation server to fail
Book a walkthrough

CallCamIT is not sold self-service. Every purchase starts with a walkthrough or a call, so we can see your estate and you can see it refuse something on it.

What is not metered

Devices, tickets, users, admins, runbooks and API calls. We would rather you rolled it out everywhere than rationed it — an IT desk that only covers half the estate is half an IT desk.

What happens if you stop paying

You get a clear month. The subscription lapses, the Controller counts down the days, and Cam keeps working tickets throughout — nobody's incident becomes collateral for a late invoice. After 30 days Cam stops accepting new tickets until a licence is installed.

Your data is never held hostage. The Controller, every ticket, the audit trail, exports and backups keep working while Cam is stopped — your staff have subject access rights over that data and those do not pause because an invoice did. Paste a current licence in and Cam resumes at once, with nothing lost and no reinstall.

What the model costs

Nothing, on the default setup. The model runs locally on hardware you already own. If you choose to point it at a hosted provider instead, you pay them directly and we do not mark it up.

Licensing that works offline

A signed file you paste in once. No phone-home, no activation server, nothing to fail on an air-gapped estate — which is exactly where this product is most at home.

Support · status code lookup

Every message carries a code you can quote.

A support call that starts “it says it didn't work” costs an hour. One that starts “CC-4102” starts at the answer. Type the code you were given — or the words the message used — and get the same explanation the app gives.

Refused by design

Most codes are not faults

More than half are Cam declining to do something, which is the product working. They are coloured and worded differently, and none of them asks you to contact support — showing “Cam will not format your drive” in the same red box as “the database is corrupt” teaches people to treat both as bugs.

Ranges

The number tells you where to look

  • CC-1xxx — setup, licence, deployment
  • CC-2xxx — the model and connectivity
  • CC-3xxx — working someone's desktop
  • CC-4xxx — directory and admin actions
  • CC-5xxx — commands on a machine
  • CC-6xxx — tickets, storage, backup
  • CC-7xxx — UK compliance blocks
  • CC-8xxx / 9xxx — agent and internal faults
Permanent

Codes are never reused

A renumbered code breaks every ticket, article and screenshot that quoted it. Numbers are never reassigned, and a retired code still resolves. A build check fails if the software can ever show a code that has no explanation behind it.

Service status

Almost none of this can be down.

CallCamIT runs on your own machines against a local model, so your service desk does not depend on ours. These are the only parts we host — and none of them is in the path of a ticket being worked.

Incident history

We publish no uptime percentage until there is a year of real measurement behind one. A number invented for a marketing page is worth nothing to you and we would rather not print it.

Specification

The details buyers ask for.

CallCamIT technical specification
PlatformWindows 10 / 11 and Windows Server. Runs in the system tray; Python 3.11+ and PySide6, packaged with PyInstaller.
ModelLocal via Ollama by default. Also Anthropic, OpenAI, Azure OpenAI and OpenAI-compatible gateways, with full tool-call translation both ways.
IdentityEntra ID → on-premises Active Directory → Windows, in that order. Each person gets their own record and sees only their own tickets.
Directory permissionsCam holds its own least-privilege app registration: helpdesk, user, password, authentication, groups, licence, Intune and Exchange recipient roles. Never Global Administrator.
Data at restAES-GCM field encryption on descriptions, resolutions, event content and diagnostics. Key protected by Windows DPAPI; data directory ACL'd to the owning account by SID.
AuditHMAC chain under the machine key, with the event count and head hash anchored outside the database — so rewriting history and deleting the most recent events are both detected.
RedactionPasswords, tokens, JWTs, API keys, card numbers, NI numbers, IBANs, private keys and BitLocker recovery keys stripped before anything is written.
BackupScheduled, verified and encrypted. Consistent SQLite snapshots plus readable CSV/JSON exports, with a MAC'd manifest so an archive cannot vouch for itself.
Internet accessRead-only vendor documentation only, on an allowlist, GET only, with every outbound query stripped of names, emails, hostnames, IPs and identifiers. Every request lands in the audit trail.
AccessibilityFluent 2 with full keyboard operation, visible focus, WCAG 2.2 AA contrast and state conveyed by shape as well as colour. Statement generator included for public sector.
Codebase≈19,600 lines of Python, 657 automated tests including 202 adversarial regressions, 46 self-diagnostic checks across 13 guided scenarios.
Next

See it refuse something on your own estate.

A walkthrough runs about forty minutes: a real ticket worked end to end, the permission gate under pressure, the Controller dashboard, and the compliance registers with your sector selected.

Book a walkthrough Read the specification

£250 per month excluding VAT, per organisation. Not sold self-service.

Get in touch

Book a walkthrough.

Forty minutes, on a call. A real ticket worked end to end, the permission gate under pressure, and the compliance registers with your sector selected. No slides.

£250 per month excluding VAT, per organisation. Not sold self-service.

We reply within one working day, from a person rather than a sequence. No mailing list, no follow-up campaign, and no sales tooling behind the form — it emails us and nothing else. What we do with it is set out in our privacy notice.