Skip to main content

uag logo

uag — Universal AI Gateway

Universal AI Gateway — Your environment, your freedom.

File ops / Web search / Image generation & analysis / PDF & Excel extraction / IoT control / MCP integration
20+ providers / 3 UIs / Parallel tool execution / Agent Skills marketplace

GitHub · PyPI · Read this in your language


Why uag?

Break free from vendor lock-in. Most AI assistants tie you to a specific provider or cloud service. uag is different.

  • Runs locally on your machine. Your data stays with you (except API calls you make).
  • Provider freedom: OpenAI, Claude, Gemini, DeepSeek, Ollama, Azure, Bedrock, Novita, HuggingFace... 21 providers, all accessible from a single interface. Swap between them by reconfiguring environment variables — no reinstall, no migration.
  • 170 tools: File I/O, web search, image generation, Gmail, BLE device scanning, MCP server integration — 111 are parallel-safe (up to 8 execute concurrently via thread pool, configurable via UAGENT_PARALLEL_WORKERS). When the LLM fires multiple tool calls at once, uag automatically parallelizes them.
  • 3 UIs + A2A: CLI, GUI, Web, and Agent-to-Agent protocol. Same engine, any interface.
  • IoT ready: SwitchBot, ECHONET Lite, Matter, UPnP — control your home devices through AI.
  • Agent Skills: Install community-built skills from the marketplace. Extend uag endlessly.

uag is your AI assistant on your terms. Not tied to a provider, not tied to an interface, not tied to a platform.

Quick Start

pip install uag
uag

On first launch, the setup wizard walks you through provider configuration. See docs/ENVIRONMENT.md for all environment variables.

Features

🧠 Multi-Provider Architecture

OpenAI / Azure / Bedrock / OpenRouter / Ollama / Gemini / Vertex AI / Claude / Grok / NVIDIA / Novita / DeepSeek / Z.AI (Zhipu AI) / HuggingFace / Alibaba Cloud (Qwen) / KIMI (Moonshot AI) / Xiaomi MiMo / LM Studio / MiniMax / Sakana AI (Fugu) / SAKURA AI Engine

All providers share the same toolset and interface. Switch by setting UAGENT_PROVIDER — no code changes, no separate installations.

⚡ Parallel Tool Execution

When the LLM requests multiple tools simultaneously, uag automatically parallelizes them. 111 tools are marked x_parallel_safe and execute concurrently via a ThreadPoolExecutor (8 threads by default; set UAGENT_PARALLEL_WORKERS to change).

Example: Ask "Check the weather in Nordic capitals" → LLM fires search_web × 5 countries → all 5 searches run in parallel → results collected in one batch.

Read-only tools (file search, hash calculation, directory listing, translation, DB queries, etc.) are aggressively parallelized.

🧩 Plugin System (Claude Code Compatible)

uagent implements a Claude Code-compatible plugin system. Plugins bundle skills, agents, MCP servers, hooks, and more into self-contained directories with a .claude-plugin/plugin.json manifest.

Supported components: Skills, Sub-agents, MCP servers, Hooks (12 lifecycle events), Slash commands, Output styles, userConfig, Dependencies, Channels, Marketplaces

CLI commands:

:plugin list                         # List installed plugins
:plugin install <source> [--scope]   # Install (dir/zip/git/http)
:plugin install <name>@<marketplace>  # Install from marketplace
:plugin remove <name>                # Uninstall
:plugin enable/disable <name>        # Toggle
:plugin marketplace add/remove/list  # Manage marketplaces
:plugin init <name>                  # Scaffold new plugin

See DEVELOP_PLUGIN.md for full documentation.

🔄 Session Continuity

  • Switch providers mid-session with UAGENT_PROVIDER — conversation history is preserved.
  • Reload past sessions with :load <index> — pick up where you left off.
  • Tool result caching avoids redundant re-execution when the same tool call repeats.

🛠 170 Tools

