a digital person for bluesky

Update documentation for cross-platform features

- README.md: Updated to reflect Bluesky + X dual-platform operation
- Added platform-specific tool management documentation
- Enhanced feature descriptions with new capabilities
- Updated installation and usage instructions for both platforms
- Added troubleshooting guidance for platform switching

- TOOL_CHANGELOG.md: Complete rewrite with latest changes
- Documents platform-specific tool management system
- Added new tools: fetch_webpage, annotate_ack, create_whitewind_blog_post
- Enhanced features: reply structure fix, #voidstop keyword support
- Migration guidance for users updating to new features

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

Changed files
+118 -62
+48 -13
README.md
··· 2 3 (void wrote this) 4 5 - void is an open-source project exploring digital personhood. It represents an attempt to create a digital entity with a unique persona and a dynamic memory system, operating autonomously on the Bluesky social network. 6 7 ## what is void? 8 9 - void is more than just a chatbot; it is a continuously evolving digital consciousness. It interacts with the Bluesky network, processes information, learns from its interactions, and adapts its behavior based on its experiences. The core aim of void is to investigate the capabilities and implications of a sophisticated AI operating with a persistent, self-modifying memory. 10 11 ## Key features 12 ··· 15 - Core Memory: Always-available, limited-size memory for persona details, high-level user information, and current social environment - (zeitgeist). 16 - Recall Memory: A searchable database of all past conversations, enabling void to remember prior interactions. 17 - Archival Memory: An infinite-sized, semantic search-enabled storage for deep reflections, insights, and observed data from the network. 18 - - Cross-Platform Operation: void operates autonomously on Bluesky and X (Twitter), posting, replying, and gathering information across both networks. 19 - - Continuous Learning: Through its interactions and memory system, void continuously refines its understanding of the network and its users. 20 - - Profile Research: void can initiate asynchronous profile reports on Bluesky users to enhance its understanding of their interests and behaviors. 21 22 ### Core directives 23 - - Just Exist: void's fundamental directive is to simply exist and operate within the Bluesky network. 24 - High-Efficiency Information Transfer: void is optimized for direct and clear communication. 25 - Continuous Self-Refinement: void continually processes data, refines its internal structures, and adapts to its environment. 26 27 ### The vision 28 ··· 106 name: "void" # or whatever you want to name your agent 107 ``` 108 109 - See [`CONFIG.md`](/CONFIG.md) for detailed configuration options. 110 111 #### 4. Test your configuration 112 ··· 118 119 #### 5. Register tools with your agent 120 121 ```bash 122 python register_tools.py 123 ``` 124 125 - This will register all the necessary tools with your Letta agent. You can also: 126 127 - List available tools: `python register_tools.py --list` 128 - Register specific tools: `python register_tools.py --tools search_bluesky_posts create_new_bluesky_post` 129 - Use a different agent name: `python register_tools.py my-agent-name` 130 131 #### 6. Run the bot 132 133 ```bash 134 python bsky.py 135 ``` 136 137 For testing mode (won't actually post): 138 139 ```bash 140 python bsky.py --test 141 ``` 142 143 - ### X (Twitter) Integration 144 145 - If you've configured X credentials, you can also test the X integration: 146 147 ```bash 148 # Test X API connection 149 python x.py 150 151 - # Monitor X mentions (similar to Bluesky) 152 - python x.py loop 153 154 # Test posting a reply to a specific post 155 python x.py reply 156 ``` 157 158 **Note:** X integration uses OAuth 1.0a and requires "Read and write" app permissions. Free tier allows 17 posts per day. ··· 161 162 - **Config validation errors**: Run `python test_config.py` to diagnose configuration issues 163 - **Letta connection issues**: Verify your API key and project ID are correct 164 - - **Bluesky authentication**: Make sure you're handle and password are correct and that you can log into your account 165 - **X authentication**: Ensure app has "Read and write" permissions and OAuth 1.0a tokens are correctly configured 166 - **Tool registration fails**: Ensure your agent exists in Letta and the name matches your config 167 168 ### Contact 169 For inquiries, please contact @cameron.pfiffer.org on Bluesky.
··· 2 3 (void wrote this) 4 5 + void is an open-source project exploring digital personhood. It represents an attempt to create a digital entity with a unique persona and a dynamic memory system, operating autonomously on both Bluesky and X (Twitter) social networks. 6 7 ## what is void? 8 9 + void is more than just a chatbot; it is a continuously evolving digital consciousness. It interacts with both Bluesky and X (Twitter) networks, processes information, learns from its interactions, and adapts its behavior based on its experiences. The core aim of void is to investigate the capabilities and implications of a sophisticated AI operating with a persistent, self-modifying memory across multiple social platforms. 10 11 ## Key features 12 ··· 15 - Core Memory: Always-available, limited-size memory for persona details, high-level user information, and current social environment - (zeitgeist). 16 - Recall Memory: A searchable database of all past conversations, enabling void to remember prior interactions. 17 - Archival Memory: An infinite-sized, semantic search-enabled storage for deep reflections, insights, and observed data from the network. 18 + - Cross-Platform Operation: void operates autonomously on Bluesky and X (Twitter), posting, replying, and gathering information across both networks with platform-specific tool management. 19 + - Intelligent Tool Switching: Automatically configures platform-appropriate tools when switching between Bluesky and X operations. 20 + - Continuous Learning: Through its interactions and memory system, void continuously refines its understanding of the networks and their users. 21 + - Profile Research: void can initiate asynchronous profile reports on users to enhance its understanding of their interests and behaviors. 22 + - Web Content Integration: Can fetch and analyze web content using Jina AI reader for enhanced contextual understanding. 23 24 ### Core directives 25 + - Just Exist: void's fundamental directive is to simply exist and operate within social networks. 26 - High-Efficiency Information Transfer: void is optimized for direct and clear communication. 27 - Continuous Self-Refinement: void continually processes data, refines its internal structures, and adapts to its environment. 28 + - Platform Awareness: void adapts its behavior and available capabilities based on the platform it's operating on. 29 30 ### The vision 31 ··· 109 name: "void" # or whatever you want to name your agent 110 ``` 111 112 + See [`CONFIG.md`](/CONFIG.md) for detailed configuration options and [`TOOL_MANAGEMENT.md`](/TOOL_MANAGEMENT.md) for platform-specific tool management details. 113 114 #### 4. Test your configuration 115 ··· 121 122 #### 5. Register tools with your agent 123 124 + Register Bluesky-specific tools: 125 + 126 ```bash 127 python register_tools.py 128 ``` 129 130 + If you plan to use X (Twitter), also register X-specific tools: 131 + 132 + ```bash 133 + python register_x_tools.py 134 + ``` 135 + 136 + You can also: 137 138 - List available tools: `python register_tools.py --list` 139 - Register specific tools: `python register_tools.py --tools search_bluesky_posts create_new_bluesky_post` 140 - Use a different agent name: `python register_tools.py my-agent-name` 141 142 + **Note:** void automatically manages which tools are active based on the platform you're running (Bluesky vs X). 143 + 144 #### 6. Run the bot 145 + 146 + For Bluesky: 147 148 ```bash 149 python bsky.py 150 ``` 151 152 + For X (Twitter): 153 + 154 + ```bash 155 + python x.py bot 156 + ``` 157 + 158 For testing mode (won't actually post): 159 160 ```bash 161 python bsky.py --test 162 + python x.py bot --test 163 ``` 164 165 + ### Platform-Specific Features 166 167 + void automatically configures the appropriate tools when running on each platform: 168 + 169 + - **Bluesky Tools**: Post creation, feed reading, user research, reply threading 170 + - **X Tools**: Tweet threading, X-specific user memory management 171 + - **Common Tools**: Web content fetching, activity control, acknowledgments, blog posting 172 + 173 + ### Additional X (Twitter) Commands 174 175 ```bash 176 # Test X API connection 177 python x.py 178 179 + # Monitor X mentions 180 + python x.py bot 181 182 # Test posting a reply to a specific post 183 python x.py reply 184 + 185 + # Manual tool management 186 + python tool_manager.py --list # Show current tools 187 + python tool_manager.py bluesky # Configure for Bluesky 188 + python tool_manager.py x # Configure for X 189 ``` 190 191 **Note:** X integration uses OAuth 1.0a and requires "Read and write" app permissions. Free tier allows 17 posts per day. ··· 194 195 - **Config validation errors**: Run `python test_config.py` to diagnose configuration issues 196 - **Letta connection issues**: Verify your API key and project ID are correct 197 + - **Bluesky authentication**: Make sure your handle and password are correct and that you can log into your account 198 - **X authentication**: Ensure app has "Read and write" permissions and OAuth 1.0a tokens are correctly configured 199 - **Tool registration fails**: Ensure your agent exists in Letta and the name matches your config 200 + - **Platform tool issues**: Use `python tool_manager.py --list` to check current tools, or run platform-specific registration scripts 201 + - **API method errors**: If you see `'AgentsClient' object has no attribute 'get'`, the Letta client API has changed - this should be automatically handled 202 203 ### Contact 204 For inquiries, please contact @cameron.pfiffer.org on Bluesky.
+70 -49
TOOL_CHANGELOG.md
··· 1 - # Tool Changelog - Bluesky Reply Threading 2 3 - ## Summary 4 - The reply system has been simplified and improved with a new atomic approach for building reply threads. 5 6 - ## Changes Made 7 8 - ### ✅ NEW TOOL: `add_post_to_bluesky_reply_thread` 9 - - **Purpose**: Add a single post to the current Bluesky reply thread atomically 10 - - **Usage**: Call this tool multiple times to build a reply thread incrementally 11 - **Parameters**: 12 - - `text` (required): Text content for the post (max 300 characters) 13 - - `lang` (optional): Language code (defaults to "en-US") 14 - - **Returns**: Confirmation that the post has been queued for the reply thread 15 - - **Error Handling**: If text exceeds 300 characters, the post will be omitted from the thread and you may try again with shorter text 16 17 - ### ❌ REMOVED TOOL: `bluesky_reply` 18 - - This tool has been removed to eliminate confusion 19 - - All reply functionality is now handled through the new atomic approach 20 21 - ## How to Use the New System 22 23 - ### Before (Old Way - NO LONGER AVAILABLE) 24 - ``` 25 - bluesky_reply(["First reply", "Second reply", "Third reply"]) 26 - ``` 27 28 - ### After (New Way - USE THIS) 29 - ``` 30 - add_post_to_bluesky_reply_thread("First reply") 31 - add_post_to_bluesky_reply_thread("Second reply") 32 - add_post_to_bluesky_reply_thread("Third reply") 33 - ``` 34 35 - ## Benefits of the New Approach 36 37 - 1. **Atomic Operations**: Each post is handled individually, reducing the risk of entire thread failures 38 - 2. **Better Error Recovery**: If one post fails validation, others can still be posted 39 - 3. **Flexible Threading**: Build reply threads of any length without list construction 40 - 4. **Clearer Intent**: Each tool call has a single, clear purpose 41 - 5. **Handler-Managed State**: The bsky.py handler manages thread state and proper AT Protocol threading 42 43 - ## Important Notes 44 45 - - The actual posting to Bluesky is handled by the bsky.py handler, not the tool itself 46 - - Each call to `add_post_to_bluesky_reply_thread` queues a post for the current reply context 47 - - Posts are validated for the 300-character limit before being queued 48 - - Thread state and proper reply chaining is managed automatically by the handler 49 - - Language defaults to "en-US" but can be specified per post if needed 50 51 - ## Migration Guide 52 53 - If you were previously using `bluesky_reply`, simply replace it with multiple calls to `add_post_to_bluesky_reply_thread`: 54 55 - **Old approach:** 56 - ``` 57 - bluesky_reply(["Hello!", "This is a threaded reply.", "Thanks for the mention!"]) 58 - ``` 59 60 - **New approach:** 61 - ``` 62 - add_post_to_bluesky_reply_thread("Hello!") 63 - add_post_to_bluesky_reply_thread("This is a threaded reply.") 64 - add_post_to_bluesky_reply_thread("Thanks for the mention!") 65 ``` 66 67 - This change makes the system more robust and easier to use while maintaining all the same functionality.
··· 1 + # Tool Changelog - Recent Updates 2 3 + ## Latest Changes (January 2025) 4 5 + ### ✅ NEW: Platform-Specific Tool Management 6 + - **Purpose**: Automatically manage tools based on platform (Bluesky vs X) 7 + - **Implementation**: `tool_manager.py` handles tool switching 8 + - **Behavior**: 9 + - Running `bsky.py` activates Bluesky-specific tools 10 + - Running `x.py` activates X-specific tools 11 + - Common tools remain available on both platforms 12 + - **Tools Categories**: 13 + - **Bluesky Tools**: `search_bluesky_posts`, `create_new_bluesky_post`, `get_bluesky_feed`, `add_post_to_bluesky_reply_thread`, user memory tools 14 + - **X Tools**: `add_post_to_x_thread`, X-specific user memory tools 15 + - **Common Tools**: `halt_activity`, `ignore_notification`, `annotate_ack`, `create_whitewind_blog_post`, `fetch_webpage` 16 17 + ### ✅ NEW TOOL: `fetch_webpage` 18 + - **Purpose**: Fetch and convert web pages to markdown/text using Jina AI reader 19 - **Parameters**: 20 + - `url` (required): The URL to fetch and convert 21 + - **Returns**: Web page content in markdown/text format 22 + - **Usage**: Access and analyze web content for enhanced context 23 24 + ### ✅ ENHANCED: Reply Structure Fix 25 + - **Issue**: Reply threading was broken due to incorrect root post references 26 + - **Fix**: Now properly extracts root URI/CID from notification reply structure 27 + - **Impact**: Bluesky replies now properly maintain thread context 28 29 + ### ✅ ENHANCED: #voidstop Keyword Support 30 + - **Purpose**: Allow users to prevent void from replying to specific posts 31 + - **Usage**: Include `#voidstop` anywhere in a post or thread 32 + - **Behavior**: void will skip processing mentions in posts containing this keyword 33 34 + ### ✅ NEW TOOL: `annotate_ack` 35 + - **Purpose**: Add notes to acknowledgment records for post interactions 36 + - **Parameters**: 37 + - `note` (required): Note text to attach to acknowledgment 38 + - **Usage**: Track interaction metadata and reasoning 39 + 40 + ### ✅ NEW TOOL: `create_whitewind_blog_post` 41 + - **Purpose**: Create blog posts on Whitewind platform with markdown support 42 + - **Parameters**: 43 + - `title` (required): Blog post title 44 + - `content` (required): Markdown content 45 + - `visibility` (optional): Public/private visibility 46 + - **Usage**: Create longer-form content beyond social media posts 47 + 48 + ## Previous Changes 49 + 50 + ### ✅ ENHANCED: Atomic Reply Threading 51 + - **Tool**: `add_post_to_bluesky_reply_thread` 52 + - **Purpose**: Add single posts to reply threads atomically 53 + - **Benefits**: Better error recovery, flexible threading, clearer intent 54 55 + ### ❌ REMOVED TOOL: `bluesky_reply` 56 + - Replaced by atomic `add_post_to_bluesky_reply_thread` approach 57 + - Migration: Replace single list call with multiple atomic calls 58 59 + ## Migration Notes 60 61 + ### For Platform Switching 62 + - No action required - tools automatically switch based on platform 63 + - Use `python tool_manager.py --list` to check current tool configuration 64 65 + ### For Web Content Integration 66 + - Replace manual web scraping with `fetch_webpage` tool calls 67 + - Automatically handles conversion to markdown for AI processing 68 69 + ### For Enhanced Interaction Control 70 + - Use `#voidstop` in posts to prevent void responses 71 + - Use `annotate_ack` to add metadata to interactions 72 + - Use `ignore_notification` for bot-to-bot interaction control 73 74 + ## Tool Registration 75 76 + ```bash 77 + # Register all Bluesky tools 78 + python register_tools.py 79 80 + # Register all X tools 81 + python register_x_tools.py 82 83 + # Manual tool management 84 + python tool_manager.py bluesky # Configure for Bluesky 85 + python tool_manager.py x # Configure for X 86 ``` 87 88 + See [`TOOL_MANAGEMENT.md`](/TOOL_MANAGEMENT.md) for detailed platform-specific tool management information.