microsoft/semantic-kernel · error · ValueError

All members must have a description.

Error message

All members must have a description.

What it means

MagenticOrchestration feeds each member's description into the orchestrator's task-ledger and progress-ledger prompts so the model knows who can speak. A member with description=None cannot be advertised, so construction refuses it. This is enforced in addition to the base class's non-empty members check.

Source

Thrown at python/semantic_kernel/agents/orchestration/magentic.py:797

        """Initialize the Magentic One orchestration.

        Args:
            members (list[Agent]): A list of agents.
            manager (MagenticManagerBase): The manager for the Magentic One pattern.
            name (str | None): The name of the orchestration.
            description (str | None): The description of the orchestration.
            input_transform (Callable | None): A function that transforms the external input message.
            output_transform (Callable | None): A function that transforms the internal output message.
            agent_response_callback (Callable | None): A function that is called when a response is produced
                by the agents.
            streaming_agent_response_callback (Callable | None): A function that is called when a streaming response
                is produced by the agents.
        """
        self._manager = manager

        for member in members:
            if member.description is None:
                raise ValueError("All members must have a description.")

        super().__init__(
            members=members,
            name=name,
            description=description,
            input_transform=input_transform,
            output_transform=output_transform,
            agent_response_callback=agent_response_callback,
            streaming_agent_response_callback=streaming_agent_response_callback,
        )

    @override
    async def _start(
        self,
        task: DefaultTypeAlias,
        runtime: CoreRuntime,
        internal_topic_type: str,
        cancellation_token: CancellationToken,

View on GitHub (pinned to c028a0c7dc)

Solutions

  1. Set a concise, role-specific description on every member before constructing MagenticOrchestration.
  2. Validate members programmatically before construction (see defense validation code).
  3. Use distinct descriptions that match each agent's name and purpose to also improve speaker selection.

Example fix

// before
agent = ChatCompletionAgent(name="Researcher")  # description defaults to None
orch = MagenticOrchestration(members=[agent], manager=manager)  # raises

// after
agent = ChatCompletionAgent(
    name="Researcher",
    description="Researcher: finds and summarizes information.",
    service=service,
)
orch = MagenticOrchestration(members=[agent], manager=manager)
Defensive patterns

Strategy: validation

Validate before calling

# Validate descriptions before constructing MagenticOrchestration
missing = [m.name for m in members if not getattr(m, "description", None)]
if missing:
    raise ValueError(f"These members lack a description: {missing}")
orch = MagenticOrchestration(members=members, manager=manager)

Type guard

def all_members_described(members) -> bool:
    return all(getattr(m, "description", None) for m in members)

Prevention

When it happens

Trigger: Constructing `MagenticOrchestration(members=[...], manager=...)` where any agent in members has `description is None`. Agents default to description=None unless explicitly set.

Common situations: Creating ChatCompletionAgent/AzureAssistantAgent instances and forgetting the description argument. Reusing agents built for a non-Magentic orchestration (group_chat, sequential) where descriptions were optional.

Related errors


AI-assisted analysis of microsoft/semantic-kernel@c028a0c7dc (2026-08-13). Data as JSON: /api/errors/b30b68095fa0c6cb. Report an issue: GitHub.