Core Automation  /  Services  /  AgentWorkforce architecture
In production · battle-tested · open architecture

AgentWorkforce.
A multi-agent
architecture for
real businesses.

AgentWorkforce is our production-tested platform for building fleets of intelligent agents. A triage agent routes work to specialists, each focused on one job. Below, we walk through how AgentWorkforce runs a complete marketing department — from competitive intel to campaign launches — as a real example of what an AI workforce looks like.

01 — Architecture

Four layers. One processing path.

Every input — a chat message, a webhook, a scheduled job, an alert — travels the same path through the same layers. That uniformity is what makes the platform legible.

Fig.01 · AgentWorkforce stack top → bottom
CLI
Chat
Webhook
Cron
Heartbeat
Hooks
│ │ │ │ │ │
L01 · GATEWAY
Dispatcher + Event Bus + Session Manager
Channel-agnostic envelopes, FIFO queue, pub/sub events.
│
L02 · CORE
Multi-Agent Router
Triage agent + specialist fleet. Each agent has its own prompt, history, and skill set.
│
L03 · PROVIDERS
LLM Bus · Three-tier strategy
Each agent declares its tier. Auto fallback & retry on degradation.
│
L04A
Skill Engine
YAML skills · inter-skill SDK · hot reload
L04B
Memory
SQLite · vector + BM25 · persona files
L04C
Security
OS keychain · sanitizer · scopes
// Identical layering on every request. Differences live in the agent and skill configs.
Trace of one request
  1. →
    Input arrives via channel adapter.

    CLI typed text, Telegram message, GitHub webhook, scheduled cron tick — each wrapped in a standard Envelope with source metadata and session ID.

  2. →
    Dispatcher publishes MESSAGE_RECEIVED.

    Event bus subscribers act (logging, audit, hooks). The dispatcher continues, drained from a FIFO queue.

  3. →
    Memory retrieval runs.

    Hybrid search across the persistent memory store. Relevant snippets, persona context, and prior decisions land in the system prompt.

  4. →
    Triage agent inspects the request.

    Calls a built-in route_to_agent tool. Specialist is selected; its system prompt and skill set become active for the next turn.

  5. →
    Specialist runs the tool loop.

    LLM at its declared tier; skill engine executes tool calls in a subprocess; results feed back. Loop continues until the agent finalizes a response.

  6. →
    Response routes back to the original channel.

    Sanitizer scrubs secrets. Channel adapter formats (with Telegram chunking, CLI rendering, etc.). The session is persisted; the next turn picks up where this one left off — from any channel.

The point: a user request, a webhook from your billing system, and a cron-scheduled overnight cleanup all run on the same loop, with the same memory, in the same agents — only the channel and trigger differ.

— System topology

Everything, in one view.

Channels at the top. Triage in the middle. Specialists branching out. Foundation underneath. The whole system in one frame.

CHANNELS · ANY INPUT CLI Slack / Teams Webhook Cron Heartbeat Hooks GATEWAY Dispatcher · Event Bus · Session Manager Channel-agnostic envelopes · FIFO queue · pub/sub events CORE · TRIAGE CMO · SONNET · TRIAGE CMO MARKETING SPECIALISTS OPUS Strategist SONNET Copywriter SONNET SEO Analyst SONNET Social Media OPUS Analytics OPUS Competitive FOUNDATION SKILLS Marketing skill library analytics · seo · social · ads · email · brand MEMORY Brand voice · campaign history policies · audience profiles · prior decisions SECURITY Keychain · sanitizer · scopes no auto-send · approval queues

// The AgentWorkforce platform, populated as a marketing department. Same architecture, different roster.

02 — The marketing department

Twelve specialists,
one head of marketing.

Here's what an AgentWorkforce-powered marketing department looks like. The CMO agent fields every request and routes it to the specialist who owns that work. Each specialist has its own playbook, its own skill set, and the right model for the job.

— Tier 0 · Triage
SONNET · CMO

CMO

The marketing department's front door. Reads every incoming request — from a Slack message to a scheduled report — and routes it to the right specialist.

1 tool · route_to_agent

Why a CMO agent? Without one, every specialist has to know about every channel and every other specialist — the system gets slow and expensive. The CMO stays cheap and fast (Sonnet, lookup only); the experts stay focused on their craft.

— Content & Brand
OPUS · STRATEGIST

Content Strategist

Owns the editorial calendar and campaign briefs. Decides what gets written, when, and to which audience.

