Back to Directory/Search & Knowledge

AON

Self-hosted, uncensored AI agent: ask it tasks, search its long-term memory and your documents.

Search & KnowledgePythonv1.0.2

AON

๐Ÿ›ฐ๏ธ AON : Self-Contained Obliterated AI

Your own uncensored AI agent. One GPU. Zero cloud. Zero filters.

Website Live YouTube demo PyPI MCP server Android APK

License: MIT Python

โšก Quick start ยท ๐Ÿ’ก Why AON ยท ๐Ÿ”Œ MCP server ยท ๐Ÿ“ฑ Android ยท ๐Ÿ”‘ Live instance ยท ๐ŸŽฌ Demo

๐Ÿ’ฌ Chat๐Ÿ—บ๏ธ Maps
AON chat UIAON route on the 3D globe map

AON is a self-hosted AI agent that runs on your own hardware with local models. It answers questions, runs tools (files, shell, web search, maps), remembers you across chats, reads your documents, and extends itself with new models, skills and MCP servers. Use it from the web, the Android app, Telegram, or from Claude Desktop, Claude Code and Cursor through its MCP server.

[!IMPORTANT] ๐Ÿ”’ Nothing leaves your box. Chat runs on vLLM or Ollama on your own GPU, embeddings on Ollama. No cloud LLM, no API bills, no provider filtering or logging.


โšก Quick start

pipx install aon-agent        # 1. install
aon init                      # 2. create ~/.aon with a starter config
aon serve                     # 3. open http://127.0.0.1:8700

[!TIP] You need Ollama with nomic-embed-text and a chat model that supports tools: ollama pull nomic-embed-text && ollama pull qwen3:14b. Then try aon mcp to plug AON into Claude Desktop (how).

๐Ÿ’ก Why AON

Memory and RAG are table stakes now. What AON adds:

  • ๐Ÿ”“ Obliterated and fully yours. An uncensored ("obliterated") 27B model on a single consumer GPU (RTX 4090). Your chats, memory and documents never leave the box.
  • ๐Ÿงฌ It extends itself. Paste a link and AON works out what it is: a GGUF model it can pull (it checks the VRAM budget and tool support first), an MCP server it can connect, a skill repo it can import, or docs it can learn from. It can draft a new skill from any web page and test it.
  • ๐Ÿ”Œ Plugs into the AI apps you already use. aon mcp turns AON into an MCP server for Claude Desktop, Claude Code and Cursor, so they can hand it tasks and search its memory and your documents.
  • ๐Ÿ‘ฅ A private AI for your whole crew, from one GPU. vLLM serves several people at once, behind Cloudflare Access email PIN, with every user approved by hand.
  • ๐Ÿ›ก๏ธ Honest by design. Shell commands and file writes wait for your approval. A reply that claims "done" without a tool having run is not trusted. Secrets are never saved to memory.
  • ๐Ÿ—บ๏ธ Grounded, not guessed. Places and routes come from OpenStreetMap routing on a 3D globe; distances and times are computed, not written by the model.
๐Ÿ›ฐ๏ธ AONโ˜๏ธ Typical cloud AI chat
Runs on your own hardwareโœ…โŒ
Your chats and files stay with youโœ…โŒ
Provider content filteringโŒ noneโœ…
Costyour GPU's powersubscription or per token
Long-term memory + your documents (RAG)โœ…โœ…
Runs commands on your server (with your approval)โœ…โŒ
Installs new models, MCP servers and skills from a linkโœ…โŒ
Usable from Claude Desktop / Cursor as a tool (MCP)โœ…โŒ
One GPU serves your whole teamโœ…โŒ

๐Ÿ”Œ MCP server

Use AON inside Claude Desktop, Claude Code, Cursor and any other MCP client.

Claude Desktop Claude Code Cursor stdio

aon mcp runs AON as a Model Context Protocol server. It ships in the aon-agent package (source); your MCP client starts it for you.

