← Blog & Playground

AI: Simple bookmarks for your shell

I replaced the Ruby-based jump with a tiny Bash function — no runtime overhead, no dependencies, just a plain text file and four commands.

For years I relied on the Ruby version of Jump. It did exactly what I needed — save an alias for a directory, then leap there with a single command. No memorizing paths, no tedious cd chains. Simple and effective.

But Ruby has its tax. Every shell startup, every invocation — a small pause. On a fast machine you barely notice. On an older one, or just in those moments when you’re in the zone, it’s exactly the kind of friction that breaks your flow. The Ruby runtime startup overhead is just something you can’t hide.

I went looking for alternatives

Of course I did. And there’s a lot out there. Half of GitHub is projects promising to solve terminal navigation once and for all.

Fuzzy search. AI-suggested paths. Usage statistics. Auto-generated shortcuts based on jump frequency. Plugins. YAML configuration.

I didn’t need any of that. I just needed to jump to ~/projects/client-xyz/backend by typing jump xyz. That’s the entire use case. That simplicity either doesn’t exist, or it comes bundled with a pile of things I don’t want and didn’t ask for.

So I wrote it again. In Bash.

How it works

The whole system is bookmarks stored in a single plain text file at ~/.jumps/aliases. Each line is an alias:path pair. No database, no daemon, no extra state.

backend:/home/user/projects/client-xyz/backend
dotfiles:/home/user/.config
jump:/home/user/projects/jump

There are four commands and nothing more:

Command What it does
jump xyz jump to alias
jump -a xyz save current path as alias
jump -d xyz delete alias
jump -l list all bookmarks

Adding a bookmark works by navigating to the target directory first, then calling jump -a name. The script grabs the current path via pwd and writes it out. Duplicates are handled by stripping the old entry before appending the new one — no duplicates ever accumulate in the file.

grep -v "^${alias_name}:" "$BOOKMARK_FILE" > "${BOOKMARK_FILE}.tmp"
mv "${BOOKMARK_FILE}.tmp" "$BOOKMARK_FILE"
echo "${alias_name}:${current_path}" >> "$BOOKMARK_FILE"

Jumping just finds the matching line in the file, extracts the path after the colon, and calls cd. If the directory has since disappeared, the script says so — no silent failures.


The whole thing loads as a shell function via source in your .zshrc or .bashrc. No installation, no dependencies, no package manager. One file, a few dozen lines of shell.

Startup overhead? Zero. Ruby runtime? Nowhere to be found. And it does exactly what I need — nothing more.


Source Github