✦   tech

under
the hood.

architecture

system overview

foundation

elizaOS

The agent framework Milady OS is built on. Core agent loop, memory abstractions, plugin system, adapter interfaces.

TypeScriptNode.js 22+Bun

desktop shell

Electrobun

Native desktop container. Cross-platform, ships its own WebView, handles window management and OS integration.

nativeWebViewcross-platform

frontend

React + Vite

Web UI and embedded desktop interface. WebGL pipeline for real-time VRM avatar with expression and animation control.

React 18ViteWebGLVRM

data flow

user inputelizaOS loopplugin pipelineLLM providerresponse streamUI / WebSocket

Memory retrieval and plugin hooks run between agent loop and LLM call. All state persisted locally in SQLite.

development pipeline

no human reviewers.

this is the pipeline.

Every commit goes through agent review and agent merge. No human approvers. The result: 1768+ PRs shipped with consistent standards, zero reviewer fatigue.

1768+closed prs
0human reviewers in pipeline
100%agent-reviewed merges
01

PR submitted

agent categorizes: feature · fix · refactor · chore · docs · breaking

02

automated checks

TypeScript · ESLint · unit tests · build · dependency audit

03

semantic review

reads full diff · checks logic, API misuse, security, style

04

auto-merge or feedback

approved PRs merge immediately · specific inline comments if not

05

human QA

real users install the build · file issues · repeat

API reference

REST API

localhost:2138

Available when Milady OS is running. All responses JSON. Streaming responses use Server-Sent Events.

GET/api/health

runtime status and version

{ "status": "ok", "version": "2.0.10", "uptime": 3621 }
POST/api/chat

send message · streaming via SSE

{ "id": "msg_01", "role": "assistant", "content": "..." }
GET/api/models

list configured providers and availability

{ "providers": [{ "id": "claude", "available": true }, ...] }
GET/api/history

retrieve conversation history by session

{ "messages": [...], "total": 42 }
POST/api/models/switch

switch active provider mid-conversation

{ "active": "gpt-4o", "switched": true }

WebSocket gateway

localhost:18789

chat.tokensingle streaming token
chat.completefull response on completion
model.switchactive provider changed
plugin.eventcustom event from a plugin
system.readyruntime finished startup
connect.js
const ws = new WebSocket('ws://localhost:18789')

ws.onopen = () => {
  ws.send(JSON.stringify({
    type: 'subscribe',
    events: ['chat.token', 'chat.complete'],
  }))
}

ws.onmessage = (e) => {
  const { event, data } = JSON.parse(e.data)
  if (event === 'chat.token') {
    process.stdout.write(data.token)
  }
}