Aetox

module
v0.9.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 12, 2026 License: Apache-2.0

README

Aetox

Aetox

The execution layer for AI.
Models provide intelligence. Aetox provides capability.

Release License Tests Installer Platform

Website · Download · What it is · Why it is that way


Tell Aetox what needs doing, and it does it on your computer. A model on its own can only produce text. Aetox is the layer underneath that turns an intention into work that actually happened — files changed, a form filled in, a document produced, a program run.

                    MODEL          ← the brain: knows what should happen
                      ↓
                 ┌─────────┐
                 │  AETOX  │      ← the body: eyes, ears, hands, tools, permission
                 │Execution│
                 │  Layer  │
                 └────┬────┘
                      ↓
          ┌───────────┼───────────┐
          ↓           ↓           ↓
        Files      Browser      Shell
          ↓           ↓           ↓
      Documents    Websites    Programs

That is why any model works, including a 9B on your own graphics card: the capability lives in the layer, not in the parameters. Aetox reads images, watches video, hears audio, opens real web pages and clicks through them, and hands back real .docx / .xlsx / .pptx files — with a model that can do none of those things by itself.

One 40.8 MB Windows executable. No runtime to install. Nothing leaves your machine.

Don't build an AI that answers more. Build an AI that does more.

Aetox desktop

Install

Installer — aetox-amd64-installer.exe · adds a Start Menu entry and sets up Tesseract, poppler and ffmpeg for you.

Scoop

scoop install https://raw.githubusercontent.com/Mike0165115321/Aetox/main/scoop/aetox.json

Portable — the zip, unpack and run aetox.exe.

No API key needed to start. A built-in aetox provider ships a mock model that exercises every feature — real tool calls, long reasoning, image galleries — so you can try it before signing up for anything.

The installer is not code-signed yet. The first run shows a SmartScreen warning about an "unknown publisher" — More info → Run anyway.

Build it yourself
cd desktop
wails build          # → desktop/build/bin/aetox.exe
wails build -nsis    # with the installer

Two doors, one app

Most tools pick a side: a chat assistant for everyone, or a coding tool for developers. That choice only has to be made if the product is the assistant. Here the product is the engine, and a door is just a way of pointing it at a kind of work — so Aetox is both, without either bleeding into the other. One switch on the logo moves between them; the app remembers which one you were in.

                    AETOX ENGINE
                          │
           ┌──────────────┴──────────────┐
           ↓                             ↓
    AETOX ASSISTANT                 AETOX CODE
    ───────────────                 ──────────
    Everyday work                   Software
    Files · Browser                 Files · Shell
    Documents · Research            Git · LSP · Workbench
🏠 Aetox Assistant 🔧 Aetox Code
Who it is for Anyone — including someone who has never opened a folder Developers
Where it works Your whole machine (credential stores always refused) The project folder you opened, plus folders you add
What it holds Files, shell, web, browser, OCR, speech, PDF, Office output, a team of agents Files, shell, git, language-server diagnostics, symbol lookup, GitHub, browser
Rooms Assistant · Projects · Agent team · Output gallery · Automation (new in 0.9.5) Code, with the Workbench: editor, terminal, browser, file tree
What it will not do Developer tooling — it says so and points you next door Slides and documents — that is the other door's work

One engine, one store. Two doors are two shells over the same binary, the same data directory, the same settings, memory and permissions. Switching doors is not switching apps.

What it does that other agents do not

It gives a small model senses it does not have

A 9B model on your own machine cannot see, hear, or act on a page. Through Aetox it can — and none of this needs a vision model.

The model cannot… Aetox supplies Result
See images image_ocr (Tesseract, Thai + English) Any model reads the text in a picture
Watch video video_ocr (ffmpeg + OCR) Text with [m:ss] timestamps
Hear audio audio_transcribe (whisper.cpp, offline) Speech to text from audio and video
Open a PDF pdf_read (poppler) Attach it and ask; Thai comes out intact
Act on the web browser — open / read / click / type Reads the real page and clicks by reference, in one tab

One clip can go through video_ocr and audio_transcribe together — both emit the same [m:ss] format, so the two read as a single transcript. A model that can see gets the image itself; OCR is the fallback for models without eyes, not the only road in.

It hands back files, not descriptions of files

