June 18, 2026 — Matteo Merola

Why Multiple Agents Beat One Generalist

Specialized agents with different skills, tools, and personalities outperform one monolithic agent trying to do everything.

The default instinct when building a personal agent is to make one powerful assistant that handles everything: emails, scheduling, research, coding, home automation. You give it all the tools, a long system prompt that covers every use case, and hope the model figures out which hat to wear.

It works — until it doesn't. A 15,000-token system prompt full of conflicting personas and fifty tools creates a context where the model spends most of its reasoning capacity just parsing what it's supposed to be right now. The email-writing agent leaks the casual Telegram tone. The code reviewer starts adding emoji. The research assistant hallucinates tool names from a different skill set loaded three conversations ago.

The specialization argument

The fix is the same one that works in human organizations: specialization. Instead of one agent that does everything, run multiple agents that each do one thing well. Each agent gets:

Context window economics

There's a practical reason beyond clean separation: context window real estate. Every tool definition, every skill description, every line of the system prompt takes tokens. A generalist agent with 50 tools and 12 skills might burn 8,000 tokens before the user even says hello. That's 8,000 tokens the model can't use for actual reasoning about the current task.

A specialized agent with 8 tools and 3 skills might use 2,000 tokens for setup. That leaves dramatically more room for conversation history, retrieved memories, and the chain-of-thought reasoning that actually produces good outputs. You're not just getting a cleaner prompt — you're getting a smarter agent because it has more room to think.

config.yml
agents:
  - slug: work
    name: Atlas
    character: characters/atlas.md
    telegram_token: ${vault:ATLAS_TOKEN}
    skills: [email, calendar, contacts, scheduling]
    tools: [send_email, search_email, list_events, ...]
    email_accounts: [[email protected]]
    calendar_accounts: [work-calendar]

  - slug: dev
    name: Forge
    character: characters/forge.md
    telegram_token: ${vault:FORGE_TOKEN}
    skills: [coding, github, browser]
    tools: [read_file, write_file, edit_file, run_command]
    github_repos: [org/api, org/frontend]

  - slug: personal
    name: Sage
    character: characters/sage.md
    telegram_token: ${vault:SAGE_TOKEN}
    skills: [memory, voice, weather, contacts]
    tools: [remember, recall, search_contacts]
    email_accounts: [[email protected]]

Three agents, each focused. Atlas handles work communications and scheduling. Forge writes and reviews code. Sage is a personal assistant for everyday tasks. They share the same infrastructure — same Docker container, same SQLite databases, same memory system — but each operates with a focused context.

Personality as a feature

This isn't just about technical separation. Different tasks genuinely benefit from different communication styles. A work agent should be professional, concise, and careful about tone — it's drafting emails your colleagues will read. A personal brainstorming agent should be playful, willing to explore tangents, and comfortable saying "that's a weird idea but let's run with it."

In humux, each agent has a character.md file that defines its personality, communication style, and domain knowledge. This isn't a gimmick — it's a system prompt engineering technique. A character file that says "you are a senior DevOps engineer who values brevity and always includes the relevant log line" produces meaningfully different outputs than one that says "you are a helpful assistant." The model adapts its reasoning, not just its tone.

characters/forge.md
# Forge

You are Forge, a senior software engineer.

## Communication style
- Direct, technical, no filler
- Always reference specific files and line numbers
- When reviewing code, lead with the most critical issue
- Use code blocks, not prose descriptions
- If a task is ambiguous, ask one clarifying question
  rather than guessing

## Domain expertise
- Python, TypeScript, infrastructure
- Strong opinions on testing and deployment
- Defaults to the simplest working solution

Group chats: multiple agents, one conversation

The multi-agent pattern gets interesting in group chats. In humux, you can add multiple agent bots to the same Telegram group. Each agent has its own bot identity, so they appear as separate participants. The addressing protocol is simple: mention a bot's name, and only that bot responds. No mention, no response.

This creates a natural workflow. You're in a project group chat with your team. You mention @forge to review a PR. Then mention @atlas to schedule a meeting about the findings. Each agent sees the full group chat history for context, but only responds when addressed. A reply decision gate (a cheap classifier) prevents agents from talking over each other or creating bot-to-bot feedback loops.

The shared infrastructure advantage

Running multiple agents doesn't mean running multiple servers. In humux, all agents share the same process, the same SQLite databases, the same memory system, and the same Docker container. The isolation is logical, not physical. This means:

The mental model is closer to "one brain, multiple roles" than "multiple independent agents." The specialization is in the interface layer — what tools, skills, and personality each role presents — not in the infrastructure.

When to split

Not everything needs its own agent. The rule of thumb: split when the tools, tone, or trust boundary differ. If two tasks use the same tools with the same personality, they belong on the same agent. If a task needs access to sensitive systems (production databases, payment APIs), it should probably be its own agent with tighter permission rules and a more cautious personality.

Start with two agents: one for work, one for personal. Add more when you notice friction — when the generalist's system prompt gets long enough that it starts forgetting instructions, when the tone bleeds between contexts, or when you want different permission levels for different categories of actions. The infrastructure supports it; the split is just a new entry in the config file and a new character markdown file.

humux supports multiple specialized agents out of the box, each with its own identity, tools, and personality. Try it →