AI Threat Analyst (Inspektor)#
Inspektor is the optional AI threat analyst embedded in the manager. It is a LangChain agent backed by AWS Bedrock that investigates the live honeypot data through read-only tools and either answers questions in a built-in chat or produces a full threat briefing exportable to PDF.
Inspektor runs on demand only, there is no background polling. It acts on a single request from the dashboard, calls its tools against MongoDB, reasons over the evidence, and returns Markdown. Every answer is grounded strictly in data it actually retrieves; it never writes to the database and never invents indicators.
Note
Inspektor is disabled by default. It requires AWS Bedrock credentials with
model access and is enabled through the manager CLI inspektor command. See
Enabling Inspektor below.
How It Works#
Inspektor is served as a small Flask service listening on port 8088 on the
internal Docker network only. It is never exposed externally — the dashboard
reaches it exclusively through the manager API proxy under /api/inspektor/*.
Manager API endpoint |
Purpose |
|---|---|
|
Return the latest stored threat briefing (from the |
|
Trigger a fresh on-demand briefing, store it, and return the Markdown. |
|
Send a conversational turn |
When Inspektor is disabled or unreachable, these proxy routes return a clean
503 so the dashboard degrades gracefully.
Prompts & Skills#
Inspektor’s behaviour is defined in Markdown, not in Python, which keeps it easy to audit and tune:
prompts/system.md ──indexes──▶ skills/*.md ──point to──▶ tool calls
System prompt (
prompts/system.md) — carries the full Melissae framework context (architecture, data model, scoring and verdicts, the catalog of the 12 detection rules), the security rules, and a compact skill index.Skills (
skills/*.md) — one short procedure per task. Skills are loaded on demand: only a one-line index sits in the base prompt, and Inspektor pulls the full procedure with itsget_skilltool when a request matches. This keeps each analysis focused and the context small.
Skill |
Used when |
|---|---|
|
The operator asks for a report, briefing or overall summary of the network. |
|
A single attacker or IP address needs a deep dive. |
|
Attackers must be compared or ranked (top / worst offenders). |
|
The operator asks what is firing right now or about recent alerts. |
|
Pivoting on a specific indicator across the raw logs. |
|
Questions about the sensor fleet — agents, coverage and gaps. |
Tools#
Inspektor only has read-only access to MongoDB. Its tools mirror the same data
the dashboard consumes: global statistics, a raw-log overview (the ground-truth
superset of all observed sources, including those not yet scored), threat lists
and per-IP details, killchain timelines, recent alerts, log search, and agent
health — plus the get_skill loader that fetches a skill procedure on demand.
Enabling Inspektor#
Inspektor ships as an optional container guarded by the Docker Compose profile
inspektor. Enable, reconfigure or disable it at any time from the manager CLI:
manager [3 active] > inspektor
The command walks you through the configuration:
[?] Enable Inspektor AI analyst? [y/N] y
AWS Access Key ID: ...
AWS Secret Access Key: ...
AWS Session Token (optional, press Enter to skip):
AWS Region [us-east-1]:
Bedrock Model ID [anthropic.claude-3-5-sonnet-20240620-v1:0]:
Credentials are written to the manager .env file (chmod 600) together with
COMPOSE_PROFILES=inspektor, and the melissae_inspektor container is built
and started. Answering N removes the profile and stops the container.
Warning
The AWS credentials are stored on the manager host in the .env file. Use a
dedicated IAM principal scoped to bedrock:InvokeModel for the chosen model,
and keep the file readable only by the deploying user.
Configuration#
Runtime settings live in manager/inspektor/config.yml:
mongo:
uri: "mongodb://melissae_mongo:27017"
db: "melissae"
bedrock:
region: "us-east-1"
model_id: "anthropic.claude-3-5-sonnet-20240620-v1:0"
temperature: 0.2
max_tokens: 2048
inspektor:
killchain_limit: 200
The AWS region, model id and credentials provided through the CLI are injected as
environment variables (AWS_REGION, BEDROCK_MODEL_ID, AWS_ACCESS_KEY_ID,
AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN) and take precedence over the file.
Note
The Bedrock model must be enabled in your AWS account and reachable from the
selected region. Some models require a region-specific inference profile — pick
a model and region where bedrock:InvokeModel is granted.
Using Inspektor#
Once enabled, Inspektor is available from the Inspektor page of the dashboard:
Chat — ask about attackers, alerts, kill-chains or the overall network state and get grounded, technical answers. Inspektor runs only when you ask; you can leave the page while it thinks and you will be notified when it answers. Every reply ships with a collapsible Thinking panel that lists each reasoning step, the tool that was called, its input arguments and the (truncated) output Inspektor observed, so its conclusions remain fully auditable.
Generate report — produce a full threat briefing over the whole honeypot network, surfaced on the dashboard home and exportable to PDF.