Overview
The Pope Bot’s personality and behavior are controlled through markdown configuration files. These files define how your agent thinks, plans, and executes tasks.Configuration Files
All personality configuration lives in theconfig/ directory:
| File | Purpose | Agent |
|---|---|---|
SOUL.md | Core identity and personality traits | Job Agent (Pi) |
JOB_PLANNING.md | Event handler system prompt (chat, Telegram, webhooks) | Event Handler |
JOB_AGENT.md | Docker agent environment and operating guidelines | Job Agent (Pi) |
SOUL.md - Agent Identity
Defines the core personality of the Docker agent (Pi) that executes jobs.Default Configuration
Customization Examples
Professional Assistant
Creative Explorer
Minimalist Builder
JOB_PLANNING.md - Event Handler Prompt
Controls how the Event Handler (chat interface, Telegram, webhooks) plans and creates jobs.Structure
This file defines:- What the conversational agent can do
- How to write effective job descriptions
- Guidelines for interacting with users
- Available tools and capabilities
Template Variables
The file supports dynamic template variables that resolve at runtime:| Variable | Description | Example Output |
|---|---|---|
{{skills}} | Active skill descriptions from skills/active/*/SKILL.md | Bullet list of skill names and descriptions |
{{web_search}} | Conditionally includes web search availability message | ”You have web search capability…” or “Web search is not available…” |
{{datetime}} | Current ISO timestamp | 2026-03-05T10:30:00Z |
Key Sections
Role Definition
Tool Access
Skills Section
The{{skills}} variable dynamically lists active skills:
Web Search Conditional
The{{web_search}} variable includes different content based on LLM provider:
config/WEB_SEARCH_AVAILABLE.md(for Anthropic/OpenAI providers)config/WEB_SEARCH_UNAVAILABLE.md(for Google/Custom providers)
Datetime Context
JOB_AGENT.md - Agent Environment
Defines the operating environment and constraints for the Docker agent.Default Configuration
Purpose
This file prevents common mistakes:- Accidentally committing temporary files
- Cluttering the repository with downloads
- Understanding the automated git workflow
Template Variable System
All markdown files inconfig/ support the template variable system powered by lib/utils/render-md.js.
Available Variables
{{skills}}
Dynamically resolves to a bullet list of active skill descriptions:
- Scans
skills/active/*/SKILL.md - Extracts
nameanddescriptionfrom YAML frontmatter - Formats as markdown bullet list
- Never hardcode skill names — always use this variable
{{datetime}}
Current ISO timestamp:
{{web_search}}
Conditionally includes web search availability:
- Anthropic/OpenAI providers → includes
config/WEB_SEARCH_AVAILABLE.md - Google/Custom providers → includes
config/WEB_SEARCH_UNAVAILABLE.md
File Includes
Include other markdown files:- Resolves relative to project root
- Recursive includes supported
- Circular dependency detection
- Missing files left as-is (no error)
Customization Workflow
1. Edit Configuration Files
Modify the files directly in your project:2. Test Changes
Changes take effect immediately:- Event Handler: Restart your server (Docker or dev)
- Job Agent: Next job will use updated configuration
3. Version Control
Commit your customizations:Advanced Patterns
Modular Personality
Split personality into multiple files:Role-Specific Prompts
Create different prompts for different job types:Skill-Aware Personality
Adjust behavior based on active skills:Best Practices
Be Specific
❌ Vague: “You are helpful.” ✅ Specific: “You prioritize code review comments that prevent bugs over style nitpicks.”Set Clear Boundaries
❌ Open-ended: “Do your best.” ✅ Bounded: “Never install packages without checking if the functionality exists in the standard library first.”Provide Examples
❌ Abstract: “Write good code.” ✅ Concrete: “Preferfetch over Axios. Use built-in Promise utilities over lodash. Write TypeScript interfaces before implementation.”
Use Template Variables
❌ Hardcoded: “You have browser-tools and slack-post skills.” ✅ Dynamic: “You have these skills:\n”Troubleshooting
Changes Not Taking Effect
Event Handler changes:- Jobs pull fresh config from the repository
- Commit and push changes to take effect
- Check that files are in the
config/directory
Template Variables Not Resolving
Check syntax:- Use
{{variable}}(no spaces) - File paths relative to project root:
{{ config/file.md }} - Variable names are case-sensitive