Skip to content

Add dynamic subagent delegation and Tavily web search - #100

Merged
antiv merged 1 commit into
mainfrom
claude/changelog-unreleased
Sep 7, 2026
Merged

Add dynamic subagent delegation and Tavily web search#100
antiv merged 1 commit into
mainfrom
claude/changelog-unreleased

Conversation

@antiv

@antiv antiv commented Sep 7, 2026

Copy link
Copy Markdown
Owner

Summary

This PR introduces two new features to MATE:

  1. Dynamic subagent delegation — orchestrator agents can now spawn ephemeral subagents and run them in parallel within a single turn. Subagents execute in-memory via InMemorySessionService and an ADK Runner, create no database rows, and are equipped only with tools needed for their subtask. Only distilled results return to the parent, keeping raw search and tool output out of the root agent's context window. Token usage is recorded against the parent session and user. This feature is configurable per agent from the dashboard.

  2. Real-time web search via Tavily API — the google_search tool now uses the Tavily API when TAVILY_API_KEY is set, and falls back to DuckDuckGo when the key is not provided.

Changes Made

  • CHANGELOG.md — Added unreleased section documenting both features and reference to documents/DYNAMIC_SUBAGENTS.md
  • .env.example — Added TAVILY_API_KEY configuration with fallback behavior documentation
  • CLAUDE.md — Added TAVILY_API_KEY to the environment variables reference table

Implementation Notes

  • Subagent delegation is fully configurable from the dashboard per agent
  • Web search gracefully degrades to DuckDuckGo if Tavily API key is not set
  • Token usage tracking for subagents is attributed to the parent session and user
  • See documents/DYNAMIC_SUBAGENTS.md for detailed feature documentation

https://claude.ai/code/session_01ToCUNy2SqwvfTq4a6xfSk1

Features are accumulating toward a release whose timing is not decided yet,
so the changelog gets an Unreleased section rather than a version. That is
the Keep a Changelog convention this file already declares, and it avoids
repeating what happened between 1.0.9 and 1.1.0: four months of work
reconstructed from git history after the fact, and invisible to anyone
watching in the meantime. Naming a version becomes a rename plus a date
whenever the release is called.

Covers the dynamic subagent delegation tool and the switch of google_search
to Tavily with a DuckDuckGo fallback, both merged in #99.

The release workflow is unaffected: its awk matches a specific version
heading and stops at the next one, so an Unreleased section above cannot
leak into release notes. Verified against both existing versions, and the
tag trigger is v*, which Unreleased cannot match.

Also documents TAVILY_API_KEY. tavily-python is already a declared
dependency and the search path reads the variable, but nothing told anyone
it exists — so google_search silently used the DuckDuckGo fallback with no
hint that a key would change that.

865 tests, OK.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ToCUNy2SqwvfTq4a6xfSk1
@antiv
antiv merged commit 84a228e into main Sep 7, 2026
1 check passed
@antiv
antiv deleted the claude/changelog-unreleased branch September 7, 2026 14:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants