Metadata-Version: 2.4
Name: uag
Version: 0.7.33
Summary: A powerful tool execution agent
Author-email: Hirofumi Ukawa <hirofumi@ukawa.biz>
License-Expression: Apache-2.0
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: LICENSE-THIRD-PARTY.md
Provides-Extra: core
Requires-Dist: cryptography>=44.0.2; extra == "core"
Requires-Dist: requests>=2.33.1; extra == "core"
Requires-Dist: httpx>=0.28.1; extra == "core"
Requires-Dist: urllib3>=2.6.3; extra == "core"
Requires-Dist: python-dotenv>=1.2.2; extra == "core"
Requires-Dist: tqdm>=4.67.3; extra == "core"
Requires-Dist: prompt-toolkit>=3.0.52; extra == "core"
Requires-Dist: llmcapa>=0.5.68; extra == "core"
Requires-Dist: pyyaml>=6.0.3; extra == "core"
Requires-Dist: certifi>=2026.2.25; extra == "core"
Requires-Dist: numpy>=2.4.4; extra == "core"
Requires-Dist: pyreadline3>=3.5.4; sys_platform == "win32" and extra == "core"
Requires-Dist: pywin32>=311; sys_platform == "win32" and extra == "core"
Requires-Dist: jinja2>=3.1.6; extra == "core"
Requires-Dist: python-multipart>=0.0.22; extra == "core"
Requires-Dist: websockets>=16.0; extra == "core"
Provides-Extra: keyring
Requires-Dist: keyring>=25.0.0; extra == "keyring"
Provides-Extra: decision-laya
Requires-Dist: laya<0.4,>=0.3.23; extra == "decision-laya"
Provides-Extra: providers
Requires-Dist: openai>=2.45.0; extra == "providers"
Requires-Dist: lmstudio>=1.5.0; extra == "providers"
Requires-Dist: anthropic>=0.116.0; extra == "providers"
Requires-Dist: google-genai>=2.11.0; extra == "providers"
Requires-Dist: xai-sdk>=1.17.0; extra == "providers"
Requires-Dist: openrouter; extra == "providers"
Requires-Dist: zai-sdk; extra == "providers"
Requires-Dist: together; extra == "providers"
Provides-Extra: tools
Requires-Dist: asyncua; extra == "tools"
Requires-Dist: azure-identity; extra == "tools"
Requires-Dist: beautifulsoup4; extra == "tools"
Requires-Dist: bac0; extra == "tools"
Requires-Dist: bleak; extra == "tools"
Requires-Dist: boto3; extra == "tools"
Requires-Dist: catboost; extra == "tools"
Requires-Dist: deepl; extra == "tools"
Requires-Dist: CairoSVG; extra == "tools"
Requires-Dist: chronos-forecasting; extra == "tools"
Requires-Dist: exstruct; extra == "tools"
Requires-Dist: google-api-python-client; extra == "tools"
Requires-Dist: pandas>=2.3.3; extra == "tools"
Requires-Dist: google-cloud-texttospeech; extra == "tools"
Requires-Dist: holidays; extra == "tools"
Requires-Dist: janome; extra == "tools"
Requires-Dist: jieba; extra == "tools"
Requires-Dist: lightgbm; extra == "tools"
Requires-Dist: msoffcrypto-tool; extra == "tools"
Requires-Dist: paho-mqtt; extra == "tools"
Requires-Dist: pillow; extra == "tools"
Requires-Dist: playwright; extra == "tools"
Requires-Dist: pycdlib>=1.21.0; extra == "tools"
Requires-Dist: prophet; extra == "tools"
Requires-Dist: psutil; extra == "tools"
Requires-Dist: pymodbus; extra == "tools"
Requires-Dist: pymupdf; extra == "tools"
Requires-Dist: pypdf; extra == "tools"
Requires-Dist: python-dali; extra == "tools"
Requires-Dist: python-dateutil; extra == "tools"
Requires-Dist: python-magic; platform_system != "Windows" and extra == "tools"
Requires-Dist: python-magic-bin; platform_system == "Windows" and extra == "tools"
Requires-Dist: pythainlp; extra == "tools"
Requires-Dist: scipy>=1.16.3; extra == "tools"
Requires-Dist: qrcode; extra == "tools"
Requires-Dist: scikit-learn; extra == "tools"
Requires-Dist: statsforecast; extra == "tools"
Requires-Dist: striprtf; extra == "tools"
Requires-Dist: upnpy; extra == "tools"
Requires-Dist: xverter>=1.5.0; extra == "tools"
Provides-Extra: sbom
Requires-Dist: cyclonedx-python-lib>=8.0.0; extra == "sbom"
Requires-Dist: spdx-tools>=0.8.0; extra == "sbom"
Provides-Extra: quality
Requires-Dist: black==26.10.0; extra == "quality"
Requires-Dist: ruff==0.16.10; extra == "quality"
Provides-Extra: development
Requires-Dist: coverage; extra == "development"
Requires-Dist: ecdsa; extra == "development"
Requires-Dist: mdformat; extra == "development"
Requires-Dist: mdformat-frontmatter; extra == "development"
Requires-Dist: mermaid-cli; extra == "development"
Requires-Dist: oletools; extra == "development"
Requires-Dist: packaging; extra == "development"
Requires-Dist: tree-sitter; extra == "development"
Requires-Dist: tree-sitter-language-pack; extra == "development"
Provides-Extra: platform
Requires-Dist: ewmh; sys_platform == "linux" and extra == "platform"
Requires-Dist: PySide6; extra == "platform"
Requires-Dist: pyobjc; sys_platform == "darwin" and extra == "platform"
Requires-Dist: pyobjc-framework-CoreLocation; sys_platform == "darwin" and extra == "platform"
Requires-Dist: winrt-Windows.Devices.Geolocation; sys_platform == "win32" and extra == "platform"
Provides-Extra: web
Requires-Dist: pydantic; extra == "web"
Requires-Dist: PyJWT[crypto]<3,>=2.10; extra == "web"
Provides-Extra: test
Requires-Dist: httpx>=0.28.1; extra == "test"
Requires-Dist: openai>=2.45.0; extra == "test"
Requires-Dist: anthropic>=0.116.0; extra == "test"
Requires-Dist: pytest; extra == "test"
Requires-Dist: pygments; extra == "test"
Requires-Dist: pdfplumber; extra == "test"
Requires-Dist: pint; extra == "test"
Requires-Dist: pycdlib>=1.21.0; extra == "test"
Requires-Dist: pandas; extra == "test"
Requires-Dist: openpyxl; extra == "test"
Requires-Dist: python-pptx; extra == "test"
Requires-Dist: python-docx; extra == "test"
Requires-Dist: odfpy; extra == "test"
Requires-Dist: scapy; extra == "test"
Requires-Dist: bitchat-protocol>=0.2.0; extra == "test"
Requires-Dist: mcp; extra == "test"
Requires-Dist: holidays; extra == "test"
Requires-Dist: pyautogui; extra == "test"
Requires-Dist: pygetwindow; extra == "test"
Requires-Dist: fastapi; extra == "test"
Requires-Dist: uvicorn; extra == "test"
Requires-Dist: cryptography; extra == "test"
Requires-Dist: PyJWT[crypto]<3,>=2.10; extra == "test"
Provides-Extra: zai
Requires-Dist: zai-sdk; extra == "zai"
Provides-Extra: realtime
Requires-Dist: sounddevice>=0.5.0; extra == "realtime"
Provides-Extra: realtime-aec
Requires-Dist: sounddevice>=0.5.0; extra == "realtime-aec"
Requires-Dist: pywebrtc-audio>=0.1.0; extra == "realtime-aec"
Provides-Extra: location-macos
Requires-Dist: pyobjc-framework-CoreLocation>=11.1; sys_platform == "darwin" and extra == "location-macos"
Provides-Extra: location-linux
Requires-Dist: dbus-next>=0.2.3; sys_platform == "linux" and extra == "location-linux"
Dynamic: license-file

