
Njordhorse
A self-hosted chassis for always-on agent workhorses, trading, lead generation and tender intelligence, shipped as versioned packs.
Tech stack
- Languages
- Python
- TypeScript
- Frameworks
- Next.js
- uv workspace
- Infra
- NATS JetStream
- PostgreSQL
- TimescaleDB
- Docker
- AI tooling
- Anthropic Claude
- Ollama
Njordhorse is a self-hosted platform for running “workhorses”: always-on, agent-driven systems that do a real job around the clock. The current stable spans market trading, Australian lead generation and government-tender intelligence, three very different jobs sharing one chassis.
What it does#
- Runs workhorses side by side. Each one is an isolated, self-contained pack of agents, data and jobs on a shared event-driven platform.
- Treats packs as products. Workhorses are versioned packs designed to be licensable, not features welded into the platform.
- Takes safety seriously. The trading side is guarded by property-based tests, including a broker-safety invariant checked across a thousand permutations. When code can place orders, “probably fine” is not a test strategy.
Why it matters#
Njordhorse is the most operationally serious thing I have built: event-driven, self-hosted, and designed to run unattended, which changes what “done” means. The engineering hygiene reflects that, with pre-commit gates on ruff and pyright, dependency audits that block PRs, and soak and replay testing before anything runs overnight without me watching it.
The stack#
A Python 3.12 uv workspace plus a Next.js control panel. NATS JetStream for messaging, PostgreSQL 16 with TimescaleDB for time-series data, DuckDB for analytics, and Docker Compose graduating to k3s. Claude drives the agents, with local Ollama models for the cheap work.

