Eagre — Dylan Moir

Dylan Moir, who publishes under the alias Eagre, is a Python engineer in Scotland working on developer tooling and LLM agents. He builds security-conscious software by directing AI tooling end to end — and reviewing every output that ships. Everything on this site was built that way: solo, architected by him, assembled with AI, and reviewed before it shipped.

An eagre is a tidal bore — the wave that runs upstream, against the current, when an incoming tide is forced into a narrowing river.

How I work

"Built with AI" usually conjures a prompt and a shrug. That isn't the job. The model is the hands, not the head — the work is judgement, and the method should be invisible in the result.

  1. Architect first. The shape of the system — layering rules, security boundaries, the public surface — exists before any code does. Those are decisions I own, not ones a model stumbles into.
  2. Decompose into streams. A large system isn't one conversation. It's hundreds of small, well-scoped tasks, each with clear inputs, clear outputs, and a test to point at. The decomposition is the skill.
  3. Direct the tools. I build primarily with Claude Code, treating it as a fast, literal, tireless pair of hands — pointed at one focused stream at a time and held to the architecture I set.
  4. Review everything. The tools are fast, tireless, and occasionally confidently wrong. The only defence against the last one is a developer who understands exactly what came back, so every output is reviewed before it ships.

Selected work

inkmd — deterministic Markdown-to-PDF compiler

A pure-Python, zero-dependency compiler that turns Markdown into a PDF, published on PyPI under an MIT licence. Most renderers drag in a headless browser and the system's fonts; inkmd installs in under a second and emits byte-identical output on every platform, every run. Around 788 tests, standard-library only, Python 3.9+. It typesets this site's own blog. Repository: github.com/eagredev/inkmd

Nightjar — human-in-the-loop email agent

An always-on (24/7) autonomous LLM agent reachable over a cryptographically-authenticated email channel. It reads the inbox and drafts replies, but never sends on its own. Every message must clear DMARC at a trusted mail server; the principal signs with a one-time HOTP code verified before the model is ever called; inbound mail is treated as untrusted data, not commands. Authentication is not authorization — a human approves through a tiered queue before anything leaves. A defence-in-depth architecture I designed and prior-art-reviewed; it runs daily in personal production. Repository: github.com/eagredev/nightjar

TORCH — ROM-hacking IDE with a custom DSL

A zero-dependency Python IDE for Game Boy Advance ROM hacking: 140 modules, 7,000+ tests, a custom domain-specific language (TorScript) and a bidirectional compiler that translates TorScript to and from poryscript. Write compact TorScript and watch the scene play live, or decompile verbose vanilla scripts back into something half the size, with names validated against your project's real headers. Built solo by orchestrating AI development across hundreds of focused work streams. Repository: github.com/eagredev/TORCH

Writing — Upstream, the eagre log

Notes on building developer tooling and LLM agents by directing AI end to end — zero-dependency design, security boundaries, and the craft of reviewing output you didn't type. Typeset by inkmd.

  • Zero dependencies, on purpose — why inkmd refuses the headless browser and system libraries every other Markdown-to-PDF tool reaches for, and how it survives the trip into a locked-down container.
  • Directing the build — 140 modules, one developer, zero dependencies: what it actually means to build software by directing AI tooling end to end.
  • A locked door for an autonomous agent — Nightjar is reachable 24/7 over email; the interesting engineering isn't the agent, it's the boundary around it.

Contact

Open to AI-assisted developer roles. Email: eagre.dev@gmail.com · GitHub: github.com/eagredev · LinkedIn: linkedin.com/in/dylanmoir