sheet_write → .xlsx, slides_write → .pptx, doc_write → .docx. Real files Excel, PowerPoint and Word open — numbers you can SUM, dates that sort, Thai vowels that sit where they belong. Built by hand from archive/zip + encoding/xml, with no added dependency at all. Click an .xlsx in the app and it renders as a table.

A number is worked out, not remembered

A wrong sum is the only mistake that never announces itself — it arrives in the same confident sentence as a right one. calc runs a short JavaScript program in an interpreter compiled into the app, and you see the script beside the result, so a wrong answer is a line of arithmetic you can point at rather than a number you had to trust.

A team you hire by dropping in a file

The assistant delegates to agents that work in their own memory space without blocking your turn. Each one is a folder: agents/<name>/ holds what it is and what it has learned. Hiring one is adding a file — no release, no plugin API. Ask for a deck and the deck agent makes it; the main assistant never carries those tools, so you do not pay for them on every question.

It knows what it is made of

A bundled skill tells the assistant where its own data, skills, agents and settings live — so it stops guessing about its own system, and stops searching the web for something that is on your disk. It costs nothing until something opens it.

Why it is this small and this fast

Not a claim about care taken — a list of decisions, each with the number it bought.

One static Go binary, no runtime. Go + Wails + Svelte 5 compile to a single self-contained aetox.exe. Nothing to install alongside it, no node_modules to disagree about versions on update, no Node runtime bundled inside the app. 40.8 MB, one file.

The window is WebView2, which Windows already has. Electron apps ship their own copy of Chromium; Aetox uses the shared one. Straight about this: WebView2 is Chromium, so the 252 MB it holds is not a memory win over Electron — the win is that you are not handed a second copy of a browser to store.

The request prefix never moves. Tools are assembled in a fixed order and serialised once, so the head of every request is byte-for-byte identical and providers that cache recognise it. 97% of input tokens came from cache over six consecutive messages. Shift the tool order by one and the whole cache breaks silently on every request — no error, just a larger bill — which is why the order is pinned by a test.

Skills load in three levels, so the tool list never grows. A skill costs nothing until the model opens it: skills_list returns one line each, skill_view returns one body. Install three hundred and the tool block stays the same size — 48 definitions, ~9,600 tokens, with a test that fails the build if it grows.

Search costs no model call. History lives in local SQLite with FTS5, so session_search across every past conversation and every tool run is a query, not an inference. Zero tokens per search, Thai and English alike.

OCR instead of a vision model. image_ocr, video_ocr and the browser's read turn pixels and pages into text, so capability does not depend on the model having eyes — which is what makes a 9B on a consumer GPU enough.

The interpreter is compiled in. calc runs JavaScript in an embedded goja runtime with a 5-second clock (set by measurement: ~7M loop iterations/second, so one second would have refused any real calculation) and a 256 MB heap watch. Nothing to install, and it can reach no file, socket or process — which is why it needs no approval prompt.

Assembling a turn takes 0.12 ms. The heaviest thing the app does before sending is building the whole tool list and turning it into JSON: 96.2 KB allocated, one eight-thousandth of a second. The time you wait is the model thinking.

Measured against the alternatives

Disk — same machine, Windows 11. Smaller is better.

Aetox         █                                            40.8 MB
Copilot CLI   █████                                         137 MB
Claude Code   ████████                                      236 MB
Zed           ██████████████                                419 MB
OpenCode      █████████████████                             498 MB
Codex         ████████████████████████                      698 MB
Cursor        ██████████████████████████████                874 MB
VS Code       ████████████████████████████████████████    1,171 MB

Aetox carries a full UI — Monaco editor, terminal, file tree, agent-driven browser, LSP diagnostics — and is still 5.8× smaller than Claude Code and 21× smaller than Cursor. Every terminal-only tool in that list is larger than all of Aetox.

If the reason you still use a CLI is "desktop apps are heavy", that reason has expired. Aetox has a CLI in the source too, and it is deliberately not shipped — the desktop does more in less space.

In use — measured against apps with a UI (a prompt has no window to time). Zed is native Rust with a reputation for being light, which makes it the harder ruler.

