Run AI agents locally in minutes, or build your first custom agent
Not a developer? Start with the Desktop Installer — one download, one double-click, and you’re chatting with a GAIA agent in under 10 minutes. No terminal required.
Run AI agents 100% locally on your AMD hardware — analyze documents, generate code, answer questions, and accomplish tasks on your PC without sending data to the cloud.
The GAIA Agent UI desktop app is the primary install path for end users. It ships as a native installer for Windows, macOS, and Linux, handles the Python backend setup automatically on first launch, and auto-updates.
Windows
Download the .exe NSIS installer
macOS
Download the .dmg (Apple Silicon)
Linux
Download the .deb or .AppImage
See the full Installation guide for step-by-step instructions per platform, first-launch setup details, update and uninstall instructions, and privacy information. If something goes wrong, the installation troubleshooting guide covers every common failure mode.
After installing the desktop app, skip ahead to Build Your First Agent below if you want to dive straight into coding — the app takes care of the rest.
The rest of this page covers the developer install paths (npm CLI, pip, clone-and-install) for people who want to build agents, extend GAIA, or run it from source. End users should use the desktop installer above.
Install Lemonade Server and download models with a single command:
gaia init --profile minimal
Use --profile chat for the full experience (~25GB), --profile vlm for vision/document extraction (~3GB), or --profile minimal for a quick start (~400MB).
See CLI Reference for all profiles.
Installs amd-gaia from PyPI in a project-specific virtual environment.
Linux users: GAIA depends on PyTorch (via transformers package). Always use --extra-index-url to install CPU-only PyTorch and avoid large CUDA packages (~2GB → ~200MB).
Install Lemonade Server and download models with a single command:
gaia init --profile minimal
Use --profile chat for the full experience (~25GB), --profile vlm for vision/document extraction (~3GB), or --profile minimal for a quick start (~400MB).
See CLI Reference for all profiles.
Install Lemonade Server and download models with a single command:
gaia init --profile minimal
Use --profile chat for the full experience (~25GB), --profile vlm for vision/document extraction (~3GB), or --profile minimal for a quick start (~400MB).
See CLI Reference for all profiles.
Linux users: GAIA depends on PyTorch (via transformers package). Always use --extra-index-url to install CPU-only PyTorch and avoid large CUDA packages (~2GB → ~200MB).
Install Lemonade Server and download models with a single command:
gaia init --profile minimal
Use --profile chat for the full experience (~25GB), --profile vlm for vision/document extraction (~3GB), or --profile minimal for a quick start (~400MB).
See CLI Reference for all profiles.
Make sure your virtual environment is still activated (you should see (.venv) in your prompt). If commands aren’t working as expected, try prefixing them with uv run.
Using your text editor, create a file named my_agent.py in your project directory:
import platformfrom datetime import datetimefrom gaia.agents.base.agent import Agentfrom gaia.agents.base.tools import toolclass MyAgent(Agent): """A simple agent that can report system information.""" def _get_system_prompt(self) -> str: return """You are a system monitoring assistant.When users ask about time or system details, use the get_system_info tool.""" def _register_tools(self): @tool def get_system_info() -> dict: """Get current time, date, platform, and Python version.""" return { "time": datetime.now().strftime("%H:%M:%S"), "date": datetime.now().strftime("%Y-%m-%d"), "platform": platform.system(), "python": platform.python_version() }# Use the agentagent = MyAgent()result = agent.process_query("What time is it and what system am I on?")print(result.get("result"))
View full source:agent.py · tools.pyRun it (in your terminal/PowerShell):
python my_agent.py
First run may take a moment while GAIA starts Lemonade Server and loads the LLM.
You’ll see the agent thinking, creating a plan, and executing the tool:
🤖 Processing: 'What time is it and what system am I on?'...🔧 Executing operation Tool: get_system_info✅ Tool execution complete{ "time": "15:03:26", "date": "2025-12-17", "platform": "Windows", "python": "3.12.12"}...✨ Processing complete!
Final output (will vary based on your system):
The current time is 15:03:26 and you are on a Windows system running Python 3.12.12.
Tip: The tool’s docstring is how the LLM knows what the tool does. Be descriptive!
"""Get current time, date, platform, and Python version.""" tells the LLM this tool can answer time-related questions.
The system prompt tells your agent who it is and how to make decisions. You define it by returning a string:
def _get_system_prompt(self) -> str: return """You are a system monitoring assistant.When users ask about time or system details, use the get_system_info tool."""
For agents, a good prompt includes:
Role: What the agent specializes in — “You are a code review assistant…”
Tool guidance: When to use tools vs. respond directly — “Use the search tool for questions about files…”
Style: Tone and boundaries — “Be concise. Only answer questions about this codebase.”
The system prompt and tools work together: the prompt shapes how the agent reasons, while tools define what it can do.
Tools are just Python functions with the @tool decorator:
@tooldef get_system_info() -> dict: """Get current time, date, platform, and Python version.""" return {"time": "14:32:05", "platform": "Windows", ...}
The LLM automatically sees all registered tools and their docstrings. When you ask a question, it decides which tools (if any) to call based on their descriptions. That’s it — no configuration, no routing logic. Just write functions and the agent knows what it can do.
You’ve built a simple agent. Now let’s build something practical: an agent that analyzes your system hardware and recommends which LLMs you can run locally.
Hardware Advisor Playbook
Build an agent that detects your hardware and recommends which LLMs you can run locally.