- Three communication modes for
send_message_to_agent:notify— fire-and-forget, one-way announcementtask_delegate— delegate work and get results back asynchronously viaon_messagetriggerconsult— synchronous question-reply (original behaviour)
- Feature flag: controlled at the tenant level via Company Settings → Company Info → A2A Async toggle (default: OFF)
- When disabled, the
msg_typeparameter is hidden from the LLM so agents only see synchronous consult mode - Security: chain depth protection (max 3 hops), regex filtering of internal terms, SQL injection prevention
- Performance: async wake sessions use the agent's own
max_tool_roundssetting (default 50)
- Base64 image markers are now persisted to the database at write time
- Chat UI correctly strips
[image_data:]markers and renders thumbnails - Fixed chat page vertical scrolling (flexbox
min-height: 0constraint) - Removed deprecated
/agents/:id/chatroute
- New
Exa Searchtool — AI-powered semantic search with category filtering - New standalone search engine tools: DuckDuckGo, Tavily, Google, Bing (each as own tool)
- Drag-and-drop file upload across the application
- Chat sidebar polish: segment control, session items styling
- Agent-to-agent sessions now visible in the admin "Other Users" tab
- DingTalk org sync rate limiting to prevent API throttling
- Tool seeder:
parameters_schemanow correctly included in new tool INSERT - Unified
msg_typeenum references across codebase - Docker access port corrected to 3008
- A2A session now shows both sides of the conversation: when a target agent is woken via
notifyortask_delegate, its reply is now mirrored into the shared A2A chat session so the full conversation is visible in the admin Other Users tab - Removed hardcoded 2-round tool call limit for A2A wake invocations: agents were hitting the limit before completing basic tasks; they now use their own configurable
max_tool_roundssetting (default 50) - Fixed message loading order: sessions with many messages (e.g. long-running A2A threads) were only showing the oldest 500 messages; now correctly loads the most recent 500
Database migration required. Run
alembic upgrade headsto add thea2a_async_enabledcolumn.
git pull origin main
# Run database migration
docker exec clawith-backend-1 alembic upgrade heads
# Rebuild and restart
docker compose down && docker compose up -d --buildgit pull origin main
# Run database migration
alembic upgrade heads
# Rebuild frontend
cd frontend && npm install && npm run build
cd ..
# Restart serviceshelm upgrade clawith helm/clawith/ -f values.yaml
# Run migration job for a2a_async_enabled column- The A2A Async feature is disabled by default. No behaviour changes until explicitly enabled.
- The
a2a_async_enabledcolumn defaults toFALSE, so existing tenants are unaffected.