{"id":48147605,"url":"https://github.com/ihuzaifashoukat/twitter-automation-ai","last_synced_at":"2026-04-04T17:01:46.467Z","repository":{"id":251423964,"uuid":"837374387","full_name":"ihuzaifashoukat/twitter-automation-ai","owner":"ihuzaifashoukat","description":"Advanced Python-based Twitter (X.com) automation framework using Selenium and LLMs (OpenAI, Gemini) for multi-account scraping, posting, engagement, and content analysis. Modular and configurable.","archived":false,"fork":false,"pushed_at":"2025-09-05T15:53:22.000Z","size":122,"stargazers_count":56,"open_issues_count":0,"forks_count":10,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-05T17:50:47.672Z","etag":null,"topics":["automation","content-creation","gemini-api","llm","multi-account","openai-api","python-automation","selenium","social-media-bot","twitter-auto-comment","twitter-automation","twitter-bot","twitter-bot-tweepy","twitter-bots","web-scraping","x-com"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ihuzaifashoukat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-08-02T20:26:29.000Z","updated_at":"2025-09-05T15:53:25.000Z","dependencies_parsed_at":"2024-08-02T23:16:10.454Z","dependency_job_id":"e1e7b0c1-3199-4db6-b98e-f5f830475ec7","html_url":"https://github.com/ihuzaifashoukat/twitter-automation-ai","commit_stats":null,"previous_names":["ihuzaifashoukat/twitter-automation-ai"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ihuzaifashoukat/twitter-automation-ai","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ihuzaifashoukat%2Ftwitter-automation-ai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ihuzaifashoukat%2Ftwitter-automation-ai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ihuzaifashoukat%2Ftwitter-automation-ai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ihuzaifashoukat%2Ftwitter-automation-ai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ihuzaifashoukat","download_url":"https://codeload.github.com/ihuzaifashoukat/twitter-automation-ai/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ihuzaifashoukat%2Ftwitter-automation-ai/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31407391,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","content-creation","gemini-api","llm","multi-account","openai-api","python-automation","selenium","social-media-bot","twitter-auto-comment","twitter-automation","twitter-bot","twitter-bot-tweepy","twitter-bots","web-scraping","x-com"],"created_at":"2026-04-04T17:01:45.210Z","updated_at":"2026-04-04T17:01:46.221Z","avatar_url":"https://github.com/ihuzaifashoukat.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Advanced Twitter Automation AI\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Python Version](https://img.shields.io/badge/python-3.9%2B-blue.svg)](https://www.python.org/downloads/)\n[![Issues](https://img.shields.io/github/issues/ihuzaifashoukat/twitter-automation-ai)](https://github.com/ihuzaifashoukat/twitter-automation-ai/issues)\n[![Forks](https://img.shields.io/github/forks/ihuzaifashoukat/twitter-automation-ai)](https://github.com/ihuzaifashoukat/twitter-automation-ai/network/members)\n[![Stars](https://img.shields.io/github/stars/ihuzaifashoukat/twitter-automation-ai)](https://github.com/ihuzaifashoukat/twitter-automation-ai/stargazers)\n[![Contributors](https://img.shields.io/github/contributors/ihuzaifashoukat/twitter-automation-ai)](https://github.com/ihuzaifashoukat/twitter-automation-ai/graphs/contributors)\n\n**Advanced Twitter Automation AI** is a modular Python-based framework for automating X (Twitter) at scale. It supports multiple accounts, robust Selenium automation (with optional undetected Chrome + stealth), per‑account proxies and rotation, structured LLM generation/analysis (OpenAI, Azure OpenAI, Gemini), community posting, and per‑account metrics/logs.\n\n## Table of Contents\n\n- [Advanced Twitter Automation AI](#advanced-twitter-automation-ai)\n  - [Table of Contents](#table-of-contents)\n  - [Features](#features)\n  - [Technology Stack](#technology-stack)\n  - [Project Structure](#project-structure)\n  - [Prerequisites](#prerequisites)\n  - [Setup and Configuration](#setup-and-configuration)\n    - [1. Clone Repository](#1-clone-repository)\n    - [2. Create Virtual Environment](#2-create-virtual-environment)\n    - [3. Install Dependencies](#3-install-dependencies)\n    - [4. Configure Accounts (`config/accounts.json`)](#4-configure-accounts-configaccountsjson)\n    - [5. Configure Global Settings (`config/settings.json`)](#5-configure-global-settings-configsettingsjson)\n    - [6. Environment Variables (`.env`) (Optional)](#6-environment-variables-env-optional)\n  - [Running the Application](#running-the-application)\n  - [Development Notes](#development-notes)\n  - [Contributing](#contributing)\n  - [Code of Conduct](#code-of-conduct)\n  - [License](#license)\n  - [TODO / Future Enhancements](#todo--future-enhancements)\n\n## Features\n\n*   **Multi-Account Management:** Seamlessly manage and automate actions for multiple Twitter accounts.\n*   **Content Scraping:**\n    *   Scrape tweets based on keywords, user profiles, and news/research sites.\n    *   Extract tweet content, user information, and engagement metrics.\n*   **Content Publishing:**\n    *   Post new tweets, including text and media.\n    *   Reply to tweets based on various triggers.\n    *   Repost (retweet) content from competitor profiles or based on engagement metrics.\n*   **LLM Integration:**\n    *   Utilize OpenAI (GPT models) and Google Gemini for:\n        *   Generating tweet content and replies.\n        *   Analyzing tweet threads and sentiment.\n        *   Summarizing articles for posting.\n    *   Flexible LLM preference settings at global and per-account levels.\n*   **Engagement Automation:**\n    *   Engage with tweets through likes, replies, and reposts.\n    *   Analyze competitor activity and engage strategically.\n*   **Configurable Automation:**\n    *   Fine-grained control over automation parameters via JSON configuration files.\n    *   Per-account overrides for keywords, target profiles, LLM settings, and action behaviors.\n*   **Browser Automation:** Uses Selenium for interacting with Twitter, handling dynamic content and complex UI elements.\n*   **Modular Design:** Easily extendable with new features and functionalities.\n*   **Logging:** Comprehensive logging for monitoring and debugging.\n*   **Community Posting:** Switch audience and post into configured communities (by ID or name).\n*   **Stealth Mode (Chrome):** Optional undetected-chromedriver + selenium-stealth to reduce fingerprinting.\n*   **Proxies:** Per-account proxies, named proxy pools, and rotation strategies (hash/round-robin) with env interpolation.\n*   **LLM Structured Prompts:** Strict JSON prompting with few-shots, system prompts, and robust extraction.\n*   **Metrics:** Per-account JSON summaries and JSONL event logs for observability.\n\n## Technology Stack\n\n*   **Programming Language:** Python 3.9+\n*   **Browser Automation:** Selenium, WebDriver Manager\n*   **HTTP Requests:** Requests\n*   **Data Validation:** Pydantic\n*   **LLM Integration:** Langchain (for Google GenAI), OpenAI SDK\n*   **Stealth:** undetected-chromedriver, selenium-stealth (optional)\n*   **Configuration:** JSON, python-dotenv\n*   **Web Interaction:** Fake Headers (for mimicking browser headers)\n\n## Project Structure\n\nThe project is organized as follows:\n\n```\ntwitter-automation-ai/\n├── config/\n│   ├── accounts.json       # Configuration for multiple Twitter accounts\n│   └── settings.json       # Global settings (API keys, automation parameters)\n├── src/\n│   ├── core/               # Core modules (browser, LLM, config)\n│   │   ├── browser_manager.py\n│   │   ├── config_loader.py\n│   │   └── llm_service.py\n│   ├── features/           # Modules for Twitter features (scraper, publisher, etc.)\n│   │   ├── scraper.py\n│   │   ├── publisher.py\n│   │   └── engagement.py\n│   ├── utils/              # Utility modules (logger, file handler, etc.)\n│   │   ├── logger.py\n│   │   ├── file_handler.py\n│   │   ├── progress.py\n│   │   └── scroller.py\n│   ├── data_models.py      # Pydantic models for data structures\n│   ├── main.py             # Main orchestrator script\n│   └── __init__.py\n├── .env                    # Environment variables (optional, for API keys)\n├── requirements.txt        # Python dependencies\n├── .gitignore              # Specifies intentionally untracked files\n├── LICENSE                 # Project license\n├── CODE_OF_CONDUCT.md      # Contributor Code of Conduct\n├── CONTRIBUTING.md         # Guidelines for contributing\n└── README.md               # This file\n```\n\n## Prerequisites\n\n*   Python 3.9 or higher.\n*   A modern web browser (e.g., Chrome, Firefox) compatible with Selenium.\n\n## Setup and Configuration\n\nFollow these steps to set up and run the project:\n\n### Presets (Beginner-Friendly)\n\nQuick-start templates are available in `presets/`.\n\n- Settings presets: `presets/settings/*.json` (defaults, Chrome undetected, proxies hash/round-robin)\n- Accounts presets: `presets/accounts/*.json` (growth, brand_safe, replies_first, engagement_light, community_posting)\n- How to apply:\n  - cp `presets/settings/beginner-chrome-undetected.json` `config/settings.json`\n  - cp `presets/accounts/growth.json` `config/accounts.json`\n  - Edit placeholders for API keys, cookie paths, and community IDs.\n  - See `presets/README.md` and `data/README.md` (dummy cookies/proxies).\n\n### 1. Clone Repository\n\n```bash\ngit clone https://github.com/ihuzaifashoukat/twitter-automation-ai\ncd twitter-automation-ai\n```\n\n### 2. Create Virtual Environment\n\nIt's highly recommended to use a virtual environment:\n\n```bash\npython -m venv venv\n# On Windows\nvenv\\Scripts\\activate\n# On macOS/Linux\nsource venv/bin/activate\n```\n\n### 3. Install Dependencies\n\nInstall the required Python packages:\n\n```bash\npip install -r requirements.txt\n```\n\n### 4. Configure Accounts (`config/accounts.json`)\n\nThis file manages individual Twitter account configurations. It should be an array of account objects.\n\n*   **Key Fields per Account:**\n    *   `account_id`: A unique identifier for the account.\n    *   `is_active`: Boolean, set to `true` to enable automation for this account.\n    *   `cookie_file_path`: Path to a JSON file containing cookies for the account (e.g., `config/my_account_cookies.json`).\n    *   `cookies`: Alternatively, an array of cookie objects can be provided directly.\n    *   `proxy` (optional): Per-account proxy URL. Examples: `http://user:pass@host:port`, `socks5://host:port`.\n    *   `post_to_community` (optional): When `true`, switch the audience to a community before posting.\n    *   `community_id` (optional): Community ID used to select the audience (preferred).\n    *   `community_name` (optional): Fallback visible name in the audience picker if ID selection fails.\n    *   **Overrides:** You can specify per-account overrides for various settings like `target_keywords_override`, `competitor_profiles_override`, `llm_settings_override`, and `action_config_override`. If an override is not present, the global defaults from `config/settings.json` will be used.\n\n*   **Example `config/accounts.json` entry:**\n    ```json\n    // Minimal example: ONLY add the community fields you need; keep your existing structure as-is.\n    // Below shows adding community + (optional) proxy to one of your existing account objects:\n    {\n      \"account_id\": \"your_existing_account_id\",\n      \"is_active\": true,\n      \"cookie_file_path\": \"config/your_existing_cookie_file.json\",\n      // ... all your existing fields remain unchanged ...\n      \"proxy\": \"http://127.0.0.1:8888\",            // optional\n      \"post_to_community\": true,                    // optional\n      \"community_id\": \"1737236915810627584\",      // preferred when known\n      \"community_name\": \"One Piece\"                // fallback by visible name\n    }\n    ```\n    *(Refer to the example in the original README section for a more detailed structure if needed, or adapt based on current `data_models.py`.)*\n\n*   **Obtaining Cookies:** Use browser developer tools (e.g., \"EditThisCookie\" extension) to export cookies for `x.com` after logging in. Save them as a JSON array of cookie objects if using `cookie_file_path`.\n*   **Per-Account Proxy:** If set, the proxy overrides the global `browser_settings.proxy` for that account. Chrome uses `--proxy-server`; Firefox is configured via profile preferences (proxy auth prompts are not handled automatically).\n*   **Community Posting:** When `post_to_community` is true, the publisher clicks the \"Choose audience\" button in the composer and selects your community using `community_id` (preferred) or `community_name` as a fallback, then posts.\n*   Important: We do not require changing your existing `accounts.json` structure. Simply add the optional fields (`post_to_community`, `community_id`, `community_name`, and/or `proxy`) to the appropriate account objects.\n*   For rewrite-based posting to communities or personal profiles, ensure each account has competitor sources configured via `competitor_profiles` (or `competitor_profiles_override` in your current structure). The scraper uses these as input for rewriting and posting.\n\n### 5. Configure Global Settings (`config/settings.json`)\n\nThis file contains global configurations for the application.\n\n*   **Key Sections:**\n    *   `api_keys`: Store API keys for LLM services (e.g., `openai_api_key`, `gemini_api_key`).\n    *   `twitter_automation`:\n        *   `action_config`: Default behaviors for automation actions (e.g., `max_posts_per_run`, `min_likes_for_repost`).\n        *   `response_interval_seconds`: Default delay between actions.\n        *   `media_directory`: Path to store downloaded media.\n        *   `analysis_config`: Enable/disable relevance filters per pipeline and thresholds.\n          - `enable_relevance_filter.competitor_reposts` (bool), `thresholds.competitor_reposts_min` (0–1)\n          - `enable_relevance_filter.likes` (bool), `thresholds.likes_min` (0–1)\n        *   `engagement_decision`: If `enabled: true`, automatically chooses between repost/retweet/quote/like based on relevance and sentiment.\n          - `use_sentiment`: include sentiment in decision\n          - `thresholds.quote_min|retweet_min|repost_min`: relevance cutoffs (0–1)\n    *   `logging`: Configuration for the logger.\n*   `browser_settings`: Settings for Selenium WebDriver (e.g., `headless` mode).\n    - `type`: `chrome` or `firefox`. For best anti-detection, use Chrome with `use_undetected_chromedriver`.\n    - `use_undetected_chromedriver` (Chrome only): When `true`, uses `undetected-chromedriver` for stealthier automation.\n    - `enable_stealth` (Chrome only): When `true` and `selenium-stealth` is installed, applies additional anti-detection tweaks.\n    - `user_agent_generation`: `random` or `custom` with `custom_user_agent` string.\n    - `proxy`: Global proxy (can be overridden per account).\n    - `driver_options`: Extra Chrome/Firefox CLI options.\n    - `page_load_timeout_seconds`, `script_timeout_seconds`, `window_size`.\n\nLLM prompt engineering\n\n- LLM prompts now use stronger, schema-first instructions for structured JSON with optional few-shot examples and hard character limits.\n- `LLMService.generate_text` accepts an optional `system_prompt` and `messages` for OpenAI/Azure; Gemini concatenates system+user.\n- `LLMService.generate_structured` adds `few_shots`, `system_prompt`, and `hard_character_limit` to guide safer, parsable outputs.\n    *   `proxy_pools`: Named pools for per-account proxies. Use `\"pool:\u003cname\u003e\"` in account `proxy` to select from a pool.\n    *   `proxy_pool_strategy`: `hash` (stable per-account) or `round_robin` (rotates across runs/accounts).\n    *   `proxy_pool_state_file`: Persist file for round-robin counters (default `data/proxy_pools_state.json`).\n\n*   **Important Note:** Content source lists like `target_keywords`, `competitor_profiles`, etc., are primarily managed per-account in `config/accounts.json`. The global `action_config` in `settings.json` defines default *how* actions run, which can be overridden per account.\n\n### 6. Environment Variables (`.env`) (Optional)\n\nFor sensitive data like API keys, you can use a `.env` file in the project root. `python-dotenv` is included in `requirements.txt` to load these variables.\n\n*   Create a `.env` file:\n    ```env\n    OPENAI_API_KEY=\"your_openai_api_key\"\n    GEMINI_API_KEY=\"your_gemini_api_key\"\n    # Add other sensitive variables as needed\n    ```\n    The application is designed to prioritize environment variables for API keys if available.\n\n## Running the Application\n\nExecute the main orchestrator script from the project root:\n\n```bash\npython src/main.py\n```\n\nThe orchestrator will iterate through active accounts in `config/accounts.json` and perform actions based on their respective configurations and global settings.\n\n## Community Posting\n\nTo post into a community instead of your public timeline, set the following on the account object in `config/accounts.json`:\n\n- `post_to_community: true`\n- Provide at least one of:\n  - `community_id`: preferred (appears in URLs like `/i/communities/\u003cid\u003e`)\n  - `community_name`: fallback by the visible label in the audience picker\n\nHow selection works:\n- The app opens the “Choose audience” control, locates the audience menu container (dialog or `data-testid=\"HoverCard\"`), and attempts to click your community.\n- It scrolls the virtualized list to reveal off-screen items and uses JS-click fallbacks to avoid overlay interception.\n- After selection, it posts using the chosen audience.\n\nIf it fails to select your community:\n- Verify the account has joined the community and it appears under “My Communities”.\n- Provide a DOM snapshot from the audience menu in a GitHub issue so selectors can be tuned.\n\n## Keyword Engagement\n\nControls live under `twitter_automation.action_config` (globally) and per-account `action_config_override`:\n\n- Replies: `enable_keyword_replies`, `max_replies_per_keyword_run`, optional recency `reply_only_to_recent_tweets_hours`.\n- Likes: `enable_liking_tweets`, `max_likes_per_run`, `like_tweets_from_keywords` (defaults to account `target_keywords` when omitted).\n- Retweets (new): `enable_keyword_retweets`, `max_retweets_per_keyword_run`.\n\nRelevance filters (optional):\n- `enable_relevance_filter_keyword_replies`, `relevance_threshold_keyword_replies`\n- `enable_relevance_filter_likes`, `relevance_threshold_likes`\n\n## Troubleshooting\n\n- ElementClickInterceptedException or “not clickable”:\n  - The app automatically scrolls into view, waits for the composer mask to disappear, and uses JS-click or Ctrl+Enter fallbacks.\n  - If it persists, consider adding small delays or switching to Chrome (`browser_settings.type: \"chrome\"`).\n\n- Community not selected:\n  - Ensure `post_to_community: true` and set `community_id` (best) or `community_name`.\n  - The audience list is virtualized; the app scrolls within the menu to reveal items. If your UI differs, open an issue with a DOM snippet.\n\n- WebDriver downloads blocked or offline:\n  - The app prefers local drivers (`chromedriver`, `geckodriver`) if found in PATH or via `chrome_driver_path`/`gecko_driver_path`. Install via your OS package manager or ensure they’re in PATH.\n\n- Gemini errors (429/500):\n  - Use `gemini-1.5-flash-latest`, reduce calls, or configure OpenAI/Azure.\n\n## LLM Prompting\n\n- Structured analysis and generation use strict schema-first prompts with robust JSON extraction. OpenAI JSON mode is attempted when available.\n- Internally supports system prompts and few-shot examples for more controllable outputs.\n- Content generation for posts composes final text (with optional hashtags) within 280 chars.\n\n## Browser \u0026 Stealth\n\n- Chrome: set `browser_settings.type` to `\"chrome\"` and enable `use_undetected_chromedriver`. Optional `enable_stealth` applies extra anti-detection tweaks.\n- Firefox: standard Selenium with proxy prefs; auth prompts are not auto-handled.\n- Headless: Chrome uses `--headless=new` for better parity. User-Agent randomized by default.\n\n## Proxies\n\n- Per-account `proxy` overrides global. Use `\"pool:\u003cname\u003e\"` to select from `browser_settings.proxy_pools`.\n- Rotation strategies: `hash` (stable per-account) or `round_robin` (uses `data/proxy_pools_state.json`).\n- Env interpolation: `${ENV_VAR}` inside proxy strings is expanded at runtime.\n\n### Recommended Proxy Providers\n\n#### ThorData\n[![ThorData](./assets/thordata.png)](https://affiliate.thordata.com/4fv5yu791smh)\n\n**ThorData** provides high-performance residential proxies optimized for social media automation and scraping. \n\n## Cookies\n\n- Point `cookie_file_path` to a JSON array of cookies for `x.com`. The app navigates to `browser_settings.cookie_domain_url` before injecting cookies.\n- Example file: `data/cookies/dummy_cookies_example.json`.\n\n## Metrics \u0026 Logs\n\n- Summary per account: `data/metrics/\u003caccount_id\u003e.json` (counters for posts, replies, retweets, quote_tweets, likes, errors; last run timestamps)\n- Structured events per account: `logs/accounts/\u003caccount_id\u003e.jsonl` (JSON lines of each action attempt with metadata)\n\n## Configuration Reference\n\nSee `docs/CONFIG_REFERENCE.md` for a concise schema of `config/settings.json` and `config/accounts.json`, including per-account `action_config_override` fields and decision thresholds.\n\n## Development Notes\n\n*   **Logging:** Detailed logs are output to the console. Configuration is in `config/settings.json` and managed by `src/utils/logger.py`.\n*   **Selenium Selectors:** Twitter's (X.com) UI is subject to change. XPath and CSS selectors in `src/features/scraper.py` and `src/features/publisher.py` may require updates if the site structure changes.\n*   **Error Handling:** The project includes basic error handling. Enhancements with more specific exception management and retry mechanisms are potential areas for improvement.\n*   **Extensibility:** To add new features:\n    1.  Define necessary data structures in `src/data_models.py`.\n    2.  Create new feature modules within the `src/features/` directory.\n    3.  Integrate the new module into the `TwitterOrchestrator` in `src/main.py`.\n\n## Contributing\n\nContributions are welcome! Please read our [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on how to contribute, report bugs, or suggest enhancements.\n\n## Code of Conduct\n\nTo ensure a welcoming and inclusive environment, this project adheres to a [Code of Conduct](CODE_OF_CONDUCT.md). Please review and follow it in all your interactions with the project.\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\n\n## TODO / Future Enhancements\n\n*   GUI or web interface for managing accounts, settings, and monitoring.\n*   Advanced error handling, including robust retry logic for network issues or UI changes.\n*   Integration with proxy services for enhanced multi-account management and anonymity.\n*   More detailed per-account activity logging and analytics.\n*   Improved AI-driven content analysis and decision-making.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fihuzaifashoukat%2Ftwitter-automation-ai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fihuzaifashoukat%2Ftwitter-automation-ai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fihuzaifashoukat%2Ftwitter-automation-ai/lists"}