{"slug": "show-hn-fedterm-a-claude-native-terminal-for-macos-that-popup-like-spotlight", "title": "Show HN: FedTerm – a Claude-native terminal for macOS that popup like Spotlight", "summary": "FedTerm, a Claude-native terminal for macOS that opens with a global shortcut like Spotlight, has been released on Show HN. The app floats above other apps, records command history, and integrates with Claude Code sessions, offering features such as fuzzy search, SSH connections, and named sessions.", "body_md": "FedTerm is a terminal for macOS that opens with a global shortcut. Press `⌥`` Space` and a window appears on top of the app you are working in, including fullscreen apps and other desktops. Type a command, an SSH host or a folder path, press `Enter`, and the window becomes a terminal. Press the shortcut again to hide it and return focus to the previous app.\n\nThe app also records the commands you run, using a zsh hook. Because of that the same window works as a search over your command history, a list of servers you connect to, and a launcher for your [Claude Code](https://claude.com/claude-code) sessions.\n\nFedTerm lives in the menu bar and has no Dock icon. The shortcut can be changed to any combination you like.\n\n- The shortcut is registered through Carbon, so Accessibility permissions are not needed.\n- You can rebind it in the settings. Click the field and press the keys you want. F-keys work without modifiers, other keys need at least one. If the combination is taken by another app, FedTerm says so and keeps the previous one.\n- The window floats above other apps and follows you between desktops.\n- It hides when you click outside of it. Pin it if you want it to stay open.\n- Its size and position are remembered between launches. If the saved position is off-screen, the window opens in the centre.\n\nFedTerm looks at what you type and offers what fits:\n\n| Input | Result |\n|---|---|\n`docker compose up -d` |\nruns the command in a new tab |\n`deploy@prod-1` or `ssh -p 2222 host` |\nopens an SSH connection. Flags like `-p` , `-i` , `-J` , `-l` and `ssh://` links are parsed |\n`/Users/me/projects/api` or `~/work/api` |\nopens a Claude Code session in that folder |\n`dcup` |\nmatching commands from your history |\n\nArrow keys move through the list, `Enter` runs the selected item, `Esc` clears the field. Matching is fuzzy, so a few letters are usually enough.\n\n**Favourite commands.** Star a command and it stays at the top of the window. You can rename it and mark it to open in its own tab when the app starts.**Saved SSH connections.** Pin a server and give it a label. Recent connections are collected on their own and sorted by how recently and how often you used them.**Command history.** Commands are grouped by age: last hour, six hours, today, yesterday, this week, older. Repeats inside a group are shown once. For the last hour there is also a short summary with counts per tool (`git`\n\n,`docker`\n\n,`ssh`\n\n,`npm`\n\nand so on) and clickable server names.\n\n**Named sessions.** Drop a folder on the window or paste a path, then give the session a name. FedTerm starts it with its own session id and later resumes that exact session instead of creating a new one.**All past sessions.** FedTerm reads`~/.claude/projects`\n\n, takes the summary or first message of each transcript together with its folder, and lists your sessions grouped by project and by date, with a search field. Results are cached by file modification time, so the list opens without delay.**Clean environment.**`CLAUDE*`\n\nand`ANTHROPIC*`\n\nvariables are removed from new tabs. A session started from FedTerm behaves like a standalone one even if FedTerm itself was launched from Claude Code.\n\n`⌘T` opens a tab,`⌘W` closes it,`⌘1`–`⌘9` switch between tabs,`⌘[` and`⌘]` move left and right.- Tabs can be dragged to reorder and renamed with a double click.\n- Open tabs are restored on the next launch. SSH tabs reconnect automatically.\n- The tab title follows the shell: current folder, the title set by the running program, or the server name.\n- If something is still running, FedTerm asks for confirmation before quitting.\n\nA command can be bound to `⌃1`–`⌃9` together with a working directory. These shortcuts only fire while the window is open, so they do not affect other apps. Multi-line scripts are saved to a file and run through bash, so loops and conditionals work as written.\n\nThere are 13 built-in themes: the Terminal.app palette, One Dark, Dracula, Nord, Gruvbox, both Solarized variants, Tokyo Night, Catppuccin Mocha, Monokai, GitHub Light and two neutral greys. Any theme can be copied and edited: background, text, caret, selection, all 16 ANSI colours and background transparency over the blur. Font family, size and weight are configurable. There is also a thin strokes option for crisper text and a slider that darkens the glass over light wallpapers. Changes apply to open terminals immediately.\n\nThe terminal is [SwiftTerm](https://github.com/migueldeicaza/SwiftTerm): xterm-256color, truecolor and mouse support. `⌘`-click opens links, file paths and OSC 8 hyperlinks. The scrollbar gutter is removed, so full-width programs like `mc`\n\nand `htop`\n\nuse the entire width. `⌃C` is written directly to the pty, so it always interrupts. Shortcuts are matched by physical key code and keep working on Cyrillic and other non-Latin layouts. The interface is in Russian on Russian systems and in English everywhere else.\n\n- macOS 13 Ventura or newer, Apple Silicon or Intel\n- Xcode Command Line Tools with Swift 5.9 or newer\n- zsh, the default shell on macOS. Command history is captured through it\n- The\nCLI in your`claude`\n\n`PATH`\n\nfor the Claude Code features\n\n```\ngit clone https://github.com/feddot2517/fedterm.git\ncd fedterm\nmake bundle          # builds the release binary and assembles dist/FedTerm.app\nopen dist/FedTerm.app\n```\n\n`make run`\n\ndoes both steps at once. `make dev`\n\nruns the app from source without building a bundle.\n\nThe binary is signed ad-hoc, so Gatekeeper will block the first launch. Right-click the app and choose **Open**, or remove the quarantine flag:\n\n```\nxattr -dr com.apple.quarantine dist/FedTerm.app\n```\n\nMove the app to `/Applications`\n\nand add it to **System Settings → General → Login Items** to have it running all the time.\n\n| Shortcut | Action |\n|---|---|\n⌥Space |\nshow or hide the window (rebindable) |\nEnter |\nrun the selected item |\n↑ ↓ |\nmove through results and history |\nEsc |\nclear the field |\n⌘T / ⌘W |\nopen or close a tab |\n⌘1–⌘9 |\nswitch to a tab |\n⌘[ / ⌘] |\nprevious or next tab |\n⌃1–⌃9 |\nrun a custom command |\n⌘+ / ⌘- / ⌘0 |\nfont size up, down, reset |\n⌘-click |\nopen a link or path from the output |\n⌃C |\ninterrupt the running program |\n\nAll files are local, in `~/Library/Application Support/FedTerm/`\n\n:\n\n| File | Contents |\n|---|---|\n`history.jsonl` |\ncommands with timestamp and working directory |\n`pins.json` , `favorites.json` |\nsaved servers and favourite commands |\n`state.json` |\nopen tabs for the next launch |\n`automations.json` , `scripts/` |\ncustom ⌃1–⌃9 commands and generated scripts |\n`claude_sessions.json` , `claude_index.json` |\nnamed Claude sessions and the transcript title cache |\n`custom_themes.json` |\nuser themes |\n`zdotdir/` |\ngenerated zsh files that source your own config and add the history hook |\n\nThe app has no networking code, so nothing is uploaded and there is no telemetry. History is a plain text file and can be deleted at any time.\n\nNote that commands are stored exactly as typed. If you paste a token or password inline, it will be in the file. Treat it like `~/.zsh_history`\n\n.\n\n```\nSources/FedTerm/\n├─ main.swift, AppDelegate.swift        startup, menu bar, window shortcuts\n├─ SpotlightPanel.swift                 floating window, blur, saved position\n├─ ContentView.swift, TabsModel.swift   tab bar, reordering, persisted state\n├─ HomeView.swift                       search field, results, history\n├─ TerminalSession.swift                SwiftTerm subclass, shell process, ⌘-click\n├─ HistoryStore.swift                   reading and watching history.jsonl\n├─ ShellIntegration.swift               generated zsh config with the preexec hook\n├─ ClaudeStore.swift, ClaudeUI.swift    Claude Code sessions and their browser\n├─ AutomationsStore.swift, AutomationEditor.swift   custom ⌃1–9 commands\n├─ FavoritesStore.swift                 favourite commands and autostart\n├─ Theme.swift, ThemeEditor.swift, SettingsUI.swift   themes, fonts, settings\n├─ HotkeyManager.swift, HotkeyRecorder.swift   global shortcut and rebinding\n├─ Models.swift                         SSH parsing and command classification\n└─ L10n.swift                           Russian and English strings\n```\n\n[SwiftTerm](https://github.com/migueldeicaza/SwiftTerm)by Miguel de Icaza does the terminal emulation.- Colour schemes are taken from One Dark, Dracula, Nord, Gruvbox, Solarized, Tokyo Night, Catppuccin and Monokai.", "url": "https://wpnews.pro/news/show-hn-fedterm-a-claude-native-terminal-for-macos-that-popup-like-spotlight", "canonical_source": "https://github.com/feod1/fedterm", "published_at": "2026-07-28 19:06:16+00:00", "updated_at": "2026-07-28 19:22:30.535967+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools", "artificial-intelligence"], "entities": ["FedTerm", "Claude Code", "macOS", "Anthropic"], "alternates": {"html": "https://wpnews.pro/news/show-hn-fedterm-a-claude-native-terminal-for-macos-that-popup-like-spotlight", "markdown": "https://wpnews.pro/news/show-hn-fedterm-a-claude-native-terminal-for-macos-that-popup-like-spotlight.md", "text": "https://wpnews.pro/news/show-hn-fedterm-a-claude-native-terminal-for-macos-that-popup-like-spotlight.txt", "jsonld": "https://wpnews.pro/news/show-hn-fedterm-a-claude-native-terminal-for-macos-that-popup-like-spotlight.jsonld"}}