What Is an Agent?
An agent combines identity with capability. At its core, an agent carries:- A persona — a human-readable name and description that surfaces in logs, dashboards, and handoff messages.
- A system prompt — instructions that shape the agent’s tone, role, and behavior during a conversation.
- Knowledge bases — indexed document collections the agent retrieves from at runtime.
- Tools — external API calls or platform capabilities the agent can invoke.
- Policies — guardrails that run at defined enforcement points to control what the agent says and does.
The Revision Model
Every agent has two layers of identity:| Layer | Mutability | Purpose |
|---|---|---|
| Agent record | Mutable | Stores name, description, and a pointer to the active revision |
| Revision | Immutable once published | Stores system prompt, KB refs, tool refs, policy refs, and model settings |
POST /v1/agents/revisions/{revision_id}/publish, the revision is frozen — its system_prompt, knowledge_base_refs, tool_refs, and policy_refs can no longer be changed. To update agent behavior, you create a new draft revision and publish that instead.
The agent’s
active_revision_id field always points to the currently published revision. Any conversation started after a new revision is published will use the new behavior — existing conversations remain pinned to the revision that was active when they were created.Revision lifecycle
Create a draft revision
Call
POST /v1/agents/{agent_id}/revisions to create a new draft. The revision starts in draft status.Configure the revision
Set the
system_prompt, attach knowledge_base_refs, tool_refs, policy_refs, and model_settings on the draft. All fields remain editable at this stage.Publish the revision
Call
POST /v1/agents/revisions/{revision_id}/publish. The revision status moves to published and becomes immutable. Feather updates the agent’s active_revision_id automatically.Key Fields
Agent-level fields
Agent-level fields
| Field | Type | Description |
|---|---|---|
name | string | Display name for the agent (e.g. "Support Bot") |
description | string | Internal description of the agent’s purpose |
active_revision_id | string | Points to the currently published revision |
team_id | string | Optional — the team this agent belongs to |
Revision-level fields
Revision-level fields
| Field | Type | Description |
|---|---|---|
system_prompt | string | Core instruction set for the agent’s LLM |
knowledge_base_refs | array | IDs of knowledge bases the agent searches at runtime |
tool_refs | array | IDs of tools the agent may call |
policy_refs | array | IDs of policies enforced on this revision |
model_settings | object | LLM provider, model name, temperature, max tokens |
channel_specific_config | object | Per-channel overrides (e.g. shorter responses on SMS) |
channel_specific_config
Some behaviors need to differ by channel. For example, you might want a more concise response format for SMS than for API or email. The channel_specific_config field accepts a map keyed by channel type (api, sms, voice, email), letting you override system_prompt additions, response length hints, or enabled tool sets per channel without creating a separate agent.
Platform Tools
Beyond the custom tools you attach viatool_refs, Feather provides a set of platform tools — built-in capabilities available to every agent with no additional configuration. Platform tools appear in the agent’s tool list at runtime and can be invoked like any other tool.
transfer_call
Transfers the current conversation to another agent or a human queue. Accepts a target agent ID or queue ID and an optional handoff message.
end_session
Gracefully closes the conversation, sets status to
closed, and emits a configurable farewell message to the end user.send_message
Sends a proactive message to the end user mid-turn, useful for streaming updates during long-running tool calls.
request_approval
Pauses the conversation and creates an approval request, surfacing it to a human reviewer before proceeding.
How Agents Map to Conversations
When you create a conversation (viaPOST /v1/conversations), you specify an agent_id. Feather resolves the agent’s active_revision_id at that moment and pins it to the conversation. This means:
- Subsequent changes to the agent or its revisions do not affect the in-flight conversation.
- Every turn in the conversation runs against the same frozen revision.
- You can inspect
pinned_revision_idon the conversation object to see exactly which revision is active.
Teams
You can group multiple agents into a team to enable multi-agent routing. A team defines a routing strategy and a set of member agents. Feather supports two routing modes:Supervisor routing
A designated supervisor agent evaluates each incoming turn and delegates to the most appropriate member agent. Ideal when you have specialized agents (billing, technical, general) and want intelligent routing.
Swarm routing
All member agents are eligible to respond, and Feather selects the agent best suited to the current turn based on capability matching. Useful for load distribution across agents with similar roles.
team_id on the agent record. A conversation can be assigned to a team rather than a specific agent — Feather handles routing internally and updates assigned_agent_id on the conversation object as routing decisions are made.
Next Steps
Build Your First Agent
A step-by-step guide to creating an agent, configuring a revision, and running your first conversation.
Agents API Reference
Full reference for agent and revision endpoints, including request schemas and response examples.