# Stop asking one AI to do every job — specialist subagents on the desktop

If you have ever watched a single chat thrash between “research this lead,” “rewrite the email,” and “verify the claims,” you already know the failure mode: one generalist context, one overloaded prompt, and mediocre results on every step.

Specialist work needs specialist agents. That is what **Subagents** in [aiFetchly](https://www.aifetchly.com) are for.

## The problem: one brain, too many hats

A general chat is great for brainstorming. It is a poor fit when you need:

- a **researcher** that only reads public sources and returns structured JSON with confidence scores
- a **formatter** that only reshapes output and never invents facts
- a **verifier** that checks claims against your Knowledge Library
- a **coordinator** that delegates instead of doing everything itself

When you force one session to do all of that, context gets noisy, tool permissions get too broad, and you lose the ability to tune model, tools, and runtime limits per role.

## What Subagents are

In aiFetchly, a **subagent** is a reusable specialist definition: a focused role, system prompt, allowed tools, optional model preference, and runtime limits. You do not usually invoke them by hand. At the start of a chat, aiFetchly injects an **Available AiFetchly agents** list into the main AI’s context. When a task fits, the main AI calls **`run_subagent`** with that agent’s ID. The specialist runs with its own prompt, tool allow-list, and limits, then returns the result to the parent chat.

Docs: [Subagents](https://docs.aifetchly.com/docs/ai-outreach/subagents)

## Built-in Lead Researcher

aiFetchly ships with one built-in specialist:

- **Lead Researcher** (`agent-lead-researcher`) — gathers public business context for a lead (industry, summary, products, signals) using search-scraper and Knowledge Library tools, and returns structured JSON with source URLs and a confidence score. It is **read-only**.

That alone is a useful pattern: keep outreach writing in the main chat, and push fact-gathering into a bounded researcher that cannot wander into write tools.

## Four sources of agents

| Source | What it means |
|---|---|
| **Built-in** | Shipped with aiFetchly; read-only |
| **Plugin** | Installed by a plugin; enable/disable per agent |
| **Workspace** | Loaded from `.aifetchly/agents/` once the workspace is trusted |
| **Manual** | Created in the UI, or as Markdown under `~/.aifetchly/agents/` |

Open **System Setting → Manage Subagents** to search, filter by source/status, inspect health, and enable or disable agents.

## Create a manual specialist in a few minutes

1. **Add Subagent**
2. Name + stable **ID slug** (locked after save)
3. Description (when the main AI should pick it)
4. Mode: `coordinator` | `specialist` | `verifier` | `formatter`
5. Self-contained **system prompt**
6. Comma-separated **allowed tools**
7. Optional default model + max tool calls / runtime / continue turns
8. Optional **output schema** JSON
9. Save and leave it enabled

Plugins can ship the same shape under an `agents/` directory (namespaced IDs like `lead-pack:researcher`). Security-sensitive plugin fields are ignored; allowed tools are still intersected with runtime policy.

## Why this fits a local-first desktop agent

aiFetchly is a [local-first desktop AI agent](https://www.aifetchly.com/features) for research and outreach workflows. Subagents keep that model honest:

- **Narrow tools** per role instead of one god-mode chat
- **Runtime caps** so a researcher cannot burn unlimited turns
- **Structured output** so the parent AI gets something machine-usable
- **Plugin + workspace + manual** sources so teams can share specialists without rewriting prompts every day

## Try it

- Product: https://www.aifetchly.com  
- Features: https://www.aifetchly.com/features  
- Subagents docs: https://docs.aifetchly.com/docs/ai-outreach/subagents  
- Getting started: https://docs.aifetchly.com/docs/getting-started/introduction  
- Install: https://docs.aifetchly.com/docs/getting-started/installation  
- GitHub: https://github.com/robertzengcn/aiFetchly  

Stop asking one AI to do every job. Give the desktop agent specialists — and let `run_subagent` do the handoff.