RePortal
Jump between repos. Open in your editor. Stay in sync across machines.
RePortal is a single-binary CLI that keeps a registry of your dev repos and lets you fuzzy-jump between them, open them in your editor, and clone missing repos on a new machine.
Install
All methods install both reportal and rep (short alias) binaries.
Cargo (all platforms)
Homebrew (macOS / Linux)
Scoop (Windows)
scoop bucket add reportal https://github.com/CheckPickerUpper/scoop-reportal
scoop install reportal
Winget (Windows)
winget install CheckPickerUpper.RePortal
Shell installer (macOS / Linux)
|
PowerShell installer (Windows)
powershell -ExecutionPolicy Bypass -c "irm https://github.com/CheckPickerUpper/reportal/releases/latest/download/reportal-installer.ps1 | iex"
From source
Quick start
# Set up config + shell shortcuts (rj, ro)
# Register a local repo
# Clone and register from a URL
# List all registered repos
# Jump to a repo (cd)
# Open a repo in your editor
Commands
| Command | Alias | What it does |
|---|---|---|
rep init |
Creates config and installs shell integration (safe to re-run on updates) | |
rep list |
rep l |
Shows all repos with path, description, tags, and whether it exists on disk |
rep list --tag work |
Filters repos by tag | |
rep jump |
rep j |
Fuzzy-select a repo, prints the path (used by rj shell function) |
rep jump my-api |
rep j my-api |
Jump directly to a repo by alias (also matches aliases field) |
rep jump --title "Debug" |
Override the terminal tab title for this session | |
rep open |
rep o |
Fuzzy-select a repo, opens it in your editor |
rep open my-api |
rep o my-api |
Opens a repo directly by alias |
rep open --editor code |
Override the default editor | |
rep open --title "Debug" |
Override the terminal tab title for this session | |
rep color |
Emit tab title + background color for current directory (for shell hooks) | |
rep color --repo my-api |
Emit tab title + background color for a specific repo | |
rep status |
rep s |
Show git status (branch, dirty, upstream, last commit) across all repos |
rep status --tag work |
Filter status by tag | |
rep sync |
Pull latest changes across all repos (skips dirty repos) | |
rep sync --tag work |
Pull only repos with this tag | |
rep edit my-api |
rep e my-api |
Interactively edit a repo's description, tags, title, and color |
rep add ~/dev/foo |
rep a ~/dev/foo |
Register a local repo (auto-detects git remote, suggests alias) |
rep add https://github.com/org/repo.git |
Clone a repo and register it (asks where to place it) | |
rep remove my-api |
rep rm my-api |
Unregister a repo (does not delete files) |
rep doctor |
Diagnose config, shell integration, and repo path issues |
Shell integration
rep init writes a standalone integration script to ~/.reportal/integration.ps1 (or .sh) and adds a single source line to your shell profile. The profile line never changes between versions; updating the binary is all you need.
| Shortcut | What it does |
|---|---|
rj |
Fuzzy-select a repo and cd into it |
rj my-api |
Jump directly to a repo by alias |
ro |
Fuzzy-select a repo and open it in your editor |
ro my-api |
Open a repo directly by alias |
Supports PowerShell, Bash, Zsh. Detected and installed during rep init. Re-run rep init after major version updates to regenerate the integration file.
Config
Lives at ~/.reportal/config.toml:
[]
= "cursor"
= "~/dev"
= "show" # "show" or "hide" — print path after jump/open
= "absolute" # "absolute" or "relative"
[]
= "~/dev/my-project/api"
= "Backend API"
= ["work", "backend"]
= "git@github.com:org/api.git"
= "API" # custom terminal tab title (defaults to alias)
= "#1a1a2e" # terminal background color on jump (hex)
[]
= "~/dev/personal/site"
= "Personal website"
= ["personal", "frontend"]
| Setting | Values | Default | What it controls |
|---|---|---|---|
default_editor |
Any command | cursor |
Editor for rep open |
default_clone_root |
Any path | ~/dev |
Where rep add <url> clones to |
path_on_select |
show, hide |
show |
Print path after picking a repo in jump/open |
path_display_format |
absolute, relative |
absolute |
Full path or relative to current directory |
Per-repo fields
| Field | Required | Default | What it controls |
|---|---|---|---|
path |
yes | — | Filesystem path to the repo (supports ~) |
description |
no | "" |
Shown in fuzzy finder and rep list |
tags |
no | [] |
Filter repos with --tag |
remote |
no | "" |
Git remote URL for cloning on other machines |
aliases |
no | [] |
Alternative names for direct jump (e.g. rj ninja instead of rj nro) |
title |
no | repo alias | Terminal tab title set via OSC 2 on jump/open |
color |
no | reset to default | Terminal background color (#RRGGBB) set via OSC 11 on jump/open |
Terminal personalization
When you jump to or open a repo, RePortal automatically sets:
- Tab title (OSC 2) — uses the
titleconfig field, falling back to the repo alias - Background color (OSC 11) — uses the
colorconfig field; repos without a color reset the terminal to its default
The --title flag on jump/open lets you override the tab title for a single session without changing config.
Shell hook for new terminals
Terminals opened directly into a repo (e.g. VS Code integrated terminal) won't go through rj, so they won't get the color/title automatically. Add rep color to your prompt to fix that:
PowerShell:
function prompt { rep color 2>$null; "PS> " }
Bash / Zsh:
PROMPT_COMMAND='rep color 2>/dev/null'
rep color matches your current directory against registered repos (longest prefix wins) and emits the right sequences.
Roadmap
- Config parsing
-
init,list,jump,open,add,remove - Shell integration auto-install (
rj,ro) - Clone from URL with sibling/child placement
- Auto-detect git remote on
add - Colored output with themed fuzzy finder
-
repshort alias - Configurable path display (absolute/relative, show/hide)
- Per-repo terminal tab title and background color (OSC 2 / OSC 11)
-
colorcommand for shell prompt hooks -
status— git status across all repos -
sync— pull latest across repos -
doctor— diagnose config, shell integration, and repo path issues -
dashboard— rich overview with branches, dirty state, last commit -
clone --all— clone missing repos from config (machine sync) - Shell completions
- Publish to crates.io
Contributing
PRs welcome. Open an issue first for anything bigger than a typo fix.