<p align="center">
  <img src="https://raw.githubusercontent.com/awaku7/agentcli/main/assets/uag-logo.svg" alt="UAG — Universal AI Gateway" width="620">
</p>

<h1 align="center">UAG</h1>

<p align="center">
  <strong>Universal AI Gateway</strong><br>
  Your AI models. Your tools. Your environment.
</p>

<p align="center">
  <a href="https://github.com/awaku7/agentcli/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/awaku7/agentcli/ci.yml?style=flat-square&label=CI" alt="CI"></a>
  <a href="https://pypi.org/project/uag/"><img src="https://img.shields.io/pypi/v/uag?style=flat-square" alt="PyPI"></a>
  <a href="https://pypi.org/project/uag/"><img src="https://img.shields.io/pypi/pyversions/uag?style=flat-square" alt="Python versions"></a>
  <a href="LICENSE"><img src="https://img.shields.io/github/license/awaku7/agentcli?style=flat-square" alt="License"></a>
  <a href="https://pepy.tech/projects/uag"><img src="https://static.pepy.tech/personalized-badge/uag?period=total&units=INTERNATIONAL_SYSTEM&left_color=grey&right_color=green&left_text=downloads" alt="Downloads"></a>
</p>

<p align="center">
  <a href="#quick-start">Quick start</a> ·
  <a href="#interfaces">Interfaces</a> ·
  <a href="#what-you-can-build">Capabilities</a> ·
  <a href="#documentation">Docs</a> ·
  <a href="docs/README.ja.md">日本語</a> ·
  <a href="docs/README.translations.md">Other languages</a>
