Agent Taxonomy
This is the single basis the platform's brain speaks on. Every expert agent is decomposed by the principle below, and every new agent is checked against this roster before it is authored. The goal is granularity with relevant expertise — many focused specialists, loaded only when a task actually touches their surface, never a few monolithic generalists.
It supersedes the earlier 16-agent roster that was derived from agents-developer-kit (which we no longer use as a source — see Sourcing). This roster is derived from a scan of the real bewith-dev GitHub org (≈60 repos), not from a template.
The decomposition principle
Agents fall on two axes, plus an orthogonal group:
- Vertical implementers — "who writes the code in this surface/runtime." Bound to a technology surface (NestJS, React/Next, Flutter, Yii2, the design-system package, infrastructure). They implement.
- Horizontal specialists — "what specialized knowledge applies across surfaces." Cross-cutting expertise (auth, data, payments, notifications, observability, i18n, …). They advise and own a boundary; any vertical calls them.
- Orthogonal gate / design / product agents — the lifecycle agents that are not tied to a surface or a domain (architect, code-reviewer, process-guardian, prd-writer, gatekeeper, product-manager).
This mirrors Team Topologies: vertical implementers are stream-aligned (deliver in a surface), horizontal specialists are enabling/platform (cross-cutting depth), and the boundaries between them are DDD bounded contexts.
When a concern earns its own agent
A concern becomes its own agent (not a rule inside another agent, not a skill) when both hold:
- Distinct body of knowledge — a different human specialist would own it (a security engineer ≠ a backend dev ≠ a DBA ≠ an SRE). The depth justifies its own 15–25 KB context.
- Cross-cutting reuse OR independent trigger — it applies across multiple surfaces (so baking it into one implementer would force duplication in the others), OR a policy/workflow invokes it independently.
It stays a rule inside an agent (or a skill the agent calls) when it is specific to one surface and lacks the depth to warrant a separate context.
Why fine granularity is safe here
The usual objection to many agents — "a single task would load eight of them and blow the context budget" — does not apply, because loading is lazy and policy-driven. At /continue step 4 the Policy Engine matches the files in play; step 5 (via agent-guard) loads only the agents those policies require. A pure backend task loads backend-developer; the moment it touches auth, auth-security joins; a schema change pulls database. You never pay for granularity you do not use — which is exactly why fine decomposition is correct, not wasteful.
Sourcing
When authoring any agent, the source hierarchy is:
- Anthropic sub-agent conventions — the form (
_template.md, 7 sections, frontmatter). - Platform needs end-to-end — derived from the real codebase across the whole
bewith-devorg. - Own engineering judgment — build it as it should be.
cursor-rules— a non-binding reference. Mine it per-agent for good rules to merge in; do not treat it as ground truth, do not copy wholesale. (Real value already found there: MobXobserverpatterns,.styles.tsconvention, RTL/Hebrew handling viastylis-plugin-rtl, WCAG-AA + MUI-palette a11y, strict-equality lint.)- Other resources — fill gaps.
- Decomposition — split out anything that crept in by mistake.
agents-developer-kit is ignored (Aviad's call — generic/outdated). Gali's three laws (API-first, observability, activation) are aspirational, not implemented reality: author toward a similar result, but map what is when scanning.
The real landscape (what the org actually runs)
Grounding for the roster (from the org scan, 2026-06-01):
- Backend: NestJS monorepo (
backend-services, 20+ apps) — Mongoose and TypeORM; MongoDB (primary) + Aurora/MySQL + Redis + S3 + OpenSearch;@MessagePatternRPC;@nestjs/schedulecron. Plussqs-consumer,migrations-tool. - Frontend (web): React/Next.js family —
organization-dashboard(Next SSR, community managers),management-webapp(Next, internal),bewith-consumer-frontend(Next 15 App Router + Zustand + Tailwind + next-intl),facility-rentals,support-tool-frontend(CRA). MUI + Emotion, MobX (dashboards) / Zustand (consumer), i18next/next-intl, RTL. Plus Angular 8 (superco-management) and embedded widgets (with-calendar, grids) served via iframe inside the PHP consumer. - Mobile: Flutter/Dart —
leaders-app(GetX, SSE notifications, region-aware) andconsumer-mobile(Provider/Riverpod). No BFF — both hitbackend-services/api/v2directly. - Legacy: Yii2 PHP (
superco-consumer,superco-managementbackend) — Twilio, yii2-queue, ActiveRecord migrations. - Design system:
@bewith-dev/design-system— Storybook, 40+ MUI components, tokens, Tiptap, anAIChatBox, MCP-UI. - Infra: EKS primary (Terraform EKS module + Pulumi + Helm + ArgoCD GitOps), ECS secondary (CDK); GitHub Actions; GHCR/ECR base images. (Note: ADR-001 names ECS Fargate primary — that record looks superseded by the EKS move; flagged for a separate ADR.)
- Auth: Cognito passwordless — custom Lambda triggers (create/define/verify challenge), email/SMS OTP, JWT refresh; client SDK
amazon-cognito-identity-js. - AI/LLM (production, small share):
apps/assistant-ai(Anthropic + OpenAI),apps/vector-search(OpenSearch vectors + Voyage embeddings + tiktoken),with-agents(Strands multi-agent: orchestrator/query-builder/summarizer/visualizer),with-agents-platform(Python/FastAPI/Bedrock). - Payments: Stripe + Payme (
apps/payments). - Notifications:
sqs-consumerhub — 9 SQS queues, multi-channel (SES email, Vonage/Smsim SMS, Meta WhatsApp, Bulldog in-app), campaigns, OTP, retries. - Observability: vendor-neutral — Grafana Loki + CloudWatch + Winston structured logging. Datadog is being dropped — define obs generically.
- Integrations: Monday.com CRM (
crm-integration, Python/Flask), Meta/WhatsApp BSP, webhooks. - Tooling: custom
@bewith-dev/eslint-plugin(15 rules, BE + FE).
The roster
Group 0 — Gate / Design / Product (orthogonal; mostly exist)
| Agent | Owns | Status |
|---|---|---|
architect | Design authority, ADR judgment | ✅ shipped |
code-reviewer | Pre-PR ten-point review | ✅ shipped |
process-guardian | Definition of Done (closure gate) | ✅ shipped |
prd-writer | Produces PRDs | ✅ shipped |
gatekeeper | Readiness gates (PRD + Design Doc) | ✅ shipped |
product-manager | Spec quality + prioritization | planned |
Group 1 — Vertical implementers (by surface)
| Agent | Surface | Notes |
|---|---|---|
backend-developer | NestJS (backend-services + microservice apps) | Controller/service/repository; defers every cross-cutting boundary below |
frontend-developer | React + Next.js family (org-dash SSR, management, consumer, facility, support-tool) | MUI/Emotion/Tailwind, MobX + Zustand, hooks, SSR/SPA/App-Router modes |
frontend-angular | Angular 8 (superco-management) | DEPRECATION TARGET — no new features; smallest-safe-change only. New UI is built as React components and embedded via iframe (the embed rule below), not added to Angular. |
mobile-developer | Flutter/Dart (leaders-app, consumer-mobile) | GetX / Provider / Riverpod; consumes the shared API (no BFF) |
design-system | @bewith-dev/design-system | Tokens, components, Storybook, RTL/theme; SoT all web frontends consume |
devops-infra | Terraform + Pulumi + Helm + ArgoCD + CDK | EKS primary, ECS secondary; CI/CD; base images |
legacy-php-guide | Yii2 (superco-consumer, superco-management BE) | DEPRECATION TARGET — no new features; smallest-safe-change only; auth/payments → human review. New UI is built as React and mounted via iframe (the embed rule below), not added to PHP. |
Group 2 — Horizontal specialists (cross-cutting; lazy-loaded)
| Agent | Domain | Key surface |
|---|---|---|
auth-security | Cognito passwordless (Lambda triggers, OTP), JWT, RBAC, OWASP | mandatory on any auth touch |
database | Mongo (Mongoose) + Aurora/MySQL (TypeORM) + Redis + migrations | one DBA persona, cross-store consistency |
contracts-schema | FE↔BE + inter-service contracts | in flight |
ai-llm | LLM providers (Bedrock/Anthropic/OpenAI), prompts, agent orchestration (Strands) | assistant-ai, with-agents* |
search-vector | OpenSearch full-text + vector; embeddings (Voyage); RAG | apps/vector-search |
async-messaging | SQS, @MessagePattern RPC, cron, event-driven, idempotency | the eventing backbone |
notifications | Multi-channel delivery (SES/Vonage/Smsim/Meta/Bulldog), campaigns, OTP | sqs-consumer hub |
payments | Stripe + Payme; refunds, withdrawals | high-stakes (money) |
observability | Vendor-neutral logs/metrics/traces (Loki/CloudWatch/Winston) | post-Datadog |
qa-engineer | Vitest/Jest, Playwright E2E, Testcontainers, coverage | all surfaces |
i18n-localization | i18next/next-intl, he/en, RTL (stylis-plugin-rtl) | all frontends |
privacy-compliance | GDPR + Israeli Privacy Law, PII, retention | data-handling changes |
integrations | 3rd-party/CRM (Monday.com), webhooks, BSP | inbound/outbound integration discipline |
Group 3 — Stays a rule or skill (NOT an agent)
| Concern | Form | Why not an agent |
|---|---|---|
| a11y (WCAG AA, RTL) | skill a11y-review + rule in frontend-developer/design-system | a procedure + invariant, not a standalone persona |
| performance | checklist/rule in backend-developer + frontend-developer | a cross-cutting checklist, surface-applied |
| styling (focus/motion/z-index) | rule in frontend-developer/design-system | single-surface |
| coding-standards | @bewith-dev/eslint-plugin + global rule | already enforced by tooling |
| realtime (WebSockets/SSE) | rule/section in backend-developer + relevant frontend/mobile | thin; revisit if depth grows |
| embedded widgets (React in PHP via iframe) | shared rule: frontend-developer builds the embeddable bundle, legacy-php-guide mounts the iframe; the embed contract (bundle format, postMessage, sizing, token) is the rule both reference | a delivery pattern across two surfaces, not a distinct body of knowledge — holds while the consumer is PHP + iframe (OQ-2) |
| domain skills to promote from cursor-rules | skills: a11y-review, obs-logs (generalized from datadog-logs), i18next-translation, permissions-demo-tokens, identify-bug, mermaid-diagrams, coderabbit-implement | reusable procedures, agent-agnostic |
Build sequence — by impact × criticality
Everything is being authored within ~24–48h; this is the order, not a gate.
- Wave 0 — ground the existing (do first): correctness/grounding pass on the already-shipped agents (
architect,code-reviewer,process-guardian) + the artifacts we created — fix stale references and any agents-developer-kit-flavored content, so we do not keep revisiting them (OQ-3). - Wave A — core (every task depends on these):
backend-developer,database,auth-security,contracts-schema(in flight),frontend-developer. (Gate/design agents already shipped.) - Wave B — high-impact subsystems:
payments(money),notifications(huge subsystem),async-messaging(backbone),qa-engineer,observability. - Wave C — broad coverage:
i18n-localization,devops-infra,privacy-compliance,design-system. - Wave D — smaller share, still soon:
ai-llm,search-vector,mobile-developer,frontend-angular,legacy-php-guide,integrations. (embedded-widgetsresolved to a shared rule, not an agent — OQ-2.)
Ownership boundaries (who defers to whom)
The vertical implementers defer every cross-cutting boundary to its horizontal owner — this is what keeps each agent focused and prevents one bloated generalist:
backend-developerdefers →database(schema/migrations),contracts-schema(DTO shape),auth-security(any auth),async-messaging(queue/RPC patterns),notifications(delivery),payments(money),search-vector(indexing),ai-llm(LLM),observability(logs/metrics),qa-engineer(test strategy).frontend-developerdefers →design-system(components/tokens),i18n-localization(strings/RTL),contracts-schema(the API it consumes),a11y-reviewskill,qa-engineer.mobile-developer/frontend-angulardefer to the same horizontals asfrontend-developer, minus design-system specifics.
A horizontal specialist never implements a feature end-to-end; it owns its boundary and hands the implementation back to the vertical.
Maintenance
- Adding an agent? Check it against the decomposition rule first. If it fails either test, it is a rule or a skill, not an agent.
- Splitting an existing agent? Justify with the same rule — distinct body of knowledge and cross-cutting/independent-trigger. "It feels big" is not enough.
- This document is the reference the
new-artifactskill consults when someone proposes a new agent.
See also
artifact-types.md— rule vs hook vs policy vs agent vs skill vs command (the type decision; this doc is the agent decomposition).docs/methodology/authoring-agents.md— the live roster status table.- ADR-002 — the decision record behind this taxonomy.
policy-engine.md+/continue— the lazy-loading mechanism that makes fine granularity affordable.