Skip to content

C4 Level 3 -- Book-E Agent Components

Zooms into the Book-E container showing how a Discord message becomes an accounting action.

C4 Level 3 -- Book-E Components

Components

Discord Gateway

Component File Responsibility
Discord Client discord.js WebSocket connection to Discord. Listens on #invoices. Creates threads per document. Handles DMs.
Message Router index.js Filters messages by channel. Allows configured bot IDs. Routes to agent.

Agent

Component File Responsibility
Agent Loop agent.js Builds LLM prompt with personality + context. Sends to Claude with tools. Executes up to 5 tool calls per message. Extracts final text response.
Tool Dispatcher agent.js Maps tool names (from LLM response) back to HTTP endpoints. Calls Accounting API. Returns results to LLM.
System Prompt Builder agent.js Injects character personality, background lore, style rules, and known user facts into the system prompt.

Configuration

Component File Responsibility
Character Loader character.js Loads /config/character.json (mounted as ConfigMap). Validates required fields. Applies defaults.

Memory

Component File Responsibility
Memory Store memory.js Postgres-backed storage for conversations (per thread), facts (per user), and patterns (per merchant). Falls back to in-memory if Postgres unavailable.

Message Flow

1. User posts in #invoices
2. Discord Client receives messageCreate event
3. Message Router checks channel + bot filter → passes to Agent
4. Agent Loop loads conversation history + user facts from Memory
5. System Prompt Builder assembles prompt (personality + lore + facts)
6. Agent sends to Claude Haiku with tool schemas
7. Claude decides: call get_folio_balance tool
8. Tool Dispatcher maps to GET http://ai-accountant-api/folio/balance
9. API returns account data
10. Claude formats response in Norwegian
11. Agent saves messages to Memory
12. Discord Client posts reply in thread