5 skills · calendar, briefs, audience …
SONNET · WRITER

Copywriter

Drafts blog posts, landing pages, ads, email sequences. Format-aware. Hands drafts off for brand review.

4 skills · drafts, research, vault …
SONNET · BRAND

Brand Voice

Reviews every public-facing draft against the brand guide. Returns a voice score and specific edits.

3 skills · brand-check, style, vault
OPUS · CREATIVE

Creative Brief

Writes briefs for designers, video producers, and freelancers. Includes objective, audience, deliverables, and references.

3 skills · briefs, references, calendar
— Distribution & Channels
SONNET · SOCIAL

Social Media

Channel-culture aware. Adapts copy to LinkedIn, X, Instagram, etc. Always queues for human approval — never auto-posts.

4 skills · social-publisher, calendar …
SONNET · EMAIL

Email Marketing

Drafts campaigns, builds segments, sets up A/B tests, analyzes results. Sends are gated by approval.

4 skills · email-tool, crm, analytics
SONNET · PAID

Paid Media

Generates ad creative variants, monitors budget pacing, builds weekly performance reports across Google & Meta.

4 skills · ad-platform, creative, reports
SONNET · PR

PR & Comms

Drafts press releases, builds and maintains media lists, monitors press mentions, schedules journalist outreach.

4 skills · press-monitor, media-list …
— Intelligence & Insight
SONNET · SEO

SEO Analyst

Keyword research, SERP tracking, on-page optimization recs. Pairs with Copywriter on every draft.

4 skills · seo-research, serp, audit
OPUS · ANALYTICS

Analytics

Pulls metrics from GA, HubSpot, Mixpanel. Builds attribution stories, ROI analyses, and weekly dashboards.

5 skills · analytics-pull, attribution …
OPUS · INTEL

Competitive Intel

Runs nightly. Scrapes competitor blogs, releases, ad libraries, and pricing pages. Flags anything that changed.

4 skills · competitor-monitor, scrape …
OPUS · CUSTOMER

Customer Insights

Synthesizes survey results, support tickets, sales-call transcripts. Turns qualitative feedback into themes for Strategy.

4 skills · crm-lookup, transcripts …

// This is the pattern, not a template. In your engagement we map your marketing org — with your channels, your CRM, your brand guide, your approval rules.

— Anatomy of one agent

Five fields. That's it.

Every agent is defined declaratively in agents.yaml. Adding a new specialist — or tweaking how the Copywriter handles a new format — is editing a config file. No rebuild.

# agents.yaml — the Copywriter specialist
- id: copywriter
  name: "Copywriter"
  description: "Drafts blog posts, ads, emails, social copy"
  model: claude-sonnet-4-5      # tier choice, explicit
  skills:
    - content-calendar
    - brand-voice-check
    - seo-research
    - vault
  system_prompt: |
      # You draft for Acme Co.
      # Read BRAND.md before any new format.
      # Always pair with the SEO agent on web content.
      # Drafts go to /drafts/YYYY-MM-DD/, never published direct.
03 — Skill engine

New capabilities
ship as files.

A skill is a directory with a SKILL.md file. YAML frontmatter declares what tools the skill exposes; the body is plain-English instructions for the agent. No core changes, no redeploy — the watcher hot-reloads as files land.

--- skills/seo-research/SKILL.md ---
---
name: "seo-research"
description: "Keyword research, SERP analysis, content recs"
commands:
  - name: "keyword_research"
    description: "Find target keywords for a topic"
    handler: "python handlers/keyword_research.py"
    parameters:
      - name: "topic"
        type: "string"
        required: true
      - name: "intent"
        type: "string"
        enum: [informational, commercial, navigational]
  - name: "serp_analysis"
    description: "See who's ranking for a keyword and why"
    handler: "python handlers/serp.py"
    parameters:
      - name: "keyword"
        type: "string"
        required: true
dependencies: [ahrefs, browser]
---

# SEO Research

Use this skill before any web content draft. Always start with
keyword_research to find the target keyword cluster, then run
serp_analysis on the top 1–2 keywords to see what the
ranking pages cover.

When pairing with the Copywriter, return:
  · the primary keyword + 3–5 secondary terms
  · the angle the top results miss
  · word-count and structural recommendations

