Starter files for Chapters 10-13 of From Prompts to Pipelines. A multi-client content management system built on OpenClaw.
The system routes Telegram messages to client-specific agents, generates voice-matched content, enforces compliance rules, and remembers client preferences across sessions. Uses OpenClaw's Paperclip multi-agent architecture with a router agent (cheap model) dispatching to per-client agents (quality model).
# 1. Install OpenClaw if you haven't
curl -fsSL https://openclaw.ai/install.sh | bash
# 2. Clone this into your prism project
git clone https://github.com/ciscoittech/prism-starter.git prism
cd prism
# 3. Link the config so OpenClaw can find it
mkdir -p ~/.openclaw
ln -sf $(pwd)/openclaw.json ~/.openclaw/openclaw.json
# 4. Set your environment variables
export OPENROUTER_API_KEY=your-key-here
export TELEGRAM_BOT_TOKEN=your-bot-token
export TELEGRAM_OWNER_ID=your-telegram-id
export GATEWAY_TOKEN=any-random-string-here
# 5. Install the plugins
openclaw plugins install ./plugins/voice-scorer
openclaw plugins install ./plugins/content-calendar
# 6. Update the router skill with your Telegram chat IDs
# Edit skills/router/SKILL.md — replace [MAYA_CHAT_ID] and [JORDAN_CHAT_ID]
# 7. Start the gateway
openclaw config set gateway.mode local
openclaw gatewayPlugins are pre-built so you don't need TypeScript or a build step. Just install via CLI and run.
prism-starter/
├── openclaw.json # Multi-agent config (router + 2 client agents)
├── plugins/
│ ├── voice-scorer/ # Scores content against voice profiles
│ │ ├── src/ # Source code (TypeScript)
│ │ └── dist/ # Pre-built (ready to run)
│ └── content-calendar/ # Per-client content scheduling
│ ├── src/ # Source code (TypeScript)
│ └── dist/ # Pre-built (ready to run)
├── skills/
│ ├── router/ # Routes messages to correct client agent
│ │ └── SKILL.md
│ └── shared/
│ ├── content-pipeline/ # 5-stage content production workflow
│ │ └── SKILL.md
│ └── memory-rules/ # Provenance labels for stored knowledge
│ └── SKILL.md
└── clients/
├── maya/
│ ├── voice/ # Maya's writing style and voice parameters
│ │ └── SKILL.md
│ └── compliance/ # Maya's brand rules (health claims, sponsorships)
│ └── SKILL.md
└── jordan/
├── voice/ # Jordan's writing style and voice parameters
│ └── SKILL.md
└── compliance/ # Jordan's brand rules (copyright, community safety)
└── SKILL.md
-
Create voice and compliance skills:
clients/newclient/voice/SKILL.md # Voice profile + scoring parameters clients/newclient/compliance/SKILL.md # Brand rules (BLOCKING) -
Add the agent to
openclaw.json:{ "id": "newclient", "identity": { "name": "NewClient's Agent", "theme": "content creation for NewClient" }, "model": { "primary": "openrouter/anthropic/claude-sonnet-4-6" }, "skills": ["newclient-voice", "newclient-compliance", "content-pipeline", "memory-rules"] } -
Add the skill directories to
openclaw.jsonskills.load.extraDirs -
Add the client's Telegram chat ID to
skills/router/SKILL.md
This system uses four concepts from the book:
| Concept | Where You See It |
|---|---|
| Instruction | Voice skills tell each agent HOW to write for their client |
| Memory | Provenance-labeled knowledge persists across sessions |
| Control | Voice scoring + compliance rules block bad content before it ships |
| Flow | Five-stage pipeline: plan, generate, check, approve, publish |
Read the free chapter: Why That Worked (And Why Most AI Doesn't)
Get the full book: From Prompts to Pipelines
If you want to modify the plugins:
# Install dev dependencies (includes TypeScript + OpenClaw SDK)
cd plugins/voice-scorer && npm install && npm run build
cd ../content-calendar && npm install && npm run buildNote: building requires ~2GB RAM due to the OpenClaw SDK. Pre-built dist/ files are included for environments with limited resources.
MIT