Agent 开发框架

CUGA|企业级策略可控智能体编排框架

CUGA

CUGA 是一个可私有化部署的企业级通��智能体编排框架,支持接入 MCP、OpenAPI 与 Python 工具,并提供执行策略、审批与记忆能力。

获取与使用

需要部署

按官方资料自行安装或部署

使用难度待核验
国内可用性待核验

2026-11-09 更新 · 本站尚未实测

项目介绍

Agent 开发框架 · 2026-11-09 更新 · 本站尚未实测

CUGA 由 cuga-project 组织开源,README 将其定位为“enterprise agent harness for sovereign, policy-controlled automation”,即面向企业的、可自主可控部署的智能体编排框架。它把业务请求转化为跨应用、API 与文档的操作,支持在私有云或隔离环境中部署,并连接由使用者自行托管的模型与工具。仓库主语言为 Python,采用 Apache 2.0 许可。宣传中提到的基准结果(如 AppWorld、WebArena 得分)来自作者公开材料,具体测试环境与复现条件待核验。

核心能力

点击能力名称查看输入、输出和原文依据。

  • 工具接入:可连接 MCP 服务器、OpenAPI 服务与 Python 工具,通过管理界面配置并测试草稿后再发布版本。
  • 执行策略:README 列出五类策略——Intent Guard(拦截或回应特定意图)、Playbook(为任务提供标准流程)、Tool Approval(人工审批后才执行工具)、Tool Guide(附加领域指令并可挂接 ToolGuard 代码)、Output Formatter(约束输出格式)。其中被拦截的调用会返回策略违规且不执行该工具。
  • 多智能体协作:通过 CugaSupervisor 为不同专项智能体分配工具与指令并路由任务。
  • 知识与引用:结合企业共享文档与会话上传文档进行检索并给出引用来源。
  • 可复用技能:以 SKILL.md 文件封装流程,在需要时加载。
  • 执行可观测:可记录运行轨迹并用 cuga viz 查看,运行回执可统计 token、模型调用、工具调用与耗时。
  • 事件驱动:需单独部署 events 服务,支持计划任务、轮询与推送触发,并投递到已配置渠道(如 Web 聊天、Slack)。
  • 记忆:需配置 Evolve 后端,持久保存需 PostgreSQL 与配套 Evolve HTTP 服务。
  • 访问控制:可配置 OIDC 登录并区分聊天与管理角色。

实际应用场景

适用场景

README 给出若干示例:收入运营中比对 CRM 数据并生成报表、更新账户前需人工审批;知识问答中检索企业文档并引用来源;跨应用操作由 Supervisor 协调多个专项智能体;结合 API 调用与浏览器交互的自动化;通过事件服务按周生成报表或响应新文档。这些均为文档描述的使用方式,实际效果取决于所接入模型、工具与配置,未经本站实测。

安装与接入

README 要求使用 Python 3.12 与 uv,并给出如下快速安装步骤(原文换行保留):

git clone https://github.com/cuga-project/cuga-agent.git
cd cuga-agent
uv sync --python 3.12
test -f .env || cp .env.example .env

随后在 .env 中设置模型提供方、模型与凭据,例如面向 OpenAI 兼容端点的示例配置(原文):

AGENT_SETTING_CONFIG=settings.openai.toml
OPENAI_API_KEY=your-api-key
MODEL_NAME=your-model-name

启动管理器并打开 CLI 打印的本地地址 /manage:

uv run cuga start manager --crm

也可以使用私有推理端点,通过 OPENAI_BASE_URL、OPENAI_API_KEY、MODEL_NAME 指向自建的 OpenAI 兼容服务。此外还有 demo_crm、demo_knowledge、demo_supervisor 等演示启动命令,以及浏览器内体验的 Colab notebook。Kubernetes 部署参见仓库 deployment/README.md 的 Helm chart。具体支持哪些模型提供方以官方配置文档为准,本次未获取,待核验。

使用条件与限制

是否需要部署
需自行准备运行环境,具体要求见正文
是否需要注册
账号和认证要求见正文;未明确说明的项目仍待核验
是否需要 API Key
待核验
费用与额度
费用边界见正文,项目许可不代表模型或托管服务免费
所需权限
待核验
许可证与服务条款
待核验

