返回资讯中心
外部精选
软件工程
#开发者实时流

Show HN: Howler, a macOS menu bar AI that burns the chat after reading

A sealed letter for your quick questions on macOS.

Hacker News 最新AriesIMio2026/10/29 · 昨天17 分钟阅读

以下正文同步自 Hacker News 最新,版权归原站所有,已转换为易读排版。

A sealed letter for your quick questions on macOS.

Write on the parchment, a quill writes the answer back, and the letter burns when you're done.

Press ⌥H anywhere. A letter settles at the top of the screen, already sealed in wax.

Reduce Motion turns off the falling paper, the stamping, the ink shimmer and the fire. The text simply appears.

Download Howler.dmg, open it, and drag Howler onto Applications. Older versions and Howler.zip (the same app) are on Releases.

Open Howler. It is signed with a Developer ID and notarized by Apple, so it opens like any other app. Updates keep your Keychain and screen-recording permissions.

A small quill appears in the menu bar. Howler has no Dock icon.

From v0.1.7 on, Howler updates itself. Choose Check for Updates… in the menu, or let it check once a day (Settings › General). A new version shows up quietly in the menu and in Settings instead of popping up a window. Nothing installs until you say so. Updates are installed by Sparkle, which checks the download's EdDSA signature and Developer ID first. Versions up to 0.1.6 need one manual download.

Releases before v0.1.4 were ad-hoc signed. If Gatekeeper stops one of those, right-click it and choose Open.

Howler writes with one model service. The setup is short enough to hand to an AI assistant.

Open Settings › General › Copy Setup Prompt and paste it into Claude Code, Codex or another assistant that can run commands. It asks which service and model you want, checks the official docs, writes the setup and runs a check until it passes. It never asks for your API key in the chat. When it needs the key, it asks you to copy it, then runs pbpaste | Howler config set api-key --stdin, which sends the key straight into the Keychain.

You can run the same commands yourself. They live in the app binary:

H=/Applications/Howler.app/Contents/MacOS/Howler $H config schema # every field, with examples $H config set preset=deepseek 'body={"thinking":{"type":"disabled"}}' pbpaste | $H config set api-key --stdin # or --env NAME, --file PATH $H check # --verbose shows the request, key masked $H config show

Field Meaning

format chat-completions (OpenAI and compatible, including local Ollama / LM Studio), anthropic-messages, gemini-generate-content

base-url API base without the endpoint path; https:// only, except http://localhost

model Model name as the service spells it

body JSON merged into every request, e.g. to turn thinking off or cap the output

headers Extra HTTP headers. Never the key.

preset openai, anthropic, gemini, xai, deepseek or openrouter. Fills the three fields above.

Changes take effect in the running app at once. Every request goes straight to the service you configured, never through a relay.

Every conversation starts with a short system prompt, shown in full in Settings › Prompt:

Leave the instructions empty to turn the whole prompt off, date included, for models that reject a system prompt. A body that sets system (Anthropic) or systemInstruction / system_instruction (Gemini) replaces it.

The model can't search the web: it answers from what it was trained on, and the date only lets it say when something may be too recent for it.

⌥H Open the letter. Press again to burn it. The shortcut can be changed in Settings.

⌥, Open Settings from any app

↩ / ⌥↩ Send / new line

⌘C Copy the latest answer (or click ❧ Copy). With text selected, it copies the selection.

  • Attach Paste from the clipboard, or capture a screen region

⌘V Short text goes into the question. Text of 280+ characters or 3+ lines, or a picture, is sealed as an attachment, including an image copied in a browser or an image file copied in Finder.

Esc / click outside Burn the letter, and the conversation with it

Follow-up questions stay on the same sheet, separated by a fleuron. ⏹ stops a reply and keeps what is already written. Attachments travel only with your next question, so leave out passwords and other secrets. Screen capture asks for Screen & System Audio Recording permission the first time. Howler only takes a still image of the region you drag and never records audio; macOS simply grants screen and audio access together.

No chat history, ever. Messages live in memory and burn with the letter.

Stored: the model setup, its last check, your system prompt instructions and your shortcut (UserDefaults), plus the API key (Keychain).

The system prompt carries the date in UTC and nothing about you: no name, language setting, time zone or location.

The clipboard and the screen are read only when you paste or capture.

No logs, no telemetry. Network requests use an ephemeral URLSession.

Update checks fetch appcast.xml from Howler's latest GitHub Release, at most once a day, and only after you allow it. They send no system profile; GitHub sees only the request, with the app and Sparkle versions in its User-Agent. Turn them off in Settings › General.

The command line never prints the key.

Send Feedback… (in the menu, or in Settings › General) opens a GitHub issue form in your browser with Howler's version, the macOS version and the chip filled in. Nothing is sent until you submit it there.

Build from source

Requires Xcode 15.3+ (Swift 5.10+) and macOS 14+. The one third-party dependency is Sparkle (pinned in Package.swift), which installs updates.

make test # unit tests: config, requests, streaming, attachments, hotkeys, quill pacing make app # universal build → build/Howler.zip, app staged in build/stage.noindex (ad-hoc, or SIGN_IDENTITY) make dmg # the same app in build/Howler.dmg, beside an Applications link make run # build and open make icon # re-render Resources/AppIcon.icns from Sources/Howler/AppIconArt.swift

Debug builds include a demo mode that needs no key and no network:

swift build HOWLER_DEMO=1 .build/debug/Howler # also: long, multi, burn, image, setup, settings HOWLER_DEMO_DARK=1 HOWLER_DEMO=1 .build/debug/Howler

To rename the app or change its bundle ID, edit app.config and rebuild. To release, bump VERSION there and push a matching v tag. CI tests, builds, signs, notarizes and publishes the release (see release signing). Manual checks are listed in ACCEPTANCE.md.

The project was renamed QuickAsk → Napkin → Howler, and so was the GitHub repo. Update old clones with git remote set-url origin git@github.com:HiAriesZhou/Howler.git. The bundle ID com.hiarieszhou.howler shares nothing with com.hiarieszhou.napkin or io.github.hiarieszhou.quickask, so set up the model again. Delete the old app, because both would compete for ⌥Space. You can remove the old Keychain items in Keychain Access by searching for the old bundle IDs.

The icon and seals are drawn in code with the letter's own paper, wax and fire. Provider marks are monochrome letters and SF Symbols; no trademarked logos are bundled.

MIT License · © 2026 AriesZhou

正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。

打开原文
去社区讨论 →