Skip to content
mdr
All work
prototype2025·personal

PA Agent Platform

Multi-agent microservices runtime: 15+ specialized agents sharing Redis + Postgres.

Screenshot of PA Agent Platform

TL;DR

  • 15+ specialized agent services, each on its own port.
  • Gateway routes intents by agent name; auth lives in a separate service.
  • Shared Redis for sessions, shared PostgreSQL for persistence.
  • Docker Compose for one-command local up.
  • Sub-agent hierarchy (entrepreneur, music-teacher, etc.) under their domain parent.

Architecture

Flow
CLIENTEDGEAGENTSSHARED STOREUserany clientGatewayport 9000Authport 7000todo8001email8002planner8003creative8007+11 moredomain agentsRedissession statePostgreSQLPrisma · persistence

Microservice topology. Gateway routes by agent name. Each agent isolated.

sync · HTTP / RPCauth · permissiondata · read / write

Screens

  • Gateway · agent registry

    Concept dashboard view. Gateway on port 9000 routes intents to 15 specialized agents — each on its own port (8001–8015). Real-time status per agent, two-second refresh.

  • Agent · /converse endpoint

    Each agent service exposes a /converse HTTP surface. Intent parsing happens inside the agent using OpenAI. Tool calls are typed and logged. Sessions persist in Redis.

  • Domain · sub-agent tree

    Some agents own a tree of sub-agents. entrepreneur dispatches to business-mentor, financial-expert, legal, logistics, manager, sales, marketing — based on intent. The tree is part of the agent's prompt, not hardcoded in the gateway.

Problem

A 'personal AI' that's actually 15 different specialists — todo, email, planner, health, software-builder, QA, UX, language-teacher — each with their own intent surface and persistent state. One monolithic LLM call won't do; you need a runtime where agents are isolated, addressable, and observable.

Approach

Each agent is its own Express service on a dedicated port (8001–8015), behind a gateway (9000) and auth service (7000). Shared Redis for session state. Shared PostgreSQL for persistence (Prisma ORM). Docker Compose ties the whole thing together for local dev. Intent parsing happens per-agent using OpenAI. Each service has a thin /converse HTTP surface — the gateway routes by agent name.

Deep dive

Why one process per agent

Same reason real microservices exist: isolation. If the language-teacher agent ships a new prompt and starts looping, it doesn't take down todo. The gateway routes by name, agents don't know about each other, and you can deploy or roll back a single agent without touching the rest. The cost — 15 Node processes, 15 ports, 15 Dockerfiles — is paid once at setup.

Sub-agents under a domain parent

entrepreneur owns business-mentor, financial-expert, legal, logistics, manager, sales, marketing. music-teacher owns guitar, piano, singing. The parent agent handles routing within its domain — 'help me with my pitch' goes to entrepreneur → marketing. That tree is part of the agent's prompt, not hardcoded in the gateway. Reorg by editing one file.

Status today

Each service has a minimal /converse endpoint and a stub public/chat.html. No production UI on top yet — JANE (the personal AI OS) is the next-gen attempt that addresses that gap with a real operator surface and audit log.

Outcome

Prototype platform with 15 active agents and sub-agents (entrepreneur → business-mentor, financial-expert, legal, logistics, manager, sales, marketing; music-teacher → guitar, piano, singing). The microservice topology is the headline — it lets you swap, upgrade, or replace a single agent without touching the rest.

Related

More in ai.