权限费用与限制

  • 凭据:需自行在 .env 中填写模型提供方 API Key 或自建端点密钥,仓库不提供密钥。
  • 费用:框架代码采用 Apache 2.0,但模型推理、托管服务、事件服务与记忆后端可能产生费用,价格与计费方式需向对应服务方核验。
  • 部署依赖:完全自主可控需自行保证模型、连接器与可选服务都在边界内;隔离环境需预先构建并传输依赖、镜像与模型产物,推理模型与其推理服务器需单独部署。
  • 策略执行:README 明确说明,仅有指令不构成执行检查,需要启用对应的 ToolGuard 护栏才在工具调用前生效。
  • 记忆限制:记忆需要已启用的服务、稳定的实例标识与已配置的 Evolve 后端;持久保留需要 PostgreSQL。
  • 事件服务:为独立部署的旁路服务,运行时才出现 Studio 界面,渠道与连接器需各自配置。
  • 平台支持:README 以 Python 3.12 与 uv 为前置,Windows 与国内环境适配情况待核验。

国内使用情况

网友核验 用户经验分享

与站长实测独立,不代表官方认证或本站已实测。

我要核验
0 位参与者0 份有效分项记录

最近核验:暂无有效核验。参与人数按当前项目有效身份去重;不同核验项分别统计,不合并成用户总结果。仅统计审核通过且未过期的记录。

分项统计、有效期与样本量
核验项目有效人数成功 / 部分 / 失败 / 无法判断成功率最近核验 / 有效期
官方网站访问00 / 0 / 0 / 0样本不足暂无 / 7 天
GitHub 仓库访问00 / 0 / 0 / 0样本不足暂无 / 7 天
安装与运行00 / 0 / 0 / 0样本不足暂无 / 30 天
官方服务国内连接 / MCP 连接00 / 0 / 0 / 0样本不足暂无 / 30 天
国内网络情况00 / 0 / 0 / 0样本不足暂无 / 7 天
国内模型兼容性00 / 0 / 0 / 0样本不足暂无 / 30 天
自定义 API00 / 0 / 0 / 0样本不足暂无 / 30 天
海外服务依赖
00 / 0 / 0 / 0样本不足暂无 / 30 天
海外账号要求
00 / 0 / 0 / 0样本不足暂无 / 30 天
中文界面
00 / 0 / 0 / 0样本不足暂无 / 30 天
客户端兼容性00 / 0 / 0 / 0样本不足暂无 / 30 天
账号及费用信息
00 / 0 / 0 / 0样本不足暂无 / 30 天

成功率 = 成功 ÷(成功 + 部分成功 + 失败);无法判断不计入分母。至少 5 份可判断结果才显示成功率。账号、费用、海外依赖与语言等事实项,成功表示核查结论与资料吻合,具体观察另行统计;不表示免费或没有海外依赖。不同网络、客户端和版本的结果不能直接等同。

最近有效核验

暂无审核通过且未过期的网友核验。欢迎提交真实使用记录。

查看全部有效核验 →

国内实测状态:国内可用性待核验。协议兼容和官方资料说明不等于国内网络可用。

官方网站访问
尚未实测 待核验
GitHub 仓库访问
尚未实测 待核验
官方服务国内连接
尚未实测 待核验
国内网络情况
尚未实测 待核验
国内模型兼容性
尚未实测 待核验
自定义 API
尚未实测 待核验
海外服务依赖
尚未实测 待核验
海外账号要求
尚未实测 待核验
中文界面
尚未实测 待核验
国内最后核验时间
尚未实测

许可与国内使用

仓库 LICENSE 为 Apache License 2.0,可自由使用、修改与再分发(需保留版权与许可声明等条件)。公开仓库不等于所有配套服务免费;模型、云托管、Evolve 与 events 服务均需单独确认许可与费用。域名 cuga.dev 与文档站不能据此推断服务部署地域,国内网络访问、合规与数据出境要求需使用者自行核验。README 提供简体中文版说明,但产品界面与文档的本地化程度待核验。