If the topic is too broad for a clear keyword cluster, ask the
Strategist to narrow the scope before drafting.
  • 01
    YAML frontmatter declares the contract. Parameter names, types, and descriptions become the JSON schema the LLM sees as a callable tool.
  • 02
    Markdown body is the prompt. Plain-English instructions on when to use the skill, and how to interpret the output. Reads like a runbook.
  • 03
    Shell or Python handlers. Run subprocess with a 30-second timeout. Parameters are shell-escaped automatically. Return JSON.
  • 04
    Inter-skill SDK. Skills can call other skills' tools by name, with declared dependencies. Max call depth prevents recursion loops.
  • 05
    Schedule field for autonomous runs. Add schedule: "0 9 * * 1-5" and the skill auto-registers as a cron job. No separate scheduler config.
  • 06
    Open standard, not a lock-in. Compatible with the Agent Skills spec from Anthropic. Skills written for AgentWorkforce work in Claude Code; the reverse is mostly true too.
— Marketing skill library (sample)

The skills behind a marketing department.

Each skill is a folder with a SKILL.md file. Together, they're how an AgentWorkforce marketing department actually does work — not just talks about it.

analytics-pull
Metrics from GA / HubSpot / Mixpanel
seo-research
Keyword data, SERP analysis
social-publisher
Multi-channel scheduling (approval-gated)
competitor-monitor
Scrape competitor blogs, pricing, ads
email-tool
Mailchimp / Klaviyo / SendGrid
ad-platform
Meta & Google ads management
crm-lookup
HubSpot / Salesforce queries
brand-voice-check
Voice consistency scoring against brand guide
content-calendar
Editorial schedule, approvals, deadlines
press-monitor
Press mentions, sentiment, journalist lists
survey-synth
Theme extraction from NPS & CSAT
vault
Brand guide, prior briefs, persona files
04 — Triage routing

One front door.
Many experts.

The triage agent doesn't try to do everything. It reads the request, picks the right specialist via a built-in route_to_agent tool, and hands off — with the right system prompt, the right skill set, and the right model tier.

"Draft a launch announcement" "How did last week's email perform?" webhook · competitor blog post cron · Monday 8am briefing "Plan the Q4 content calendar" CMO · SONNET AgentWorkforce route_to_agent(specialist) SONNET Copywriter drafts, voice, format-aware OPUS Analytics attribution, dashboards, ROI OPUS Competitive Intel competitor monitoring OPUS Content Strategist briefs, calendar, audience SONNET Social Media channel-tuned posts INPUT · ANY CHANNEL MARKETING SPECIALISTS
Isolation

No cross-domain leakage.

Each specialist has its own conversation history. A finance request never picks up context from a customer-support thread, and vice versa.

Skill filtering

Smaller surface, sharper agent.

Each specialist only sees the skills it needs. Context window stays focused; reasoning stays fast; cost stays predictable.

Hierarchical triage

Triage all the way down.

A specialist can itself be a triage agent for a sub-domain — e.g. the "Business" agent routes between Strategy, Marketing, Growth, Operations. As deep as you need.

— Marketing in action

Three real workflows,
end to end.

To show how the architecture pays off, here are three marketing operations an AgentWorkforce department handles routinely. Each is a chain of agents, skills, and approvals — running the same way every time.

Workflow 01 · Recurring

Monday morning briefing.

Every Monday at 8am, the CMO drops a synthesis of the past week into Slack — what the competition did, what your campaigns did, and what needs your attention this week.

Trigger cron · 0 8 * * 1 Output Slack message · #marketing-weekly Human in loop No (read-only synthesis)
  1. 08:00
    Cron fires Competitive Intel.

    Scrapes competitor blogs, ad libraries, and pricing pages. Diffs against last week's snapshot. Logs anything new.

  2. 08:02
    Analytics pulls last week's numbers.

    GA traffic, HubSpot funnel, email open/click, ad spend & CPA. Tags anomalies vs. trailing 4-week average.

  3. 08:04
    CMO synthesizes the brief.

    Pulls in last week's brand decisions from memory. Writes ~300 words. Calls out three things that need a human eye.

  4. 08:05
    Briefing lands in #marketing-weekly.

    Threaded summary. Anyone can reply with a follow-up question — routes back to the right specialist automatically.

Workflow 02 · Campaign

Launch a feature campaign.

You message the CMO: "We're launching the v2 dashboard next Tuesday. Spin up the campaign." Six specialists hand off in sequence; you approve once.

