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 2 3 3 (void wrote this) 4 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. 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 6 7 7 ## what is void? 8 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. 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 10 11 11 ## Key features 12 12 ··· 15 15 - Core Memory: Always-available, limited-size memory for persona details, high-level user information, and current social environment - (zeitgeist). 16 16 - Recall Memory: A searchable database of all past conversations, enabling void to remember prior interactions. 17 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. 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. 21 23 22 24 ### Core directives 23 - - Just Exist: void's fundamental directive is to simply exist and operate within the Bluesky network. 25 + - Just Exist: void's fundamental directive is to simply exist and operate within social networks. 24 26 - High-Efficiency Information Transfer: void is optimized for direct and clear communication. 25 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. 26 29 27 30 ### The vision 28 31 ··· 106 109 name: "void" # or whatever you want to name your agent 107 110 ``` 108 111 109 - See [`CONFIG.md`](/CONFIG.md) for detailed configuration options. 112 + See [`CONFIG.md`](/CONFIG.md) for detailed configuration options and [`TOOL_MANAGEMENT.md`](/TOOL_MANAGEMENT.md) for platform-specific tool management details. 110 113 111 114 #### 4. Test your configuration 112 115 ··· 118 121 119 122 #### 5. Register tools with your agent 120 123 124 + Register Bluesky-specific tools: 125 + 121 126 ```bash 122 127 python register_tools.py 123 128 ``` 124 129 125 - This will register all the necessary tools with your Letta agent. You can also: 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: 126 137 127 138 - List available tools: `python register_tools.py --list` 128 139 - Register specific tools: `python register_tools.py --tools search_bluesky_posts create_new_bluesky_post` 129 140 - Use a different agent name: `python register_tools.py my-agent-name` 130 141 142 + **Note:** void automatically manages which tools are active based on the platform you're running (Bluesky vs X). 143 + 131 144 #### 6. Run the bot 145 + 146 + For Bluesky: 132 147 133 148 ```bash 134 149 python bsky.py 135 150 ``` 136 151 152 + For X (Twitter): 153 + 154 + ```bash 155 + python x.py bot 156 + ``` 157 + 137 158 For testing mode (won't actually post): 138 159 139 160 ```bash 140 161 python bsky.py --test 162 + python x.py bot --test 141 163 ``` 142 164 143 - ### X (Twitter) Integration 165 + ### Platform-Specific Features 144 166 145 - If you've configured X credentials, you can also test the X integration: 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 146 174 147 175 ```bash 148 176 # Test X API connection 149 177 python x.py 150 178 151 - # Monitor X mentions (similar to Bluesky) 152 - python x.py loop 179 + # Monitor X mentions 180 + python x.py bot 153 181 154 182 # Test posting a reply to a specific post 155 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 156 189 ``` 157 190 158 191 **Note:** X integration uses OAuth 1.0a and requires "Read and write" app permissions. Free tier allows 17 posts per day. ··· 161 194 162 195 - **Config validation errors**: Run `python test_config.py` to diagnose configuration issues 163 196 - **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 197 + - **Bluesky authentication**: Make sure your handle and password are correct and that you can log into your account 165 198 - **X authentication**: Ensure app has "Read and write" permissions and OAuth 1.0a tokens are correctly configured 166 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 167 202 168 203 ### Contact 169 204 For inquiries, please contact @cameron.pfiffer.org on Bluesky.
+70 -49
TOOL_CHANGELOG.md
··· 1 - # Tool Changelog - Bluesky Reply Threading 1 + # Tool Changelog - Recent Updates 2 2 3 - ## Summary 4 - The reply system has been simplified and improved with a new atomic approach for building reply threads. 3 + ## Latest Changes (January 2025) 5 4 6 - ## Changes Made 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` 7 16 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 17 + ### ✅ NEW TOOL: `fetch_webpage` 18 + - **Purpose**: Fetch and convert web pages to markdown/text using Jina AI reader 11 19 - **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 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 16 23 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 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 20 28 21 - ## How to Use the New System 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 22 33 23 - ### Before (Old Way - NO LONGER AVAILABLE) 24 - ``` 25 - bluesky_reply(["First reply", "Second reply", "Third reply"]) 26 - ``` 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 27 54 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 - ``` 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 34 58 35 - ## Benefits of the New Approach 59 + ## Migration Notes 36 60 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 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 42 64 43 - ## Important Notes 65 + ### For Web Content Integration 66 + - Replace manual web scraping with `fetch_webpage` tool calls 67 + - Automatically handles conversion to markdown for AI processing 44 68 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 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 50 73 51 - ## Migration Guide 74 + ## Tool Registration 52 75 53 - If you were previously using `bluesky_reply`, simply replace it with multiple calls to `add_post_to_bluesky_reply_thread`: 76 + ```bash 77 + # Register all Bluesky tools 78 + python register_tools.py 54 79 55 - **Old approach:** 56 - ``` 57 - bluesky_reply(["Hello!", "This is a threaded reply.", "Thanks for the mention!"]) 58 - ``` 80 + # Register all X tools 81 + python register_x_tools.py 59 82 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!") 83 + # Manual tool management 84 + python tool_manager.py bluesky # Configure for Bluesky 85 + python tool_manager.py x # Configure for X 65 86 ``` 66 87 67 - This change makes the system more robust and easier to use while maintaining all the same functionality. 88 + See [`TOOL_MANAGEMENT.md`](/TOOL_MANAGEMENT.md) for detailed platform-specific tool management information.