Back to tools

Dash CLI

Available

Shortcuts for your terminal? You didn't know how much you needed them

open-source cross-platform tui
View on GitHub

What is Dash CLI?

A terminal shortcut manager for people who bounce between repositories, editors, shells, and agent commands all day. Dash keeps project navigation, shortcut execution, and command chaining in one fast TUI with a scriptable CLI underneath.

Features

  • Project explorer - scans configured roots for git repositories, caches results, and keeps recent projects near the top.
  • Chainable shortcuts - run dash 1 claude or d work code to execute named actions in sequence.
  • Fast editing loop - add a selected project with Ctrl+T, delete with Ctrl+D, or manage everything from the Shortcuts tab.
  • Scriptable CLI - add, list, edit, remove, and inspect shortcuts from shell scripts with JSON output when needed.

Quick start

git clone https://github.com/rmorse/dash-cli
cd dash-cli
npm install
npm run build
npm link
dash-cli --setup
dash

Common commands

dash                         # open project explorer
dash proj                    # run one shortcut
dash 1 claude                # chain shortcuts
dash-cli -- list --json      # inspect shortcuts for scripts
dash-cli -- add proj "cd ~/projects/myproj" "code ." --name "My Project"

Shortcuts

Quick Access

Jump directly to a shortcut by its trigger:

dash myproj     # Run shortcut with trigger "myproj"
dash 1          # Run shortcut with trigger "1"
d work          # Same thing, using the 'd' alias

Chaining Shortcuts

Chain multiple shortcuts together - commands run in sequence:

dash 1 claude       # cd to project, then run claude
dash work code      # cd to work project, then open VS Code
dash proj test run  # Chain three shortcuts together

If any trigger in the chain doesn’t exist, you’ll get an error.

Shortcuts Editor

Access the full shortcuts editor from the Shortcuts tab (Tab from Projects) to:

  • Custom triggers - Use any text (e.g., work, api, 1)
  • Multi-line commands - Run multiple commands in sequence
  • Case sensitivity - Toggle per-shortcut (default: case-insensitive)

Example shortcut:

Name:           My Project
Trigger:        proj
Case Sensitive: No
Commands:
  cd ~/projects/my-project
  code .
  npm run dev

Quick Add

Press Ctrl+T on any project or recent item to quickly add it as a shortcut. This creates a shortcut with:

  • Name: the project path
  • Trigger: next available number (1, 2, 3…)
  • Command: cd "/path/to/project"

To delete a shortcut, select it in the Shortcuts section and press Ctrl+D (confirm with y/n).

Edit shortcuts via the Shortcuts tab (Tab from Projects) to customize triggers or add more commands.

Controls

KeyAction
/ Navigate list
EnterSelect project
/ Drill into / back from nested projects
PgUp / PgDnPage navigation
TypeFilter projects
Ctrl+TAdd shortcut (customizable)
Ctrl+DDelete shortcut (in Shortcuts section)
Ctrl+RRefresh projects list (customizable)
TabCycle tabs (Projects → Shortcuts → Settings)
EscClear filter / go back / save & exit / quit

Tabs

The app has three tabs, accessible by pressing Tab:

  1. Projects - Main project list with shortcuts and recent projects
  2. Shortcuts - Edit, add, and delete shortcuts
  3. Settings - Configure app settings

Settings

Press Tab twice from Projects to reach settings, or edit ~/.dash-cli/settings.json:

SettingDefaultDescription
projectsDirD:\projectsRoot directory to scan
maxDepth4How deep to scan for nested repos
skipDirsnode_modules,...Comma-separated patterns to skip (supports globs like *.test)
showShortcutstrueShow shortcuts section in the main list
showRecenttrueShow recent projects section in the main list
recentCount5Number of recent projects to show (only visible when showRecent is true)
visibleRows12Viewport height
selectedColor#FFD700Highlight color for selected item
shortcutColor#69FFBEColor for shortcut items
recentColor#6495EDColor for recent items
shortcutToggleKeytKey for Ctrl+? to add shortcut
refreshKeyrKey for Ctrl+? to refresh projects

CLI Options

dash-cli --setup [shell] [--alias]  # Configure shell integration
dash-cli --uninstall [shell]        # Remove shell integration
dash-cli --debug                     # Enable debug logging
dash proj                            # Run shortcut "proj"
dash 1 claude                        # Chain shortcuts together
FlagDescription
--setupConfigure shell integration (bash/powershell)
--uninstallRemove shell integration from your profile
--aliasAdd ‘d’ shortcut during setup
--debugEnable debug logging to ~/.dash-cli/debug.log
[triggers...]Run one or more shortcuts by trigger