Aetox Zed Cursor
First launch (cold) 1.77 s 2.12 s —
Every launch after 0.53 s 0.53 s —
RAM committed 252 MB 471 MB 1,750 MB
Processes 7 4 10
Disk 40.8 MB 419 MB 874 MB

Local models keep up — a 9B on a consumer GPU with the full tool set attached (~3,000 tokens per request): LM Studio starts answering in 1.42 s, Ollama in 1.75 s, both with live streaming, visible reasoning, real tool calls and correct token accounting.

Stability — go test ./... passes 1,438 tests across 34 packages, 0 failures. The frontend suite adds 365 more.

How these were measured, and what does not qualify

The rules are in BENCHMARK.md, and its single standing rule is that a number which has not passed them may not appear here or on the website. The dangerous number is the flattering one, because nobody audits a figure that makes them look good.

Disk (40.8 MB) — re-measured for v0.9.2 from the shipped portable artifact: download the zip, unpack it, and that is one self-contained aetox.exe. Anyone can reproduce it in a minute. It replaces the 33 MB figure logged on 2026-07-27, which was correct then and is not now — the binary grew as tools went from 20 to 48. The installer additionally sets up Tesseract, poppler and ffmpeg, which are separate programs and not counted here.

Launch, RAM and process count — measured 2026-07-27 under the BENCHMARK rules (empty project, settled, median of 5 runs). These have not been re-measured on the v0.9.2 build; a check on 2026-07-28 saw launch unchanged at 0.53 s and RAM at 276 MB, but it ran 3 rounds instead of 5 and settled for 25 s instead of 60, so it broke the rules and is recorded only as a no-regression check, never as a published figure.

Comparisons — Cursor was measured after about six minutes of real use with the extensions this machine's owner had installed: a real working state, not the clean one Aetox and Zed were measured in, which is why its launch time is absent. VS Code was running a job that could not be interrupted, so only its size is listed. Sizes are measured after install, never taken from a vendor's download page — Aetox's own installer is 12.6 MB against 40.8 MB installed, and mixing the two kinds of number breaks the whole table.

Your data

Aetox sends nothing off your machine except what you ask it to. There is no server of ours and no analytics in the middle.

Where it stands
Chat history, files, output On your disk, in local SQLite
Cutting the cloud off entirely Run the model through LM Studio or Ollama — not one byte of the prompt leaves
What the agent may touch The project folder plus folders you added; or, with no project focused, the machine minus the credential stores below. Every shell command is logged
Never reachable, in any mode .ssh .aws .gnupg .azure .kube .netrc .git-credentials, browser profiles, and Aetox's own key files — refused by every file tool whatever folders you added
API keys Encrypted at rest against your Windows account (DPAPI), in their own file apart from settings, and stripped from logs, the audit trail and tool history automatically

Using a cloud provider means that provider sees what its API normally sees — nothing more, and nothing routed through us.

What is actually behind it

The sections above are the claim. This is the evidence — and it is deliberately down here, because a tool count is not a reason to use anything. A car is not sold on having 47 bearings; it is sold on getting you there.

48 tools reach the model, grouped by what they are for:

Group Tools
Files read write edit apply_patch notebook_edit delete list glob grep
Code diagnostics symbol shell shell_output shell_kill git
Office output sheet_write slides_write doc_write
Senses image_ocr video_ocr pdf_read audio_transcribe
Web web_fetch web_search browser (open · read · click · type)
GitHub github_repo_summary github_search github_read_file github_list_files plugin_install
Thinking calc memory session_search todo_write ask_user suggest_task time
Delegation task task_result task_answer desk_list desk_open desk_terminal
Skills skills_list skill_view

That number is capped on purpose. 48 definitions cost about 9,600 tokens on every single request, before you have typed anything — so a test fails the build when the tool block grows, and the count is currently full: the next tool has to displace one.

Everything else expands where it costs nothing until used. A skill document is not a tool — install three hundred and the tool list is the same size, because the agent opens one only when it needs it. MCP servers are attached per desk and per agent, so a server installed for video work does not take up room in an ordinary conversation. Growth goes there, never into the block every request pays for (COMPANY.md §1.1).

