agentic coding · LLM tooling · production-grade infrastructure

Henning Paulsen

Engineering leverage through agents.

Software engineer working with daily-driver coding agents, LLM-assisted systems, and the boring infrastructure habits that keep both honest. Industrial software background — SCADA, telemetry, edge + cloud — shows up in the engineering posture, not the framing.

Every tree is one of my repositories, grown from real GitHub activity: 35 trees, 4 public, last push Oct 6. Hover or tap a tree for details. py/ts shell astro/c# js/sol
built with agents

Projects, with the agent's role declared.

Setpoint Duel — latency-immune 1v1 with a global Elo ladder

A ~90-second simultaneous-bid duel (Goofspiel reskinned as control engineering), matched in real time against another live visitor — or an instant unranked trainer bot so it's never a dead screen. Server-authoritative game rooms, a persistent Elo ladder, first-party end to end, scales to zero.

Stack: TypeScript, Vite, Cloudflare Workers + Durable Objects (hibernatable WebSockets) + D1, GitHub Actions → Cloudflare Agent role: Phase-by-phase build — game rules + bot, the Match/Lobby Durable Objects, Elo + anti-abuse (collusion damping, forfeit-on-abandon grace), the datasheet instrument-panel UI, unit + end-to-end tests. Human-owned: the design spec, gameplay decisions, every public-launch gate. Outcome: Matched in seconds, no third-party scripts, server-authoritative so client-side cheating can't land. A tangible, playable demonstration of the agentic-build thesis. Play →

HA integration for proprietary lighting hardware

Custom Home Assistant integration for the Theben LUXORliving IP1 cover/shutter controller. Local-push, HACS-installable, with a real config flow and 208 regression tests instead of the usual "works on my setup" script.

Stack: Python, Home Assistant custom-component framework, HACS custom repo Agent role: Boilerplate scaffolding, edge-case enumeration (token-cookie auth, fail-closed metadata, duplicate-setup prevention), test fixtures. Human-owned: protocol reverse-engineering, public-API stance. Outcome: Stable local integration, fail-closed on malformed metadata, supports both anonymous and authenticated controllers. View repo →

Deal watcher with deterministic + LLM scoring

Local agent that polls a German marketplace for specific deal patterns (e.g. cheap gaming PCs under a price ceiling) and pushes scored notifications. Deterministic scoring first; an LLM grades only the listings that pass, with its market-value estimate grounded in a web search.

Stack: Python, SQLite state, ntfy push, optional LLM grading with web-search grounding, small web dashboard Agent role: Polling and scoring scaffold, config schema, notification pipeline, grading stage. Human-owned: the anti-pattern stance — no captcha evasion, no rate-limit games, and anything that acts as me (seller messaging, which needs a logged-in session) is opt-in and off by default. Outcome: Dry-run mode by default, scoring rules transparent and changeable without prompt engineering; a search outage falls back to the model's own estimate instead of blocking a verdict.

Tailscale-private development + telemetry cloud

A self-hosted services hub on a single Tailscale host: telemetry, monitoring, identity, secrets, documents, CI, and the model gateway the other apps share. No public exposure, no vendor lock, everything reachable only on the tailnet — internal DNS only, no public records.

Stack: Docker Compose, Tailscale, TimescaleDB, Redis, MQTT, Vector, Garage (S3), Authentik, Infisical, Grafana + Loki + Alloy, Uptime Kuma, ntfy, Paperless-ngx, self-hosted GitHub Actions runner Agent role: Compose-stack scaffolding, service-config patching, runbook drafting, plan-driven rollouts and migrations. Human-owned: service selection, exposure boundaries, every credential decision. Outcome: 20+ services on a private tailnet behind central SSO, nightly backups to one object store, a weekly container-release report, no service publicly reachable.

Milestack — non-custodial milestone escrow on Base

A milestone-based escrow protocol for digital work, funded in USDC on Base. Smart contracts enforce payout rules; no platform custody, no marketplace overhead. Solidity contracts plus a typed TS backend and a Next.js frontend, all under one repo.

Stack: Solidity, Foundry, Slither, TypeScript backend, Next.js frontend, Playwright Agent role: Phase-by-phase plan execution, contract scaffolding, exhaustive test cases (fuzz + invariant), CI workflow design across 4 surfaces. Human-owned: protocol design, security posture, every dispute-resolution rule. Outcome: One escrow per deal, sequential milestones, named-arbiter dispute path, timeout-based seller-claim. Slither + Foundry tests green on every push. View repo →
workbench

AI-first, infrastructure-honest.

AI as engineering leverage

The agent does the typing; the human keeps judgment. Plans before code. Tests before claims of done.

Plans firstPhase plans written and reviewed before any code is touched; deviations explained, not silently absorbed.
One model gatewayEvery app reaches models through one self-hosted gateway: fallback chains, cost tiers, a model swap in one place. Mail and documents stay on a local model, and answers are cached so a crash or re-run never pays twice.
Safety hooksDestructive shell blocked at the tool boundary, secret files gated, tests-pass required before any "done" claim.
Custom toolingClaude Code with project-specific agents, skills, and a hook layer kept under version control.

Infrastructure that keeps agents honest

Production habits give agent work somewhere safe to land.

SignalsGrafana, Loki, TimescaleDB on a Tailscale-private network — observe before you optimise.
BoundariesPublic surface is small and deliberate; operational services stay internal, never publicly inventoried.
HabitsSecrets in a managed vault, deployments boring on purpose, rollback as a first-class option.
notes

Field notes.

How I test model changes, how I run agents day to day, and the systems habits underneath both.

contact

Public signal only.