Technology · Discipline

Prompt-injection-aware tooling

Tool descriptions are attack surface. Shell-template injection fixtures are mandatory for the tool kind that needs them, and the discovery tool's description is capped by a test.

FAFOHive tool estateRead-only discoverySandboxed model session
One audit, top to bottom
Sandboxed model session no tools to call · writes one output file · started only by an audit
Guide entry exact tool id
exact source hash
  • ~500tool descriptions treated as untrusted text
  • 3servers whose catalogs are read, never called

Tool text treated as untrusted data

In FAFOHive I wanted readable guides to every tool across its servers, most of them published by vendors. Asking a model to summarise each tool has a trap in it: a tool's name, description and schema are text written by whoever published the tool, and a model that reads them with any authority can be steered by them. I decided every tool description is untrusted data and built a tool explorer around that.

Discovery is read-only. The explorer reads each server's catalog and never calls a tool, so exploring cannot cause a side effect. Official descriptions and AI-written guides are stored and shown separately and never merge, so a reader always knows which one they are reading.

official texthashguide
Tool A · current
Tool B · description changed, guide stale
Tool C · current
The hash covers name, description and schema (SHA-256).

Audits in a locked-down session

Guides are produced only when I start an audit, scoped to stale tools, one suite or everything, so there is no standing access. The audit runs in a locked-down command-line model session that can write nothing except its output file; a model that reads third-party tool text has no authority beyond that one checked file. Every output entry must name an exact tool identifier and the exact source hash it was written against.

Submitted batch
tool identifier
source hash
After the check
one forged identifier, duplicate entry or mismatched hash rejects every entry

I build AI features on the assumption that model inputs can be hostile: the model gets text without trust, and its output is checked against facts it could not forge.

Platform events are never instructions

The in-house social modules follow the same stance in both directions. The gateway around them is told in Agents with real tools and no keys.

Inbound · mentions, replies, messages
the agent's context, as data
the agent's instructions · nothing from a platform
each event signed, with its provenance
Outbound · write, then read back
writtenread backwrittenread back
a read-back that does not match is flagged to the agent; platform errors reach it verbatim

This is an operator tool for understanding a large tool estate, built from hashing, a sandboxed session and strict checks.