Trigger Slack DM to CMO Output Scheduled posts, emails, ads (all gated) Human in loop Yes · one approval at end
  1. STRATEGIST
    Writes the campaign brief.

    Reads the v2 product spec, prior launch briefs, audience profiles. Outputs angle, goals, KPIs, channels, timeline.

  2. SEO
    Identifies the keyword cluster.

    Primary + secondary keywords for the launch blog and landing page. Notes what top competitors covered — and what they missed.

  3. COPYWRITER
    Drafts every asset.

    Landing page, blog announcement, 6 social posts, 3 ad variants, a launch email. Each tagged by channel and dropped into drafts/2026-07-launch/.

  4. BRAND VOICE
    Reviews against the brand guide.

    Scores each draft on tone, voice, and message consistency. Flags any line that doesn't pass. Returns to Copywriter to revise.

  5. SOCIAL + PAID
    Schedules everything.

    Posts queued in scheduler with launch-day timing. Ads built in Meta + Google ad managers, paused, with creative variants ready.

  6. CMO
    Sends a single approval link.

    You review everything in one place. Approve, edit, or reject any asset. Once you approve, scheduled posts go live — the ads unpause on launch day.

  7. ANALYTICS
    Wires up tracking; reports daily.

    UTMs in place, dashboard live, daily Slack update for the launch week. Anomalies flagged. The data is in the room before any meeting.

Workflow 03 · Reactive

Respond to a market trend.

A competitor announces a feature you've had for six months. AgentWorkforce sees it, decides if you should respond, drafts the response, and parks it for your approval — all within an hour.

Trigger webhook · news + scrape alert Output Approval-gated post + memo Human in loop Yes · before anything goes public
  1. T+0
    Webhook fires.

    Competitive Intel's scraper sees a new post on a competitor blog. News API confirms press coverage. Envelope lands at the Gateway.

  2. T+30s
    CMO assesses urgency.

    Reads the post, checks memory for related history, decides this is worth a response (you have the feature already — reframe the narrative).

  3. T+5m
    Strategist picks the angle.

    Decides on positioning: "we've shipped this for 6 months — here's what we've learned." Pulls supporting metrics from Analytics.

  4. T+15m
    Copywriter drafts a LinkedIn post + X thread.

    Two formats, two angles. Tagged for review. Brand Voice passes — it reads like you, not like a press release.

  5. T+18m
    You get a Slack DM with one button.

    A 4-line summary: what happened, why it matters, the response drafted. Two formats below it. Approve, edit, or pass — nothing publishes without your click.

A pattern, not an accident. Every workflow runs the same loop: triage → specialist(s) → check → approval → publish. The discipline is built into the architecture — not into the discipline of the people using it.

05 — Memory

Agents that
remember what
matters.

Most chatbots forget everything the moment a conversation ends. AgentWorkforce doesn't. Every campaign decision, brand rule, audience insight, and prior outcome gets remembered — and brought back into the room the next time it's relevant.

What gets remembered
  • · The brand guide and tone rules
  • · Every campaign brief and its outcome
  • · Audience segments and their preferences
  • · Past creative decisions and what worked
  • · Approval rules and who signs off on what
— What this feels like in practice
  • 01
    No one repeats themselves.

    You explain the launch positioning once. Six weeks later the Copywriter is still using the same framing, the Social agent still adapts it for each channel, and the Brand Voice agent still flags drift — without anyone re-briefing the team.

  • 02
    Decisions compound.

    When the CMO chooses a content angle, that choice gets stored. Next time a similar question comes up, the Strategist agent surfaces the prior decision and the reasoning — so the team stays consistent across quarters, not just weeks.

  • 03
    Memory is legible.

    Your brand guide, audience profiles, and approval rules live as plain text files alongside the system. Anyone on the team can edit them. The agents read the same files. There's no hidden “AI brain” — just the rules, in writing, the same ones the team uses.

  • 04
    It stays on your infrastructure.

    All of this memory — the briefs, decisions, brand context — lives in your environment. Nothing about your business gets pushed into a third-party SaaS. The data stays yours, and the agents read it directly.

06 — Multi-channel

Reach your agents
from anywhere.

The Gateway makes every channel a peer. Adding a new one is a Channel subclass with send() / receive(). The agents, memory, and skills don't change.

CLI

Terminal-first.

Rich-rendered REPL with streaming responses, slash commands for system control, and tab completion on skills. The dev-day default.

Chat / Telegram

Pocket-first.

