Agents
Agents are specialist sub-agents that Pandora can route tasks to. When a user asks a question that matches an agent’s expertise, the main agent automatically delegates — no routing configuration needed.
Unlike tools, agents don’t contain executable code. They are pure data: an identity (name, description) and instructions (system prompt). The system handles execution, model selection, and tool access.
Agent Definition
Each agent entry point exports a named agent object:
import type { Agent } from '@pandorakit/sdk/agents'
export const agent: Agent = {
id: 'research',
name: 'Deep Research',
description: 'Thorough, multi-step research on complex topics',
instructions: `You are a deep research specialist. Your job is to thoroughly
investigate complex questions by conducting multiple rounds of web searches,
cross-referencing sources, and synthesizing your findings.
When answering:
- Cite all sources with URLs
- Distinguish between well-established facts and claims with limited sourcing
- Note any conflicting information you found`,
}Manifest Fields
The provides.agents section of your manifest accepts an array of entries:
{
"provides": {
"agents": [
{
"entry": "./src/research.ts",
"useTools": ["@pandorakit/tavily-search:tavily_search"],
"modelTools": ["search"]
}
]
}
}| Field | Description |
|---|---|
entry | Path to the file that exports the agent definition |
useTools | Tool IDs from the global registry. Use fully-qualified IDs: pluginId:toolId |
modelTools | Model-native capability keys (e.g. "search" for provider’s built-in web search) |
Enable It
Users control agents from the Plugins page — toggling the plugin on/off and optionally configuring per-agent model overrides.
Routing
Pandora reads each agent’s description and decides whether to handle a request directly or hand it off to a specialist. The routing decision is made by the LLM, not by rules — adding a new specialist is just installing a plugin.
With zero agents registered, Pandora handles all requests directly — behavior is unchanged from a standard setup.
The quality of your agent’s description directly affects how well routing works:
// Good — specific about what it does
description: 'Thorough, multi-step research on complex topics using web search'
// Bad — too vague
description: 'A helpful assistant'Include the kinds of tasks the agent handles and the tools it has access to (conceptually, not by ID).
Model Overrides
Users can configure a per-agent model override on the Plugins page. This lets them use a different (potentially cheaper or faster) model for specific specialists.
Reference
import type { Agent } from '@pandorakit/sdk/agents'Agent
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Unique agent identifier |
name | string | Yes | Human-readable display name |
description | string | Yes | What the agent does (used for routing decisions) |
instructions | string | Yes | System instructions for the agent |
useTools | string[] | No | Tool IDs from the global registry (set from manifest at load time) |
modelTools | string[] | No | Model-native tool keys like 'search' (set from manifest at load time) |
useTools and modelTools are typically declared in the manifest rather than in the agent code.