mine proj
Register projects, switch context fast, and persist per-project settings.
Fuzzy Project Picker
Section titled “Fuzzy Project Picker”mine proj # interactive picker (TTY) or plain list (piped)Opens a fuzzy-searchable list of registered projects. Select a project and press Enter to open it. Falls back to a plain list when stdout is not a TTY.
Register a Project
Section titled “Register a Project”mine proj add # register current directory (name from directory basename)mine proj add ~/dev/api # register an explicit pathmine proj add . --name myapi # register with a custom nameRegisters a directory in the project registry. The project name is auto-detected from the directory basename if not specified. Adding a project that is already registered returns an error.
Remove a Project
Section titled “Remove a Project”mine proj rm myapi # remove by name (prompts for confirmation)mine proj rm myapi --yes # skip confirmation promptmine proj rm myapi -y # short flagRemoves a project from the registry. Per-project settings stored in projects.toml are also cleaned up.
List Projects
Section titled “List Projects”mine proj listmine proj lsLists all registered projects with name, path, last accessed timestamp, and current git branch (best-effort).
Open a Project
Section titled “Open a Project”mine proj open myapi # mark project active and print contextmine proj open myapi --print-path # print path only (used by shell helpers)mine proj open --previous # reopen the previously active projectMarks a project as the current project and updates the last-accessed timestamp. Records the previous current project so pp can switch back. With --print-path, only the project path is printed to stdout — this is how the p and pp shell functions perform cd in the parent shell.
Discover Repos
Section titled “Discover Repos”mine proj scan ~/dev # scan with default depth (3)mine proj scan ~/dev --depth 4 # scan deepermine proj scan . # scan current directory treeRecursively walks a directory and registers any git repos found. Stops at repos (does not recurse into them) and respects the depth limit. Already-registered repos are silently skipped.
Per-Project Config
Section titled “Per-Project Config”mine proj config # list all settings for current projectmine proj config ssh_host # get a single settingmine proj config ssh_host prod-box # set a settingmine proj config ssh_host prod-box -p myapi # target a specific projectReads or writes per-project settings stored in ~/.config/mine/projects.toml. Settings are silently ignored if a project has no entry yet.
Config Keys
Section titled “Config Keys”| Key | Description |
|---|---|
default_branch | Default git branch name (e.g. main) |
env_file | Path to a project-local env file |
tmux_layout | Saved tmux layout name to load on open |
ssh_host | Default SSH host alias for this project |
ssh_tunnel | Default SSH tunnel spec for this project |
Shell Helpers
Section titled “Shell Helpers”p [name] # fuzzy-pick or open a project and cd into itpp # switch to the previously active project and cd into itThe p and pp functions are installed by mine shell init. They call mine proj open --print-path and use the returned path to cd in the current shell process — avoiding any attempt to mutate a parent shell from a subprocess.
Examples
Section titled “Examples”# Register all repos under ~/devmine proj scan ~/dev
# Interactive pickermine proj
# Jump to a project by name (via shell function)p myapi
# Switch back to the previous projectpp
# Save a tmux layout for the projectmine proj config tmux_layout dev-setup
# Set an SSH default for the projectmine proj config ssh_host prod-box --project myapi