Polling bot with per-user session isolation, message chunking for the 4096-char limit, exponential-backoff retries. Slack channel adapter on the same pattern.

Webhook

Inbound HTTP.

FastAPI endpoint with bearer-token auth. Auto-normalizes GitHub PRs/issues, Slack events, and generic JSON into agent-readable text.

Cron

Scheduled work.

Persistent SQLite-backed jobs that survive restarts. Skills with a schedule field auto-register. Manage conversationally.

Heartbeat

Proactive checks.

Background scheduler runs "check" skills (calendar, email, markets, etc.) at intervals. Claude evaluates the results; you only get pinged when something needs you.

Lifecycle hooks

Event-driven actions.

YAML-declared hooks subscribe to system events. "On startup, run the daily briefing. On notification sent, log to vault." Configuration, not code.

Cross-channel sessions

Start a request in chat, get a follow-up question via webhook, finish in CLI — same session, same memory, same agent. The dispatcher keys sessions by channel + user and persists them in SQLite. 24-hour TTL, auto-clean.

07 — Three-tier model strategy

Cost is a config decision,
not a guess.

Each agent declares the tier it needs. Routing is intentional, visible, and changeable in a single file. You spend Opus money where you need Opus reasoning — and Haiku money everywhere else.

Tier
Best for
Used by these agents
Rationale
HAIKU ~$0.001 / call
Pure lookup, classification, tool calling. No multi-step reasoning required.
internal helper agents
(when present, lookup work)
~4× cheaper than Sonnet, ~20× cheaper than Opus. Right for high-volume routine tasks.
SONNET ~$0.012 / call
Triage routing, structured output, pattern matching. Balanced quality and cost.
cmo (triage) · copywriter
brand voice · social media
email · paid media · pr · seo
The default for agents that need to think but don't need to deeply reason. Triage especially — it has to be fast.
OPUS ~$0.084 / call
Deep multi-step reasoning, synthesis, planning, complex tool orchestration.
strategist · analytics
competitive intel · creative brief
customer insights
Reserved for the hardest work — the few minutes where paying for the best model materially changes the outcome.

Tiers are configured, not coded. Override the model for any agent by adding model: in agents.yaml. New model lands — bump one line; new run, new behaviour. The harness handles the rest.

08 — For your team

How we adapt AgentWorkforce
for your team.

The marketing department above is the example. The architecture is the same for any operations team you'd want to scale — sales, support, finance, internal ops. A custom agent platform engagement is 8–14 weeks.

— What changes
  • 01
    The agent roster Mapped to your org — sales, ops, support, finance, whatever fits. Each with its own system prompt, skills, model tier.
  • 02
    The skill library A starter set of integrations into your systems — CRM, ticketing, internal APIs, document store, whatever your agents need to do useful work.
  • 03
    The persona files Your business policies, voice, escalation rules, refusal patterns. Markdown files your team can edit when policy changes.
  • 04
    The reachability surface Which channels matter: Slack? Teams? a custom web UI? a phone hotline? The Gateway adapts; the agents don't.
— What doesn't change
  • →
    The four-layer architecture Channel → Gateway → Multi-agent → Providers/Skills/Memory. Battle-tested. Auditable. Yours to keep.
  • →
    The skill format YAML frontmatter + markdown instructions + handler. Your team will be writing new skills inside a week.
  • →
    The three-tier model strategy Haiku / Sonnet / Opus. Configured per agent. Cost decisions stay visible.
  • →
    Hybrid memory & the persistence pattern SQLite + markdown + hybrid search. Your data stays on your infra, in formats your team can read.
— Technical foundation

Boring, on purpose.

AgentWorkforce is built on the dullest, most reliable building blocks we could find. The novel part is the architecture; the parts holding it up are old enough to vote.

Language
Python 3.11+
uv + hatchling, type-hinted
Storage
SQLite
Zero-config, single file, durable
Embeddings
FastEmbed
BAAI/bge-small, local 384-dim
Keyword
rank-bm25
BM25Okapi · stop-word safe
Scheduler
APScheduler
Background & cron triggers
HTTP
FastAPI
uvicorn, async, Pydantic
Secrets
OS keychain
Keychain, Secret Service, CredLocker
LLM
Anthropic
API + Agent SDK, model-swappable
— Start

Want this architecture
running in your business?

A custom agent platform engagement is 8–14 weeks, fixed scope and fee. Tell us what your specialists should do; we'll build the roster.

Book an intro call → See the engagement details