</p>

---

**UAG is an open-source, local-first AI agent runtime** that connects the language model
you choose to the tools and systems you use. Work with code, files, browsers,
services, and devices from a consistent interface—without tying your workflows
to a single model provider.

| **Bring your model** | **Connect real tools** | **Stay in control** |
| :--- | :--- | :--- |
| Hosted and local models, including OpenAI, Claude, Gemini, Grok, Bedrock, and Ollama. | Files, code, web, MCP, Agent Skills, plugins, cloud services, and IoT. | Local execution, human confirmation, credential storage, and configurable policies. |

> UAG is the agent execution layer, **not** a model provider. External model
> requests and connected-service calls depend on your configuration; local-first
> does not mean entirely offline or isolated by default.

## Quick start

Requires **Python 3.11+**. Install from [PyPI](https://pypi.org/project/uag/)
and launch the interactive CLI:

~~~bash
python -m pip install --upgrade uag
uag
~~~

On first launch, the setup wizard helps you choose a provider and configure its
credentials. You can also configure providers through environment variables or
the credential store.

For a larger set of provider and tool dependencies up front:

~~~bash
python -m pip install "uag[core,providers,tools]"
~~~

Then try asking:

~~~text
> What changed in this Git repository? Summarize the risks.
> Find the latest documentation for this library and explain the migration steps.
> Inspect these files and produce a concise report.
> :help
~~~

**New to UAG?** See the [Windows installation walkthrough](docs/QUICKSTART.md)
(including Git and virtual-environment prerequisites) or the
[configuration reference](docs/ENVIRONMENT.md). Platform-specific integrations
are optional.

## Interfaces

Use the same agent runtime and tool registry from multiple entry points.

| Interface | Start with | Ideal for |
| :--- | :--- | :--- |
| **CLI** | `uag` | Terminal-first work and automation |
| **Desktop** | `uagg` | Native desktop conversations |
| **Web** | `uagw` | Browser-based conversations and rooms |
| **A2A** | `uaga` | Agent-to-agent integration |
| **VS Code** | [Extension guide](docs/VSCODE.md) | Working alongside code |

Desktop and Web interfaces use additional dependencies that are not included
in the quick-start `uag[core,providers,tools]` installation:

~~~bash
# Desktop GUI (PySide6 and platform integrations)
python -m pip install "uag[platform]"

# Web UI (web authentication dependencies, FastAPI, and Uvicorn)
python -m pip install "uag[web]" fastapi uvicorn
~~~

The Web server can also attempt to install FastAPI and Uvicorn at launch;
installing them up front does not depend on runtime auto-installation.
See [interface options](docs/USAGE.md) and
[environment configuration](docs/ENVIRONMENT.md) for further setup.

## What you can build

| Capability | What UAG provides |
| :--- | :--- |
| **Model-agnostic workflows** | Switch among hosted and local providers using `UAGENT_PROVIDER` without rewriting tools. |
| **Code and file operations** | Repository navigation, Git inspection, linting, tests, file operations, and browser automation. |
| **Extensible tooling** | A catalog of 200+ tools, dynamic `tool_catalog` / `tool_load` discovery, custom Python and Rust-backed tools. |
| **Connected agents** | MCP servers, A2A, Claude Code-compatible plugins, Agent Skills, and sub-agents. |
| **Long-running work** | Auto-pilot, parallel independent read operations, scheduled tasks, restart recovery, and persisted sessions. |
| **Beyond the terminal** | Cloud and communication integrations, documents, media, realtime voice, and supported IoT protocols. |

### One runtime, many integrations

~~~mermaid
flowchart LR
    UI["CLI · Desktop · Web · VS Code · A2A"] --> UAG["UAG agent runtime"]
    UAG --> MODELS["Hosted & local models"]
    UAG --> TOOLS["Tools & extensions"]
    UAG --> STATE["Sessions & context"]
    TOOLS --> SYSTEMS["Files · Code · Web · MCP · Cloud · IoT"]
    POLICY["Confirmation · Credentials · Policy"] -.-> UAG
~~~

**Provider examples:** OpenAI, Anthropic, Gemini, Vertex AI, Azure OpenAI,
Amazon Bedrock, Grok, DeepSeek, OpenRouter, Ollama, llama.cpp, and LM Studio.
For provider-specific settings, see [Environment variables](docs/ENVIRONMENT.md).

### Customize it with skills and plugins

Extend UAG without modifying the core. Install Agent Skills from SkillsMP or
ClawHub, connect MCP servers, or load Claude Code-compatible plugins with tools,
skills, agents, and hooks.

~~~text
:skills mp_search browser automation
:plugin list
:plugin install <source>
:plugin marketplace list
~~~

Custom tools can expose `TOOL_SPEC` and `run_tool()`; Rust-backed tools are also
supported. Start with the [Tool Creator Guide](TOOL_CREATOR_GUIDE.md),
[Plugin Development Guide](src/uagent/docs/DEVELOP_PLUGIN.md), and
[MCP OAuth / Proxy Guide](docs/MCP_OAUTH_PROXY_GUIDE.md).

## Built for real workflows

### Context and memory

Large tool results can be saved as **Artifacts** instead of crowding the active
model context. An agent can retrieve the relevant portion later using
`artifact_read`. Sessions are stored in SQLite by default, with history search
and explicit memory review workflows.

- [Context compression](docs/CONTEXT_COMPRESSION.md)
- [Memory](docs/MEMORY.md)
- [Session portability](docs/SESSION_PORTABILITY.md)

### Automation and collaboration

UAG supports parallel independent read operations, multi-agent coordination,
session recovery, and Auto-pilot for multi-round work. Use `:auto` to start
Auto-pilot; press **F12** to interrupt the current response and request that
Auto-pilot stop.

- [Auto-pilot](docs/README_AUTO.md)
- [Timers and scheduled tasks](docs/SET_TIMER.md)
- [Multi-agent runtime](docs/MULTI_AGENT_RUNTIME.md)

### Security and observability

Sensitive operations can require `human_ask` confirmation. Credentials can be
stored in the operating system's credential manager or an encrypted file
backend. The Web UI supports configured OIDC sign-in and access controls.
OpenTelemetry tracing and metrics are **opt-in**.

- [Enterprise policies](docs/ENTERPRISE_POLICY.md)
- [Web identity and rooms](docs/WEB_IDENTITY_MEMORY.md)
- [OpenTelemetry design](docs/UAG_OPENTELEMETRY_DESIGN.md)
- [Developer observability guide](src/uagent/docs/DEVELOP_OBSERVABILITY.md)

These are configurable controls, not a blanket guarantee that arbitrary tool
execution is sandboxed. See the deployment and policy guides before exposing
UAG to untrusted users or networks.

### Languages, devices, and voice

UAG includes resources for **38 locales** (English plus 37 translations),
optional full-duplex voice integrations, and tools for systems such as SwitchBot,
Matter, ECHONET Lite, BACnet, Modbus TCP, and OPC UA.

- [Translations](docs/README.translations.md)
- [IoT use cases](docs/IOT_USECASE.md)
- [Communication tools](docs/COMMUNICATION.md)

## Documentation

| Start here | Go deeper |
| :--- | :--- |
| [Quickstart (Windows)](docs/QUICKSTART.md) | [Architecture](docs/ARCHITECTURE.md) |
| [CLI usage](docs/USAGE.md) | [Context management](docs/UAG_CONTEXT_MANAGEMENT_DESIGN.md) |
| [Environment and providers](docs/ENVIRONMENT.md) | [Enterprise policy](docs/ENTERPRISE_POLICY.md) |
| [Agent Skills and plugins](src/uagent/docs/DEVELOP_PLUGIN.md) | [Tool flow](src/uagent/docs/TOOL_FLOW.md) |
| [MCP and OAuth](docs/MCP_OAUTH_PROXY_GUIDE.md) | [Computer Use](docs/COMPUTER_USE_IMPLEMENTATION.md) |
| [VS Code extension](docs/VSCODE.md) | [Developer guide](src/uagent/docs/DEVELOP.md) |

Browse the [documentation directory](docs/) or read the
[Japanese README](docs/README.ja.md) and
[other translations](docs/README.translations.md).

## Development and contributing

~~~bash
git clone https://github.com/awaku7/agentcli.git
cd agentcli
python -m pip install -e ".[core,providers,test]"
~~~

Before a **Python code** pull request, run the relevant tests and project checks:

~~~bash
python -m ruff check src tests
python -m black --check src tests
python -m pytest -q .
~~~

Read [AGENTS.md](AGENTS.md) and the
[developer guide](src/uagent/docs/DEVELOP.md) for detailed contribution
guidelines. Issues, documentation improvements, tools, translations,
and focused pull requests are welcome.

## License

UAG is released under the [Apache License 2.0](LICENSE).
