{"slug": "show-hn-i-built-a-command-palette-for-the-terminal-6-2mb-pure-go-no-fzf", "title": "Show HN: I built a command palette for the terminal – 6.2MB, pure Go, no fzf", "summary": "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.", "body_md": "Inline finder for the commands you use every day and never quite memorize.\n\n[\n](https://www.npmjs.com/package/decoreba)[\n](https://go.dev)[\n](https://github.com/matheuzgomes/decoreba/actions)[\n](/matheuzgomes/decoreba/blob/master/LICENSE)\n\n~2 ms startup · 6.2 MB binary · zero dependencies\n\n[Features](#features) · [Install](#install) · [Quick start](#quick-start) · [Usage](#usage) · [Shell](#shell-integration) · [Sync](#gist-sync) · [MCP](#mcp-server)\n\n**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`\n\nmatches`proximo`\n\n).**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`\n\nsteps forward,`Ctrl+X`\n\nruns 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.\n\n```\nnpm install -g decoreba\n```\n\nDownloads a prebuilt binary for your platform. No Go toolchain needed.\n\n```\ngo install github.com/matheuzgomes/decoreba/cmd/decoreba@latest\ndecoreba                    # auto-detect context from cwd\ndecoreba git                # search within \"git\" context\ndecoreba add                # add a command\ndecoreba edit 0c9           # edit by id prefix\ndecoreba stats              # vault statistics\n```\n\nSee the full reference below.\n\nThe overlay appears below your prompt, not fullscreen. Type to fuzzy-search.\n`Enter`\n\ncopies the command. `Ctrl+X`\n\nexecutes it.\n\nNote\n\n`Shift+Enter`\n\nalso executes, but only in terminals that implement the\n[kitty keyboard protocol](https://sw.kovidgoyal.net/kitty/keyboard-protocol/)\n(kitty, WezTerm, Ghostty). In most terminals `Shift+Enter`\n\nsends the same\nbyte as `Enter`\n\nand will copy instead.\n\nWhen results exceed the viewport, an overflow indicator appears (`… 3 more`\n\n).\nIf the terminal is 3 rows or shorter, a graceful message is shown instead.\n`NO_COLOR`\n\nor `--no-color`\n\ndisables all ANSI codes.\n\n**Universal** (every terminal emulator)\n\n| Key | Action |\n|---|---|\n`↑` / `Ctrl+K` |\nNavigate up |\n`↓` / `Ctrl+J` |\nNavigate down |\n`Enter` |\nCopy selected |\n`1` – `9` |\nDirect select (empty search) |\n`Ctrl+X` |\nExecute selected (press twice, or `y` to confirm) |\n`Ctrl+E` |\nEdit selected |\n`Ctrl+S` |\nToggle pin |\n`Backspace` (empty) |\nRemove context chip |\n`Tab` / `Shift+Tab` |\nNext / previous field (form) |\n`Esc` / `Ctrl+C` |\nCancel |\n\n**Kitty protocol only** (kitty, WezTerm, Ghostty)\n\n| Key | Action |\n|---|---|\n`Shift+Enter` |\nExecute selected |\n\n`Ctrl+X`\n\ntriggers execution. A confirmation prompt appears:\n`Run this command? y/yes n/no`\n\n. Press `Ctrl+X`\n\nagain or `y`\n\nto confirm.\nAny other key cancels.\n\nWith `--shell-output`\n\n, the command text is printed to stdout instead of the\nclipboard. The shell widget (below) strips the prefix automatically:\n\n```\ndecoreba docker ps --shell-output   # prints \"✓ docker ps\" or \"EXEC:docker ps\"\n```\n\nFive fields: context, title, command, tags, notes. Context autocompletes from\nexisting entries. Tags render as colored chips. `Ctrl+W`\n\nturns the command\ninto a multi-step workflow editor.\n\n`decoreba edit <id>`\n\nor `Ctrl+E`\n\nfrom the palette reopens the form pre-filled.\n\nCommands can have multiple steps. Each step is a title + command pair.\n\n`Enter`\n\nruns the next step. `Ctrl+X`\n\nruns all remaining (confirms first).\n`Esc`\n\naborts. Failed steps show `✗`\n\n. Subprocess I/O routes through `/dev/tty`\n\nso interactive programs still work when piped.\n\nUse `{{placeholder}}`\n\nor `{{name:default}}`\n\nin any command. On copy or\nexecute, decoreba prompts for each value inline:\n\n``` bash\n$ decoreba deploy\n\n  Container name: [web]\n```\n\nGenerate tab completions for subcommands, contexts, and sync actions:\n\n```\neval \"$(decoreba completion bash)\"   # or zsh / fish\n```\n\nOpens the palette pre-filled with whatever you typed. `Enter`\n\ninserts the\ncommand at the cursor. `Ctrl+X`\n\nexecutes (confirms first).\n\n```\nsource <(decoreba shell bash)   # or zsh\n```\n\nInstalls both widget and completions into your shell rc file in one step. Creates a backup before modifying.\n\n```\ndecoreba init              # interactive\ndecoreba init --yes        # non-interactive\n```\n\nSync your vault across machines via a private GitHub Gist.\n\n```\ndecoreba sync init          # create a new Gist and upload\ndecoreba sync push          # upload local changes\ndecoreba sync pull          # download remote changes\ndecoreba sync status        # show ahead/behind/diverged/clean\n```\n\nRequires `DECOREBA_GIST_TOKEN`\n\n(classic PAT with `gist`\n\nscope). Pass\n`--encrypt`\n\nto encrypt with AES-256-GCM before upload. The key is derived\nfrom the token.\n\nRuns a [Model Context Protocol](https://modelcontextprotocol.io) server over\nstdin/stdout. Lets AI agents (Claude Desktop, Cline, etc.) interact with\nyour command vault directly.\n\n```\ndecoreba mcp\n```\n\n| Tool | Action |\n|---|---|\n`decoreba_search` |\nFuzzy search across all contexts |\n`decoreba_get` |\nLook up a command by ID |\n`decoreba_list_contexts` |\nList all contexts with counts |\n`decoreba_add` |\nAdd a new command |\n`decoreba_edit` |\nUpdate an existing command |\n`decoreba_remove` |\nDelete by ID |\n`decoreba_execute` |\nRun a command and return output |\n`decoreba_stats` |\nVault statistics |\n\nWrite and delete tools require `confirm: true`\n\n. Dangerous commands\n(`rm -rf /`\n\n, `> /dev/sda`\n\n, etc.) are blocked by a built-in denylist.\nAuto-backup runs before every modification.\n\nSingle JSON file. Atomic writes (save to `.tmp`\n\n, rename over target).\n\n| OS | Path |\n|---|---|\n| Linux | `$XDG_CONFIG_HOME/decoreba/commands.json` |\n| macOS | `~/Library/Application Support/decoreba/commands.json` |\n| Windows | `%AppData%\\decoreba\\commands.json` |\n\nOverride the directory with `$DECOREBA_CONFIG`\n\n(the filename is always\n`commands.json`\n\n).\n\n| Metric | Value |\n|---|---|\n| Binary | 6.2 MB (CLI, stripped with `-s -w` ) |\n| Startup | ~2 ms |\n| RSS | ~7 MB |\n| Dependencies | zero (pure Go stdlib) |\n| Targets | linux amd64/arm64, macOS amd64/arm64, windows amd64 |\n\n**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`\n\nand`--no-color`\n\ndisable all ANSI escape codes.", "url": "https://wpnews.pro/news/show-hn-i-built-a-command-palette-for-the-terminal-6-2mb-pure-go-no-fzf", "canonical_source": "https://github.com/matheuzgomes/decoreba", "published_at": "2026-07-21 17:22:17+00:00", "updated_at": "2026-07-21 17:43:29.725177+00:00", "lang": "en", "topics": ["developer-tools", "artificial-intelligence", "ai-agents"], "entities": ["Matheus Gomes", "Decoreba", "Go", "npm", "MCP"], "alternates": {"html": "https://wpnews.pro/news/show-hn-i-built-a-command-palette-for-the-terminal-6-2mb-pure-go-no-fzf", "markdown": "https://wpnews.pro/news/show-hn-i-built-a-command-palette-for-the-terminal-6-2mb-pure-go-no-fzf.md", "text": "https://wpnews.pro/news/show-hn-i-built-a-command-palette-for-the-terminal-6-2mb-pure-go-no-fzf.txt", "jsonld": "https://wpnews.pro/news/show-hn-i-built-a-command-palette-for-the-terminal-6-2mb-pure-go-no-fzf.jsonld"}}