<aside> 🌏 한국어 (대한민국 기준) 원문 / Korean (South Korea) originalAOT 바이너리 안에서 액터를 돌리다 — agent-one의 Bot/Loop 쌍이 실제로 작동하는 방식

</aside>

<aside> 📚 Part 2 of a series — Part 1: Taking Judgment Out of the LLM — Wiring a System One Model into a CLI Agent

</aside>

<aside> 🎯 In three lines — ① Akka.NET was preparing AOT support in its 1.6 line and I happened to need exactly that, so I rebuilt Part 1's CLI agent on a Bot / Loop actor pair. ② The reason wasn't performance or size — what an agent turn demands (one turn at a time, interruptions from outside, calls out to a human from inside, ordered fan-out, failure isolation) is nearly the same list the actor model was invented to describe, and above all I can follow the flow end to end in my head. ③ It cost something: the binary went 8.3 MB → 20.8 MB, plus one deadlock I created by painting a window from an actor's thread.

</aside>

Written for developers who know the actor model, or who have built an agent loop themselves. Every measurement comes from one low-power mini PC.

<aside> 📌 This describes the state of things on 2026-09-23. The subject is agent-one v0.3.78 (51 patch builds on from v0.3.27 at Part 1 — this project bumps the patch number on every build), repository psmon/AgentZeroLite, with the feat/agent-one branch now merged to main. Akka.NET is 1.6.0-beta20260922000138 — a nightly that isn't on nuget.org, so NuGet.config adds Akka.NET's own feed. These are observations against a nightly; the stable release may differ. External sources were checked on 2026-09-23, and the test and binary figures come from runs I did myself the same day.

</aside>


1. Akka 1.6 was preparing for AOT, and I happened to need it

In Part 1, the reason agent-one was split out of AgentZero Lite was the combination. The agent loop in ZeroCommon is tied to Akka, EF Core, LLamaSharp and ONNX all at once, and that bundle does not come out as a single native binary. So I reimplemented only the minimum I needed.

Meanwhile, the Akka.NET side was working on AOT support in the 1.6 line. Nightlies were on the feed, and I happened to need exactly that. So I wired one in.

It worked. The repository's README now writes the dependency list like this:

AgentZero Lite's own agent loop lives in ZeroCommon and is bound to EF Core, LLamaSharp and ONNX

Akka is gone from it. It isn't so much that Part 1's sentence was wrong as that the situation it pointed at changed. That is ordinary in technical writing — and honestly, it's the common case. Ecosystems move; what didn't work yesterday works today.

So Part 2 is closer to a rebuild of Part 1. The same agent, stood up again on actors. The Jev decision points from Part 1 are all still there, but they sit somewhere different now — that's section 3.


2. Why actors — what an agent demands looks like what an actor is

This is the most important question in the article. There are clearly lighter ways to do it, so why pay an extra 12 MB?

What one agent turn actually requires

Requirement Its nature
Only one turn runs at a time state machine
Things interrupt from outside while it runs (cancel · Esc pause · status query) async receive
It calls out to a person from inside (approve a command, pick a design) reverse request
Progress goes to several subscribers, in order event fan-out
One turn takes 30–90 seconds long-running async
If something dies, the rest must survive failure isolation

Read that list again and it is almost the table of contents of an actor-model textbook: mailbox (serialization), async messages (interruption), Ask/reply (reverse requests), parent-child (failure isolation), behaviour switching (state machine).

I don't think that's a coincidence. An agent is essentially an independent unit of execution that does something slow while continuously exchanging messages with the outside, which is precisely what the actor model set out to describe.