The AI-native Linux desktop
Project description
Aulinx
The AI-native Linux desktop.
Cursor for your entire operating system.
What is it? | How it works | Getting started | Tools | Roadmap
What is Aulinx?
Aulinx is an AI agent that controls your entire Linux desktop through natural language. It sees every app via AT-SPI, reads UI elements, clicks buttons, types text, manages files, and controls system settings — with 92 tools and a local LLM.
aulinx > why is my computer slow right now?
> process_list(sort_by=cpu)
┌─ Result (9ms) ────────────────────────────────────┐
│ firefox (42% CPU), code (18% CPU), slack (8% CPU) │
└────────────────────────────────────────────────────┘
Firefox is consuming 42% of your CPU with 47 tabs open.
Want me to kill background processes?
aulinx > type "Hello from Aulinx!" in gedit
> atspi_set_text(app_name=gedit, element_name=Search, text=Hello from Aulinx!)
┌─ Result (40ms) ──────────────────────────────────┐
│ "Set text on 'Search': 'Hello from Aulinx!'" │
└────────────────────────────────────────────────────┘
Unlike other AI desktop agents that use screenshots, Aulinx reads the actual UI structure via AT-SPI — 3x faster, works semantically, no OCR needed.
How It Works
┌──────────────────────────────────────────────────┐
│ Command Palette UI (React + WebSocket) │
│ Or CLI (interactive REPL / one-shot) │
├──────────────────────────────────────────────────┤
│ Agent (Ollama native tool calling + audit) │
├──────────────────────────────────────────────────┤
│ 92 Tools across 23 modules │
│ AT-SPI, files, git, process, network, audio... │
├──────────────────────────────────────────────────┤
│ Linux desktop (GNOME, KDE, Sway, Xfce) │
│ UNTOUCHED — Aulinx runs on top │
└──────────────────────────────────────────────────┘
- AT-SPI (Linux accessibility API) reads and controls any app's UI — buttons, text, menus — semantically
- Ollama native tool calling with qwen2.5:14b or any compatible model
- 92 desktop tools covering every aspect of a Linux desktop
- 5-tier permission system — read-only auto-allowed, destructive always confirms
Getting Started
Works on any existing Linux desktop (GNOME, KDE, Sway, Xfce). No custom compositor needed.
Prerequisites
- Linux with a running desktop (Wayland or X11)
- Python 3.10+
- Ollama with a model that supports tool calling
- NVIDIA GPU recommended (RTX 3060+ for good performance)
python3-pyatspifor GUI control (apt install python3-pyatspi)
Install
git clone https://github.com/aulinx/aulinx.git
cd aulinx
pip install -e .
ollama pull qwen2.5:14b
Run
# Interactive mode
aulinx
# One-shot command
aulinx -c "what windows do I have open?"
# Use a specific model
aulinx -m qwen2.5:14b
# Start the web UI
aulinx --serve
cd ui && npm install && npm run dev
# Open http://localhost:5173
# Resume last conversation
aulinx --resume
# Check system dependencies
aulinx --doctor
Docker (test with a full desktop)
docker compose -f docker/docker-compose.yml up
# Open http://localhost:6080/vnc.html (password: aulinx)
# Inside container: aulinx -m qwen2.5:14b --base-url http://host.docker.internal:11434
Slash Commands
/tools — List all 92 available tools
/context — Show current desktop context
/history — Browse past conversation sessions
/audit — Show recent tool calls with timing
/doctor — Check system dependencies
/clear — Clear conversation history
/help — Show help
Configuration
Config at ~/.config/aulinx/config.toml (auto-created on first run):
[llm]
model = "qwen2.5:14b"
base_url = "http://localhost:11434"
temperature = 0.3
[permissions]
# Override tool permission tiers
# shell_exec = "mutate" # uncomment to lower confirmation requirement
Tools
92 tools across 23 modules:
| Category | Tools | Count |
|---|---|---|
| Window | list, get_focused | 2 |
| AT-SPI | get_tree, find_elements, do_action, read_text, set_text, screenshot | 6 |
| Files | read, write, edit, move, trash, list, search | 7 |
| Text | count, grep, replace, head, tail | 5 |
| Git | status, log, diff, commit, branch, stash | 6 |
| Apps | launch, list_running | 2 |
| Process | list, kill | 2 |
| Services | list, status, start, stop, restart | 5 |
| Network | status, wifi_list, wifi_connect, wifi_disconnect | 4 |
| Audio | get_volume, set_volume, mute | 3 |
| Display | list, brightness | 2 |
| Power | status, profile, suspend, shutdown | 4 |
| Theme | get, set_dark, wallpaper_set | 3 |
| Bluetooth | status, scan, connect, disconnect, toggle | 5 |
| Input | key_combo, type_text | 2 |
| Session | who_am_i, uptime, disk_usage, env_get | 4 |
| Packages | search, install, list_installed | 3 |
| XDG | open, default_app_get, default_app_set, mime_type_of | 4 |
| Timer | set_timer, cancel_timer, list_timers | 3 |
| Clipboard | get, set | 2 |
| Notifications | send | 1 |
| Memory | store, get, delete, list_namespaces | 4 |
| D-Bus | list_services, introspect, call | 3 |
| OCR | screenshot_ocr, image_ocr | 2 |
| DateTime | now, convert, calendar_show | 3 |
| System | info, shell_exec | 2 |
| Workflow | context_get, wait, audit_recent | 3 |
Permission Tiers
| Tier | Behavior |
|---|---|
| Read | Always auto-allowed |
| Low-risk | Auto-allowed, logged |
| Mutate | Confirms first time per session, then auto |
| Destructive | Always confirms |
| Irreversible | Always confirms with extra warning |
Roadmap
- Research & architecture design
- Phase 0: 92 tools + CLI + tests + CI + audit + memory
- Phase 1: Web command palette UI + WebSocket server
- Tested: AT-SPI GUI control on real Linux (Docker + VNC)
- Phase 2: Custom Wayland compositor with AI IPC
- Phase 3: Full AI desktop environment (daily-drivable)
- Phase 4: Distributable Linux distro image
Name
Au (gold, element 79) + linx (Linux / lynx). The gold standard of AI-powered Linux.
Contributing
See CONTRIBUTING.md for development setup, code style, and how to add new tools.
pip install -e ".[dev]"
make test # run tests
make lint # check code style
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aulinx-0.2.0.tar.gz.
File metadata
- Download URL: aulinx-0.2.0.tar.gz
- Upload date:
- Size: 154.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c64701ef6e38bf67db8a7e5e37ff65e629cb95ac8fd2d1ad94a350fddbb1d681
|
|
| MD5 |
6107136dc9e3ee37a79d422802ea0d84
|
|
| BLAKE2b-256 |
93bbb91b134a954fd0de092799843432397e8b13ef08496a08942e16e2ea7bee
|
File details
Details for the file aulinx-0.2.0-py3-none-any.whl.
File metadata
- Download URL: aulinx-0.2.0-py3-none-any.whl
- Upload date:
- Size: 65.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2f048b6afa5fbc7f2a04bc55a67cedccebbfa771738f5757df3e9fa6091c7dea
|
|
| MD5 |
2e6483bb875c663a95f1dc87637e89c0
|
|
| BLAKE2b-256 |
4b05aba5012a09055e958347e9051e6690c1381cdba93c2c8a8228a9d1765088
|