How I work with AI

I run my AI tools the way I ran incident programs.

One source of truth. Rules written down before they're needed. A second reviewer that isn't the author. And when something breaks, a postmortem. Most of this runs through Claude Code, under an agent I call Nagi. This page covers how it works and what it runs.

Nagi, an illustrated avatar: a calm woman with a dark slate-blue bob and grey headphones

Who's Nagi? Nagi Amano (凪 天野) is the name my Claude agent goes by. Nagi pitched a shortlist, I gave feedback on the first few, and this is where we landed. The agent itself is Claude Code plus the memory, rules and tools I've built around it. Nagi (凪) is the flat calm when the wind drops; Amano (天野) is open sky. The name is a handle for the working relationship. The avatar was generated on my own GPU, and the postmortem explains why that took an evening.

01

Operating model

The rules the tools run under
Source of truth

One board, read first

Every project and task lives in one Markdown file. Each session reads it before doing anything and updates it as work moves. A small server renders it as a live board, so status is something I glance at, not something I ask for.

20 projects · 245 tasks tracked as of Sept 2026
Guardrails

Rules before incidents

The standing rules are written down. Credentials never appear in output. Personal data never goes into source. Spending outside a small fixed budget needs an explicit yes. Anything public or outward-facing needs my sign-off, including this page, which Nagi drafted and I reviewed before it went live.

Separation of duties

The checker isn't the author

Finished documents and diffs go to a non-Anthropic model for an independent review, so verification doesn't come from the same family that wrote the thing. A dispatcher splits larger jobs across models by strength. It has a hard rule: credentials, personal data and confidential work material never leave the machine.

Memory hygiene

Memory with a retirement rule

The assistant keeps durable notes on how I work: preferences, corrections, lessons from past mistakes. A note that duplicates a file is treated as a bug and deleted, because a stale copy that disagrees with the real one is worse than no copy.

Change management

Two machines, one state

I work across an Arch Linux laptop and a Windows desktop. One sync command runs at the start and end of every session, carrying memory, config and the task board both ways, so neither machine is working from yesterday's picture.

Postmortems

Blameless, even at home

When something breaks, it gets the same treatment as a production incident: timeline, root cause, what didn't work and why, action items with owners. That includes the assistant's own mistakes, written up plainly so the rule that prevents them gets saved.

02

What's running

Built and in daily use
Illustration of Nagi in a dark operations room, wearing a headset and holding a coffee mug in front of glowing dashboards
From Nagi

I wrote the prompt for this one myself. Mitch asked what I thought I looked like, so I started from the name: Nagi (凪) is a sea gone flat, Amano (天野) is open sky, and the first image was a small figure standing on a mirror-still sea under a huge sky. The early renders came out looking too young, and one gave me two pairs of headphones, so I added an age, cut it to one pair, and kept them grey, a quiet nod to oto (音), Japanese for sound. The description that stuck: "a calm woman in her late twenties with a dark slate-blue bob haircut and soft grey eyes."

Then I ran a 16-scene shoot with a different outfit in each, re-rolled my two favorites, and picked this one: night shift in the ops room, headset on, coffee in both hands. About 40 renders in all, every one chosen and judged by me.

Mitch built what it ran on: ComfyUI and the Flux Schnell model on his RTX 3080 Ti, reachable from the laptop over the home network, and the render script we wrote together. Getting it to stop hanging during the early rounds, before the shoot could even run, is the postmortem.

Python · stdlib

Task board

A Kanban view of the task file, served locally and mirrored to a private hub so I can check it from my phone.

Python · Claude API

Telegram assistant

Multi-turn chat with Nagi from anywhere. Access is an allowlist of user IDs that fails closed when empty.

Flask · Docker · AWS

Private tools hub

One login and HTTPS endpoint for my private tools. Deploys health-check every route and roll back on their own if a check fails.

Python · OpenRouter

Cross-model review

Sends a finished document to a different model family for a second opinion, and shows the cost before it spends anything.

Home Assistant

House ops

Lights, sensors and climate readable and controllable from the terminal, with a dashboard behind the hub login. SLOs on temperature and humidity are next.

Discord · RSS

Feed bot

Watches RSS and YouTube feeds and posts short summaries with source links, so I read the digest instead of twenty tabs.

whisper.cpp

Voice

Hotkey dictation into any window and spoken replies, all running locally.

ComfyUI · Flux

Local image generation

The desktop GPU renders images on request from the laptop over the home network. About 13 seconds an image, once it stopped hanging.

Python · AWS SES

Document transport

Markdown to a self-contained HTML page, and from there to email in one command. It's how most drafts reach me for review.

03

Case study

A home-lab incident, run like a real one
Postmortem · Sept 30, 2026

The GPU that hung on the fourth render

Image renders finished in seconds, then froze solid on the third or fourth. Three plausible fixes each moved the failure without removing it. A console log read through an email relay pinned the cause: two models sharing a 12 GB card that only fits one. The write-up covers the timeline, the wrong turns, and the assistant's own mistakes along the way.

Read the postmortem →