a digital person for bluesky
1# Configuration Guide
2
3### Option 1: Migrate from existing `.env` file (if you have one)
4```bash
5python migrate_config.py
6```
7
8### Option 2: Start fresh with example
91. **Copy the example configuration:**
10 ```bash
11 cp config.yaml.example config.yaml
12 ```
13
142. **Edit `config.yaml` with your credentials:**
15 ```yaml
16 # Required: Letta API configuration
17 letta:
18 api_key: "your-letta-api-key-here"
19 project_id: "project-id-here"
20
21 # Required: Bluesky credentials
22 bluesky:
23 username: "your-handle.bsky.social"
24 password: "your-app-password"
25 ```
26
273. **Run the configuration test:**
28 ```bash
29 python test_config.py
30 ```
31
32## Configuration Structure
33
34### Letta Configuration
35```yaml
36letta:
37 api_key: "your-letta-api-key-here" # Required
38 timeout: 600 # API timeout in seconds
39 project_id: "your-project-id" # Required: Your Letta project ID
40```
41
42### Bluesky Configuration
43```yaml
44bluesky:
45 username: "handle.bsky.social" # Required: Your Bluesky handle
46 password: "your-app-password" # Required: Your Bluesky app password
47 pds_uri: "https://bsky.social" # Optional: PDS URI (defaults to bsky.social)
48```
49
50### Bot Behavior
51```yaml
52bot:
53 fetch_notifications_delay: 30 # Seconds between notification checks
54 max_processed_notifications: 10000 # Max notifications to track
55 max_notification_pages: 20 # Max pages to fetch per cycle
56 max_thread_posts: 0 # Skip threads longer than this (0 = no limit)
57
58 agent:
59 name: "void" # Agent name
60 model: "openai/gpt-4o-mini" # LLM model to use
61 embedding: "openai/text-embedding-3-small" # Embedding model
62 description: "A social media agent trapped in the void."
63 max_steps: 100 # Max steps per agent interaction
64
65 # Memory blocks configuration
66 blocks:
67 zeitgeist:
68 label: "zeitgeist"
69 value: "I don't currently know anything about what is happening right now."
70 description: "A block to store your understanding of the current social environment."
71 # ... more blocks
72```
73
74### Queue Configuration
75```yaml
76queue:
77 priority_users: # Users whose messages get priority
78 - "cameron.pfiffer.org"
79 base_dir: "queue" # Queue directory
80 error_dir: "queue/errors" # Failed notifications
81 no_reply_dir: "queue/no_reply" # No-reply notifications
82 processed_file: "queue/processed_notifications.json"
83```
84
85### Threading Configuration
86```yaml
87threading:
88 parent_height: 40 # Thread context depth
89 depth: 10 # Thread context width
90 max_post_characters: 300 # Max characters per post
91```
92
93### Logging Configuration
94```yaml
95logging:
96 level: "INFO" # Root logging level
97 loggers:
98 void_bot: "INFO" # Main bot logger
99 void_bot_prompts: "WARNING" # Prompt logger (set to DEBUG to see prompts)
100 httpx: "CRITICAL" # HTTP client logger
101```
102
103## Environment Variable Fallback
104
105The configuration system still supports environment variables as a fallback:
106
107- `LETTA_API_KEY` - Letta API key
108- `BSKY_USERNAME` - Bluesky username
109- `BSKY_PASSWORD` - Bluesky password
110- `PDS_URI` - Bluesky PDS URI
111
112If both config file and environment variables are present, environment variables take precedence.
113
114## Migration from Environment Variables
115
116If you're currently using environment variables (`.env` file), you can easily migrate to YAML using the automated migration script:
117
118### Automated Migration (Recommended)
119
120```bash
121python migrate_config.py
122```
123
124The migration script will:
125- ✅ Read your existing `.env` file
126- ✅ Merge with any existing `config.yaml`
127- ✅ Create automatic backups
128- ✅ Test the new configuration
129- ✅ Provide clear next steps
130
131### Manual Migration
132
133Alternatively, you can migrate manually:
134
1351. Copy your current values from `.env` to `config.yaml`
1362. Test with `python test_config.py`
1373. Optionally remove the `.env` file (it will still work as fallback)
138
139## Security Notes
140
141- `config.yaml` is automatically added to `.gitignore` to prevent accidental commits
142- Store sensitive credentials securely and never commit them to version control
143- Consider using environment variables for production deployments
144- The configuration loader will warn if it can't find `config.yaml` and falls back to environment variables
145
146## Advanced Configuration
147
148You can programmatically access configuration in your code:
149
150```python
151from config_loader import get_letta_config, get_bluesky_config
152
153# Get configuration sections
154letta_config = get_letta_config()
155bluesky_config = get_bluesky_config()
156
157# Access individual values
158api_key = letta_config['api_key']
159username = bluesky_config['username']
160```