cd /news/developer-tools/show-hn-i-built-a-command-palette-fo… · home topics developer-tools article
[ARTICLE · art-67375] src=github.com ↗ pub= topic=developer-tools verified=true sentiment=↑ positive

Show HN: I built a command palette for the terminal – 6.2MB, pure Go, no fzf

Developer Matheus Gomes released Decoreba, a 6.2 MB command palette for the terminal written in pure Go with zero dependencies, featuring fuzzy search, typo tolerance, recency ranking, and an MCP server for AI agent integration. The tool opens as an inline overlay below the cursor and can be installed via npm or go install, supporting multi-step workflows and shell integration.

read5 min views1 publishedJul 21, 2026
Show HN: I built a command palette for the terminal – 6.2MB, pure Go, no fzf
Image: source

Inline finder for the commands you use every day and never quite memorize.

~2 ms startup · 6.2 MB binary · zero dependencies

Features · Install · Quick start · Usage · Shell · Sync · MCP

Inline overlay— Opens below the cursor, not as a fullscreen app. Dismiss without trace. Pure ANSI escape codes, no libraries.** Fuzzy search + typo tolerance**— Damerau-Levenshtein distance catches typos. Accent normalization (próximo

matchesproximo

).Recency ranking— Score = fuzzy match + usage count + exponential decay (48h half-life). Pinned commands stay at top.** Workflows**— Multi-step commands with interactive runner. Each step is a title + command pair.Enter

steps forward,Ctrl+X

runs all.Zero dependencies— Pure Go standard library. No ncurses, no fzf, no daemon. Single 6.2 MB binary.** MCP server**— Model Context Protocol over stdin/stdout. Lets AI agents search, add, edit, and execute from your vault.

npm install -g decoreba

Downloads a prebuilt binary for your platform. No Go toolchain needed.

go install github.com/matheuzgomes/decoreba/cmd/decoreba@latest
decoreba                    # auto-detect context from cwd
decoreba git                # search within "git" context
decoreba add                # add a command
decoreba edit 0c9           # edit by id prefix
decoreba stats              # vault statistics

See the full reference below.

The overlay appears below your prompt, not fullscreen. Type to fuzzy-search. Enter

copies the command. Ctrl+X

executes it.

Note

Shift+Enter

also executes, but only in terminals that implement the kitty keyboard protocol (kitty, WezTerm, Ghostty). In most terminals Shift+Enter

sends the same byte as Enter

and will copy instead.

When results exceed the viewport, an overflow indicator appears (… 3 more

). If the terminal is 3 rows or shorter, a graceful message is shown instead. NO_COLOR

or --no-color

disables all ANSI codes.

Universal (every terminal emulator)

Key Action
/ Ctrl+K
Navigate up
/ Ctrl+J
Navigate down
Enter
Copy selected
19
Direct select (empty search)
Ctrl+X
Execute selected (press twice, or y to confirm)
Ctrl+E
Edit selected
Ctrl+S
Toggle pin
Backspace (empty)
Remove context chip
Tab / Shift+Tab
Next / previous field (form)
Esc / Ctrl+C
Cancel

Kitty protocol only (kitty, WezTerm, Ghostty)

Key Action
Shift+Enter
Execute selected

Ctrl+X

triggers execution. A confirmation prompt appears: Run this command? y/yes n/no

. Press Ctrl+X

again or y

to confirm. Any other key cancels.

With --shell-output

, the command text is printed to stdout instead of the clipboard. The shell widget (below) strips the prefix automatically:

decoreba docker ps --shell-output   # prints "✓ docker ps" or "EXEC:docker ps"

Five fields: context, title, command, tags, notes. Context autocompletes from existing entries. Tags render as colored chips. Ctrl+W

turns the command into a multi-step workflow editor.

decoreba edit <id>

or Ctrl+E

from the palette reopens the form pre-filled.

Commands can have multiple steps. Each step is a title + command pair.

Enter

runs the next step. Ctrl+X

runs all remaining (confirms first). Esc

aborts. Failed steps show

. Subprocess I/O routes through /dev/tty

so interactive programs still work when piped.

Use {{placeholder}}

or {{name:default}}

in any command. On copy or execute, decoreba prompts for each value inline:

$ decoreba deploy

  Container name: [web]

Generate tab completions for subcommands, contexts, and sync actions:

eval "$(decoreba completion bash)"   # or zsh / fish

Opens the palette pre-filled with whatever you typed. Enter

inserts the command at the cursor. Ctrl+X

executes (confirms first).

source <(decoreba shell bash)   # or zsh

Installs both widget and completions into your shell rc file in one step. Creates a backup before modifying.

decoreba init              # interactive
decoreba init --yes        # non-interactive

Sync your vault across machines via a private GitHub Gist.

decoreba sync init          # create a new Gist and upload
decoreba sync push          # upload local changes
decoreba sync pull          # download remote changes
decoreba sync status        # show ahead/behind/diverged/clean

Requires DECOREBA_GIST_TOKEN

(classic PAT with gist

scope). Pass --encrypt

to encrypt with AES-256-GCM before upload. The key is derived from the token.

Runs a Model Context Protocol server over stdin/stdout. Lets AI agents (Claude Desktop, Cline, etc.) interact with your command vault directly.

decoreba mcp
Tool Action
decoreba_search
Fuzzy search across all contexts
decoreba_get
Look up a command by ID
decoreba_list_contexts
List all contexts with counts
decoreba_add
Add a new command
decoreba_edit
Update an existing command
decoreba_remove
Delete by ID
decoreba_execute
Run a command and return output
decoreba_stats
Vault statistics

Write and delete tools require confirm: true

. Dangerous commands (rm -rf /

, > /dev/sda

, etc.) are blocked by a built-in denylist. Auto-backup runs before every modification.

Single JSON file. Atomic writes (save to .tmp

, rename over target).

OS Path
Linux $XDG_CONFIG_HOME/decoreba/commands.json
macOS ~/Library/Application Support/decoreba/commands.json
Windows %AppData%\decoreba\commands.json

Override the directory with $DECOREBA_CONFIG

(the filename is always commands.json

).

Metric Value
Binary 6.2 MB (CLI, stripped with -s -w )
Startup ~2 ms
RSS ~7 MB
Dependencies zero (pure Go stdlib)
Targets linux amd64/arm64, macOS amd64/arm64, windows amd64

Appear, don't replace. Inline overlay, not alternate screen. The terminal is exactly as it was before.Right answer before you finish typing. Fuzzy + typo tolerance + recency + pinning.Keyboard-first. Every action has a shortcut. The hint line teaches them progressively. No mouse.Context over categories. Commands live under the tool they belong to. Auto-detection from cwd.Accessible.NO_COLOR

and--no-color

disable all ANSI escape codes.

── more in #developer-tools 4 stories · sorted by recency
── more on @matheus gomes 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/show-hn-i-built-a-co…] indexed:0 read:5min 2026-07-21 ·