必须用 Python 3.12 并通过 uv 管理环境;运行前需在 .env 中配置模型提供方与凭据,否则示例无法运行;事件服务需作为独立服务另行部署。
cuga-agent
cuga-projectApache-2.0活跃维护面向企业的开源通用智能体运行框架,能在网页和 API 上执行复杂任务,支持 OpenAPI/MCP 集成、可组合架构和策略感知的护栏机制。
CUGA is an open-source generalist agent harness for the enterprise, supporting complex task execution on web and APIs, OpenAPI/MCP integrations, composable architecture, reasoning modes, and policy-aware features.
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
uv run cuga start manager --crmREADME 未说明显存或 GPU 型号要求,仅要求 Python 3.12 与 uv;支持接入私有部署的开放模型,但未给出具体硬件规格。
面向企业的通用智能体框架,在自有环境里安全可控地执行跨应用任务
面向企业的开源通用智能体运行框架,能在网页和 API 上执行复杂任务,支持 OpenAPI/MCP 集成、可组合架构和策略感知的护栏机制。
核心能力
- 连接 MCP 服务器、OpenAPI 服务与 Python 工具
- 配置工具级审批策略与执行守卫
- 用 CugaSupervisor 协调多个专职子智能体
- 记录轨迹并用 cuga viz 可视化回放
- 按 SKILL.md 加载任务专用技能包
容易踩的坑
- v0.4.4最新正式版2026-11-01 · 2026-11-01 14:58 UTC
What's Changed
- fix(knowledge): restore SDK automatic RAG citations by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/915
- docs(contributing): accurately describe the PR templates by @ShryukGrandhi in https://github.com/cuga-project/cuga-agent/pull/1010
- fix(cli): list all services in start/stop/status help and support status demo_knowledge by @ruben-salas20 in https://github.com/cuga-project/cuga-agent/pull/983
- docs(config): correct cuga-apps MCP server descriptions by @ShryukGrandhi in https://github.com/cuga-project/cuga-agent/pull/1011
- test: let the unit suite run without an OpenAI key or the evolve extra by @CloudCorpRecords in https://github.com/cuga-project/cuga-agent/pull/965
- docs(examples): add hello_tools, the smallest runnable CUGA agent by @amrita-de in https://github.com/cuga-project/cuga-agent/pull/979
- docs(examples): add agent_with_public_mcp, an agent that borrows tools from a public tool server by @amrita-de in https://github.com/cuga-project/cuga-agent/pull/980
- fix(manage): map upstream LLM provider HTTP errors to 502 by @Sjain14 in https://github.com/cuga-project/cuga-agent/pull/992
- fix(cli): return from cuga evaluate when the evaluation finishes by @mayuriphad in https://github.com/cuga-project/cuga-agent/pull/987
- fix(events): don't abort events_up.sh when optional .env keys or tunnel logs are absent by @Sjain14 in https://github.com/cuga-project/cuga-agent/pull/993
- fix(policy): match AlwaysTrigger output formatters as fallback (#805) by @offerakrabi in https://github.com/cuga-project/cuga-agent/pull/973
- chore(deps): upgrade MCP stack and replace archived LangChain adapter by @illeatmyhat in https://github.com/cuga-project/cuga-agent/pull/989
- fix(reflection): resolve model context windows at runtime and size reflection and VERIFY inputs from them by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/1003
- fix(cuga-lite): flag full pages left unpaged after each block (#750) by @Sergey-Zeltyn in https://github.com/cuga-project/cuga-agent/pull/790
- fix: keep roster identity, scopes, delegation, and history consistent by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/990
- feat: add a Colab quickstart notebook and a GitHub star line under cuga start by @segevshlomovIBM in https://github.com/cuga-project/cuga-agent/pull/952
- docs(registry): fix config path and run command in registry server README by @nickv779 in https://github.com/cuga-project/cuga-agent/pull/1037
- fix: handle Unicode output on Windows consoles by @shujaa786 in https://github.com/cuga-project/cuga-agent/pull/1027
- feat(rosters): add a Learning Desk example roster by @cptnm3 in https://github.com/cuga-project/cuga-agent/pull/1032
- feat: run agent code in a remote execd sandbox by @michalu in https://github.com/cuga-project/cuga-agent/pull/1029
- feat(ui): standardize CUGA UX with IBM Carbon by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/1077
- fix: let conversations run in parallel (tracker off by default, prompt cache, DB pools, SQLite wait) by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/1076
- test(load): add a capacity ramp tool and a mock LLM delay by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/1079
- chore: release v0.4.4 by @github-actions[bot] in https://github.com/cuga-project/cuga-agent/pull/1081
New Contributors
- @ruben-salas20 made their first contribution in https://github.com/cuga-project/cuga-agent/pull/983
- @CloudCorpRecords made their first contribution in https://github.com/cuga-project/cuga-agent/pull/965
- @amrita-de made their first contribution in https://github.com/cuga-project/cuga-agent/pull/979
- @Sjain14 made their first contribution in https://github.com/cuga-project/cuga-agent/pull/992
- @mayuriphad made their first contribution in https://github.com/cuga-project/cuga-agent/pull/987
- @nickv779 made their first contribution in https://github.com/cuga-project/cuga-agent
- v0.4.22026-10-16 · 2026-10-16 19:24 UTC
查看更新说明
What's Changed
- chore: move internal notes and small config files out of the repo root by @segevshlomovIBM in https://github.com/cuga-project/cuga-agent/pull/967
- fix(deps): address open Dependabot alerts (docling, langgraph-sdk, datasets, shell-quote, and others) by @haroldship in https://github.com/cuga-project/cuga-agent/pull/971
- docs(readme): modernize enterprise automation overview by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/913
- docs(readme): link apps harness kit and Discord by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/974
- fix(memory): reuse CUGA models and improve memory feedback and listings by @illeatmyhat in https://github.com/cuga-project/cuga-agent/pull/909
- fix(licensing): remove unused GPL packages and preserve notices by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/977
- ci(licenses): add reviewed PR checks and release image scanning by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/978
Full Changelog: https://github.com/cuga-project/cuga-agent/compare/v0.4.1...v0.4.2
- v0.4.02026-10-07 · 2026-10-07 19:27 UTC
查看更新说明
Summary
Release v0.4.0 is a large feature release. CUGA now supports multi-agent work through a new supervisor runtime with an agent registry and a composition UI. The full CugaAgent graph is retired; CugaLite and CugaSupervisor are the two supported agents. Event-driven agents arrive with channels, triggers and NL→Flow arming, including WhatsApp as a direct channel. The supported container image now includes an experimental memory workspace built on Evolve, with retention controls and a management API. CUGA can also run over the Agent Client Protocol (ACP) via stdio. We welcome first-time contributor @anupamamurthi.
On the agent side, CugaLite adds a pre-execute VERIFY gate for code blocks that change data, and tries alternatives before it declares a task impossible. The final answer is now configurable (LLM instructions, a deterministic function, or both). Policies are isolated per agent, so playbooks no longer apply to other agents. A rejected-call guard stops the agent from repeating identical rejected API calls. The LLM layer adds a watsonx Orchestrate (wxo) platform and preserves WatsonX reasoning. Security work removes internal error details from server and events responses, and Dependabot alerts were addressed. Pull requests now require a DCO sign-off.
Upgrade notes
- The full CugaAgent graph is removed (#581). Use CugaLite or CugaSupervisor.
- The
evolveextra now requiresaltk-evolve>=1.5.2. - Pull requests now need a DCO
Signed-off-byline (#897).
What's Changed
Supervisor & multi-agent
- feat(supervisor): multi-agent registry, composition UI, and supervisor runtime by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/433
- feat: retire full CugaAgent graph; keep CugaLite and CugaSupervisor (#580) by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/581
Memory (experimental)
- feat(memory): add experimental Evolve management API by @illeatmyhat in https://github.com/cuga-project/cuga-agent/pull/736
- feat(memory): add manual retention controls by @illeatmyhat in https://github.com/cuga-project/cuga-agent/pull/735
- feat(memory): add experimental workspace to the supported image by @illeatmyhat in https://github.com/cuga-project/cuga-agent/pull/737
Events & channels
- feat(events & channels): event-driven agents — channels, triggers, and NL→Flow arming by @anupamamurthi in https://github.com/cuga-project/cuga-agent/pull/602
- feat(events & channels): Events followup tooling, deploy kit, rosters by @anupamamurthi in https://github.com/cuga-project/cuga-agent/pull/603
- feat(events & channels): WhatsApp as a direct channel (Meta Cloud API) by @anupamamurthi in https://github.com/cuga-project/cuga-agent/pull/605
CugaAgent
- feat(cuga-lite): pre-execute VERIFY gate for mutating code blocks by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/739
- fix(cuga_lite): exhaust alternatives before declaring a task impossible (#704) by @Sergey-Zeltyn in https://github.com/cuga-project/cuga-agent/pull/706
Agent, policy & LLM
- feat(agent): configurable final answer — LLM instructions, a deterministic function, or both (#621) by @segevshlomovIBM in https://github.com/cuga-project/cuga-agent/pull/707
- feat(llm): add wxo platform to LLMManager for watsonx Orchestrate routing by @laredo in https://github.com/cuga-project/cuga-agent/pull/716
- fix(policy): per-agent policy isolation — playbooks no longer bleed across agents (#767) by @offerakrabi in https://github.com/cuga-project/cuga-agent/pull/773
- fix(registry): rejected-call guard — stop re-issuing identical rejected API calls (#599) by @Sergey-Zeltyn in https://github.com/cuga-project/cuga-agent/pull/733
- fix(llm): preserve WatsonX reasoning by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/796
- fix(llm): correct stale RITS registrations — dead Gemma endpoint and 32k Mistral context window by @Sergey-Zeltyn in https://github.com/cuga-project/cuga-agent/pull/725
- v0.3.22026-08-20 · 2026-08-20 15:57 UTC
查看更新说明
Summary
Release v0.3.2 brings major stability and security upgrades to CugaAgent and knowledge ingestion, resolving path-containment vulnerabilities across static routes and trajectory logs alongside Dependabot and CodeQL remediations. Knowledge ingestion is now far more dependable, ensuring that canceled, deleted, or restarted jobs no longer lock filenames or misreport task statuses. The repository also gains a published security policy, and we are excited to welcome first-time contributions from @cuga-bob and @Subhasish1802.
On the execution side, CugaAgent now logs reasoning and code trajectories in strict chronological order while gracefully surviving exit() calls and timeouts without terminating the process or losing local state. Builders get several new configurations, including run receipts for token and timing telemetry, per-run tool caps, pluggable shortlisting (cosine/hybrid), reasoning-effort profiles, and early support for sub-agent spawning (disabled by default). Under the hood, the SDK adds dynamic policy evaluation on invoke results, schema validation for unknown tool arguments, harmony-token handling, and an automatic fallback from json_schema to json_mode.
What's Changed
CugaAgent
- feat(cuga_lite): configurable caps on tool calls per block, run and thread by @segevshlomovIBM in https://github.com/cuga-project/cuga-agent/pull/560
- feat(cuga_lite): record direct LangChain tool calls in ToolCallTracker by @segevshlomovIBM in https://github.com/cuga-project/cuga-agent/pull/562
- feat(cuga-lite): pluggable shortlister with cosine and hybrid strategies (#624) by @segevshlomovIBM in https://github.com/cuga-project/cuga-agent/pull/664
- fix(cuga_lite): graceful bind_tools fallback; detect body-form tool_use_failed by @segevshlomovIBM in https://github.com/cuga-project/cuga-agent/pull/524
- fix(cuga-lite): keep variables addendum out of persisted history (#600) by @Sergey-Zeltyn in https://github.com/cuga-project/cuga-agent/pull/601
- fix: propagate assistant reasoning and record fenced code in CugaLite trajectories by @offerakrabi in https://github.com/cuga-project/cuga-agent/pull/606
- fix(cuga-lite): emit Assistant_reasoning before code/nl trajectory step by @offerakrabi in https://github.com/cuga-project/cuga-agent/pull/609
- fix(cuga-lite): end the block on exit()/SystemExit instead of the process by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/630
- fix(cuga-lite): keep block locals when code execution times out by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/643
- fix(cuga-lite): trim duplicate find_tools schema blocks (#641) by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/644
- fix(cuga-lite): retry once instead of finalizing an unverified "tools unavailable" refusal by @Sergey-Zeltyn in https://github.com/cuga-project/cuga-agent/pull/657
Agent, policy & graph
- feat(agent-spawn): fluid runtime sub-agent spawning (#199) by @Iftach-Shoham in https://github.com/cuga-project/cuga-agent/pull/425
- feat(policy): expose decisions in invoke results by @Subhasish1802 in https://github.com/cuga-project/cuga-agent/pull/492
- feat: validate shortlister tool names with retry (#546) by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/549
- fix(policy): keep NL conflict fallback matches above threshold by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/578
- fix(cuga_graph): handle harmony control tokens when a harmony model is detected by @segevshlomovIBM in https://github.com/cuga-project/cuga-agent/pull/558
- fix: disable agent_spawn by default by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/593
- fix(agent): reject unknown tool args and surface schema validation errors by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/588
- fix(registry): stop unwrapping arguments['params'] in ApiRegistry by @sami-marreed in https://github.com/cuga-proj
- v0.3.12026-08-03 · 2026-08-03 12:08 UTC
查看更新说明
What's Changed
- feat(policies): ToolGuard UI viewer modal and per-policy enable/disable (#419, #421) by @offerakrabi in https://github.com/cuga-project/cuga-agent/pull/426
- knowledge(ui): redesign env-presets panel as Carbon ContainedList by @dolev31 in https://github.com/cuga-project/cuga-agent/pull/383
- feat(rits): direct RITS connections with .env-driven model swapping by @Sergey-Zeltyn in https://github.com/cuga-project/cuga-agent/pull/430
- chore(frontend): retire duplicate WorkspacePanel (#364) by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/431
- fix: deliver HITL response in tool-approval e2e resume helper by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/428
- fix(test): normalize unicode whitespace in tool-approval e2e assertions by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/436
- fix: reject invalid generated Python before sandbox exec by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/434
- fix(watsonx): correct gpt-oss-120b context profile to prevent negative max_tokens by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/437
- feat: add MiniMax M3 provider by @octo-patch in https://github.com/cuga-project/cuga-agent/pull/435
- refactor: split manage_routes into focused submodules by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/429
- fix: confine ingest_knowledge file paths to workspace (CWE-22/73) by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/447
- fix: harden watsonx context budget and skills syntax validation by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/441
- fix(frontend): finalize stream and clear loading state on Stop by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/450
- feat(policy): reuse pre-generated ToolGuard code across environments via policy export/import by @offerakrabi in https://github.com/cuga-project/cuga-agent/pull/443
- fix(llm): only send top_p when explicitly configured by @Sergey-Zeltyn in https://github.com/cuga-project/cuga-agent/pull/464
- fix(knowledge): collection-management & reindex state-machine hardening + tile/chip UX (closes #402 #398 #397 #396 #387) by @dolev31 in https://github.com/cuga-project/cuga-agent/pull/410
- fix(cuga-lite): don't stop mid-task after stating a plan; warn on suspicious tool arguments; correct made-up tool names by @haroldship in https://github.com/cuga-project/cuga-agent/pull/416
- refactor(test): replace run_tests.sh with global pytest entry point by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/440
- refactor: break up ManagePage save logic so each setting saves in its own place by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/465
- docs: point agents at CONTRIBUTING AI issue/PR commands by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/485
- feat: add CODEOWNERS for required path reviews [skip ci] by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/488
- Feature/toolguard generate batch by @offerakrabi in https://github.com/cuga-project/cuga-agent/pull/473
- fix(security): stop false-positives on words like "requests" in tool args by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/489
- feat: slash command for skill invocation with autocomplete + reasoning UX by @illeatmyhat in https://github.com/cuga-project/cuga-agent/pull/235
- fix: route workspace tree to host when sandbox_mode is native/local by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/490
- ci: wire watsonx vars and secrets into github actions jobs by @sami-marreed in https://github.com/cuga-project/cuga-agent/pull/515
- feat(knowledge): inline citations & sources + simplified embeddings config UX by @dolev31 in https://github.com/cuga-project/cuga-agent/pull/468
- fix(browser_planner): supply blank img when vision on but no screenshot by @segevshlomovIBM in https://github.com/c
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
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 · Documentation · Python SDK · Deploy on Kubernetes
CUGA Apps · CUGA Harness Kit · Discord
Apache 2.0 · Configurable Generalist Agent · Built with IBM SiL
English · 简体中文
Quick install
Use Python 3.12 and 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
Set your provider, model, and credentials in .env. See model configuration for supported providers.
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.
Prefer to try it in your browser first? Open the quickstart notebook in Colab.
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 UI, captured from this repository with illustrative Revenue Operations configuration data. Internal endpoints and version labels are examples.
| Set approval policies | Manage specialized agents |
|---|---|
![]() | ![]() |
| 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.
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, the knowledge walkthrough, or the multi-agent examples.
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. |
| Knowledge with citations | Combine shared company documents with conversation uploads and inspect cited sources. Knowledge walkthrough. |
| Reusable agent skills | Package procedures in SKILL.md files and load the relevant instructions when a task needs them. Skills guide. |
| 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. |
| Access control | Configure OIDC sign-in and enable separate chat and management role checks. Authentication setup. |
Develop from source
Use Python 3.12 and uv. uv manages the project environment automatically, so you can run commands with uv run without creating or activating an environment manually.
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:
AGENT_SETTING_CONFIG=settings.openai.toml
OPENAI_API_KEY=your-api-key
MODEL_NAME=your-model-name
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 · Environment example |
Use your own inference endpoint
Point the OpenAI-compatible configuration at your private inference service:
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.
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 · Tool guards · Sandbox configuration
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 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 and connector setup.
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 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 · Memory retention controls · 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, 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 includes a model preloader. |
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.
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:
# settings.toml
[advanced_features]
run_receipt = true
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, reasoning profiles, and tool shortlisting.
Build with the Python SDK
Add your tools and invoke an agent from your application:
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 · CugaSupervisor · Tool integration examples · Durable conversations
Explore further
| Topic | Guide |
|---|---|
| Models, execution modes, and testing | Configuration and development guide |
| Task-specific instruction packs | Agent skills |
| Memory and guidance from previous runs | Evolve integration |
| Agent-level and session-level knowledge | Knowledge demo |
| MCP and OpenAPI integration | Tool registry |
| Expose CUGA to other agents | CUGA as MCP · A2A example · ACP over stdio |
| Event-driven automation | Events service — deployed as a separate service beside CUGA |
| Low-code workflows | Langflow example |
Build with us
Share an enterprise use case, report an issue, or contribute an integration.

