
Research
Two Malicious Rust Crates Impersonate Popular Logger to Steal Wallet Keys
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
@r5n/hydra
Advanced tools
The GitHub Runner Manager That Actually Scales 🚀
🏊 Made for developers who'd rather be coding than configuring
Tired of manually setting up GitHub Actions runners? Hydra transforms hours of tedious work into a single command. Create, manage, and monitor dozens of self-hosted runners with the simplicity you've been craving.
$ hydra create -t $TOKEN -u https://github.com/myorg/repo -m 10 -l "gpu,docker"
⠋ Downloading runner package... (2.1s)
✔ Created runner gpu-runner-1
✔ Created runner gpu-runner-2
✔ Created runner gpu-runner-3
✔ Created runner gpu-runner-4
✔ Created runner gpu-runner-5
✔ Created runner gpu-runner-6
✔ Created runner gpu-runner-7
✔ Created runner gpu-runner-8
✔ Created runner gpu-runner-9
✔ Created runner gpu-runner-10
✅ All 10 runners created successfully in 8.3s
$ hydra status -p production
┌─────────────────┬─────────┬───────────┬──────────────┐
│ Name │ Status │ Busy │ Labels │
├─────────────────┼─────────┼───────────┼──────────────┤
│ prod-runner-1 │ ✅ Idle │ No │ linux,docker │
│ prod-runner-2 │ ✅ Idle │ No │ linux,docker │
│ prod-runner-3 │ 🔄 Busy │ Yes (2m) │ linux,docker │
│ prod-runner-4 │ ✅ Idle │ No │ linux,docker │
│ prod-runner-5 │ ❌ Offline │ - │ linux,docker │
└─────────────────┴─────────┴───────────┴──────────────┘
Summary: 3 idle, 1 busy, 1 offline
$ hydra status -p production
🔍 Checking runner status...
✅ Runner 1: Online (idle)
✅ Runner 2: Online (busy - job #1234)
✅ Runner 3: Online (idle)
✓ Created runner-4
✓ Created runner-5
🔍 Monitoring continues... (press Ctrl+C to stop)
# Using Bun (recommended)
bun add -g @r5n/hydra
hydra --help
# Direct usage (no installation)
bunx @r5n/hydra --help
# Interactive setup
hydra init
# Use TOML format
hydra init --toml
# Basic usage
hydra create -t YOUR_TOKEN -u https://github.com/org/repo
# Create multiple runners with labels
hydra create -t YOUR_TOKEN -u REPO_URL -m 3 -l "docker,gpu"
# Using a profile
hydra create -p production -t YOUR_TOKEN
# Check runner status
hydra status -t YOUR_TOKEN -u REPO_URL
# JSON output for automation
hydra status -t YOUR_TOKEN -u REPO_URL --json
hydra init
Initialize a new configuration file with profiles.
Options:
-t, --toml
- Use TOML format instead of JSONhydra create
Create and register new GitHub runner machines.
Options:
-t, --token
- GitHub Personal Access Token (required)-u, --url
- GitHub repository/organization URL (required)-m, --numberOfMachines
- Number of runners to create (default: 1)-n, --name
- Runner name prefix (default: "runner")-l, --labels
- Comma-separated custom labels-d, --directory
- Runners directory (default: "./gh-runners")-o, --os
- Operating system: osx, linux, windows (default: "osx")-O, --overwrite
- Overwrite existing runners-p, --profile
- Use configuration profile-c, --config
- Configuration file pathhydra run
Start existing GitHub runner machines.
Options:
-t, --token
- GitHub Personal Access Token (required)-u, --url
- GitHub repository/organization URL (required)-m, --numberOfMachines
- Number of runners (default: 1)-n, --name
- Runner name prefix-d, --directory
- Runners directory-p, --profile
- Use configuration profile-c, --config
- Configuration file pathhydra remove
Remove GitHub runner machines.
Options:
-t, --token
- GitHub Personal Access Token (required)-u, --url
- GitHub repository/organization URL (required)-m, --numberOfMachines
- Number of runners (default: 1)-n, --name
- Runner name prefix-d, --directory
- Runners directory-f, --force
- Force removal without unregistering-p, --profile
- Use configuration profile-c, --config
- Configuration file pathhydra status
Check the status of GitHub runner machines.
Options:
-t, --token
- GitHub Personal Access Token (required)-u, --url
- GitHub repository/organization URL (required)-d, --directory
- Runners directory-j, --json
- Output as JSON-p, --profile
- Use configuration profile-c, --config
- Configuration file pathhydra help
Show help information for commands.
hydra help
hydra help create
hydra create --help
Stop typing the same commands over and over. Profiles let you define your runner configurations once and reuse them everywhere:
hydra.json
{
"profiles": {
"default": {
"name": "runner",
"numberOfMachines": 1,
"directory": "./gh-runners",
"os": "osx"
},
"production": {
"url": "https://github.com/org/repo",
"name": "prod-runner",
"numberOfMachines": 3,
"labels": "production,linux,docker",
"directory": "/opt/runners/prod",
"os": "linux"
},
"development": {
"url": "https://github.com/org/dev-repo",
"name": "dev-runner",
"numberOfMachines": 2,
"labels": "development,test",
"directory": "./dev-runners"
}
},
"defaultProfile": "default"
}
hydra.toml
defaultProfile = "default"
[profiles.default]
name = "runner"
numberOfMachines = 1
directory = "./gh-runners"
os = "linux"
[profiles.production]
url = "https://github.com/org/repo"
name = "prod-runner"
numberOfMachines = 3
labels = "production,linux,docker"
directory = "/opt/runners/prod"
os = "linux"
GITHUB_PERSONAL_ACCESS_TOKEN
- Default token if not provided via CLIHYDRA_CONFIG
- Default configuration file path./gh-runners/ # Default runner directory
├── machines/
│ ├── 1/ # Runner instance 1
│ │ ├── _diag/ # Diagnostics logs
│ │ ├── _work/ # Job working directory
│ │ ├── config.sh # Runner configuration
│ │ └── run.sh # Runner execution script
│ ├── 2/ # Runner instance 2
│ └── .../
└── actions-runner-*.tar.gz # Downloaded runner package
repo
scopeadmin:org
scope# Development environment
hydra create -p development -t $GITHUB_TOKEN -m 2
# Production with specific labels
hydra create -p production -t $GITHUB_TOKEN -l "deploy,production"
# Temporary test runners
hydra create -t $GITHUB_TOKEN -u $REPO_URL -n "test" -m 5
hydra remove -t $GITHUB_TOKEN -u $REPO_URL -n "test" -m 5
#!/bin/bash
# Check runner status and alert if offline
STATUS=$(hydra status -p production -t $GITHUB_TOKEN --json)
OFFLINE=$(echo $STATUS | jq '[.[] | select(.status == "offline")] | length')
if [ $OFFLINE -gt 0 ]; then
echo "Alert: $OFFLINE runners are offline!"
fi
"Invalid GitHub token"
"Runner configuration failed"
"No runners found"
# Run with debug logging
DEBUG=* hydra create -t TOKEN -u URL
# Check runner diagnostics (if needed)
cat ./gh-runners/machines/1/_diag/*.log
Contributions are welcome! Please see the main repository for contribution guidelines.
Licensed under the Apache License, Version 2.0. See LICENSE for details.
FAQs
A tool for spawning multiple local GitHub self-hosted runners
We found that @r5n/hydra demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
Research
A malicious package uses a QR code as steganography in an innovative technique.
Research
/Security News
Socket identified 80 fake candidates targeting engineering roles, including suspected North Korean operators, exposing the new reality of hiring as a security function.