The problem
A consultancy wanted to give each of its clients a personalised AI assistant. Every client needed its own system prompt, knowledge base, conversation style and branding.
Running and maintaining a separate deployment for each of more than 30 configurations would have been too expensive and too much work to keep alive.
Configuration instead of code
Each assistant is defined by one JSON file: system prompt, preferred model, temperature and capabilities. A single Node.js runtime serves all of them and routes each request by the identifier in a shareable link.
assistant.json system prompt model + temperature capabilities knowledge base
Changing an assistant means editing its file. No code change, no redeployment.
What each assistant could do
- Answer from its own knowledge base (documents split into chunks and embedded per assistant).
- Stream responses in real time.
- Keep the conversation history per session.
A web UI provided the chat. An admin dashboard showed usage, session depth and engagement across all assistants.
Where it led
These were chat assistants, not autonomous agents. The principle stayed: the difference between two clients should live in configuration and knowledge files, not in forked code.
The same idea runs my agent fleet today: each client agent has its own CLAUDE.md and knowledge files, and a new one is set up by script in minutes.