The corporate operating system for data and AI.
Companies that want a data and AI platform choose today between paying Databricks or Snowflake plus Palantir, or hand-wiring fifteen open-source pieces. HORUS is the third way: the whole stack already integrated and governed, on your own infrastructure. Onboarding a client is not a deployment, it is creating a project, with its isolated environment provisioned in one transaction.
One installation, N isolated projects.
A single Postgres, one object store, one LLM gateway. Each project gets its own schemas, roles and bucket. If a query generated by a model tries to touch another project, Postgres answers permission denied: isolation does not depend on the code remembering to filter.
From source to dashboard, governed
Ingestion with dlt inside the project's isolation, dbt with tests and unit tests, lineage and quality in the catalog, dashboards declared as code, and a public data API with one key per project.
Woven in, not bolted on
An LLM gateway with virtual keys and budgets per project, RAG per project with cited sources, agents with a queue and evaluations, text-to-SQL executed under the project's read-only role, and an MCP layer that gives models real tools over the platform.
The data does not leave
Transcription on your own hardware, optional local models, no open ports, encrypted backups verified with a monthly restore drill. Everything Apache, MIT or MPL: nothing you cannot hand over.
A catalog of layers, each one an installable app.
Numbered Docker Compose layers behind Traefik and Authentik. A project composes what it needs.
| Layer | What it gives you |
|---|---|
| Identity & edge | Authentik SSO with groups per application and per project, Traefik with automatic TLS, forward-auth in front of every tool |
| Data plane | Postgres/Supabase with pooler, object storage with a bucket per project, Redis |
| Applications | Portal, LiteLLM gateway, agents, transcription, MCP servers, Presidio PII guardrail |
| Analytics & governance | Superset with a connection per project, OpenMetadata with a domain per project, dbt, public data API |
| Work & knowledge | OpenProject, Twenty CRM, Outline wiki, JupyterLab |
| Operations (admins only) | Uptime Kuma, Dozzle, Netdata, n8n master, Airbyte master, OpenBao secrets, OpenTelemetry + Prometheus + Jaeger + VictoriaLogs |
Isolation you can demonstrate.
Not "we filter in the application". Provisioning a project creates, in one transaction, everything that keeps it apart, and the tests that prove it run against a real Postgres.
Postgres p_<slug>_raw · p_<slug>_staging · p_<slug>_marts
roles p_<slug>_rw / _ro / _bi / _api · RLS fail-closed
Objects bucket p-<slug> + access key with a limited policy
Identity groups proj-<slug> · proj-<slug>-admin
Catalog Domain <slug> BI connection with p_<slug>_biAnd inside a project, tenants
A consortium with nine municipalities, a group with N subsidiaries: a secure layer of views filtered by tenant, fail-closed by design. A table that looks like tenant data without a registered key is exposed closed, never open.
Or your data in your own Postgres
Data residency: the control plane stays shared, the project's data lives in the client's database, in the client's network.