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
- Darwin Keychain Integration: Secure token storage on macOS
- GPG Signing: Automatic GPG key configuration per identity
- MCP Server: AI agent integration for interprenters and agents like OpenCode and Claude Code
- ACP Server: JetBrains IDE integration
- System Tray Apps: Native macOS (SwiftUI) and Linux (Go) tray applications for da humans oWo
Install RemoteJuggler with the automated installer:
curl -sSL https://gitlab.com/tinyland/projects/remote-juggler/-/raw/main/install.sh | bashOr via Homebrew:
brew tap tinyland/tools https://gitlab.com/tinyland/homebrew-tools.git
brew install remote-jugglerFor other installation methods (AUR, Nix, Flatpak, binary downloads, building from source), see the Installation Guide.
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
token set <name> Store token in keychain
token verify Verify all credentials
config sync Sync managed blocks from SSH/git config
Options:
--mode=mcp Run as MCP server (STDIO transport)
--mode=acp Run as ACP server (STDIO transport)
--help Show help message
--version Show versionRemoteJuggler can run as an MCP (Model Context Protocol) server for AI agent integration:
remote-juggler --mode=mcpAdd to your .mcp.json:
{
"mcpServers": {
"remote-juggler": {
"command": "remote-juggler",
"args": ["--mode=mcp"]
}
}
}| Tool | Description |
|---|---|
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 |
Note: Some MCP tools have implementation limitations:
juggler_sync_config: SSH/gitconfig parsers are not yet fully implementedjuggler_store_token: Currently returns guidance; actual storage requires CLIjuggler_validate: GPG validation is not yet implemented
For JetBrains IDE integration:
remote-juggler --mode=acpConfigure in acp.json for JetBrains AI Assistant. See the Installation Guide for configuration details.
RemoteJuggler resolves credentials in this order:
- 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
mason build
# Release build
mason build --release
# Run tests
mason test
# Clean
mason cleanremote-juggler/
├── src/
│ ├── remote_juggler.chpl # Main entry point
│ └── remote_juggler/ # Module implementations
├── c_src/ # C FFI for Darwin Keychain
├── test/ # Unit tests
├── tray/
│ ├── darwin/ # SwiftUI tray app
│ └── linux/ # Go tray app
├── docs/ # MkDocs documentation
└── scripts/ # Build/install scripts
- Installation Guide - Complete installation instructions for all platforms
- Distribution Guide - For packagers and distributors
- Lace up this public demo repo with outbot harness
- Add screenshots and workflow for humans
- Publish docs
- Publish public propaganda page and artifactory
- Publish prebuilt binaries, rpm and brew packages UwU
- Publish RemoteJuggler's Tinyland ecosystem facets when appropriate to do so, aiming for Q4 2026
RemoteJuggler is dual-licensed:
- Source Code: zlib License - build from source for any purpose
- Prebuilt Binaries: Commercial License - see terms for usage
See LICENSE for details.