~/shahin-kiassat

// writing

Notes from the workshop

Ideas argued out in public — mostly the ones behind the projects: verifying agents instead of trusting them, tracing code through indirection, and keeping systems replayable.

9 min

A live TUI in the AI era

The best AI tools ship terminal UIs, and suddenly everyone wants one. What .NET offers (Spectre.Console, praised and then audited), what Ink and Bubble Tea do differently, why Go keeps winning this niche — and the pattern I actually ship: a Go TUI attached to a .NET backend over SSE, with a working example.

9 min

Designing a deterministic kernel

Event-driven systems rot into callback soup where no two runs behave alike. Here's the cure I used in a trading engine: one queue, one pure reducer, one journal, one effect executor — and the discipline that makes two replays byte-identical.

9 min

Fast event-driven IPC in .NET, with ZeroMQ and NetMQ

Two processes, one firehose of events, no broker. What ZeroMQ actually is, which socket pattern fits which job, real throughput numbers, the foot-guns that eat your messages silently — and the lock-step protocol that buys determinism over a socket.

10 min

Gated delivery for a team of agents

Coding agents will work unattended for hours — if you stop believing anything they say. The full anatomy of an autonomous delivery loop: agent CLIs as processes, a ten-outcome vocabulary, independent gate batteries, fix sessions armed with evidence, and state that survives a power cut.

4 min

A trading engine as a pure function

Most backtesters are a second implementation of the strategy — so they prove nothing about the code that actually trades. Build the engine as a pure reducer and the backtest, the live path, and the debugger become the same thing.

4 min

An agent session is not pass/fail

The first version of my orchestrator judged agent sessions as success or failure. Reality needed eight outcomes — and the distinction that matters most is whose fault the failure was.

4 min

Call graphs lie about modern .NET

In a mediator-and-DI codebase, nothing calls anything — everything is connected by convention. Honest tracing means building edges from joins, and making every edge cite the file and line it came from.

2 min

Don't trust the agent — verify it

Autonomous coding agents lie by omission: they report success they didn't earn. The fix isn't a better prompt — it's an orchestrator that independently checks every claim.