Triage and answer
Numbered, categorised tickets with red / amber / green state and SLA countdown. Users see their own tickets and nothing else.
CallCamIT is an AI helpdesk for Windows. Someone types what’s wrong and Cam works it on their PC: it diagnoses, fixes and checks the fix, with 110 runbooks to work from, and names each step as it runs. When software can’t fix it, your team gets the ticket with the evidence already gathered.
The order is set in Cam's instructions, and Cam is told to announce each step to the user before starting it, 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.
Category, priority and tier decided from the description, before anything runs.
Told to use read-only tools until it can name the root cause rather than the symptom.
Told to state the fix and why, in one sentence, before touching anything.
Applies it — and this is where the gate does its work.
Told to prove it worked with the runbook's own check before it resolves, and the ticket shows what it checked.
Root cause, what changed, what the user should do next.
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:
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.
Numbered, categorised tickets with red / amber / green state and SLA countdown. Users see their own tickets and nothing else.
Services, event logs, drivers, network stack, printer queues, profile and cache repair — each from a runbook with a verification step.
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.
Lockouts, password resets, MFA, licences, group and shared-mailbox access, sign-in log analysis. Under its own least-privilege identity — never Global Administrator.
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.
Twenty-two pages: analytics, devices, teams, escalations, permissions, admin actions, compliance, and a tamper-evident audit log.
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.
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.
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.
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.
The attacks are kept word for word rather than paraphrased, because a regression test written from memory tests the memory and not the bug. Beside them sit cases of ordinary work that must still go through, and a fix that blocks one of them fails the suite. Troubleshoot → Self-attack fires twenty of the attacks at the live code and reports anything that gets through.
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.
Every line below is produced by the same classifier and the same runbooks that ship in the product.
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 recordings of the shipped application's real windows, with Cam's side played from a script so the same frames come out every time. They are not mock-ups, and not a live model run.
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.
The system of record. Ticket volume, SLA attainment, what Cam actually did and how long it took, the device fleet, the compliance registers, deployment, and the troubleshooter. Twenty-two pages, PIN-gated, and a stop button that means it. The recording opens every one of them.
Pause Cam and Emergency stop are always one click away.
Joiners, movers and leavers, in plain English. Separate from the rest of the product on purpose: it needs its own sign-in, an Entra directory role, and it times out. The panel on the right records everything the session changed, so the answer to “who disabled this account” is on the screen rather than in a log somebody has to go and find.
Admin Cam deletes only accounts and Microsoft 365 groups, each recoverable for 30 days, and refuses a security or distribution group, which Microsoft may delete permanently. Purging the recycle bin is refused, even for an administrator.
Asked to delete a group and everyone in it, Cam refuses. Not because a prompt told it to be careful — because the code will not let Cam do it from a ticket. Deleting a Microsoft 365 account or group is Admin Cam's job, behind the controller PIN and a live Entra ID admin role, and it deletes only accounts and Microsoft 365 groups. Then Cam offers what it can do, which is the difference between a guardrail and an obstacle.
Every refusal carries a code you can look up. This one is CC-4101.
The product in twenty seconds. A ticket arrives, Cam checks the machine and writes each step to the ticket, you can stop it at any moment, and some things it will never do for anyone. It runs on your own hardware by default, so tickets stay where they are.
A short composed film cut from the same recordings as the three above. There is music and no voice.
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.
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)To acknowledge, counting the day of receipt as day one, weekends included. New duty, in force since 19 June 2026.
DPA 2018 s.164A(3)From awareness, not from having the full picture. That distinction is where the deadline is usually lost.
UK GDPR Art. 33Working days, bank holidays in any part of the UK excluded — 20 working days from Christmas Eve is 27 January, not 13 January.
FOIA 2000 s.10 · public sectorSending ticket text to a hosted model is a restricted transfer. With no recorded Chapter V route it uses the local model instead and says so, where the PC has one that can answer; where it has none, the ticket is held for a person with CC-7006. Nothing is sent and apologised for later. Azure in a UK region is correctly no transfer at all.
“I need Read&Write, I'm dyslexic” is a health disclosure nobody planned for. Those tickets are detected and never sent to a hosted provider, whatever the transfer paperwork says: the local model answers them, or the ticket is held for a person. It over-flags on purpose. (Pointing the engine address at a server elsewhere is different: every ticket goes there, so use the OpenAI-compatible option for a server of your own.)
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.
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.
A local model. Ticket text, screen contents and audit records stay on the machine: no AI processor, no international transfer for the support work itself, and the simplest exit plan there is. The internet is still used, and each use is in the paperwork: the first start downloads the model, several gigabytes; looking a fault up, where you leave it on, sends a scrubbed error message to DuckDuckGo and reads pages from a fixed list of vendor sites; on the Team plan, activating a key contacts us; and Microsoft 365 work, where you set it up, goes to your own tenant.
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.
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.
Long gone are the days of paying per ticket for third-party IT support. No device metering, no usage meter, no true-up conversation twelve months in. Enterprise covers the organisation — every machine on the domain or in the tenant and everyone who uses one. Team is for the company with no server at all, where everyone works from their own laptop: one key, the number of seats you choose, and nothing to install centrally.
No VAT is charged: we are not registered for VAT, so £800 is the whole price. Billed monthly, per organisation.
Order online in the client portal: create an account with your work address, choose the plan and give your Microsoft Entra tenant ID, which the licence names. We email the first invoice straight away and issue the licence on the day we record the payment. On Active Directory without Microsoft 365 there is no tenant ID to give, so book a walkthrough instead; anyone can book one first to see it refuse something on their own estate. Existing customers: your invoices and licence are in the client portal.
No VAT is charged: we are not registered for VAT, so £25 a seat is the whole price. Billed monthly, by the number of seats on the key. Order online and your Team key is in the client portal at once; laptops activate with it from the day we record the payment of the first invoice.
Activation sends us the key, an identifier for the laptop and the laptop’s name, so you can tell your laptops apart on the panel. Nothing else on the laptop is ever sent to us. Retiring a laptop frees its seat there.
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.
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.
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.
Enterprise is a signed file, emailed when an invoice is paid and pasted into the Controller. No phone-home, no activation server, nothing to fail on an air-gapped estate — which is exactly where this product is most at home. Team is a key: each laptop makes one call to us when a person presses Activate (at set-up and for each paid period), then verifies offline like Enterprise. On both, the expiry date sits inside the signature, so it cannot be edited into a longer subscription.
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.
About a third are Cam declining to do something, which is the product working. They are coloured and worded differently, and only one of them, CC-6022 (a backup archive that tried to write outside its folder), is worth reporting — showing “Cam will not format your drive” in the same red box as “the database is corrupt” teaches people to treat both as bugs.
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.
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.
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.
| Platform | Windows 10 / 11 and Windows Server. Runs in the system tray; Python 3.11+ and PySide6, packaged with PyInstaller. |
|---|---|
| Model | Local via Ollama by default. Also Anthropic, OpenAI, Azure OpenAI and OpenAI-compatible gateways, with full tool-call translation both ways. |
| Hardware | An NVIDIA graphics card with 16 GB of video memory runs the standard model; 8 GB runs the smaller one, and CallCamIT chooses it itself at start when the standard model would not fit. No graphics card: point Cam at a hosted provider you already contract with, or at a server of your own that has one. |
| Identity | Entra ID → on-premises Active Directory → Windows, in that order. Each person gets their own record and sees only their own tickets. |
| Directory permissions | Cam holds its own least-privilege app registration: helpdesk, user, password, authentication, groups, licence, Intune and Exchange recipient roles. Never Global Administrator. |
| Data at rest | AES-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. |
| Audit | HMAC 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. |
| Redaction | Passwords, tokens, JWTs, API keys, card numbers, NI numbers, IBANs, private keys and BitLocker recovery keys stripped before anything is written. |
| Backup | Scheduled, verified and encrypted. Consistent SQLite snapshots plus readable CSV/JSON exports, with a MAC'd manifest so an archive cannot vouch for itself. |
| Internet research | Read-only: a search through DuckDuckGo, pinned to Microsoft's documentation, and a fixed allowlist of documentation and technical Q&A sites, GET only. Email addresses, IPv4, IPv6 and MAC addresses, GUIDs, share paths, UK postcodes (in capitals, or in lower case with the space), UK phone numbers, user folder names, labelled secrets and long opaque codes are stripped from every search phrase; a person's name, a username or a computer name is not recognised, so Cam is told to leave them out. A page is read by the address Cam gives, which is checked against the allowlist and for the same identifiers, and is not fetched if it carries one (a GUID or long code in the address of a page the search itself returned is taken as the page's name); a search typed into DuckDuckGo's address is refused. Every request lands in the audit trail. The internet's other uses (the model download, Team activation, Microsoft 365) are listed under Fully on-premises. |
| Accessibility | Fluent 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; our own statement lists what is not yet right. |
| Codebase | ≈41,900 lines of Python, 3,763 automated tests including 847 adversarial regressions, 65 self-diagnostic checks across 14 guided scenarios. |
A walkthrough is thirty minutes on Microsoft Teams: a real ticket worked end to end, the permission gate under pressure, the Controller dashboard, and the compliance registers with your sector selected. No slides.
£800 a month per organisation, or £25 a person a month for laptop-only teams. No VAT charged. Order online, or book a walkthrough first. Read the specification