project file / 06 / Threat-intelligence workbench

Omnissiah

A self-hosted place to connect security APIs, build and run queries, collect intelligence, map it to ATT&CK, and keep credentials out of the query definitions.

Working version 2

FastAPISQLAlchemyReact 19MonacoRechartsJWT

Omnissiah is a security operator’s workbench for APIs and threat intelligence. It keeps connections, queries, credentials, feeds, intelligence items, ATT&CK data, code repositories, and workflows in one self-hosted application.

It started as API tooling and grew outward. The frontend now has separate views for connections, query libraries, feeds, credentials, intelligence, MITRE ATT&CK, code repositories, administration, and dashboards. REST and GraphQL queries can be written directly, imported from cURL, or generated from an OpenAPI document.

Why the name

The name is a direct nod to Warhammer 40,000. In that universe, the Omnissiah is the machine-god figure revered by the Adeptus Mechanicus. It felt right for a security workbench built around machines, collected knowledge, exact commands, and an unreasonable number of cables.

Omnissiah logo showing a mechanical skull and a human skull joined inside a gear
The project's Mechanicus-inspired logo carries the same split between machine and human. It is an unofficial fan reference and is not affiliated with or endorsed by Games Workshop.

Where it sits in the workshop

Omnissiah is not one of the sister agents. It is the security workbench built beside them. Aria and the Cadre family explore local agents, memory, and autonomy; Omnissiah is aimed at the day job of querying security systems and organizing threat intelligence.

How it is put together

FastAPI exposes one router per domain and SQLAlchemy stores the data in SQLite. The React 19 interface uses Monaco for query editing and Recharts for visual summaries. MISP events, TLP markings, and ATT&CK objects have purpose-built views rather than being flattened into generic JSON.

Authentication uses signed JWTs and bcrypt password hashes. Stored API credentials are encrypted with Fernet and referenced by connections and workflows. Current routers scope records to the authenticated user.

What matters in the design

  • Queries and secrets are separate objects. A saved query can refer to a credential without copying the secret into its definition.
  • The intelligence formats keep their shape. MISP, TLP, and ATT&CK each get handling that matches how security teams use them.
  • Schema changes are visible. Features arrived through named migration scripts, which makes the database history readable even before a full migration framework is added.
  • The security work is real but not finished. The code has user scoping and encrypted credentials. The repo still needs broader automated coverage, formal migrations, and a deployment hardening pass before it should be called production-ready.
  • The interface favors operators. The main work happens in queries, trees, editors, and source records. Charts support that work instead of replacing it.

architecture / high-level view

How the pieces connect

These maps leave out implementation detail on purpose. They show the boundaries and paths that explain the project.

system map
The operator workbench data path

Queries stay separate from encrypted credentials while purpose-built intelligence records keep their original security meaning.

Read this diagram as text
  1. A security operator works through the React and Monaco interface and authenticated FastAPI routers.
  2. Saved queries remain separate from Fernet-encrypted credentials when the runner calls REST or GraphQL APIs.
  3. API results, RSS, and MISP feeds enter the threat-intelligence pipeline.
  4. MISP, TLP, and ATT&CK records keep their purpose-built shapes in per-user SQLite storage and return to the workbench.
expanded system mapThe operator workbench data path
~/

↑↓ move enter run help commands ⌘K toggle