Every claim on the front page, with the thing that backs it. The numbers below are read from the running system, not written into this page.
Most tools stop after the second. Everything from Decide onwards is what makes the difference between explaining an incident and closing it.
Sati, the investigation agent, runs on nine models designed and trained in this project on public data. Each is tested on data held out from training, against the strongest simple baseline found, and none of them decides on its own: every action still needs the policy engine’s verdict.
What the measurements showed — including where a simple baseline won.
Each step in a causal chain carries the technique it corresponds to, so a reader who does not recognise a described behaviour can go and read what it is. The identifier is a citation, not a finding — it says what a step resembles, not that the step is proven.
Every technique the library carries — 15 across 9 tactics. The whole matrix, with the tactics nothing was written to show →
| Effective risk | Tier | Who may authorise |
|---|---|---|
| 0–30 | Autonomous | nobody — it runs unattended |
| 31–60 | Approval required | operator |
| 61–80 | Senior approval | senior_operator |
| 81–100 | Never autonomous | nobody — it does not run |
Risk starts from the action’s own score and rises with the situation: how far the blast radius reaches, how confident the diagnosis is, whether the action can be undone, and whether it has been run here before. Adjustments only ever raise it — an action cannot argue its way into a lower tier — and a blast radius over 5 entities or 1000 users escalates it a whole tier on its own.
One flag is one accident away from a production outage, so live execution needs two independent things to be true at once.
Both must open before anything runs. On this deployment neither does, which is why every verdict you see here is a decision that was recorded rather than carried out.
Observations, hypotheses, decisions, approvals, executions and verifications are append-only records, written before an action runs rather than after. Every citation on this site resolves to the event it names, and every answer the assistant gives is checked against what was actually retrieved before it is shown.
Pashupatastra is Lord Shiva’s weapon. In the epic, Arjuna earns it and never uses it — it is held back, not fired. That is the design here: the system can name drastic actions, and everything around it exists so that it proposes them and waits.
Sati, the investigation agent, is named for Mata Sati, Shiva’s consort, the goddess later born as Parvati. The engines are deterministic and decide nothing on their own; Sati is what brings them to bear — and still only proposes. The policy engine authorises.
BibTeX
@software{raval2026pashupatastra,
author = {Raval, Preet},
title = {Pashupatastra: policy-bounded autonomous security operations},
year = {2026},
month = {9},
version = {0.1.0},
url = {https://pashupatastra.vercel.app},
}APA
Raval, P. (2026). Pashupatastra: policy-bounded autonomous security operations (Version 0.1.0) [Computer software]. https://pashupatastra.vercel.app
Web
Next.js · React · TypeScript · Tailwind
API
FastAPI · Pydantic · Uvicorn · Mangum
Data and cloud
boto3 · psycopg · httpx
Checked with
pytest · ruff · mypy
Read from the repository’s own manifests when the site is built, so this list cannot drift from what is actually installed.
The incidents on this site are written scenarios and are labelled as such. The threat intelligence is real. Nothing here executes anything.