项目资料与来源

官方网站 ↗

GitHub 仓库 ↗

官方文档 ↗

字段依据与待核验事项

access:来源确认 · uv sync --python 3.12

project_type:来源确认 · The enterprise agent harness for sovereign, policy-controlled automation.

原始 README(折叠技术参考)
<p align="center">
  <picture>
    <source media="(max-width: 640px)" srcset="docs/images/readme/hero-mobile.svg">
    <img src="docs/images/readme/hero.svg" alt="CUGA — Enterprise automation. Under your control. Sovereign deployment, execution policies, and efficient inference." width="100%">
  </picture>
</p>

# CUGA

**The enterprise agent harness for sovereign, policy-controlled automation.**

CUGA turns business requests into actions across your applications, APIs, and documents. Deploy in your private cloud or prepare an air-gapped environment, enforce fine-grained execution policies, and use open models on infrastructure you control. Connect your tools, configure your workflows, and optimize inference for your workload.

**[Get started](#quick-install)** · **[Documentation](https://docs.cuga.dev)** · **[Python SDK](#build-with-the-python-sdk)** · **[Deploy on Kubernetes](deployment/README.md)**

**[CUGA Apps](https://github.com/cuga-project/cuga-apps)** · **[CUGA Harness Kit](https://github.com/cuga-project/cuga-harness-kit)** · **[Discord](https://discord.gg/PN3Zdq4dEd)**

[Apache 2.0](LICENSE) · Configurable Generalist Agent · Built with IBM SiL

English · [简体中文](docs/readme/README.zh-CN.md)

---

## Quick install

Use **Python 3.12** and [uv](https://docs.astral.sh/uv/getting-started/installation/).

```bash
git clone https://github.com/cuga-project/cuga-agent.git
cd cuga-agent
uv sync --python 3.12
test -f .env || cp .env.example .env
```

<a id="llm-configuration---advanced-options"></a>

Set your provider, model, and credentials in `.env`. See [model configuration](docs/readme/configuration-guide.md#supported-platforms) for supported providers.

```bash
uv run cuga start manager --crm
```

Open `/manage` at the local URL printed by the CLI. Try the CRM tools, configure policies, and test a draft before publishing. [More source and demo options](#develop-from-source).

Prefer to try it in your browser first? [Open the quickstart notebook in Colab](https://colab.research.google.com/github/cuga-project/cuga-agent/blob/main/docs/examples/colab/try_cuga.ipynb).

## Automate enterprise work. Keep control.

| Your priority | What CUGA gives you |
| --- | --- |
| **Sovereignty** | Run the harness in your environment. Connect privately hosted models and tools. Preload supporting model artifacts for disconnected deployments. |
| **Execution policies** | Block disallowed intents, require approval for selected tools, guide workflows with playbooks, and configure tool-level guards. |
| **Inference efficiency** | Choose open models, tune reasoning modes, shortlist relevant tools, set tool-call budgets, and inspect token usage with per-run receipts. |
| **Faster delivery** | Connect MCP servers, OpenAPI services, and Python tools. Configure and test an agent in the UI before publishing a version. |
| **Recurring automation** | Use the separate events service to run agents on schedules, webhooks, and application events, with run history in Events Studio. |
| **Reusable experience** | Load task-specific skills and use a configured Evolve integration to retrieve relevant guidance and user preferences. |

## See what you can build

Configure tools and policies beside a draft chat, then publish a version for users.

![Current CUGA manager UI showing connected CRM and Workspace tools, three policies, draft chat, and Publish](docs/images/readme/manager.jpg)

*Current UI, captured from this repository with illustrative Revenue Operations configuration data. Internal endpoints and version labels are examples.*

| Set approval policies | Manage specialized agents |
| --- | --- |
| ![Tool Approval configuration requiring human approval for CRM account updates](docs/images/readme/policies.jpg) | ![Agent dashboard with Revenue Operations, Knowledge Assistant, and Operations Supervisor examples](docs/images/readme/agents.jpg) |
| Choose which tools need approval and show the proposed code before execution. | Configure individual agents and supervisors for different business workflows. |

### Watch the product tour

https://github.com/user-attachments/assets/2c51ab34-cb7a-43f8-aa1d-9a4cf8e27b5c

*Visual tour of the current UI with sample configuration, flows, run history, and memory records. It does not show a live agent run. [Media details](docs/readme/media.md).*

## From a business request to a completed workflow

| Workflow | What an agent can do with the right tools and policies |
| --- | --- |
| **Revenue operations** | Match a contact list against CRM, join account data, calculate revenue percentiles, and draft a report. Gate account updates with Tool Approval. |
| **Knowledge assistance** | Search company documents, answer with citations, and combine shared reference material with documents uploaded to a conversation. |
| **Cross-application operations** | Use CugaSupervisor to coordinate specialized agents, each with its own tools and instructions, and prepare results for review. |
| **Browser and API automation** | Combine structured API calls with browser interactions for workflows spanning services and web interfaces. |
| **Recurring operations** | Schedule a weekday report or react to a new document through the events service, then deliver the result to a configured channel. |

Start with the [CRM demo](#develop-from-source), the [knowledge walkthrough](docs/examples/knowledge_demo/README.md), or the [multi-agent examples](docs/readme/configuration-guide.md#cugasupervisor-multi-agent).

### Build agents around your team's expertise

| Capability | What it enables |
| --- | --- |
| **Multi-agent coordination** | Give specialists focused tools and instructions, then route work through [CugaSupervisor](https://docs.cuga.dev/docs/build/cuga-supervisor/). |
| **Knowledge with citations** | Combine shared company documents with conversation uploads and inspect cited sources. [Knowledge walkthrough](docs/examples/knowledge_demo/README.md). |
| **Reusable agent skills** | Package procedures in `SKILL.md` files and load the relevant instructions when a task needs them. [Skills guide](docs/readme/configuration-guide.md#agent-skills). |
| **Execution visibility** | Record trajectories with `tracker_enabled=true`, inspect them with `cuga viz`, and enable per-run receipts for token usage, model calls, tool calls, and elapsed time. [Run receipts](docs/readme/configuration-guide.md#run-receipt). |
| **Access control** | Configure OIDC sign-in and enable separate chat and management role checks. [Authentication setup](docs/readme/configuration-guide.md#authentication-and-access-control). |

## Develop from source

<details>
<summary>Clone the repository and run with uv</summary>

Use **Python 3.12** and [uv](https://docs.astral.sh/uv/getting-started/installation/). [uv manages the project environment automatically](https://docs.astral.sh/uv/guides/projects/#running-commands), so you can run commands with `uv run` without creating or activating an environment manually.

```bash
git clone https://github.com/cuga-project/cuga-agent.git
cd cuga-agent
uv sync --python 3.12
test -f .env || cp .env.example .env
```

Edit `.env` to choose a model provider and set its credentials. For an OpenAI endpoint:

```dotenv
AGENT_SETTING_CONFIG=settings.openai.toml
OPENAI_API_KEY=your-api-key
MODEL_NAME=your-model-name
```

```bash
uv run cuga start demo_crm --read-only
```

Open the local URL printed by the CLI. Try:

> from contacts.txt show me which users belong to the crm system

For the configuration UI, open `/manage` on the same server. Connect tools, configure policies, test a draft, and **Publish** when it is ready.

| Next step | Command or guide |
| --- | --- |
| Start the manager with CRM tools | `uv run cuga start manager --crm` |
| Try document-based assistance | `uv run cuga start demo_knowledge` |
| Try supervisor orchestration | `uv run cuga start demo_supervisor` |
| Inspect execution trajectories | `DYNACONF_ADVANCED_FEATURES__TRACKER_ENABLED=true uv run cuga start demo`, then `uv run cuga viz` |
| Configure another model provider | [Model configuration](docs/readme/configuration-guide.md#supported-platforms) · [Environment example](.env.example) |

### Use your own inference endpoint

Point the OpenAI-compatible configuration at your private inference service:

```dotenv
AGENT_SETTING_CONFIG=settings.openai.toml
OPENAI_BASE_URL=http://your-inference-service:8000/v1
OPENAI_API_KEY=your-endpoint-key
MODEL_NAME=your-served-model-name
```

Use the model identifier exposed by your server. Hosted providers and private endpoints share the same harness; model capability, task complexity, and your configuration determine accuracy and inference spending.

</details>

## Apply guardrails before action

Require approval before updating a CRM account. Configure a ToolGuard to block a booking that exceeds the customer's membership limits. CUGA combines request policies, tool-level enforcement, and human approval so teams can define where an agent may act.

CUGA includes five policy types, configurable through the UI or Python SDK.

| Policy | Purpose |
| --- | --- |
| **Intent Guard** | Block or respond to requests matching configured intent rules. |
| **Playbook** | Supply a standard process for a matching task. |
| **Tool Approval** | Pause selected tool execution for human approval. |
| **Tool Guide** | Add domain instructions; attach ToolGuard code to enforce configured rules before a tool executes. |
| **Output Formatter** | Shape responses to match a configured output format. |

An active ToolGuard checks the applicable app/tool call before the underlying tool runs. A blocked call returns a policy violation without calling that tool. Guard enforcement requires an applicable, enabled guard; instructions alone do not create this execution check.

Combine these with sandbox isolation, tool selection, and execution budgets. Intent matching and natural-language guidance depend on their configuration; use tool guards and approval gates where execution needs explicit control.

**[Policies SDK](https://docs.cuga.dev/docs/build/policies/)** · **[Tool guards](src/cuga/backend/cuga_graph/policy/tool_guard/README.md)** · **[Sandbox configuration](docs/readme/configuration-guide.md#configurations)**

## Automate work when events happen

Turn a recurring request into a standing workflow: prepare a weekday report, summarize a newly uploaded document, or respond to a configured application event. The events service supports schedules, polling, and push triggers, with delivery to configured channels such as web chat and Slack.

Events Studio brings watchers, agents, and run history into one view. Inspect the trigger, tools, status, and captured output for a run.

![Current Events Studio showing sample scheduled and document-triggered workflows with illustrative run history](docs/images/readme/events.jpg)

*Current UI with sample workflows and run statuses. No flow was executed or message delivered for this capture.*

The events service is deployed separately beside CUGA. Studio appears when that service is reachable; connectors and delivery channels require their own configuration. See the [events deployment guide](events/deploy/README.md) and [connector setup](events/deploy/ENV.md).

## Reuse experience with memory

With Evolve configured, CUGA retrieves relevant task guidance and user preferences, then saves configured conversation trajectories for future use. Teams can inspect what the agent remembers, where it came from, and when it was used.

![Current memory workspace showing sample task guidance, preferences, source conversations, and usage details](docs/images/readme/memory.jpg)

*Current UI with illustrative memory records, source links, and usage counts. These records were supplied as sample data.*

Memory controls let users enable or disable memory and forget records. Administrator settings include retention policies, schedules, and activity views when the backend supports them. Memory requires an enabled service, a stable service-instance identity, and a configured Evolve backend; durable retention requires PostgreSQL and the bundled Evolve HTTP service.

**[Evolve setup](docs/readme/configuration-guide.md#optional-use-evolve-with-cuga)** · **[Memory retention controls](docs/readme/media.md#memory-retention-controls)** · **[ALTK-Evolve](https://github.com/AgentToolkit/altk-evolve)**

## Deploy within your boundaries

| Deployment | Setup |
| --- | --- |
| **Local or private cloud** | Run the CLI or SDK against your chosen model endpoint and internal tools. |
| **Kubernetes** | Use the [Helm chart and deployment scripts](deployment/README.md), your image registry, and Kubernetes secrets. |
| **Air-gapped environment** | Build and transfer dependencies, images, and supporting model artifacts ahead of time. Use local inference, embeddings, tools, and observability endpoints. The [UBI image](Dockerfile.ubi) includes a [model preloader](src/scripts/preload_models.py). |

Sovereignty covers the entire deployment: configure each model provider, connector, and optional service to stay inside your boundary. The air-gapped image preloads supporting models; deploy the reasoning model and its inference server separately.

## Strong benchmark foundations

**AppWorld · IBM CUGA + GLM-5.3-Flash**

| AppWorld evaluation set | Task Goal Completion | Scenario Goal Completion |
| --- | --- | --- |
| **Test-Normal** | **93.5%** | **91.1%** |
| **Test-Challenge** | **92.8%** | **84.2%** |

**WebArena: 61.7%** overall success. [Published result](https://arxiv.org/html/2510.23856v1).

### Measure efficiency on your workload

Use open models and tune the harness to balance quality, latency, and inference spending. Enable a run receipt to inspect the tokens, model calls, tool calls, and time used by an SDK invocation:

```toml
# settings.toml
[advanced_features]
run_receipt = true
```

```python
result = await agent.invoke("Prepare an account revenue report")
print(result.receipt)
```

Receipts report usage and timing. Calculate cost using your own provider rates or hosting costs. See [run receipts](docs/readme/configuration-guide.md#run-receipt), [reasoning profiles](docs/readme/configuration-guide.md#reasoning-profiles), and [tool shortlisting](docs/readme/configuration-guide.md#strategies).

## Build with the Python SDK

Add your tools and invoke an agent from your application:

```python
import asyncio

from cuga import CugaAgent
from langchain_core.tools import tool


@tool
def get_account_revenue(account_id: str) -> dict:
    """Return account revenue from a sample data source."""
    return {"account_id": account_id, "revenue": 250000}


async def main():
    agent = CugaAgent(tools=[get_account_revenue])
    result = await agent.invoke("What is the revenue for account acc_01?")
    print(result.answer)


asyncio.run(main())
```

Configure a model before running the example. Replace the sample tool with your own service integration.

**[CugaAgent SDK](https://docs.cuga.dev/docs/build/cuga-agent/)** · **[CugaSupervisor](https://docs.cuga.dev/docs/build/cuga-supervisor/)** · **[Tool integration examples](docs/examples/cuga_with_runtime_tools/README.md)** · **[Durable conversations](docs/readme/configuration-guide.md#sdk-durable-conversations)**

## Explore further

| Topic | Guide |
| --- | --- |
| Models, execution modes, and testing | [Configuration and development guide](docs/readme/configuration-guide.md) |
| Task-specific instruction packs | [Agent skills](docs/readme/configuration-guide.md#agent-skills) |
| Memory and guidance from previous runs | [Evolve integration](docs/readme/configuration-guide.md#optional-use-evolve-with-cuga) |
| Agent-level and session-level knowledge | [Knowledge demo](docs/examples/knowledge_demo/README.md) |
| MCP and OpenAPI integration | [Tool registry](src/cuga/backend/tools_env/registry/README.md) |
| Expose CUGA to other agents | [CUGA as MCP](docs/examples/cuga_as_mcp/README.md) · [A2A example](docs/examples/a2a_two_cuga/README.md) · [ACP over stdio](docs/examples/acp_stdio/README.md) |
| Event-driven automation | [Events service](events/deploy/README.md) — deployed as a separate service beside CUGA |
| Low-code workflows | [Langflow example](docs/examples/langflow/) |

## Build with us

Share an enterprise use case, report an issue, or contribute an integration.

**[Open an issue](https://github.com/cuga-project/cuga-agent/issues/new/choose)** · **[Contributing](CONTRIBUTING.md)** · **[Contributors](https://github.com/cuga-project/cuga-agent/graphs/contributors)**
历史前置条件说明(补充参考)

Python 3.12 与 uv;在 .env 配置模型提供方、模型名与 API Key(或自建 OpenAI 兼容端点及密钥);Kubernetes 部署需 Helm 与镜像仓库;记忆功能需 Evolve 后端及 PostgreSQL(持久化时);事件服务需单独部署并配置连接器与投递渠道;国内网络可用性、Windows 支持、具体模型清单及各项服务费用均待核验。

项目来源与清单版权许可

https://github.com/cuga-project/cuga-agent

整理来源:https://github.com/slavakurilyak/awesome-ai-agents

清单版权与许可:

MIT License

Copyright (c) 2024 Slava Kurilyak

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.