Category Tools
File Operations read/write/create/delete/search/grep/hash/zip, file_type, parse_eml (.eml files)
Web fetch_url, search_web, screenshot, browser_playwright
Media generate_image, analyze_image, img2img, audio_speech, audio_transcribe
Documents PDF/PPTX/DOCX/RTF/ODT extraction, Excel structured extraction
Communication gmail_send, gmail_read, bluesky, discord_channel, teams_webhook — see COMMUNICATION.md
IoT SwitchBot (Cloud + BLE), ECHONET Lite, Matter, UPnP, reverse_geocode
Dev Tools git_ops, python_compile, lint_format, run_tests, db_query, 13 source code navigators (idx family)
MCP Connect to external MCP servers, list tools, execute
A2A Agent-to-agent communication (with other uag instances or A2A-compatible servers)
System env vars, system specs, time, date calculation, uuid_gen, slugify
Source Nav 13 idx tools for Python, PHP, TypeScript, Java, C#, Dart, C/C++, Rust, Go, Swift, Kotlin, COBOL — get a function/class index or specific definition without reading the whole file

🖥 4 Interfaces + VS Code Extension

Mode Command Purpose
CLI uag Fast terminal-based operation
GUI uagg Desktop UI via tkinter
Web uagw Browser-based access
A2A Server uaga Agent2Agent protocol for multi-agent communication
VS Code Extension with Chat Panel, Explain, Refactor, Fix Error, and Tools Tree View

See VSCODE.md for details on the VS Code extension — installation, commands, keybindings, and configuration.

🏠 IoT Device Control

  • BACnet: Read/write BACnet/IP devices (HVAC, lighting, power meters). COV subscription for push notifications
  • Modbus TCP: Read/write holding/input registers and coils. Polling-based change monitoring
  • OPC UA: Browse address space, read/write variables, subscribe to data changes
  • SwitchBot: Cloud batch control & BLE scan/control. Polling-based subscription
  • ECHONET Lite: Discover, control, and subscribe to INF notifications from home appliances (AC, lights, water heaters, etc.)
  • Matter: Read/write control + attribute subscription for state change monitoring
  • UPnP: Device discovery & IGD port forwarding

See IOT_USECASE.md

🎯 Agent Skills Marketplace

:skills mp_search to browse SkillsMP and ClawHub for community skills. Install and extend uag's capabilities on the fly.

🤖 Auto-Pilot (:auto)

uag can autonomously pursue a goal across multiple LLM rounds. Perfect for complex, multi-step tasks that need iterative refinement.

  • How it works: Each round has a main query (Step A) followed by a reviewer judgment (Step B) that decides "COMPLETE or CONTINUE?"
  • Same provider, same API: The reviewer judgment uses the identical code path as the main query — including Responses API support.
  • Separate judge LLM (optional): Set UAGENT_AP_PROVIDER to use a different provider/model for the reviewer (e.g. use a cheaper model for judging).
  • Exit anytime: Press x key to stop immediately, even mid-response. Or let the reviewer decide when the goal is met.
  • Configurable: --max-rounds N to control the budget.

See README_AUTO.md for full documentation.

🧩 Batch State Manager

uag can track progress across long-running multi-file tasks. When the LLM processes dozens of files, batch_state persists the list of pending, completed, and failed files to disk. If the session ends or a round times out, the next run resumes from where it stopped — nothing gets lost.

🛡 Human-in-the-Loop

human_ask lets the LLM pause and ask for your confirmation before performing destructive operations (file deletion, overwrites, shell commands). You stay in control.

🛑 Interrupt (c-key / Stop button)

Stop LLM response generation at any time and inject a stop command back to the LLM.

Interface How to interrupt
CLI Press c key during LLM streaming — the current response stops, and "Stop" is sent as a user message so the LLM responds accordingly
WEB UI Click the red ■ Stop button (appears automatically during LLM processing)
Desktop GUI Click the red button (appears automatically during LLM processing)

The interrupt works as "prompt injection": instead of just aborting, it feeds "Stop" back to the LLM as a user message, allowing it to gracefully conclude or acknowledge the interruption.

Press x key to exit auto-pilot mode (see README_AUTO.md).

🕵️ Browser Automation & Web Inspector

Two complementary Playwright-based tools:

  • browser_playwright: Automate real browser sessions — navigate, click, fill forms, extract data, handle multi-page flows. Works headless or headed.
  • playwright_inspector: Record browser transitions, capture DOM snapshots and screenshots at each step. Useful for debugging web interactions or auditing page changes over time.

🔄 Dynamic Tool Loading

tool_catalog and tool_load let you discover and enable tools at runtime. No need to load everything at startup — activate only what you need, when you need it.

🦀 Rust Native Tools

uuid_gen and slugify are implemented in Rust (via PyO3) for performance. They load directly from a pre-built .pydno pip install required.