ToolWhat it doesAccess
ask_aonHand AON a task or question; it answers with its own model, memory, documents and tools. Pass chat to continue a conversation.โœ๏ธย write
search_memorySearch AON's long-term memory about you๐Ÿ‘€ย read
rememberSave a fact to AON's memoryโœ๏ธย write
search_documentsSearch your document library by meaning and exact words๐Ÿ‘€ย read
list_documentsList the library๐Ÿ‘€ย read
add_documentAdd a text document to the libraryโœ๏ธย write

[!NOTE] Shell commands and file writes are always refused over MCP: there is nobody to approve them inside another app.

Claude Desktop and Cursor
  • Claude Desktop: Settings โ†’ Developer โ†’ Edit Config (claude_desktop_config.json), then restart it.
  • Cursor: ~/.cursor/mcp.json, or .cursor/mcp.json in a project.
{
  "mcpServers": {
    "aon": { "command": "aon", "args": ["mcp"] }
  }
}
Claude Code

Claude Code:

claude mcp add aon -- aon mcp

Add "--home", "/path/to/home" to args for a different home folder. If the client can't find aon, use the full path from which aon.

๐ŸŽฌ Demo

Watch the AON demo on YouTube

โ–ถ๏ธ Click to watch on YouTube

โœจ Features

๐Ÿ› ๏ธ Agent with toolsRead, write and edit files, run shell commands, search and fetch the web, show maps. Commands and file writes ask for approval.
๐Ÿง  Long memoryFacts about you, searched by meaning and merged when they change; recall of older turns from this and other chats by meaning and exact strings; a rolling summary plus a numbered outline of everything you asked.
๐Ÿ“š Document library (RAG)Text, code, Markdown, HTML, Word and PDF, from the Documents panel or chat attachments. Hybrid search (SQLite FTS5 + vectors); answers cite the document.
๐Ÿ“ Context budgetEvery request is fitted to the model's window using the server's exact token count, so long chats never overflow.
๐Ÿงฉ SkillsAgent Skills (SKILL.md): import from a zip, GitHub URL or pasted text; draft one from a web page; run evals.
๐Ÿ”Œ MCP, both waysConnects to stdio and HTTP MCP servers (browse the Glama directory in the Hub) and is an MCP server itself.
๐Ÿ“Ž AttachmentsFiles and photos in chat; images go to vision models.
๐Ÿ—บ๏ธ MapsPlaces and routes from OpenStreetMap (Nominatim, OSRM) on a MapLibre 3D globe.
๐Ÿ‘ฅ Multi-userChat on vLLM to serve several users at once; Cloudflare Access for sign-in.
๐Ÿ“ฑ EverywhereWeb UI, Android app and an optional Telegram bot.

๐Ÿ—๏ธ Architecture

flowchart TB
    subgraph clients["Clients"]
        direction LR
        W["๐ŸŒ Web UI"] ~~~ A["๐Ÿ“ฑ Android"] ~~~ T["๐Ÿ’ฌ Telegram"] ~~~ M["๐Ÿค– Claude / Cursor"]
    end
    S["๐Ÿ›ฐ๏ธ AON server ยท FastAPI + agent loop"]
    subgraph backends["Behind AON"]
        direction LR
        TL["๐Ÿ› ๏ธ Tools"] ~~~ DB[("๐Ÿง  Memory + docs")] ~~~ V["โšก vLLM"] ~~~ O["๐Ÿฆ™ Ollama"] ~~~ X["๐Ÿ”Œ MCP servers"]
    end
    clients -- "HTTPS via Cloudflare Access, or MCP over stdio" --> S
    S --> backends
Built with

Python FastAPI Uvicorn httpx WebSockets MCP pypdf SQLite vLLM Ollama nomic-embed-text MapLibre Cloudflare pytest

๐Ÿ“ฑ Android app

Download AON.apk

260 KB, Android 7.0 or newer.

  1. Open the link on your phone and download the APK.
  2. Allow installs from your browser when Android asks (Install unknown apps), then tap Install.
  3. Open AON and sign in with your approved email address (see Try the live instance).