CLI Shortcut Management

Manage shortcuts from the command line using dash-cli -- <command>. The -- separator distinguishes CLI commands from trigger execution.

Commands

add - Add a new shortcut

dash-cli -- add <trigger> <command...> [--name "Name"] [--case-sensitive]
Argument/FlagRequiredDescription
<trigger>YesUnique trigger text (cannot contain spaces or start with --)
<command...>YesOne or more commands to run
--name "Name"NoDisplay name (defaults to trigger)
--case-sensitiveNoMake trigger case-sensitive (default: case-insensitive)
--jsonNoOutput in JSON format
# Basic usage (name auto-set to trigger)
dash-cli -- add proj "cd /projects/myproj"

# Multiple commands
dash-cli -- add proj "cd /projects/myproj" "code ."

# With custom name
dash-cli -- add proj "cd /projects/myproj" --name "My Project"

# Case-sensitive trigger
dash-cli -- add Proj "cd /projects/myproj" --case-sensitive

list - List all shortcuts

dash-cli -- list [--json]
FlagDescription
--jsonOutput full shortcut data as JSON
# Human-readable table
dash-cli -- list

# JSON output
dash-cli -- list --json

Output example:

Shortcuts:
  proj    My Project    cd /projects/myproj, code .
  web     Website       cd /sites/web

show - Show shortcut details

dash-cli -- show <trigger> [--json]
Argument/FlagRequiredDescription
<trigger>YesTrigger to look up
--jsonNoOutput as JSON
dash-cli -- show proj

Output example:

  Trigger:  proj
  Name:     My Project
  Case:     insensitive
  Commands:
    cd /projects/myproj
    code .

edit - Edit an existing shortcut

dash-cli -- edit <trigger> [--name "Name"] [--trigger new] [--command "cmd"] [--case-sensitive] [--json]
Argument/FlagRequiredDescription
<trigger>YesCurrent trigger of shortcut to edit
--name "Name"NoNew display name
--trigger newNoNew trigger (must be unique)
--command "cmd"NoReplace commands (comma-separated for multiple)
--case-sensitiveNoSet case-sensitive (flag present = true)
--jsonNoOutput as JSON
# Change name
dash-cli -- edit proj --name "My Awesome Project"

# Change trigger
dash-cli -- edit proj --trigger myproj

# Replace commands
dash-cli -- edit proj --command "cd /new/path"

# Multiple commands (comma-separated)
dash-cli -- edit proj --command "cd /path,code ."

# Make case-sensitive
dash-cli -- edit proj --case-sensitive

# Multiple changes at once
dash-cli -- edit proj --name "New Name" --trigger newproj --case-sensitive

rm - Remove a shortcut

dash-cli -- rm <trigger> [--json]
Argument/FlagRequiredDescription
<trigger>YesTrigger of shortcut to remove
--jsonNoOutput as JSON
dash-cli -- rm proj

help - Show usage

dash-cli -- help
dash-cli --        # Also shows help when no command given

JSON Output

All commands support --json for machine-readable output:

# Success responses
dash-cli -- add proj "cd /foo" --json
# {"success":true,"message":"Added: proj","shortcut":{...}}

dash-cli -- list --json
# {"shortcuts":[...]}

dash-cli -- show proj --json
# {"shortcut":{...}}

dash-cli -- edit proj --name "New" --json
# {"success":true,"shortcut":{...}}

dash-cli -- rm proj --json
# {"deleted":true,"trigger":"proj"}

# Error responses
dash-cli -- show nonexistent --json
# {"error":"Shortcut not found: nonexistent"}

Error Handling

Commands exit with code 1 on errors:

# Missing arguments
dash-cli -- add
# Error: Usage: dash -- add <trigger> <command...> [--name "Name"] [--case-sensitive]

# Trigger collision
dash-cli -- add existingTrigger "cmd"
# Error: Trigger "existingTrigger" collides with "existingTrigger" (case-insensitive) on "Existing Name"

# Not found
dash-cli -- show nonexistent
# Error: Shortcut not found: nonexistent

# Invalid trigger
dash-cli -- add "my trigger" "cmd"
# Error: Trigger cannot contain spaces

Configuration Files

Stored in ~/.dash-cli/:

  • settings.json - User settings
  • shortcuts.json - Shortcuts with triggers and commands
  • history.json - Recent projects
  • cache.json - Cached project scan (for instant startup)
  • last-command - Commands to execute (sourced by shell wrapper)
  • debug.log - Debug log (when running with --debug)