CUGA Agent v0.3.0
A major step forward for multi-agent orchestration, policy enforcement, knowledge, and enterprise integrations — with stronger reliability across WatsonX, MCP, and the SDK.
Highlights
- ToolGuard — Runtime policy enforcement for tool calls, plus UI-driven guard generation
- Supervisor & A2A — Full policy runtime (approval + output formatting), A2A v0.3 exposure, two-CUGA demo, and HITL round-trip
- Skills & memory — Configurable skills root, workspace uploads, SDK skill discovery, and semantic user-fact memory in CugaLite
- Knowledge — Faster ingest, OCR, session isolation, and live UX improvements
- Enterprise-ready — WatsonX context fixes, improved AI config, configurable LLM timeouts, and multi-user context for Evolve
New features
Agents & orchestration
- Supervisor delegation, load tests, and stream concurrency improvements — #326 (@sami-marreed)
- Full supervisor policy runtime — Tool approval and output formatter — #349 (@sami-marreed)
- A2A v0.3 — Expose CUGA over A2A with a working two-CUGA demo — #323 (@laredo)
- A2A human-in-the-loop — Approval round-trip for the simple runner — #361 (@laredo)
- Sandbox-aware execution and Carbon side panel refresh — #225 (@sami-marreed)
- Semantic memory — User facts for CugaLite — #180 (@gaodan-fang)
ToolGuard & policies
- ToolGuard runtime enforcement for tool calls — #329 (@offerakrabi)
- Generate tool guards from the UI — #370 (@offerakrabi)
Skills & SDK
- Configurable skills root, workspace uploads, and SDK skill discovery — #366 (@sami-marreed)
- Token usage tracking in the CUGA SDK for trajectory support — #236 (@haroldship)
Knowledge
Configuration & integrations
- Configurable LLM HTTP timeouts — #346 (@sami-marreed)
- Multi-user context (
user_id,namespace_id,session_id) propagated to Evolve MCP — #194 (@gjt-prog) - Improved WatsonX AI configuration — #200 (@Tissandier)
Examples & documentation
- Travel Agent — Multi-agent corporate travel planning demo — #201 (@offerakrabi)
- Knowledge demo example — #156 (@dolev31)
- README — Date AppWorld and WebArena #1 benchmark claims — #348 (@sami-marreed)
Reliability & bug fixes
WatsonX & LLM
- Resolve WatsonX context window overflow (#189) — #207 (@offerakrabi)
- Honor TOML
temperature/top_p; add sampling-config INFO log — #405 (@Sergey-Zeltyn) - Policy conflict resolution uses
json_schemafor structured output (gpt-oss / WatsonX) — #414 (@segevshlomovIBM) - Default WatsonX model to
openai/gpt-oss-120b— #423 (@segevshlomovIBM)
MCP & tools
- Fix missing MCP server authentication for SSE transport — #208 (@Tissandier)
- Regression tests for SSE transport auth (#191) — #234 (@offerakrabi)
- Sanitize dashed MCP tool names to valid Python identifiers — #233 (@offerakrabi)
- Propagate auth query params to MCP transport URLs — #345 (@sami-marreed)
- Include nested tool schemas in code-agent prompt — #237 (@offerakrabi)
- Cap
bind_toolscount and shortlist over the limit — #203 (@haroldship)
CugaLite & execution
- Recover code from unclosed
```pythonfences — #252 (@haroldship) - Reset
task_todosstate on fresh conversation — #315 (@Sergey-Zeltyn) - Serialize pandas DataFrame/Series and numpy scalars in variable collector — #224 (@Sergey-Zeltyn)
- Normalize numpy types at producer boundaries for checkpointing — #341 (@sami-marreed)
- Configurable sandbox code-execution timeout (default 30s) — #365 (@Sergey-Zeltyn)
- Serialize ToolGuard objects before returning generation response — #409 (@offerakrabi)
Supervisor, SDK & UI
- Expose A2A subagent endpoint in
/api/config/subagents— #339 (@syhcode) - Handle Pydantic model iteration in
_agent_card_description— #308 (@syhcode) - SDK HITL resume and tool-approval denial crash — #380 (@sami-marreed)
- Fall back to
base_toolsinChatAgent.execute_toolwhentoolsis None — #340 (@sami-marreed) - Show Carbon loading indicator during pre-stream window — #265 (@nir-mashkif)
- Gate browser planner multimodal content on per-model vision support — #251 (@haroldship)
Policies, tracing & evaluation
- Load
.cugapolicies in demo mode — #223 (@offerakrabi) - Propagate Langfuse callbacks to nested LLM calls — #277 (@haroldship)
- Make
TraceScopedLangfuseCallbackHandleroverride reachable — #358 (@haroldship) - Skip Langfuse retry loop when credentials are missing — #328 (@Sergey-Zeltyn)
Performance
- Default to planning on any CugaLite task with dependent steps — #331 (@Sergey-Zeltyn)
- Knowledge ingest performance improvements — #352 (@dolev31)
- Supervisor delegation and stream concurrency optimizations — #326 (@sami-marreed)
Security
- Bump Playwright to ≥1.59.0 (CVE-2025-9611, CVE-2025-59288) — #212 (@haroldship)
- Remediate Dependabot alerts — #344 (@sami-marreed)
- Resolve high-severity Dependabot alerts; drop
milvus-lite— #393 (@sami-marreed)
Architecture & maintenance
- Extract shared agent logic into
cuga_agent_coremodule — #250 (@sami-marreed) - Remove dead/unused backend files — #298 (@sami-marreed)
- Remove dead code from frontend workspaces — #300 (@sami-marreed)
- Replace loguru
%s/%dformat strings with f-strings — #389 (@Maqbool61) - E2E test suite for skills components — #232 (@Iftach-Shoham)
- Reduce Windows stability tests to a single smoke case — #424 (@sami-marreed)
New contributors
First contributions to CUGA — thank you!
| Contributor | PR |
|---|---|
| @Tissandier | #208 |
| @nir-mashkif | #265 |
| @syhcode | #308 |
| @laredo | #323 |
| @Iftach-Shoham | #232 |
| @Maqbool61 | #389 |
| @segevshlomovIBM | #414 |
Full changelog: v0.2.28...v0.3.0