Overview
GitGost enables truly anonymous pull requests by accepting pushes via the standard Git protocol (git-receive-pack) and automatically creating PRs through a bot account. Your identity is completely anonymized—no trace remains in the commit history.
How It Works
The anonymous PR workflow follows these steps:- Push via Git: You push commits to gitGost using standard Git commands
- Fork Creation: gitGost creates/reuses a fork under the
@gitgost-anonymousbot account - Commit Anonymization: All commit metadata (author, committer, email) is rewritten to anonymous values
- Branch Push: Commits are pushed to a unique branch (e.g.,
gitgost-a1b2c3d4) in the fork - PR Creation: A pull request is automatically created from the fork to the original repository
- Notification: You receive a unique PR hash to track and update your contribution
Endpoint
Git Protocol Endpoints
Authentication
No authentication required. Anonymous contributions are the core feature—no GitHub account, API keys, or credentials needed.
Usage
Setting Up the Remote
Add gitGost as a Git remote to your repository:Creating Your First Anonymous PR
Updating an Existing PR
To push additional commits to an existing PR, use thepr-hash push option:
The PR hash is deterministic and based on
owner/repo/branch. You’ll receive the same hash for the same branch, enabling updates without storing state.Response Format
Successful Push
The response follows the Git protocol format using side-band encoding:- Band 1: Protocol status messages (
unpack ok,ok refs/heads/main) - Band 2: Informational messages (progress, success details)
- Band 3: Error messages (if any)
Success Fields
The GitHub URL of the created pull request
Always
@gitgost-anonymous - the bot accountThe fork branch name (format:
gitgost-{hash})8-character deterministic hash for tracking and updates
Notification topic URL (format:
https://ntfy.sh/gitgost-{pr_hash})PR Metadata
PR Title
PR Body
The PR body includes:- Your commit message(s)
- A disclaimer about anonymous contribution
- Link to gitGost service
Commit Anonymization
All commits are rewritten with:- Author:
Anonymous Contributor <[email protected]> - Committer:
gitGost Service <[email protected]> - Commit Date: Preserved from original (optional: can be anonymized)
Notifications
GitGost provides real-time notifications via ntfy.sh without requiring accounts:Notification Events
- PR Created: Initial notification when PR is opened
- PR Updated: Sent when you push updates using the pr-hash
- PR Comments: Not currently implemented (future feature)
- PR Status Changes: Not currently implemented (future feature)
Rate Limiting
Per-IP Limits
Maximum PRs per hour per IP address
Rolling time window for rate limit
Global Burst Detection
GitGost monitors for coordinated abuse:- Threshold: 20 pushes from 10+ distinct IPs in 60 seconds
- Response: Admin notification, optional panic mode activation
- Recovery: Automatic when activity drops below threshold
Rate Limit Response
When rate limited, you’ll receive:Error Responses
Invalid Repository
Repository name contains invalid characters or path traversal attempts
Fork Creation Failed
Target repository doesn’t exist or bot lacks access
Push Too Large
Maximum push size: 100 MB
Service Suspended (Panic Mode)
Admin activated panic mode due to abuse detection
Typically 15 minutes, manually controlled by admin
Implementation Details
Fork Management
The bot reuses existing forks when possible:- Check if fork
gitgost-anonymous/repoexists - If exists, reuse it; otherwise create new fork
- Wait for fork to be ready (forks are async on GitHub)
internal/github/pr.go:430-503
PR Hash Generation
PR hashes are deterministic SHA-256 hashes:internal/github/pr.go:656-662
Branch Naming
Branches follow the format:gitgost-{pr_hash}
- Deterministic and unique per repository/branch combination
- Allows automatic PR updates without state storage
- Example:
gitgost-a1b2c3d4
Security Considerations
Identity Protection
All commit metadata is rewritten. No IP addresses, usernames, or identifying information is logged.
Rate Limiting
Multiple layers of rate limiting prevent abuse while maintaining anonymity.
Abuse Prevention
Burst detection and panic mode protect against coordinated attacks.
Open Source
100% open source and auditable. No hidden tracking or data collection.
Best Practices
Use meaningful commit messages
Use meaningful commit messages
Since your commits become the PR body, write clear, descriptive messages:
Save your PR hash
Save your PR hash
Store the PR hash in a safe place to enable future updates:
Subscribe to notifications
Subscribe to notifications
Use ntfy to track your PR without creating accounts:
- Bookmark the ntfy URL
- Install ntfy mobile app for push notifications
- Use RSS reader with ntfy’s RSS endpoint
Respect rate limits
Respect rate limits
Avoid rapid successive pushes:
- Test locally before pushing
- Squash multiple fixes into single commits
- Wait between pushes if making frequent contributions
CLI Integration
Bash Alias
~/.bashrc
Git Configuration
Related Endpoints
Anonymous Issues
Create anonymous issues via REST API
Anonymous Comments
Post anonymous comments on issues and PRs