The app opens https://aon.vulkron.uk by default. To use your own server, press Back in the app and choose Change server, for example http://192.168.1.50:8700 on your home network. The APK is signed (APK Signature Scheme v2, certificate CN=AON, O=Vulkron, C=GB); its SHA-256 is on the release page.

๐Ÿ”‘ Try the live instance

Access to https://aon.vulkron.uk is by approval only:

  1. ๐Ÿ“ Request access. Open an issue titled Access request, saying who you are and what you would like to use AON for. Please do not post your email address in the issue; the maintainer will reply and tell you how to send it.
  2. โณ Wait for approval. Requests are reviewed by hand. Once yours is approved, your email address is added to the allowed list and the issue is closed with a note.
  3. โœ… Sign in. Open https://aon.vulkron.uk, enter the approved email address, and type the one-time PIN that is emailed to you. The PIN sign-in is handled by Cloudflare Access.

[!WARNING] Access can be withdrawn at any time. The instance runs on private hardware with limited capacity: please do not use it for anything illegal, for automated or bulk traffic, or to process other people's personal data, and expect a short wait when several people are using it.

๐Ÿ“ฆ Installation

Requirements

  • Linux (runs on Ubuntu), Python 3.11 or newer.
  • Ollama with an embedding model (ollama pull nomic-embed-text) and a chat model with tool support (for example ollama pull qwen3:14b), unless chat runs on vLLM.
  • Optional: a GPU server running vLLM (vllm/).
  • Optional: Node.js 20 for npx-based MCP servers.

Install

pipx install aon-agent            # or: pip install aon-agent
aon init                          # --ollama URL --model NAME --bind HOST:PORT --home DIR

Everything AON keeps (config, chats, memory, documents, skills) lives in its home folder: --home DIR, else $AON_HOME, else ~/.aon.

From source (for development)
git clone https://github.com/leo007-htun/AON.git && cd AON
python3 -m venv venv && venv/bin/pip install -e ".[test]"
venv/bin/aon init

โš™๏ธ Configuration

aon init writes config.toml into the home folder; edit it to taste. Keep context_window equal to vLLM's --max-model-len (or the Ollama model's context).

All config.toml keys
KeyMeaningExample
ollama_base_urlOllama's OpenAI-compatible endpoint (embeddings, and chat unless chat_base_url is set)"http://localhost:11434/v1"
default_modelModel used when the UI does not pick one"qwen3:14b"
workdirThe agent's workspace; chats and documents are stored here"~/.aon/workspace"
bindAddress and port of the web UI. AON has no login: keep it on 127.0.0.1 unless every device that can reach it is trusted"127.0.0.1:8700"
max_stepsTool calls allowed per request40
command_timeoutSeconds before a shell command is stopped120
always_askExtra tools that always need approval[]
embed_modelEmbedding model on Ollama"nomic-embed-text"
context_windowThe chat model's context length, in tokens16384
reply_reserveTokens kept free for thinking and the answer6144
history_tokensRecent chat turns sent word for word5000
cross_chat_recallAlso recall relevant turns from your other chatstrue
chat_base_urlOptional separate chat backend (vLLM)"http://gpu-box:8001/v1"
chat_modelThe model name served there; only this model goes to chat_base_url"aon"
chat_temperature, chat_top_p, chat_repetition_penaltySampling for the chat backend0.2, unset, 1.15
chat_visionThe chat backend model accepts imagestrue
telegram_bot_token, telegram_allowed_chat_idsOptional Telegram bot"", []

๐Ÿš€ Running

aon serve                         # web UI on the bind address from config.toml
aon serve --port 9000             # or override host/port
aon --help
In the background
setsid nohup aon serve >> ~/.aon/aon.log 2>&1 < /dev/null &
pgrep -af '[a]on serve'           # is it running?
tail -f ~/.aon/aon.log            # its log
pkill -f '[a]on serve'            # stop it
As a systemd service (starts at boot, restarts on failure)
sudo tee /etc/systemd/system/aon.service >/dev/null <<'EOF'
[Unit]
Description=AON agent
After=network-online.target
Wants=network-online.target

