AI intake for Combodo iTop: classifies new tickets and asks what is missing
742
AI-powered middleware for Combodo iTop that reduces ticket back-and-forth and helps engineers start working faster.
Engineers waste time on tickets that arrive without enough information: vague descriptions, missing hardware details, no steps to reproduce. Before any work can start, they have to write back to the user and wait. This creates delays, drops SLA metrics and frustrates everyone.
The engineer sees the ticket only when it's ready to work on.
When a new ticket arrives, the assistant intercepts it via webhook — there is no extension to install into iTop. Processing runs as a single AI agent that decides what the ticket needs and acts through a fixed set of tools:
The subcategory's own description in iTop is what the agent treats as the completeness criteria — so the questions it asks are specific to the service context, not generic prompts.
Each of the four actions has its own switch: a deployment that only wants routing, or only wants the engineer's summary, turns off the rest. A switched-off action is not asked to be skipped — its tool is never handed to the model, so it cannot happen at all (which actions the module performs).
The agent decides the order; the tools enforce the rules. The round limits, the "one question per run" rule and the "stop once an engineer takes the ticket" guard are plain code, not instructions in a prompt — a model that misbehaves gets its call rejected rather than the ticket damaged.
All AI actions are performed under a dedicated iTop service account, so every comment is clearly attributed and auditable.
Scenario 1 — incomplete ticket
A user opens a ticket in the service portal:
Title: printer broken
Description: Not printing.
The service subcategory is Hardware, which requires: device model, OS and exact error. The description provides none of this. The assistant posts in the public log within seconds:
AI Assistant
Thank you for reaching out! To help us resolve this quickly, could you please provide:
— the manufacturer and model of the printer (e.g. HP LaserJet 400 M401dn);
— your operating system and version;
— the exact error message or what happens when you try to print.
Scenario 2 — complete ticket
Another user submits:
Title: HP LaserJet 400 M401dn not printing after Windows 11 update
Description: My HP LaserJet 400 M401dn stopped printing after a Windows 11 update yesterday evening. Error: "Driver unavailable". Already restarted both printer and PC.
All required fields are present. No question is asked. Instead, the engineer immediately sees an internal note:
AI Assistant (internal note)
Issue: HP LaserJet 400 M401dn stopped printing after a Windows 11 update. Error: "Driver unavailable".
Already tried: Restarted printer and PC.
Suggested next step: Reinstall or update the printer driver from HP's website; check if Windows Update pushed an incompatible driver version.
Ticket created User commented
│ │
└───────────┬────────────┘
│
▼
┌─ guard (plain code) ──────────────────────────────┐
│ Already processed? ──yes──▶ stop │
│ Engineer assigned? ──yes──▶ stop │
│ Last comment was ours? ──yes──▶ stop │
└─────────────────────────┬─────────────────────────┘
│ no
▼
┌─ agent session ───────────────────────────────────┐
│ In the prompt: the ticket, the conversation, │
│ plus the service catalog while the ticket is │
│ still unclassified. │
│ │
│ The agent picks a tool, the tool enforces: │
│ │
│ classify service + subcategory checked │
│ against the catalog, then the │
│ session continues │
│ ask one question in the public log, │
│ session ends │
│ hand off internal note for the engineer, │
│ session ends │
└─────────────────────────┬─────────────────────────┘
▼
Ticket marked processed, or left waiting for a reply
that arrives as the next webhook
QDRANT_URL unset and the assistant runs Redis-only, with those references simply absent. See vector indexgit clone https://github.com/knowitop/itop-ai-assistant.git
cd itop-ai-assistant/docker
cp .env.dist .env
docker compose up -d
The compose stack starts iTop, Redis, Qdrant and the assistant together. If you already have an iTop, Redis or Qdrant instance, comment out those services in docker-compose.yml.
A deployment that brings its own compose file can pull the image directly, from Docker Hub or from GHCR:
docker pull knowitop/itop-ai-assistant # or: ghcr.io/knowitop/itop-ai-assistant
Version tags follow releases — the full version, its major.minor, its major, and latest; edge follows main. Both registries carry linux/amd64 and linux/arm64.
Once running:
| Service | URL |
|---|---|
| iTop | http://localhost:8000 |
| Admin UI | http://localhost:8001/ui |
| API docs | http://localhost:8001/docs |
Open http://localhost:8001/ui — the Setup Wizard starts automatically and walks you through all the required steps.

Also hosted, with search, at itop-ai-assistant.readthedocs.io.
The current release covers the first-contact intake loop — intercepting new tickets, asking clarifying questions and preparing them for the engineer. Planned next phases:
Feedback and ideas are welcome in GitHub Issues.
Requires uv.
cd assistant
uv sync
cp ../docker/.env.dist .env # fill in LLM and iTop settings
uv run uvicorn itop_ai_assistant.main:app --host 0.0.0.0 --port 8001 --reload
Tests:
uv run pytest # unit tests (mocked LLM, iTop and Redis), with coverage
uv run pytest test/integration # the agent against a real LLM (needs .env.test)
Only the unit tests run by default; the integration suite is opt-in because it needs a reachable model endpoint.
Admin UI (requires Node.js; the dev server proxies /api to the backend on :8001):
cd ui
npm ci
npm run dev # hot-reload dev server
npm run build # production build, straight into the Python package
Architecture details and development conventions are in CLAUDE.md.
Content type
Image
Digest
sha256:c5d8f09e4…
Size
93.8 MB
Last updated
19 days ago
docker pull knowitop/itop-ai-assistant