An agent-first identity management utility
Seamlessly switch between multiple git identities (personal, work, different providers) with automatic credential resolution, GPG + ssh signing, be you a robot or even a human.
RemoteJuggler is a git identity management tool with MCP/ACP agent protocol support. Desktop tray integration for MacOS and Gnome desktop environments for the humans. Works seamlessly with FuzzyBot, Outbot-CI, Mariolex Harness, Huskycat Chains and Tummycrypt, along with boring agent tools like OpenCode, Crush, Claude, Junie ands many more. Seamless integration with the Tinyland ecosystem, which you don't know anything about yet.
Written primarily in Chapel with a great deal of care.
- Multi-Provider Support: This version you are looking at supports GitLab & GitHub. Enterprise RemoteJuggler supports Mariolex gitChapel git server if you need to scale to millions of concurrent agent operations.
- Automatic Identity Detection: Detects the correct identity from repository remote URLs
- KeePassXC Credential Authority: Secure credential storage and auto-discovery with TPM/YubiKey hardware-backed unlock
- Darwin Keychain Integration: Secure token storage on macOS
- GPG Signing: Automatic GPG key configuration per identity
- YubiKey / FIDO2: Hardware key support with PIN management and touch policies
- Trusted Workstation Mode: TPM/Secure Enclave-based auto-unlock for headless environments
- MCP Server: 36 tools for AI agent integration (Claude Code, Cursor, VS Code, Windsurf)
- ACP Server: JetBrains IDE integration
- System Tray Apps: Native macOS (SwiftUI) and Linux (Go) tray applications for da humans oWo
- GTK4 GUI: Libadwaita desktop app for Linux
Install RemoteJuggler with the automated installer:
curl -sSL https://raw.githubusercontent.com/tinyland-inc/remote-juggler/main/install.sh | bashOr via npm (all platforms):
npx @tummycrypt/remote-juggler@latest --versionOr via Nix:
nix profile install github:tinyland-inc/remote-jugglerFor other installation methods (.deb, .rpm, binary downloads, building from source), see the Installation Guide.
v2.3.0 | 2026-02-24 | Release Notes | All Releases
| Platform | CLI | GTK GUI | Tray |
|---|---|---|---|
| Linux x86_64 | remote-juggler-linux-amd64 (4.7MB) | remote-juggler-gui-linux-amd64 (874KB) | remote-juggler-tray-linux-amd64 (3.7MB) |
| Linux ARM64 | remote-juggler-linux-arm64 (4.3MB) | remote-juggler-gui-linux-arm64 (838KB) | remote-juggler-tray-linux-arm64 (3.7MB) |
| macOS ARM64 | remote-juggler-darwin-arm64 (3.5MB) | -- | remote-juggler-tray-darwin-arm64 (493KB) |
| macOS x86_64 | remote-juggler-darwin-amd64 (4.1MB) | -- | -- |
| Format | File | Size |
|---|---|---|
| Debian/Ubuntu | remote-juggler_2.3.0_amd64.deb (1.8MB) | |
| RHEL/Fedora | remote-juggler-2.3.0-1.x86_64.rpm (1.8MB) | |
| AppImage | remote-juggler-gui-v2.3.0-x86_64.AppImage (613KB) | |
| Docker | ghcr.io/tinyland-inc/remote-juggler:latest |
|
| npm | npx @tummycrypt/remote-juggler@latest |
|
| Homebrew | brew install remote-juggler |
|
| Nix | nix profile install github:tinyland-inc/remote-juggler |
| Feature | Linux x86_64 | Linux ARM64 | macOS ARM64 | macOS x86_64 |
|---|---|---|---|---|
| CLI + MCP/ACP | Y | Y | Y | Y |
| GTK GUI | Y | Y | -- | -- |
| System Tray | Y | Y | Y | -- |
| KeePassXC | Y | Y | Y | Y |
| YubiKey/FIDO2 | Y | Y | Y | Y |
| Docker | Y | -- | -- | -- |
SHA256 Checksums
f7f5f3324f0e659b7b82888579475e123a904892c38099d8511038b52a6d97d7 remote-juggler-2.3.0-1.x86_64.rpm
85475228d921ca576dcd3d25af232262d00bee19a2fc79296e21fb21cafa8a88 remote-juggler-darwin-amd64
f912bf6daeabb976cc6f3aa8f65443e61cc1a827d1adca45d130e1bae7c22dd7 remote-juggler-darwin-arm64
6f2ce1ccbd68a796e3bafafaee514c87a4cf2d6730b0065e3512dde402cf0e6e remote-juggler-gui-linux-amd64
4815ef25a12ba31464101bbfedd58d027eb50fd82e97931397062016804fcac0 remote-juggler-gui-linux-arm64
d01f40f13393097a634966bffc4583b82f4ca346f9f8712bd41a533ef8e531a3 remote-juggler-gui-v2.3.0-x86_64.AppImage
1aae4f636baeaad4da5f2aa761deead2570c21f143e20b1b1fdb549aa5d69a3d remote-juggler-linux-amd64
7a01f1e30c42d0d751f86750ba521691110d2e8be684007c6fc9a84cb00ecc03 remote-juggler-linux-arm64
3e1fa1c950d49f2bedc1f2930069c226b45340a427e30f9644791cedad84c996 remote-juggler-tray-darwin-arm64
a1e071694b91474842b34607d5017b228638c57c8865e93b3b766bbaa0b53c2c remote-juggler-tray-darwin-arm64.app.zip
63a104d6e349d4b881ad3e6e563c39ccc8d8a9e860703104ef0f93a64f80f63b remote-juggler-tray-linux-amd64
fa3510158c40f18a4bffbe50ce53e23821bc5bab33ad1c6d979723f5d08e63af remote-juggler-tray-linux-arm64
6b3eeedb9d806faa9e8ea314a0efbb54f27fe0d34c1330d0d0a4a9830b8690c8 remote-juggler_2.3.0_amd64.deb
Full checksums file: SHA256SUMS.txt
Build Toolchain
| Component | Toolchain | Version |
|---|---|---|
| CLI | Chapel | 2.7.0 |
| GTK GUI | Rust | stable |
| Tray (Linux) | Go | 1.21 |
| Tray (macOS) | Swift | 6.0 |
Note: macOS binaries from GitHub are unsigned. For signed/notarized macOS builds, see GitLab Releases.
Last updated: 2026-02-28 02:02 UTC
| Campaign | Agent | Last Run | Status | Key Metric |
|---|---|---|---|---|
| Gateway Health | gateway-direct | <1h ago | PASS | -- |
| Dependency Audit | openclaw | -- | -- | -- |
| Credential Scan | hexstrike | -- | -- | -- |
| Gateway Smoketest | openclaw | -- | -- | -- |
| MCP Regression | gateway-direct | -- | -- | -- |
| Audit Completeness | cross-agent | -- | -- | -- |
View all reports in Discussions
Add identity-specific SSH hosts to ~/.ssh/config:
Host gitlab-personal
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_ed25519_personal
Host gitlab-work
HostName gitlab.com
User git
IdentityFile ~/.ssh/id_ed25519_work
Host github-personal
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_githubThe tool auto-generates ~/.config/remote-juggler/config.json on first run, or you can create it:
{
"identities": {
"personal": {
"provider": "gitlab",
"host": "gitlab-personal",
"hostname": "gitlab.com",
"user": "your-username",
"email": "you@personal.com",
"sshKeyPath": "~/.ssh/id_ed25519_personal",
"gpg": {
"keyId": "ABCD1234",
"signCommits": true
}
},
"work": {
"provider": "gitlab",
"host": "gitlab-work",
"hostname": "gitlab.com",
"user": "work-username",
"email": "you@company.com",
"sshKeyPath": "~/.ssh/id_ed25519_work"
},
"github": {
"provider": "github",
"host": "github-personal",
"hostname": "github.com",
"user": "github-user",
"email": "you@personal.com",
"sshKeyPath": "~/.ssh/id_ed25519_github"
}
}
}# Store GitLab token in Keychain
remote-juggler token set personal
# Prompts for token
# Store GitHub token
remote-juggler token set github# Show current status
remote-juggler
# List all identities
remote-juggler list
# Switch to work identity
remote-juggler switch work
# Detect identity for current repo
remote-juggler detect
# Validate connectivity
remote-juggler validate personalremote-juggler [command] [options]
Commands:
(none) Show current identity status
list List all configured identities
detect Detect identity for current repository
switch <name> Switch to specified identity
validate <name> Validate SSH and API connectivity
verify Verify GPG keys
status Show current identity status
config show|add|edit|remove|import|sync|init
Configuration management
token set|get|clear|verify|check-expiry|renew
Token/credential management
gpg status|configure|verify
GPG signing configuration
keys init|status|search|resolve|get|store|delete|list|ingest|crawl|discover|export
KeePassXC credential authority
pin store|clear|status HSM PIN management
yubikey info|set-pin-policy|set-touch|configure-trusted|diagnostics
YubiKey management
trusted-workstation enable|disable|status|verify
Trusted workstation mode
security-mode <mode> Set security mode
setup Interactive setup wizard
unseal-pin Unseal HSM PIN
debug ssh-config|git-config|keychain|hsm
Debug utilities
Options:
--mode=mcp Run as MCP server (STDIO transport)
--mode=acp Run as ACP server (STDIO transport)
--help Show help message
--version Show versionRemoteJuggler implements an MCP (Model Context Protocol) server with 36 tools for AI agent integration:
remote-juggler --mode=mcpAdd to your .mcp.json:
{
"mcpServers": {
"remote-juggler": {
"command": "remote-juggler",
"args": ["--mode=mcp"]
}
}
}| Tool | Description |
|---|---|
| Identity Management | |
juggler_list_identities |
List configured identities |
juggler_detect_identity |
Detect repo identity from remote URL |
juggler_switch |
Switch to a different identity |
juggler_status |
Get current identity status |
juggler_validate |
Test SSH/API connectivity |
juggler_store_token |
Store token in keychain |
juggler_sync_config |
Sync managed SSH/git blocks |
| Security & GPG | |
juggler_gpg_status |
GPG key status |
juggler_pin_store |
Store HSM PIN |
juggler_pin_clear |
Clear HSM PIN |
juggler_pin_status |
Check PIN status |
juggler_security_mode |
Set security mode |
juggler_setup |
Run setup wizard |
juggler_tws_status |
Trusted workstation status |
juggler_tws_enable |
Enable trusted workstation |
| Token Management | |
juggler_token_verify |
Verify tokens |
juggler_token_get |
Retrieve stored token |
juggler_token_clear |
Clear stored token |
| Configuration & Debug | |
juggler_config_show |
Show configuration |
juggler_debug_ssh |
Debug SSH config |
| Credential Authority (KeePassXC) | |
juggler_keys_init |
Initialize credential store |
juggler_keys_status |
Credential store status |
juggler_keys_search |
Fuzzy search credentials |
juggler_keys_resolve |
Search + retrieve in one call |
juggler_keys_get |
Get specific credential |
juggler_keys_store |
Store credential |
juggler_keys_delete |
Delete credential |
juggler_keys_list |
List all credentials |
juggler_keys_ingest_env |
Ingest from environment |
juggler_keys_crawl_env |
Crawl .env files |
juggler_keys_discover |
Auto-discover credentials |
juggler_keys_export |
Export as env vars |
| SOPS Integration | |
juggler_keys_sops_status |
Check SOPS/age availability |
juggler_keys_sops_ingest |
Import SOPS secrets to KDBX |
juggler_keys_sops_sync |
Bidirectional KDBX/SOPS sync |
juggler_keys_sops_export |
Export KDBX to SOPS format |
For JetBrains IDE integration:
remote-juggler --mode=acpConfigure in acp.json for JetBrains AI Assistant. See the Installation Guide for configuration details.
RemoteJuggler includes a built-in credential authority backed by KeePassXC (.kdbx format) with hardware-backed security:
# Initialize credential store
remote-juggler keys init
# Auto-discover credentials from environment
remote-juggler keys discover
# Search credentials with fuzzy matching
remote-juggler keys search "gitlab token"
# Crawl .env files
remote-juggler keys crawl
# Export as environment variables
remote-juggler keys exportSecurity model: TPM/Secure Enclave + YubiKey presence = auto-unlock with 30-second session cache.
RemoteJuggler resolves credentials in this order:
- KeePassXC Store - Hardware-backed credential authority (
~/.remotejuggler/keys.kdbx) - Darwin Keychain (macOS) - Service:
remote-juggler.<provider>.<identity> - Environment variable -
${IDENTITY}_TOKENor custom - Provider CLI -
glab auth token/gh auth token - SSH-only fallback - No token, git operations via SSH only
Note: The tray applications are experimental and provide basic functionality only.
The macOS tray app provides a menu bar interface for quick identity switching:
# Install via DMG or build from source
cd tray/darwin
swift build -c releaseThe Linux tray app uses GTK/AppIndicator:
cd tray/linux
go build -o remote-juggler-tray# Debug build
just build
# Release build
just release
# Run tests
just test
# Build GTK GUI (Linux)
just gui-releaseremote-juggler/
├── src/
│ ├── remote_juggler.chpl # Main entry point
│ └── remote_juggler/ # 20 Chapel modules
│ ├── Core.chpl # Version, helpers, formatting
│ ├── Config.chpl # Configuration management
│ ├── GlobalConfig.chpl # Schema versioning
│ ├── State.chpl # State persistence
│ ├── Identity.chpl # Identity switching
│ ├── Remote.chpl # Remote URL management
│ ├── Keychain.chpl # macOS Keychain integration
│ ├── GPG.chpl # GPG signing
│ ├── ProviderCLI.chpl # Provider CLI wrappers
│ ├── Protocol.chpl # JSON-RPC protocol
│ ├── MCP.chpl # MCP server
│ ├── ACP.chpl # ACP server
│ ├── Tools.chpl # MCP/ACP tool definitions
│ ├── HSM.chpl # TPM/Secure Enclave
│ ├── YubiKey.chpl # YubiKey management
│ ├── TrustedWorkstation.chpl # Auto-unlock mode
│ ├── TokenHealth.chpl # Token expiry detection
│ ├── Setup.chpl # Interactive setup wizard
│ └── KeePassXC.chpl # Credential authority
├── gateway/ # Go MCP gateway (tsnet + Setec)
├── deploy/
│ ├── agents/ # Agent deployments (OpenClaw, HexStrike)
│ ├── docker/ # Dockerfiles for all images
│ ├── k8s/ # Kubernetes manifests
│ └── tofu/ # OpenTofu infrastructure
├── gtk-gui/ # Rust/GTK4/Libadwaita GUI
├── tray/
│ ├── darwin/ # SwiftUI tray app
│ └── linux/ # Go tray app
├── pinentry/ # HSM pinentry helper
├── test/
│ ├── e2e/ # Python E2E tests
│ ├── unit/ # Chapel unit tests
│ └── campaigns/ # Campaign runner (Go)
├── docs/ # MkDocs documentation
├── packaging/ # .deb/.rpm packaging
└── scripts/ # Build/install scripts
- Installation Guide - Complete installation instructions for all platforms
- CLI Commands - Full command reference
- MCP Server - MCP integration guide
- Distribution Guide - For packagers and distributors
RemoteJuggler is licensed under the zlib License.