Conversation
Move CrewAI, Google ADK, LangGraph, OpenAI Agents and Claude Agent SDK onto shared manifest helpers so every integration emits only AgentManifest keys, with instructions, tools and model populated where the framework declares them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codeowners resolved asResolved from the full PR diff against |
Dependency direction analysis📈 Existing violations got worse3 pre-existing violation(s) increased in severity (e.g. their target became more depended-on, or got pulled into an import cycle), though the edge itself isn't new:
|
Circular import analysis
|
❌ ErrorsYour PR has failed checks. Please review the issues below and take necessary action before merging. 🚦 1 Pipeline job failed
ℹ️ InfoNo other issues found (see more)🧪 All tests passed Useful? React with 👍 / 👎 This comment will be updated automatically if new data arrives.🔗 Commit SHA: 08b38cb | Docs | View more details | Give us feedback! |
Description
Standardizes the
agent_manifestemitted on agent spans across CrewAI, Google ADK, LangGraph, OpenAI Agents and Claude Agent SDK, so every integration reports the same keys (AgentManifest) in the same shapes, and instructions, tools and model are populated wherever the framework declares them.Shared helpers in
_integrations/agent_manifest.py(build_agent_manifest,instruction_fields,normalize_tool,filter_model_settings,config_value,as_str) generalize what pydantic_ai and the manual path already did: section-isolated building, an allowlist for model settings, a JSON-native result, and callables recorded by name rather than called orstr()-ed. pydantic_ai moves onto them with no output change.Per integration:
model_settingsis allowlisted (it previously shippedextra_headers/extra_body). Hosted tools ship only declared config (no MCP headers/URL, no client objects). Callable instructions and stored prompts go toextra_instructions. Addscapabilities(MCP servers),data_contracts(output_type) andagent_settings.descriptionmaps tohandoff_description. Addssystem_prompts,model_settings(fromgenerate_content_config), tool parameters,data_contracts,handoffs(sub_agents), guardrails (before-model/tool callbacks) andagent_settings. Removesmodel_configuration(it was pydantic's own config) andsession_management(per-run values).instructionsis goal plus backstory. Tool parameters come fromargs_schema.max_iterand code-execution settings move toagent_settings(fixescode_execution_permissionsbeing overwritten). CrewAI's injected stop words are not reported.create_react_agent(model="gpt-4o")no longer raises on theprovider:modelsplit. The cached manifest is no longer mutated by a run's config.recursion_limitmoves toagent_settings,dependencies(run input keys) is removed, and tools are normalized.instructions(system_prompt, including presets),capabilities(MCP servers, without per-run status),handoffs(agents),guardrailsandagent_settings. Removesdependencies/max_iterations.Every key web-ui reads (
model_provider,handoff_description, CrewAI's{allow_delegation}handoffs) is kept.Supersedes #19533 (callable ADK instructions now ship by name in
extra_instructions;str(fn)would change on every deploy).Testing
tests/llmobs/test_agent_manifest_integrations.py: every integration emits only schema keys, round-trips through JSON, and is identical across rebuilds. Also covers callable instructions (never invoked), ADK string models, LangGraph model strings without a colon, cache isolation, and secret-bearing OpenAI settings and tools.Risks
Manifest keys change shape for existing integrations (listed above). Keys web-ui reads are unchanged; removed keys are not read anywhere in web-ui. Older library versions in the matrix were not run locally.
Additional Notes
CrewAI instructions use the interpolated goal and backstory (as before), so they change when kickoff inputs change. The pre-interpolation values live on private attributes that CrewAI does not preserve reliably across crew copies.
🤖 Generated with Claude Code