[Service]
User=ubuntu
Environment=AON_HOME=/home/ubuntu/.aon
ExecStart=/home/ubuntu/.local/bin/aon serve
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload && sudo systemctl enable --now aon
journalctl -u aon -f

Change User, AON_HOME and the aon path (which aon) to match your setup.

โšก Multi-user with vLLM

Ollama answers one request at a time for some models. To serve several users, run the chat model on vLLM and point AON at it:

chat_base_url = "http://<gpu-box>:8001/v1"
chat_model = "aon"
default_model = "aon"
context_window = 16384

vllm/ has the systemd unit, the chat template and the exact package versions used. Measured on one RTX 4090 (24 GB) with a 27B 4-bit model: 16K context serves 2โ€“3 full-length requests at once and the rest queue; 8K serves 4.

๐ŸŒ Remote access

AON has no login of its own. Keep bind on your LAN and, to reach it from outside, put it behind an authenticating proxy, for example a Cloudflare Tunnel with Cloudflare Access (email PIN). Geolocation in the map needs HTTPS.

๐Ÿงช Development

pip install -e ".[test]"
pytest -q
Project layout
PathWhat it is
src/aon/cli.pyThe aon command: init, serve, mcp
src/aon/main.pyBuilds AON from config.toml (shared by serve and mcp)
src/aon/mcp_server.pyAON as an MCP server
src/aon/web.pyFastAPI app: REST API and the chat WebSocket
src/aon/engine.pyThe agent loop (tool calls, approval, loop guard)
src/aon/router.pyPlanner: answer directly, ask, or plan tool steps
src/aon/llm_client.py, backends.pyModel calls; Ollama or vLLM per model
src/aon/context.pyFitting requests into the context window
src/aon/recall.py, summary.pyChat recall, rolling summary, outline
src/aon/memory*.pyEpisodic memory, extraction, consolidation
src/aon/docs.pyDocument library (RAG)
src/aon/skills.py, skill_*.pySkills: store, import, authoring, evals
src/aon/mcp_client.py, mcp_tools.py, hub.pyMCP servers and the Glama hub
src/aon/tools/Built-in tools (files, shell, web, map)
src/aon/static/Web UI (index.html), icons, fonts, map library
src/aon/default_skills/Skills copied into a new home by aon init
tests/Test suite
specs/Design notes
vllm/vLLM server setup

๐Ÿ’พ Data

AON keeps its data in its home folder: workspace/app.db (chats), workspace/docs.db (document library), memory/episodes.db (memory) and workspace/uploads/ (attachments). This repository includes a snapshot of them from 2026-10-14. A fresh install creates empty ones; to start clean, delete them before the first run. The Glama API key is kept in .glama_key, which is git-ignored.

๐Ÿค Contributing

Issues and pull requests are welcome. For anything bigger than a fix, please open an issue first to talk it through. Run pytest -q before sending a pull request.

๐Ÿ“„ License

AON is released under the MIT License. ยฉ 2026 Sithu Htun (@leo007-htun).

Bundled third-party files keep their own licenses, included next to them: CybercoreCSS (MIT), MapLibre GL JS (BSD-3-Clause), highlight.js (BSD-3-Clause), and the Exo 2, JetBrains Mono, Orbitron and Rajdhani fonts (SIL Open Font License).


If AON is useful to you, give it a โญ. It helps others find it.

โฌ† Back to top

Installation

Source-derived launch command. Check the maintainerโ€™s required arguments and credentials before running:

bash
uvx aon-agent

Set up in your AI client

Merge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.

json
{
  "mcpServers": {
    "io-github-leo007-htun-aon": {
      "command": "uvx",
      "args": [
        "aon-agent"
      ]
    }
  }
}

Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the clientโ€™s tool list, then try a read-only example from its documentation.

Claude Desktop setup reference

Package

aon-agentpypi

Compatible MCP Clients

AON works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.

  • Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.
  • Cursor~/.cursor/mcp.jsonRestart Cursor for changes to take effect.
  • VS Code.vscode/mcp.jsonReload VS Code window for changes to take effect.
  • Windsurf~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect.
  • Claude Code.mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.

Learn More