Loading repository data…
Loading repository data…
itxashancode / repository
Automate GitHub co-authored Pull Requests with Python. Earn the Pair Extraordinaire badge using sequential or parallel modes, multi-token rotation, Discord/Slack webhooks, and smart rate-limit handling. Supports dry-run, auto-merge & state resumption.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.

| Default 1 PR | Bronze 10 PRs | Silver 24 PRs | Gold 48 PRs |
Automate co-authored PR creation and merging to unlock all achievement tiers!
A powerful Python automation framework that streamlines GitHub co-authored Pull Request workflows at scale. Perfect for developers who want to:
| 🎯 Use Case | 📊 Benefit |
|---|---|
| Co-authored Commits | Automatic Co-authored-by trailers on every commit |
| Badge Hunting | Earn GitHub Pair Extraordinaire badge efficiently |
| Batch Documentation | Update files across multiple branches with a collaborator |
| CI/CD Testing | Stress-test co-authoring automation pipelines |
| Learning & Research | Study GitHub automation patterns and workflows |
| 🌟 Features | 🏗️ Architecture | 📦 Installation | ⚙️ Configuration |
|---|---|---|---|
| 🚀 Usage | 🔧 Components | 🔐 Security | 🐛 Troubleshooting |
| 📈 Optimization | 🤝 Contributing | 📄 License | 📞 Support |
| 🎯 Core Capabilities | 🔧 Advanced Features |
✅ Automated Co-authored PRs └─ Auto Co-authored-by trailer ✅ Smart Auto-Merge └─ Intelligent PR merging ✅ Dual Execution Modes └─ Sequential & Parallel ✅ State Management └─ Resume from interruptions ✅ Dry Run Mode └─ Test without real commits | ✅ Multi-Token Rotation └─ Automatic token switching ✅ Discord/Slack Webhooks └─ Real-time notifications ✅ Rate Limit Handling └─ Smart API throttling ✅ Exponential Backoff └─ Intelligent retry logic ✅ Template-based Commits └─ Customizable messages |
graph TB
Start([🚀 Start Automation]) --> Config[📋 Load Config & .env]
Config --> Mode{🔀 Choose Mode}
Mode -->|Sequential| Seq[📝 run.py]
Mode -->|Parallel| Par[⚡ Parallel Workers]
Seq --> Git[🔧 Git Operations]
Par --> Git
Git --> Branch[🌿 Create Branch]
Branch --> Commit[💾 Co-authored Commit]
Commit --> Push[📤 Push to Remote]
Push --> PR[🎯 Create PR]
PR --> AutoMerge{🤖 Auto-merge?}
AutoMerge -->|Yes| Merge[✅ Merge PR]
AutoMerge -->|No| Next{📊 More PRs?}
Merge --> Next
Next -->|Yes| Git
Next -->|No| Notify[📢 Send Notifications]
Notify --> End([🎉 Complete!])
┌─────────────────────────────────────────────────────────────────┐
│ 🤝 Pair Extraordinaire Automation │
│ Core Orchestration Layer │
└─────────────────────────────────────────────────────────────────┘
│
┌───────────────┴───────────────┐
│ │
┌───────▼────────┐ ┌────────▼───────┐
│ 📝 Sequential │ │ ⚡ Parallel │
│ run.py │ │ src/async │
│ Reliable │ │ Fast Mode │
└───────┬────────┘ └────────┬───────┘
│ │
└──────────────┬───────────────┘
│
┌──────────────────────┼──────────────────────┐
│ │ │
┌────▼─────┐ ┌─────▼────┐ ┌──────▼──────┐
│ 🔧 src/ │ │ ⚙️ config│ │ 📄 templates│
│ Core Bot │ │ Settings │ │ Commit Msg │
└────┬─────┘ └─────┬────┘ └──────┬──────┘
│ │ │
└─────────────────────┼──────────────────────┘
│
┌───────────────┼───────────────┐
│ │ │
┌─────▼─────┐ ┌─────▼─────┐ ┌─────▼─────┐
│ 🔑 Token │ │ 📢 Notify │ │ 📝 Logger │
│ Manager │ │ Webhooks │ │ System │
└───────────┘ └───────────┘ └───────────┘
| Component | Role | Features |
|---|---|---|
| run.py | 📝 Entry Point | Bootstraps automation, loads config |
| src/ | 🔧 Core Logic | Branch, commit, push, PR, merge |
| config/ | ⚙️ Settings | JSON/env-based configuration |
| templates/ | 📄 Templates | Commit messages & PR body templates |
| .env | 🔑 Secrets | GitHub tokens & co-author credentials |
✅ Python 3.8 or higher
✅ Git 2.0 or higher
✅ GitHub CLI (gh)
✅ Active GitHub account
✅ A collaborator account (for co-authoring)
✅ Write access to target repository
📥 Download the Code
# Clone via HTTPS
git clone https://github.com/itxashancode/Pair-Extraordinaire.git
# Or clone via SSH
git clone git@github.com:itxashancode/Pair-Extraordinaire.git
# Navigate to directory
cd Pair-Extraordinaire
🐍 Python Packages
# Install all required packages
pip install -r requirements.txt
# Or use pip3 on some systems
pip3 install -r requirements.txt
📦 What Gets Installed:
| Package | Purpose |
|---|---|
requests | HTTP/API calls |
gitpython | Git automation |
python-dotenv | Load .env variables |
colorama | Terminal colors |
aiohttp | Async HTTP (parallel mode) |
🍎 macOS
brew install gh && gh --version
🐧 Linux (Debian/Ubuntu)
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | \
sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] \
https://cli.github.com/packages stable main" | \
sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update && sudo apt install gh -y
gh --version
🪟 Windows
winget install --id GitHub.cli
# Or: choco install gh
gh --version
🔐 Login to GitHub
# Start authentication
gh auth login
# Follow the interactive prompts:
# 1. Choose: GitHub.com
# 2. Protocol: HTTPS
# 3. Authenticate Git: Yes
# 4. Method: Login with a web browser
# Verify authentication
gh auth status
Expected Output:
✓ Logged in to github.com as YourUsername
✓ Git operations for github.com configured to use https protocol.
✓ Token: *******************
Ready to configure? Proceed to ⚙️ Configuration
.env)cp .env.example .env
# GitHub credentials
GITHUB_TOKEN=your_personal_access_token_here
# Repository details
REPO_OWNER=your_github_username
REPO_NAME=your_repository_name
# Co-author details (required for Pair Extraordinaire)
CO_AUTHOR_NAME=Collaborator Name
CO_AUTHOR_EMAIL=collaborator@email.com
CO_AUTHOR_TOKEN=collaborator_github_token
# Notification webhooks (optional)
DISCORD_WEBHOOK=https://discord.com/api/webhooks/YOUR_WEBHOOK_HERE
SLACK_WEBHOOK=https://hooks.slack.com/services/YOUR_WEBHOOK_HERE
📖 Configuration Reference:
| Variable | Required | Description |
|---|---|---|
GITHUB_TOKEN | ✅ Yes | Your GitHub Personal Access Token |
REPO_OWNER | ✅ Yes | GitHub username or org of the target repo |
REPO_NAME | ✅ Yes | Name of the target repository |
CO_AUTHOR_NAME | ✅ Yes | Display name of your co-author |
CO_AUTHOR_EMAIL | ✅ Yes | Email used by co-author on GitHub |
CO_AUTHOR_TOKEN | ⚠️ Optional | Co-author token for mutual achievements |
DISCORD_WEBHOOK | ❌ Optional | Discord channel webhook URL |
SLACK_WEBHOOK | ❌ Optional | Slack channel webhook URL |
config/){
"repo_path": ".",
"base_branch": "main",
"target_file": "README.md",
"pr_count": 50,
"delay_seconds": 15,
"auto_merge": true,
"dry_run": false,
"max_retries": 3
}
📖 Configuration Reference:
| Parameter | Type | Default | Description |
|---|---|---|---|
repo_path | string | "." | Path to your Git repository |
base_branch | string | "main" | Target branch for PRs |
target_file | string | "README.md" | File modified in each commit |
pr_count | integer | 50 | Total co-authored PRs to create |
delay_seconds | integer | 15 | Wait time between PRs |
auto_merge | boolean | true | Automatically merge created PRs |
dry_run | boolean | false | Test mode — no actual changes |
max_retries | integer | 3 | Retry attempts on failure |
templates/)The templates/ directory contains message templates for comm