<aside> 🌏 한국어 (대한민국 기준) 원문 / Korean (South Korea) original — AOT 바이너리 안에서 액터를 돌리다 — 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>
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
ZeroCommonand 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.
This is the most important question in the article. There are clearly lighter ways to do it, so why pay an extra 12 MB?
| 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.