astra-linux-agent
Offers container management through Docker, allowing control of containers via structured tools.
Exposes structured Git tools for repository operations such as status, diff, committing, and other Git commands.
Provides desktop automation for the Hyprland compositor via its IPC sockets, including window and workspace management, monitor control, headless output creation, and compositor event monitoring.
Offers container management through Podman, allowing control of containers via structured tools.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@astra-linux-agentWhat's on my screen right now?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
astra-linux-agent
Linux computer-use capability layer for GPT-6 Astra running through Codex with ChatGPT subscription authentication — Wayland/Hyprland first.
astra-linux-agent is a local MCP server that gives Astra eyes and hands on a Linux desktop: screenshots and structured desktop state, pointer and keyboard input, semantic window/workspace control, a Chromium browser lane, and structured Linux tools (filesystem, git, processes, systemd, containers, clipboard) — all behind one cross-tool policy engine that judges actions by consequence, whichever route the model takes.
Not an official OpenAI product. This is an independent open-source project. It is not affiliated with, endorsed by, or supported by OpenAI. "ChatGPT", "Codex" and "Astra" are OpenAI's names for their products.
How it connects (no API key)
GPT-6 Astra
│ your ChatGPT subscription
Codex CLI — "Sign in with ChatGPT"
│ MCP over stdio (Codex launches `astra-agent mcp`)
┌───▼─────────────────────────────────────────┐
│ astra-linux-agent │
│ policy engine → capability router │
│ ┌────────────┬────────────┬─────────────┐ │
│ │ structured │ desktop │ computer │ │
│ │ shell/git │ Hyprland │ screenshot │ │
│ │ fs/systemd │ windows │ click/type │ │
│ │ containers │ workspaces │ scroll/drag │ │
│ │ browser │ events │ visual QA │ │
│ └────────────┴────────────┴─────────────┘ │
└──────────────────┬──────────────────────────┘
Wayland / HyprlandAn eligible ChatGPT plan is required to use Astra through Codex. Codex authenticates with Sign in with ChatGPT.
No OpenAI API credentials are required or used. This project never calls the OpenAI API and has no place to put an API key.
It does not proxy, spoof, scrape, or circumvent ChatGPT authentication; it uses only supported Codex mechanisms (ChatGPT login, MCP servers, MCP elicitation, Codex approval modes).
Verified with codex-cli 0.153.4 and gpt-6-astra: screenshots returned as MCP image content are seen by the model
(image-only, text+image and image+structuredContent), a screenshot → click → screenshot loop completes, and view_image
on a saved PNG works as a fallback. gpt-6-astra refuses codex-cli 0.151.0 ("requires a newer version of Codex").
Related MCP server: kwin-mcp
Why semantic tools before pixels
Clicking through a GUI is slow, brittle, and hard to audit. The router therefore exposes the most semantic and deterministic interface available and only falls back to vision when the GUI is intrinsically required:
Instead of… | Astra can call… |
opening a terminal and typing |
|
hunting for a window in a task switcher |
|
clicking a launcher icon |
|
reading a web page from pixels |
|
scrolling and squinting at a diff |
|
Vision (computer_screenshot, computer_click, computer_type, …) remains first-class for GUI-only dialogs,
graphical editors, canvases, drag-and-drop, and verifying that a semantic action actually produced the visible result.
Every computer_* action returns a fresh screenshot plus DESKTOP_STATE (windows with handles, workspaces,
monitors, cursor, lock state), so Astra always has pixels + structured truth.
The policy engine sits above every lane
Policy classifies intent by consequence, not by tool name:
Level | Examples | Default |
0 observe | screenshot, read file, list windows, | allow |
1 low | focus window, switch workspace, scroll, launch an app | allow |
2 local | write a file in a workspace root, local commit, change a preference | confirm |
3 consequential |
| confirm |
4 privileged |
| deny (never grantable) |
The defining property: if policy denies shell.run("rm -rf ~/important"), it also denies Astra typing
rm -rf ~/important + Enter into a terminal window it opened visually. Typed text and key chords aimed at a
terminal-class window are inferred into the same shell.run intent and judged by the same rules; the input backend
never receives the keystrokes of a denied action.
Honest boundary. Terminal-intent inference is heuristic. It cannot see a command assembled from clipboard pastes, shell-history recall, aliases, GUI "run command" dialogs, or a terminal emulator it does not recognise. Defence in depth comes from the access stages below, Codex's own MCP approval mode, the audit log, and the emergency stop. See docs/policy.md.
Access stages (start small)
Stage | What Astra may act on |
| nothing — screenshots and structured state only |
| only the agent's own virtual output (an isolated Hyprland headless display) |
| one named workspace |
| the whole desktop (policy rules still apply) |
Quick start
Requirements: Linux, Wayland, Hyprland ≥ 0.56 (tested 0.56.2), Python ≥ 3.11, grim, wl-clipboard,
and Codex CLI ≥ 0.153 signed in with ChatGPT. No root, no /dev/uinput, no daemon.
# 1. Codex, signed in with your ChatGPT account
codex login # choose "Sign in with ChatGPT"
# 2. astra-linux-agent (from source until the first PyPI release)
uv tool install git+https://github.com/novique-ai/astra-linux-agent # or: pipx install git+https://github.com/novique-ai/astra-linux-agent
astra-agent doctor # checks compositor, grim, Wayland protocols, Codex auth
astra-agent config init # writes ~/.config/astra-linux-agent/config.toml (observe-only)
# 3. Register with Codex
astra-agent codex install # runs `codex mcp add …` and sets the approval mode
# 4. Use it
codex # then: "Take a screenshot and tell me which windows are open."Non-interactive runs: codex exec --approve-for-me "…" (Codex forces approval_policy = never in exec, so MCP
calls need its automatic reviewer).
Widen access deliberately, one step at a time:
# ~/.config/astra-linux-agent/config.toml
stage = "headless" # observe → headless → workspace → desktop
[display.headless]
enabled = true # isolated virtual output for the agentSee docs/install.md and docs/headless.md.
Safety posture (read this)
This software gives an AI agent eyes and hands on your computer.
Start in
observe; move toheadlessbeforedesktop.Never run it as root; it needs no privileges.
Keep Codex's MCP approval mode at
promptorwritesuntil you trust your policy;autoskips Codex-side prompts.Emergency stop:
astra-agent stop(ortouch "$XDG_RUNTIME_DIR/astra-linux-agent/STOP"); bind it to a key. Human input wins: if the cursor moves without the agent moving it, the agent pauses itself.The browser lane binds CDP to loopback on an ephemeral port with a throwaway profile; never expose it.
The audit log (
~/.local/state/astra-linux-agent/audit.jsonl) records every decision with secrets redacted; screenshots and clipboard contents are never logged.Screenshots leave your machine: they go to OpenAI through your Codex session, like any image you attach in Codex.
What is in the box
Subsystem | Implementation |
Compositor | Hyprland IPC over its UNIX sockets (no |
Screenshot |
|
Coordinates | one authoritative mapper: transmitted px → captured px → logical → per-output pointer extent; fractional scale, negative origins, rotation, headless |
Input | pure-Python Wayland client speaking |
Headless display |
|
Browser | in-tree CDP client over loopback (no Playwright); semantic navigate/find/click/type/read/snapshot; shared lock with the visual lane |
Tools | 30 structured tools: shell, filesystem, git, processes, systemd/journal, podman/docker, clipboard |
Policy | TOML rules, consequence levels, grants with TTL, |
MCP | in-tree stdio JSON-RPC server (protocol 2024-11-05 … 2025-11-25), image content, elicitation |
Runtime dependency: httpx (browser lane only). Everything else is the Python standard library.
Current limitations (0.1.0)
Hyprland only. The compositor seam (
desktop/backend.py) is designed for wlroots/KWin/GNOME/X11 backends, none exist yet.Monitor-profile daemons (Omarchy's
hyprmoncfg,kanshi) disable a new headless output within seconds; pause them for headless mode (hyprmoncfg unmanage), or use theworkspacestage. Measured: 2.4 s.Terminal-intent inference is heuristic (see above).
Confirmations rely on Codex's MCP elicitation support; other MCP hosts without elicitation get fail-closed denials.
No X11 / XWayland-specific input handling beyond what the compositor provides.
Development
git clone https://github.com/novique-ai/astra-linux-agent && cd astra-linux-agent
uv venv && uv pip install -e '.[dev]'
pytest -q # unit + integration; live_desktop / live_browser / live_codex are opt-in markers
ruff check . && mypy
python -m testsurface.server # the synthetic GUI benchmark pageArchitecture and decisions: docs/architecture.md, docs/adr/. Contributing: CONTRIBUTING.md. Security reports: SECURITY.md.
License
Apache-2.0 — see LICENSE. Chosen for its explicit patent grant and broad compatibility with both open-source and commercial use.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Shared control plane for AI coding agents — tasks, memory, decisions, file locks. 12 tools.
- openhelmOAuthai.openhelm
Autonomous cloud agent tasks: real browser + your tools, structured evidence-backed results.
Hosted browser for AI agents: screenshots, post-JS DOM, console, WCAG. No install, no API key.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to automate Wayland desktop environments through screenshot analysis, mouse control, and keyboard input simulation. It supports visual context via VLM providers like Gemini and OpenRouter to perform complex, multi-step desktop actions.7GPL 3.0
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to automate Linux desktop GUI by launching and interacting with Wayland applications in isolated virtual KWin sessions, or connecting to live desktops for collaborative automation.41MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to control Linux/X11 desktops by providing tools for taking screenshots, clicking, typing, and managing windows via AT-SPI and xdotool.3MIT
- FlicenseNot gradedqualityBmaintenanceEnables AI agents to control a Hyprland Wayland desktop by listing windows, capturing screenshots, and sending input to a dedicated agent workspace without disrupting the user's screen.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/novique-ai/astra-linux-agent'
If you have feedback or need assistance with the MCP directory API, please join our Discord server