Skip to content

tinyland-inc/remote-juggler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

428 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

RemoteJuggler

npm GitHub release CI Release Docker License: Zlib

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.

Features

  • 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

Quick Start

Install RemoteJuggler with the automated installer:

curl -sSL https://raw.githubusercontent.com/tinyland-inc/remote-juggler/main/install.sh | bash

Or via npm (all platforms):

npx @tummycrypt/remote-juggler@latest --version

Or via Nix:

nix profile install github:tinyland-inc/remote-juggler

For other installation methods (.deb, .rpm, binary downloads, building from source), see the Installation Guide.

Latest Release

v2.3.0 | 2026-02-24 | Release Notes | All Releases

Binary Downloads

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) -- --

Packages

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

Platform Compatibility

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.

Agent Ecosystem Status

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

Configuration

1. Configure SSH Hosts

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_github

2. Create Configuration

The 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"
    }
  }
}

3. Store Tokens

# Store GitLab token in Keychain
remote-juggler token set personal
# Prompts for token

# Store GitHub token
remote-juggler token set github

4. Switch Identities

# 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 personal

CLI Usage

remote-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 version

MCP Server Integration

RemoteJuggler implements an MCP (Model Context Protocol) server with 36 tools for AI agent integration:

remote-juggler --mode=mcp

Claude Code Integration

Add to your .mcp.json:

{
  "mcpServers": {
    "remote-juggler": {
      "command": "remote-juggler",
      "args": ["--mode=mcp"]
    }
  }
}

Available MCP Tools

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

ACP Server Integration

For JetBrains IDE integration:

remote-juggler --mode=acp

Configure in acp.json for JetBrains AI Assistant. See the Installation Guide for configuration details.

KeePassXC Credential Authority

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 export

Security model: TPM/Secure Enclave + YubiKey presence = auto-unlock with 30-second session cache.

Credential Resolution

RemoteJuggler resolves credentials in this order:

  1. KeePassXC Store - Hardware-backed credential authority (~/.remotejuggler/keys.kdbx)
  2. Darwin Keychain (macOS) - Service: remote-juggler.<provider>.<identity>
  3. Environment variable - ${IDENTITY}_TOKEN or custom
  4. Provider CLI - glab auth token / gh auth token
  5. SSH-only fallback - No token, git operations via SSH only

System Tray Application (Experimental)

Note: The tray applications are experimental and provide basic functionality only.

macOS

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 release

Linux

The Linux tray app uses GTK/AppIndicator:

cd tray/linux
go build -o remote-juggler-tray

Development

Build Commands

# Debug build
just build

# Release build
just release

# Run tests
just test

# Build GTK GUI (Linux)
just gui-release

Project Structure

remote-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

Documentation

License

RemoteJuggler is licensed under the zlib License.