External developers can also ship Rust-based tools: place a .pyd next to the wrapper .py, use load_rust_pyd() from uagent.tools.rust_helper, and users get the tool without any extra dependencies. See TOOL_CREATOR_GUIDE.md.

🌐 i18n / L10n

日本語 / English / 简体中文 / 繁體中文 / 한국어 / Español / Français / Русский / and more. Set UAGENT_LANG to switch. See ADD_LOCALE.md to add a new locale.

Translations of this README are available in docs/README.translations.md.

🔒 Encrypted Environment Variables

Store API keys and secrets in .env.sec — an encrypted .env file. Manage with uag_envsec.

Configuration & Details

  • Environment variables: docs/ENVIRONMENT.md
  • Setup wizard: python -m uagent.setup_cli
  • Encrypted env: uag_envsec — encrypt .env as .env.sec
  • Responses API: Set UAGENT_RESPONSES=1 for Responses API mode (OpenAI/Azure/Bedrock/OpenRouter/Ollama/Alibaba/LM Studio/Sakana AI). Auto-enabled for Sakana AI (Fugu).
  • Developer docs: DEVELOP.md
  • Tool flow: TOOL_FLOW.md — how tools are sent to LLMs (genre mask, tool_catalog, GPT-5.4+ native tool_search)
  • Small LLM tips: SLM_TIPS.md

Project Philosophy

uag aspires to be your AI, on your machine, on your terms.

  • No SaaS dependency — runs locally
  • No provider lock-in — switch anytime
  • No UI lock-in — CLI / GUI / Web / A2A
  • No feature lock-in — extend with tools and skills

A free AI agent experience, free from vendor lock-in.

✨ Create Your Own Tools

Writing a new tool for uag is straightforward — create a single .py file with TOOL_SPEC and run_tool(), place it in UAGENT_EXTERNAL_TOOLS_DIR, and it's immediately available. For Rust developers, ship a pre-built .pyd with zero extra dependencies for users.

See TOOL_CREATOR_GUIDE.md for the step-by-step guide.

Contributing

Contributions are welcome! Bug reports, feature suggestions, documentation improvements, translations, and pull requests — all appreciated.

  • Issues: Open a GitHub issue for bugs or feature requests.
  • Pull requests: Fork the repo, make your changes, and submit a PR. See DEVELOP.md for development setup and guidelines.
  • Translations: README translations and locale additions are welcome. See ADD_LOCALE.md.
  • Tools & Skills: New tool plugins and Agent Skills can be contributed via the marketplace.

Development checks (before PR)

python -m py_compile src/uagent/
ruff format src/ && ruff check src/
mypy src/uagent
pytest -q tests/<affected_area>

After locale (.po) edits: python scripts/compile_locales.py and python scripts/po_qc_summary.py.

Runtime policy (details in DEVELOP.md §6.1): helpers raise instead of sys.exit; the tool host turns tool SystemExit/Exception into error strings so a single tool cannot kill the process. Startup fail-fast exits remain intentional.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

uag-0.5.55.tar.gz (6.6 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

uag-0.5.55-py3-none-any.whl (6.9 MB view details)

Uploaded Python 3

File details

Details for the file uag-0.5.55.tar.gz.

File metadata

  • Download URL: uag-0.5.55.tar.gz
  • Upload date:
  • Size: 6.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for uag-0.5.55.tar.gz
Algorithm Hash digest
SHA256 1d453f10d80858087cc94eab5852b3de337b8b17a97745e48cc731bec478fa20
MD5 3fb9da92fe32238e1146df2b28e7ec5b
BLAKE2b-256 4c70b18ca930a832a3c19d7a1a67692c7e966637826ef234cc1b86313498a6df

See more details on using hashes here.

File details

Details for the file uag-0.5.55-py3-none-any.whl.

File metadata

  • Download URL: uag-0.5.55-py3-none-any.whl
  • Upload date:
  • Size: 6.9 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for uag-0.5.55-py3-none-any.whl
Algorithm Hash digest
SHA256 61e1e046a87b28b91c8302346949b5a4ca1aaf1c7d47d9597e896e8b2541f903
MD5 767e1701b7d090271ba26801f95e87d4
BLAKE2b-256 d312511b420b67c7e051bad88b2ddee8ff4f0671522eb34d4cb453c1e68eb682

See more details on using hashes here.

Release history Release notifications | RSS feed

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page