A local-first, full-stack application that automates LinkedIn engagement using your existing Chrome browser session via Remote Debugging Port.
- Browser Connection: Connects to existing Chrome session (no login needed)
- Stealth Mechanics: Human-like behavior with random delays, mouse movements, and scrolling
- Auto Engagement: Automatically likes and comments on posts
- Connection Management: Sends personalized connection requests
- Inbox Handling: Reads and drafts replies to messages using AI
- Safety Limits: Daily action limits to prevent bans
- Real-time Dashboard: Flutter desktop app with live terminal and safety gauges
- Python 3.12+
- Flutter SDK (for desktop support)
- Chrome/Chromium with remote debugging enabled
- Google Gemini API Key
# Windows
chrome.exe --remote-debugging-port=9222
# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
# Linux
google-chrome --remote-debugging-port=9222cd backend
pip install -r requirements.txt
playwright install chromium
# Set your Gemini API key
export GEMINI_API_KEY=your_api_key_here
# Or create a .env file with GEMINI_API_KEY=your_api_key_here
# Run the backend
python main.pyThe backend will start on http://localhost:8000
cd frontend
flutter pub get
flutter run -d windows # or -d macos, -d linuxLinkedIn Autopilot/
├── backend/
│ ├── browser_manager.py # Browser CDP connection
│ ├── humanizer.py # Stealth mechanics
│ ├── ai_service.py # Gemini AI integration
│ ├── feed_scanner.py # LinkedIn feed scanning
│ ├── auto_engager.py # Auto like/comment
│ ├── connection_manager.py # Connection requests
│ ├── inbox_handler.py # Message handling
│ ├── daily_limit_service.py # Safety limits
│ ├── main.py # FastAPI application
│ ├── database/
│ │ ├── models.py # SQLAlchemy models
│ │ └── database.py # Database setup
│ └── requirements.txt
├── frontend/
│ ├── lib/
│ │ ├── main.dart # Flutter app entry
│ │ ├── screens/
│ │ │ └── dashboard_screen.dart
│ │ ├── widgets/
│ │ │ ├── terminal_widget.dart
│ │ │ ├── control_panel_widget.dart
│ │ │ └── safety_gauge_widget.dart
│ │ └── providers/
│ │ ├── websocket_provider.dart
│ │ └── api_provider.dart
│ └── pubspec.yaml
└── README.md
- Start Chrome with remote debugging (port 9222)
- Log into LinkedIn in that Chrome window
- Start the backend:
python backend/main.py - Start the frontend:
flutter runfrom the frontend directory - Use the dashboard to:
- View real-time logs in the terminal
- Toggle auto-engagement features
- Start agent tasks (Engage Feed, Check Inbox)
- Monitor safety limits
- Max Connects: 20/day
- Max Likes: 50/day
- Max Comments: 30/day
- Max Messages: 10/day
The AI service uses Google Gemini 1.5 Flash for:
- Generating comments on posts
- Creating personalized connection notes
- Drafting message replies (with RAG from resume.txt)
- Daily Limits: Prevents exceeding LinkedIn's rate limits
- Human-like Behavior: Random delays, mouse movements, scrolling
- Error Handling: Graceful handling of missing elements
- Action Logging: All actions are logged to the database
- Resume.txt: Place a
resume.txtfile in the project root for RAG-based message replies - Database: SQLite database is created automatically in
backend/database/ghostlink.db - WebSocket: Real-time logs are streamed via WebSocket to the Flutter frontend
This tool is for educational purposes. Use responsibly and in accordance with LinkedIn's Terms of Service. Automated actions may violate LinkedIn's policies.
Browser not connecting?
- Make sure Chrome is running with
--remote-debugging-port=9222 - Check that port 9222 is not blocked by firewall
AI service not working?
- Verify your
GEMINI_API_KEYis set correctly - Check API quota limits
Flutter build errors?
- Run
flutter pub getto install dependencies - Ensure you have Flutter desktop support enabled
This project is for educational purposes only.