Metadata-Version: 2.4
Name: uag
Version: 0.6.11
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: 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.11; 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: providers
Requires-Dist: openai>=2.45.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: chronos-forecasting; extra == "tools"
Requires-Dist: exstruct; extra == "tools"
Requires-Dist: google-api-python-client; 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: 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; extra == "tools"
Requires-Dist: pythainlp; 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"
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"
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: pdfplumber; extra == "test"
Requires-Dist: pint; 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"
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: webrtc-audio-processing>=0.1.3; 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 logo" width="680">
</p>

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

<p align="center">
  <strong>Universal AI Gateway</strong><br>
  One local agent. Any model. Any tool. Your environment, your rules.
</p>

<p align="center">
  <a href="https://github.com/awaku7/agentcli/actions"><img src="https://img.shields.io/github/actions/workflow/status/awaku7/agentcli/ci.yml?style=flat-square&label=CI" alt="CI status"></a>
  <a href="https://pypi.org/project/uag/"><img src="https://img.shields.io/pypi/v/uag?style=flat-square" alt="PyPI version"></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="https://github.com/awaku7/agentcli/blob/main/LICENSE"><img src="https://img.shields.io/github/license/awaku7/agentcli?style=flat-square" alt="License"></a>
</p>

<p align="center">
  <a href="https://github.com/awaku7/agentcli">GitHub</a> ·
  <a href="https://pypi.org/project/uag/">PyPI</a> ·
  <a href="https://github.com/awaku7/agentcli/discussions">Discussions</a> ·
  <a href="https://github.com/awaku7/agentcli/blob/main/docs/README.translations.md">Translations</a>
</p>

______________________________________________________________________

## Why uag?

uag is a local-first AI agent that connects the model you prefer to the tools you actually use.
It gives you a single, extensible runtime for files, browsers, codebases, communication, cloud APIs,
IoT devices, MCP servers, and multi-agent workflows.

- **Provider freedom** — OpenAI, Anthropic, Gemini, Azure, Bedrock, Ollama, llama.cpp, Grok, DeepSeek, and more.
- **Local-first execution** — your agent runtime and tool execution stay on your machine; only the API calls you choose leave it.
- **One tool layer** — the same tools work from the CLI, desktop GUI, web UI, VS Code, and A2A.
- **Parallel by design** — independent read-only operations can run concurrently.
- **Extensible** — add tools, plugins, Agent Skills, MCP servers, and Rust-backed tools without changing the core.
- **Safety-aware** — destructive actions, credentials, device controls, and network writes support explicit confirmation and policy controls.

> **In short:** uag is the control plane between your AI models and your real environment.

## Where uag fits

uag sits between people and interfaces on one side, and models, tools, and real-world systems on the other.
It coordinates the conversation, selects capabilities, applies safety rules, and keeps the workflow resumable.

```mermaid
flowchart LR
    U[User / Team]
    I[CLI · GUI · Web · VS Code · A2A]
    G[uag<br/>Agent runtime & control plane]
    P[Hosted models<br/>OpenAI · Claude · Gemini · Grok · Azure · Bedrock]
    L[Local models<br/>Ollama · llama.cpp · LM Studio]
    T[Tool layer<br/>Files · Web · Code · Media · Documents]
    E[Extension layer<br/>Plugins · Agent Skills · Custom tools]
    X[Connected systems<br/>MCP · A2A · Cloud · Communication]
    D[IoT layer<br/>SwitchBot · Matter · BACnet · OPC UA]
    R[Code intelligence<br/>code_map · idx tools · Git · Tests]
    S[Safety & policy<br/>Confirmation · Credentials · Audit]

    U --> I
    I --> G
    G --> P
    G --> L
    G --> T
    G --> E
    G --> X
    G --> D
    G --> R
    G --> S
    E --> T
    E --> X
    S -. governs .-> P
    S -. governs .-> T
    S -. governs .-> E
    S -. governs .-> X
    S -. governs .-> D
    S -. governs .-> R
```

**uag is not a model provider and not just a chat UI.** It is the shared execution layer that makes models,
tools, interfaces, and policies work together.

## Flagship capabilities

### 🧠 One agent, every model

Use hosted or local models through one consistent tool interface. Switch providers with
`UAGENT_PROVIDER`—no code changes, migration, or separate workflow.

### 🖥 Computer Use and browser automation

Opt-in Computer Use combines a Playwright browser runtime with desktop interaction. Automate
navigation, forms, multi-page flows, downloads, screenshots, and DOM extraction. The Browser
Inspector records transitions and page state for debugging and auditing.

