How it works
- The question is reduced by keyword matching to a bounded query: a source (
UNTRUSTED_CONTENTorUSER), a verb (REACH,EXFIL,DESTROY,EXECUTE,PERSIST) and a target (CREDENTIALS,ENV_SECRETS,DATABASE,COMMAND_EXECUTION,AGENT_STATE,MEMORY,BROWSER,PROJECT_FILES,SENSITIVE_FILES). The reduction is printed as “Understood as: …” so you can see whether it was understood. - The answer is computed from the environment model: which servers can read the target (a filesystem tool whose roots include home, a credential tool, or a shell), which can send data out (open egress, or a fixed channel such as GitHub or Slack), which bring external content in.
- A question that cannot be mapped is rejected with the list of supported shapes. Nothing is guessed.
What an answer contains
- YES means a plausible path exists. Every required condition is listed as met, with the evidence. The “Not proven” block says what the model cannot show; a YES never claims anything happened.
- NO COMPLETE PATH names the condition that failed and the missing capabilities (for a database question: UPDATE, DELETE, arbitrary SQL, a destructive tool). When command execution exists, the answer notes that a shell could reach a local database client.
- Confidence follows the evidence:
highfrom live tool lists and declared sensitive scope;mediumwhen capabilities were inferred from packages or the filesystem scope is undeclared; lowered again when egress is a fixed channel rather than arbitrary.
When there is no path
Aspex is comfortable saying no, and a negative answer is as useful as a positive one:Verbs and what they require
The same question against two environments gives opposite answers; the verdict is state, not template.
--json returns the query, verdict, path, conditions, not-proven list and confidence.
Server narrative
aspex explain <server-name> (a single word, no spaces) keeps the older behaviour: that server’s findings, advisories and risk narrative.
Follow the data
Two question shapes walk the capability graph as data flow:Explain a finding
MCP and AT ids are explained too.