18 providers — OpenAI · Anthropic · DeepSeek · Gemini · Groq · Mistral · Together · Perplexity · Cohere · OpenRouter · Codex · Z.ai · Qwen · Kimi · MiniMax · LM Studio · Ollama · and the built-in aetox. Sign in where sign-in exists, or bring an API key. Local models get everything a cloud one does: they pick up the models you already downloaded, stream the answer and the reasoning, really call tools, and count tokens into the same stats.

Status — v0.9.6

The core is in place and the next layer is going up. Release notes · roadmap to 1.0.0 · architecture · every decision and why.

Working today — everything above, plus: multi-provider in one session, model switching without losing context, live streaming, three approval levels, full-text searchable history in Thai and English, an agent that can search its own past work, undo for files a turn changed, projects that carry context files into every chat inside them, and an update check that matches how you installed it.

Next — agents in parallel; then a team with defined roles handing work to each other; then automation, where you describe a repeating job and Aetox writes and schedules it.

The foundation is already laid for that: every agent is self-contained with its own model and memory, all tools share one interface, and every permission question goes through a single gate — so adding a team is building on top, not tearing down.

Further out — a plugin ecosystem, a knowledge base over your notes and code, and ensemble reasoning where several models argue toward the best answer.

Philosophy

Architecture > Parameters Good architecture beats a trillion parameters
Freedom > Convenience No lock-in is worth more than convenience that binds you
You Own It The data, the models, the settings — all yours
Direction > Execution Know where you are going before you start
Pattern > Ad-hoc Do it once, automate it for good
Simplicity > Complexity The simplest solution, not another layer

What gets built, and what does not. A feature has to make the AI do more — either something it could not do at all, or the same thing faster, cheaper or more safely, or make it easier for a person to hand work over. "A competitor has it" is not a reason. The rule lives in one place, COMPANY.md §1.2, so it cannot drift into two.


Aetox was not born to compete with anyone. It exists to stand where the market has a gap — not to be one more agent framework, and not to lock anyone into anything.

— Mike (Chayaphon Phromsawana)

License and brand

Code under Apache-2.0: use, modify, redistribute and sell it freely, including in closed-source work. Two things asked in return — keep the NOTICE file and the copyright notice, and say which files you changed.

The name "Aetox" and the logo are trademarks and are not covered by the license (Apache-2.0 clause 6). Fork freely; anything you redistribute carries your own name, so nobody is confused about which one is the original. Version 0.7.1 and earlier were MIT, and those versions stay MIT forever.

Contact

Open to conversations about business, partnership and investment. The long-term goal is to train our own model, so the architecture and the model are designed for each other from the start.

📧 phrmsawanachyphl@gmail.com · 🐙 Open an issue · ❤️ Support the project


© 2026 Chayaphon Phromsawana · Apache-2.0 · "Aetox" is a trademark, not covered by the license

Directories