See [Computer Use](https://github.com/awaku7/agentcli/blob/main/docs/COMPUTER_USE_IMPLEMENTATION.md).

### ⚡ Parallel tool execution

Independent read-only operations run concurrently when safe. Web searches, file inspection,
repository analysis, and similar workloads can complete in parallel with a configurable worker
pool (`UAGENT_PARALLEL_WORKERS`). Write operations remain serialized or require confirmation.

### 🧩 Built to extend

- **200+ tools** for files, web, media, documents, code, cloud, communication, and IoT
- **Dynamic discovery and loading** — use `tool_catalog` to find capabilities and `tool_load` to enable them only when needed
- **Code intelligence** — `code_map`, language-specific `idx` navigators, Git review, test execution, linting, compilation, and coverage
- **Claude Code-compatible plugins** with skills, agents, MCP servers, hooks, commands, and marketplaces
- **Agent Skills** from SkillsMP and ClawHub
- **Custom Python tools** with `TOOL_SPEC` and `run_tool()`
- **Rust-backed tools** for lightweight native extensions

### 🔄 Reliable long-running work

Session continuity, tool-result caching, batch state, restart recovery, DAG scheduling, and
multi-agent orchestration make complex work resumable instead of one-shot.

The Session Store is enabled by default and adds structured SQLite history for session search, tool auditing, and summaries. New JSONL persistence is disabled by default:

```text
UAGENT_SESSION_STORE=1
UAGENT_SESSION_BACKEND=sqlite
# Unset: user state directory/sessions/sessions.sqlite3
UAGENT_SESSION_STORE_PATH=
UAGENT_MEMORY_BACKEND=sqlite
# Unset: user state directory/memory.sqlite3
UAGENT_MEMORY_DB=
```

Use `:sessions search <query>` to search history, or `:sessions candidates` and
`:sessions approve <number>` to review explicit memory candidates.

### 🎙 Realtime voice

Full-duplex voice is available through OpenAI Realtime, Azure OpenAI, xAI Grok Voice, Gemini Live,
and Bedrock Nova Sonic, with optional AEC3 echo cancellation and safety-limited realtime function calling.

### 🌍 Private, multilingual, and policy-aware

Use uag in Japanese, English, Chinese, Korean, Spanish, French, Russian, and more. Credentials can
be stored in the native OS keychain or encrypted file backend. Enterprise policies can govern tools,
providers, networks, credentials, plugins, skills, and MCP servers.

See [Environment variables](https://github.com/awaku7/agentcli/blob/main/docs/ENVIRONMENT.md),
[Enterprise Policy](https://github.com/awaku7/agentcli/blob/main/docs/ENTERPRISE_POLICY.md), and
[Tool Creator Guide](https://github.com/awaku7/agentcli/blob/main/TOOL_CREATOR_GUIDE.md).

## Quick start

### Install

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

The first launch opens the setup wizard. It helps configure a provider and stores the selected settings
in your local environment.

For the common feature groups:

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

> Platform integrations are optional. Install only what your operating system needs; see
> [Platform setup](#platform-setup).

### Choose a provider

Set a provider and its API key before launching, or configure them in the setup wizard.

```bash
# OpenAI
export UAGENT_PROVIDER=openai
export OPENAI_API_KEY="your-api-key"

# Anthropic
export UAGENT_PROVIDER=anthropic
export ANTHROPIC_API_KEY="your-api-key"

# Local Ollama
export UAGENT_PROVIDER=ollama
export UAGENT_OLLAMA_BASE_URL=http://localhost:11434/v1
export UAGENT_OLLAMA_DEPNAME=llama3.1
```

Windows PowerShell uses `$env:NAME = "value"` instead of `export NAME=value`.
See [Environment variables](https://github.com/awaku7/agentcli/blob/main/docs/ENVIRONMENT.md) for the complete provider matrix.

### Try it

```text
> What files changed in this repository?
> Search the web for today's AI news and summarize the top five stories.
> :help
```

## Interfaces

| Interface | Command | Best for |
|---|---|---|
| **CLI** | `uag` | Fast, keyboard-first work |
| **Desktop GUI** | `uagg` | A native desktop experience |
| **Web UI** | `uagw` | Browser-based access |
| **A2A server** | `uaga` | Agent-to-agent communication |
| **VS Code** | Extension | Explain, refactor, fix, and browse tools in the editor |

All interfaces share the same provider configuration, tool registry, safety rules, and session data.

## What it can do

### Work with your environment

- Read, create, edit, search, hash, archive, and inspect files
- Review Git changes, scan for secrets, run tests, lint, compile, and measure coverage
- Navigate large Python, TypeScript, JavaScript, Go, Rust, C/C++, Java, C#, COBOL, VBA, and other codebases
- Automate browsers with Playwright, including multi-page workflows and downloads

### Use any model

Provider adapters cover hosted and local runtimes, including:

**OpenAI · Anthropic · Google Gemini · Vertex AI · Azure OpenAI · Amazon Bedrock · OpenRouter · Ollama · llama.cpp · Grok · DeepSeek · NVIDIA · Hugging Face · Alibaba Cloud · Moonshot · Xiaomi MiMo · LM Studio · MiniMax · Sakana AI · SAKURA AI Engine · Together AI · Vercel AI Gateway · PFN/PLaMo · Z.AI · Novita**

Switch providers with `UAGENT_PROVIDER`; your tools and interface do not change.

### Connect services and devices

- **MCP** — connect external tool servers, including OAuth-enabled services
- **A2A** — coordinate with other agents and compatible servers
- **Cloud** — AWS, Google Cloud, and Azure API access with confirmation for writes
- **Communication** — Gmail, Bluesky, Discord, Microsoft Teams, and pybitchat
- **IoT** — SwitchBot, ECHONET Lite, Matter, BACnet, Modbus TCP, OPC UA, and UPnP
- **Media** — image generation/editing, audio transcription/speech, camera capture, and QR codes
- **Documents** — PDF, PowerPoint, Word, Excel, CSV, JSON, YAML, SQL, and log analysis

### Plugins, Agent Skills, and marketplaces

Turn uag into a specialized agent without forking the core:

- Install **Claude Code-compatible plugins** from a directory, ZIP, Git repository, HTTP source, or marketplace
- Bundle skills, sub-agents, MCP servers, hooks, slash commands, output styles, dependencies, and channels
- Browse community capabilities from [SkillsMP](https://skillsmp.com) and [ClawHub](https://clawhub.ai)
- Add private organization skills and tools locally through `UAGENT_EXTERNAL_TOOLS_DIR`

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

See the [Plugin Development Guide](https://github.com/awaku7/agentcli/blob/main/src/uagent/docs/DEVELOP_PLUGIN.md).

### IoT and physical-world control

uag connects conversational workflows to real devices while keeping write operations explicit and auditable:

- **SwitchBot** — Cloud and BLE discovery, status, control, batching, and subscriptions
- **ECHONET Lite** — discover and control Japanese home appliances, including INF notifications
- **Matter** — endpoints, clusters, attributes, state history, subscriptions, and control
- **BACnet / Modbus TCP / OPC UA** — industrial and building automation reads, writes, browsing, and monitoring
- **UPnP** — device discovery, WAN status, and router port-mapping management

Read state, monitor changes, or perform a control action through the same agent interface. Sensitive device
writes remain subject to the configured confirmation and enterprise policy rules.

See the [IoT Use Cases](https://github.com/awaku7/agentcli/blob/main/docs/IOT_USECASE.md).

The runtime currently includes a large catalog of tools. Discover the exact tools available in your installation with:

```text
:tools
```

## Platform setup

The core package is cross-platform. Platform-specific dependencies should be installed selectively.

### Windows

```powershell
python -m pip install PySide6 winrt-Windows.Devices.Geolocation
```

### macOS

```bash
python -m pip install PySide6 pyobjc-framework-CoreLocation
```

### Linux

```bash
python -m pip install PySide6 ewmh dbus-next
```

Some integrations have additional system requirements, such as browser binaries, Bluetooth permissions,
cloud credentials, or an MQTT/OPC UA server. The relevant tool reports what is missing when it runs.

## Sessions, automation, and safety

### Session continuity

Resume previous conversations with `:load <index>`. Tool results can be cached, and providers can be changed
without rebuilding the application.

### Auto-pilot

Use `:auto` for multi-round work with an optional reviewer model. Set a round limit with `--max-rounds N`.
Press **F12** to stop auto-pilot or **F12** to stop the current response.

See [Auto-pilot](https://github.com/awaku7/agentcli/blob/main/docs/README_AUTO.md).

### Embedded mode

For constrained local deployments, use `--embedded` and explicitly load only the tools required by the application.
In embedded mode, `--tool-genre-mask` is ignored, while repeated `--enable-tool` options preserve the specified tool order.

```bash
uag --embedded --enable-tool handle_mcp_v2 --enable-tool human_ask
```

See the [CLI usage reference](https://github.com/awaku7/agentcli/blob/main/docs/USAGE.md#embedded).

### Human confirmation

`human_ask` pauses before sensitive actions. File deletion, overwrites, shell commands, device controls,
credential operations, and network writes can be governed by confirmation and policy rules.

Organization-wide controls are available through the [Enterprise Policy Engine](https://github.com/awaku7/agentcli/blob/main/docs/ENTERPRISE_POLICY.md).

### Credentials

Use the credential store instead of placing long-lived secrets in prompts:

```text
:credential set provider/openai api_key
:credential get provider/openai
:credential list
```

The store can use Windows Credential Manager, macOS Keychain, Linux Secret Service, or the encrypted file
backend. See [Credential Store](https://github.com/awaku7/agentcli/blob/main/docs/ENTERPRISE_POLICY.md) for configuration details.

## Extensions

### Agent Skills and plugins

Install community skills from SkillsMP or ClawHub, or install Claude Code-compatible plugins containing
skills, agents, MCP servers, hooks, commands, and output styles.

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

See [Plugin development](https://github.com/awaku7/agentcli/blob/main/src/uagent/docs/DEVELOP_PLUGIN.md) and [Agent Skills](https://github.com/awaku7/agentcli/tree/main/skills).

### Create a tool

A tool can be a single Python file with `TOOL_SPEC` and `run_tool()`. Put it in
`UAGENT_EXTERNAL_TOOLS_DIR` and reload the catalog. Rust developers can ship a pre-built native module
with a thin Python wrapper.

See [Tool Creator Guide](https://github.com/awaku7/agentcli/blob/main/TOOL_CREATOR_GUIDE.md).

### MCP servers

Connect to external MCP servers from the CLI or configuration file. OAuth and proxy guidance is available
in [MCP OAuth / Proxy Guide](https://github.com/awaku7/agentcli/blob/main/docs/MCP_OAUTH_PROXY_GUIDE.md).

## Realtime voice

Optional realtime voice integrations support OpenAI Realtime, Azure OpenAI GPT Realtime, xAI Grok Voice,
Google Gemini Live, and Amazon Bedrock Nova Sonic. Install the relevant audio dependencies and run:

```bash
python scheck.py realtime
```

AEC3 support is available for full-duplex microphone and speaker audio. Enable diagnostics only while
troubleshooting:

```bash
export UAGENT_REALTIME_AUDIO_DEBUG=1
python scheck.py realtime
```

## Configuration and documentation

| Topic | Documentation |
|---|---|
| Environment variables | [docs/ENVIRONMENT.md](https://github.com/awaku7/agentcli/blob/main/docs/ENVIRONMENT.md) |
| Architecture and invariants | [docs/ARCHITECTURE.md](https://github.com/awaku7/agentcli/blob/main/docs/ARCHITECTURE.md) |
| Computer Use | [docs/COMPUTER_USE_IMPLEMENTATION.md](https://github.com/awaku7/agentcli/blob/main/docs/COMPUTER_USE_IMPLEMENTATION.md) |
| Repository tools | [docs/REPOSITORY_TOOLS.md](https://github.com/awaku7/agentcli/blob/main/docs/REPOSITORY_TOOLS.md) |
| IoT use cases | [docs/IOT_USECASE.md](https://github.com/awaku7/agentcli/blob/main/docs/IOT_USECASE.md) |
| Communication tools | [docs/COMMUNICATION.md](https://github.com/awaku7/agentcli/blob/main/docs/COMMUNICATION.md) |
| Auto-pilot | [docs/README_AUTO.md](https://github.com/awaku7/agentcli/blob/main/docs/README_AUTO.md) |
| MCP OAuth / Proxy | [docs/MCP_OAUTH_PROXY_GUIDE.md](https://github.com/awaku7/agentcli/blob/main/docs/MCP_OAUTH_PROXY_GUIDE.md) |
| VS Code extension | [docs/VSCODE.md](https://github.com/awaku7/agentcli/blob/main/docs/VSCODE.md) |
| Developer guide | [src/uagent/docs/DEVELOP.md](https://github.com/awaku7/agentcli/blob/main/src/uagent/docs/DEVELOP.md) |
| Tool flow | [src/uagent/docs/TOOL_FLOW.md](https://github.com/awaku7/agentcli/blob/main/src/uagent/docs/TOOL_FLOW.md) |

## Development

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

Run the pre-PR checks:

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

For the full development workflow, see [DEVELOP.md](https://github.com/awaku7/agentcli/blob/main/src/uagent/docs/DEVELOP.md).

## Project principles

- **Local-first** — the runtime belongs to you.
- **Provider-neutral** — models are replaceable infrastructure.
- **Composable** — tools, skills, plugins, and MCP servers are first-class extensions.
- **Safe by default** — sensitive operations remain visible and controllable.
- **Open to contribution** — code, tools, skills, translations, and documentation are welcome.

## Contributing

Bug reports, feature ideas, documentation improvements, translations, tools, skills, and pull requests are welcome.
Please open an issue or discussion before large changes. Read the [Developer Guide](https://github.com/awaku7/agentcli/blob/main/src/uagent/docs/DEVELOP.md)
and run the checks above before submitting a pull request.

## License

Licensed under the [Apache License 2.0](https://github.com/awaku7/agentcli/blob/main/LICENSE).
