goto
Tab-completed project navigation for daily shell workflows.
Overview
goto is a lightweight Rust CLI that helps you jump across project folders using short namespace paths like gh/repo instead of long cd commands.
- Repository: github.com/ItamiForge/goto
- Source of truth: standalone
gotorepository (no longer underitamiforge/tools/)
Install
From GitHub
cargo install --git https://github.com/ItamiForge/goto.gitFrom local clone
cargo install --path .Verify install
goto --versionEnable shell integration (zsh)
goto setup
exec zshThis installs a managed helper in ~/.zshrc so goto can change your current shell directory and provide completions.
To remove integration later:
goto uninstallWithout setup, goto only prints paths to stdout.
Quick start
# list namespaces / entries
goto list
# jump target path (prints path without shell helper)
goto gh/project
# inspect config path
goto config-path
# run health checks
goto doctorUser guide
Namespace model
Each namespace maps a short key to a directory root:
gh->~/Documents/GitHubwork->~/Projects
Then goto gh/repo-name resolves to ~/Documents/GitHub/repo-name.
Managing namespaces
# add namespace
goto add work ~/Projects --alias office
# rename namespace
goto rename work client
# change namespace root path
goto set-path client ~/Code/Client
# add/remove aliases
goto alias-add gh github
goto alias-remove gh github
# remove by namespace OR alias
goto remove client
goto remove officeInspecting config
goto list-rawConfiguration
Print the active config file location:
goto config-pathIf no config exists, goto falls back to built-in defaults.
goto does not perform hidden legacy config imports. You explicitly manage namespaces with CLI commands or by editing config TOML.
Example:
[[namespace]]
name = "gh"
path = "~/Documents/GitHub"
aliases = ["github"]
[[namespace]]
name = "work"
path = "~/Projects"
aliases = ["office"]Rules:
- Namespace names are case-insensitive during lookup.
- Paths support shell expansion like
~and$HOME. - Aliases are optional and case-insensitive.
Diagnostics and troubleshooting
Run:
goto doctorIt checks:
- Config file readability/parsing
- Namespace and alias validity
- Namespace root path existence
- Shell integration presence
Common fixes:
- If shell integration is missing: run
goto setup. - If a namespace root is missing: run
goto set-path <name> <path>. - If config is malformed: run
goto list-raw, fix invalid entries, and retrygoto doctor.
Why it exists
It removes repetitive navigation friction when switching across many repos during day-to-day development.