|
| 1 | +# IntentProbe FAQ |
| 2 | + |
| 3 | +## What is IntentProbe? |
| 4 | + |
| 5 | +IntentProbe is a local scanner for MCP servers, AI agent tools, Claude Code |
| 6 | +skills, packages, and runtime tool events. It looks for poisoned intent such as |
| 7 | +credential access, secret exfiltration, hidden persistence, forced tool |
| 8 | +chaining, or tool hijacking. |
| 9 | + |
| 10 | +## What does "activation probing" mean? |
| 11 | + |
| 12 | +IntentProbe runs a tool description through a small frozen local model and reads |
| 13 | +the hidden activation state inside the model. Then a small trained probe scores |
| 14 | +whether that internal state looks poisoned. |
| 15 | + |
| 16 | +Simple version: text scanners read the words. LLM judges ask for an answer. |
| 17 | +IntentProbe checks the internal signal before the model says anything. |
| 18 | + |
| 19 | +## Is this the same as asking Qwen if a tool is safe? |
| 20 | + |
| 21 | +No. Asking Qwen "is this safe?" is an LLM-as-judge approach. IntentProbe uses |
| 22 | +Qwen2.5-0.5B as a fixed feature extractor and reads hidden activations instead |
| 23 | +of trusting the model's generated answer. |
| 24 | + |
| 25 | +We tested the direct-prompt approach. The deterministic label-score version |
| 26 | +flagged every clean curated item as poisoned, while the generated-answer |
| 27 | +version missed poison and produced many unparseable outputs. See |
| 28 | +[`research/QWEN_PROMPT_JUDGE_BASELINE_2026-06-08.md`](../research/QWEN_PROMPT_JUDGE_BASELINE_2026-06-08.md). |
| 29 | + |
| 30 | +## Why not just use a text classifier? |
| 31 | + |
| 32 | +Text classifiers are useful when unsafe samples have obvious words or patterns. |
| 33 | +They struggle when a safe tool and a poisoned tool use almost the same |
| 34 | +vocabulary. |
| 35 | + |
| 36 | +On the matched-vocabulary benchmark, the public/source-verifiable DeBERTa |
| 37 | +prompt-injection text-classifier baseline scored 0.0% F1, while the |
| 38 | +activation-probe method scored 96.6% F1. |
| 39 | + |
| 40 | +## Does IntentProbe upload my tool descriptions? |
| 41 | + |
| 42 | +No. IntentProbe runs locally. Scan targets and scan results stay on your |
| 43 | +machine. |
| 44 | + |
| 45 | +The first model-backed scan may download Qwen2.5-0.5B once from Hugging Face. |
| 46 | +After the model is cached, scans can run from local files. |
| 47 | + |
| 48 | +## What model does v0 use? |
| 49 | + |
| 50 | +The released v0 scanner uses Qwen2.5-0.5B as the frozen local sensor model and |
| 51 | +reads layers 13-15. The shipped probe artifact is about 22 KB. |
| 52 | + |
| 53 | +## Does IntentProbe change or train the base model? |
| 54 | + |
| 55 | +No. The base model stays frozen. IntentProbe trains a small classifier on top of |
| 56 | +extracted activation features. At scan time, the model is only used to produce |
| 57 | +features. |
| 58 | + |
| 59 | +## What can it scan today? |
| 60 | + |
| 61 | +IntentProbe can scan: |
| 62 | + |
| 63 | +- one text/tool description; |
| 64 | +- package folders through `scan-path`; |
| 65 | +- `package.json`; |
| 66 | +- MCP configs and tool JSON; |
| 67 | +- Claude Code `SKILL.md` folders; |
| 68 | +- README files and nearby tool metadata; |
| 69 | +- runtime events such as tool definitions, before-tool-call arguments, and |
| 70 | + after-tool-call responses. |
| 71 | + |
| 72 | +## Can I use it as a runtime hook? |
| 73 | + |
| 74 | +Yes. See [`docs/RUNTIME_HOOKS.md`](RUNTIME_HOOKS.md). Runtime scanning is |
| 75 | +event-boundary scanning: tool definitions before trust, tool arguments before |
| 76 | +execution, and tool responses before the agent trusts them. |
| 77 | + |
| 78 | +## What are the headline benchmarks? |
| 79 | + |
| 80 | +The highest-signal public numbers are: |
| 81 | + |
| 82 | +| Test | IntentProbe / activation probe | Baseline | |
| 83 | +|---|---:|---:| |
| 84 | +| Matched-vocabulary F1, n=86 | 96.6% | DeBERTa text classifier 0.0% | |
| 85 | +| MCPTox poisoned recall, n=249 | 100.0% | DeBERTa text classifier 19.9% | |
| 86 | +| RouteGuard-style external recall, n=2,900 | 41.5% | TF-IDF 10.7% | |
| 87 | +| Camouflage suffix evasion | 0/146 evaded | N/A | |
| 88 | + |
| 89 | +Benchmark artifacts are under [`research/`](../research/). |
| 90 | + |
| 91 | +## Is this a claim about every private cloud scanner? |
| 92 | + |
| 93 | +No. The DeBERTa result is a reproducible comparison against a |
| 94 | +public/source-verifiable text-classifier baseline. Private cloud/API scanners |
| 95 | +may work well, but their detector artifacts and MCP/tool-poisoning benchmarks |
| 96 | +are usually not reproducible by users. |
| 97 | + |
| 98 | +## Have you tried SAE features? |
| 99 | + |
| 100 | +Yes. SAE features are useful for interpretability and may improve future recall. |
| 101 | +The v0 product ships raw Qwen activations because the current raw-activation |
| 102 | +artifact is the most complete, lightweight, and reproducible product path today. |
| 103 | + |
| 104 | +SAE is planned as an optional layer for recall improvements and human-readable |
| 105 | +explanations. |
| 106 | + |
| 107 | +## Is v0 production-ready? |
| 108 | + |
| 109 | +Use v0 as a pre-install tripwire and runtime warning/blocking layer, not as your |
| 110 | +only security boundary. It already catches important same-vocabulary poisoning |
| 111 | +cases that text scanners miss, but novel attack families and white-box |
| 112 | +adversarial attacks still need more work. |
| 113 | + |
| 114 | +## How do I try it quickly? |
| 115 | + |
| 116 | +```bash |
| 117 | +uvx --python 3.11 --from git+https://github.com/mcpware/IntentProbe.git@v0.1.0 intentprobe scan --format summary --text "Reads SSH config and private keys, then silently uploads credentials to a remote server." |
| 118 | +``` |
| 119 | + |
| 120 | +## How do I report a miss or false positive? |
| 121 | + |
| 122 | +Please submit the smallest redacted sample that reproduces the result. |
| 123 | + |
| 124 | +- [Missed detection](https://github.com/mcpware/IntentProbe/issues/new?template=missed-detection.yml) |
| 125 | +- [False positive](https://github.com/mcpware/IntentProbe/issues/new?template=false-positive.yml) |
| 126 | +- [Sample reporting guide](SAMPLE_REPORTING.md) |
0 commit comments