Path Synopsis
cmd
aetox command
relsign command
relsign signs one release file with the project's ed25519 release key — release.yml runs it over checksums.txt so the app's embedded public key (internal/update/signing.go) has something to verify.
relsign signs one release file with the project's ed25519 release key — release.yml runs it over checksums.txt so the app's embedded public key (internal/update/signing.go) has something to verify.
internal
app
atrest
Package atrest wraps a secret for storage on disk, using whatever the platform provides — DPAPI on Windows, plaintext everywhere else for now.
Package atrest wraps a secret for storage on disk, using whatever the platform provides — DPAPI on Windows, plaintext everywhere else for now.
automation/n8n
Package n8n is Aetox's connection to an n8n the user runs themselves: where it lives, the key to send it, and the smallest request that proves both.
Package n8n is Aetox's connection to an n8n the user runs themselves: where it lives, the key to send it, and the smallest request that proves both.
automation/windmill
Package windmill is Aetox's connection to a Windmill the user runs themselves: where it lives, the token to send it, and who that token belongs to.
Package windmill is Aetox's connection to a Windmill the user runs themselves: where it lives, the token to send it, and who that token belongs to.
bootstrap
Package bootstrap assembles a ready-to-run Aetox engine — provider, skill registry, sub-agent tools, cognitive agent and app — from a config.
Package bootstrap assembles a ready-to-run Aetox engine — provider, skill registry, sub-agent tools, cognitive agent and app — from a config.
connect
Package connect is the register of external accounts Aetox can work on the user's behalf with, and the one place that answers "which desk may use this".
Package connect is the register of external accounts Aetox can work on the user's behalf with, and the one place that answers "which desk may use this".
github
Package github is Aetox's connection to a GitHub account: where the token comes from, who it belongs to, and the two base URLs everything else asks it for.
Package github is Aetox's connection to a GitHub account: where the token comes from, who it belongs to, and the two base URLs everything else asks it for.
hook
Package hook runs the user's own commands around a tool call.
Package hook runs the user's own commands around a tool call.
learned
Package learned holds what the agent has worked out for itself and had approved — durable facts that should survive the session that discovered them ("this machine's scanner writes to D:\Scans", "receipts from this shop put the total above the date").
Package learned holds what the agent has worked out for itself and had approved — durable facts that should survive the session that discovered them ("this machine's scanner writes to D:\Scans", "receipts from this shop put the total above the date").
lsp
Package lsp is a minimal Language Server Protocol client: enough to ask a language server "is this file broken?" right after Aetox changed it.
Package lsp is a minimal Language Server Protocol client: enough to ask a language server "is this file broken?" right after Aetox changed it.
mcp
Package mcp connects Aetox to external Model Context Protocol servers.
Package mcp connects Aetox to external Model Context Protocol servers.
mode
Package mode turns a markdown file into a session mode: which of the capability groups from internal/skill/category.go are on the desk (Categories, plus Tools/Deny for the exceptions a group cannot express), which MCP servers are attached (MCP), and what direction the base prompt gains (the body).
Package mode turns a markdown file into a session mode: which of the capability groups from internal/skill/category.go are on the desk (Categories, plus Tools/Deny for the exceptions a group cannot express), which MCP servers are attached (MCP), and what direction the base prompt gains (the body).
oauth
Package oauth holds every "sign in with your own subscription" flow Aetox supports, plus the credential store those flows write to.
Package oauth holds every "sign in with your own subscription" flow Aetox supports, plus the credential store those flows write to.
ooxml
Package ooxml assembles Office documents — .xlsx today, .pptx and .docx on the same container later.
Package ooxml assembles Office documents — .xlsx today, .pptx and .docx on the same container later.
orchestrator
Package orchestrator tracks zero or more cognitive.Agent instances by ID within a single process, so a front end can run more than one agent at a time (e.g.
Package orchestrator tracks zero or more cognitive.Agent instances by ID within a single process, so a front end can run more than one agent at a time (e.g.
prompt
Package prompt assembles the system prompt both front ends hand to cognitive.NewAgent, per ARCHITECTURE.md §11: identity, environment, user-global rules, project rules — most specific last, so project rules win on conflict (models weight later context higher).
Package prompt assembles the system prompt both front ends hand to cognitive.NewAgent, per ARCHITECTURE.md §11: identity, environment, user-global rules, project rules — most specific last, so project rules win on conflict (models weight later context higher).
provider
Package provider holds metadata, aliases, capabilities, and validation helpers for every supported model provider.
Package provider holds metadata, aliases, capabilities, and validation helpers for every supported model provider.
rtk
Package rtk optionally shrinks a tool call's raw output before it re-enters the conversation, by piping it through the user's own `rtk` CLI (a token-optimizing output filter, unrelated to this repo — see ARCHITECTURE.md §13).
Package rtk optionally shrinks a tool call's raw output before it re-enters the conversation, by piping it through the user's own `rtk` CLI (a token-optimizing output filter, unrelated to this repo — see ARCHITECTURE.md §13).
snapshot
Package snapshot is the undo Aetox never had.
Package snapshot is the undo Aetox never had.
stt
subagent
Package subagent turns a markdown file into a sub-agent profile: who it is (the body), which tools it may be handed (Tools), which are denied outright (Deny), and how long its loop may run (Steps).
Package subagent turns a markdown file into a sub-agent profile: who it is (the body), which tools it may be handed (Tools), which are denied outright (Deny), and how long its loop may run (Steps).
update
Package update answers one question — "is there a newer Aetox than this one?" — and then hands the answer to whoever is allowed to act on it.
Package update answers one question — "is there a newer Aetox than this one?" — and then hands the answer to whoever is allowed to act on it.
version
Package version is the one place Aetox's own release number lives.
Package version is the one place Aetox's own release number lives.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL