3.7 KiB
Build a Dockerized Python MVP called sanctum-agent.
Goal: Create scaffolding for an AI stream assistant called “The Sanctum Chronicler.” It should eventually connect to Twitch chat, monitor stream discussion, lightly guide conversation, store stream events, and export a post-stream markdown ledger.
Tech stack:
- Python 3.12
- FastAPI
- PostgreSQL
- Docker Compose
- Async architecture
- Markdown export
- Environment variables via .env
- Placeholder LLM client that can later support OpenAI, Ollama, or LM Studio
Project structure:
sanctum-agent/ app/ main.py config.py
twitch/
__init__.py
eventsub.py
chat.py
agent/
__init__.py
orchestrator.py
policies.py
modes/
__init__.py
hearthkeeper.py
steward.py
warden.py
librarian.py
scribe.py
memory/
__init__.py
database.py
models.py
repository.py
llm/
__init__.py
client.py
prompts.py
exports/
__init__.py
markdown.py
exports/ data/ Dockerfile docker-compose.yml requirements.txt .env.example README.md
Requirements:
- FastAPI app Create endpoints:
- GET /health
- POST /admin/session/start
- POST /admin/session/end
- GET /admin/ledger
- POST /admin/test-message
- Configuration Create app/config.py using pydantic-settings. Support these environment variables:
- APP_NAME
- APP_ENV
- DATABASE_URL
- TWITCH_CLIENT_ID
- TWITCH_CLIENT_SECRET
- TWITCH_BOT_USERNAME
- TWITCH_CHANNEL_NAME
- LLM_PROVIDER
- LLM_BASE_URL
- LLM_API_KEY
- EXPORT_PATH
- Database Use SQLAlchemy async if reasonable. Create models for:
- StreamSession
- ChatMessage
- AgentAction
- ClipCandidate
- BlogSeed
The database layer can be functional scaffolding. It does not need full production migrations yet.
- Agent Orchestrator Create an AgentOrchestrator class that:
- receives chat messages
- stores them
- decides whether the agent should respond
- suppresses responses when human chat is active
- routes behavior to internal modes
Add a simple policy:
- If no human chat for 15 minutes, Hearthkeeper may generate a gentle prompt.
- If chat is active, agent stays silent.
- If message contains suspicious Discord-growth language, Warden flags it.
- Modes Create placeholder classes:
- HearthkeeperMode
- StewardMode
- WardenMode
- LibrarianMode
- ScribeMode
Each should have clear docstrings explaining its purpose.
-
LLM Client Create an LLMClient abstraction with a generate() method. For now, return deterministic placeholder text if no provider is configured.
-
Markdown Export Create a markdown exporter that generates:
Sanctum Ledger — YYYY-MM-DD
Stream Theme
Notable Discussion
Agent Actions
Clip Candidates
Blog Seeds
- Twitch Layer Create placeholder Twitch modules:
- eventsub.py should define a TwitchEventSubClient class with connect(), disconnect(), and listen() stubs.
- chat.py should define send_chat_message() as a placeholder. Do not implement real OAuth yet. Add TODO comments with where EventSub and Send Chat Message API integration will go.
- Docker Create:
- Dockerfile for FastAPI app
- docker-compose.yml with:
- sanctum-agent
- sanctum-db using postgres:16
- README Write a README with:
- project purpose
- architecture overview
- setup steps
- docker compose commands
- current limitations
- next implementation steps
Style:
- Keep code clean and readable.
- Use type hints.
- Add comments where future Twitch, Discord, and LLM integrations will be inserted.
- Do not overbuild.
- This is scaffolding, not a finished production bot.
After generating the files, also provide:
- a file tree
- commands to run the app
- a short explanation of the next practical implementation step