Icarus · macOS · alpha

I · The ascent

Why is the code like this?
Ask. Get the receipts.

Ask why your code is the way it is. Icarus answers from your repository's own pull requests and issues, shows the evidence, and says "no one wrote this down" when nobody did.

↓ Download for macOS Apple silicon · ~2352 KB · free alpha

Not notarized by Apple yet, so the first launch takes one extra click. Homebrew, terminal, checksum below.

Replaying a real exchange · psf/requests

II · Too near the sun

The part nobody else demos

It tells you when it doesn't know.

Other assistants guess, confidently, and never say it was a guess. Icarus refuses instead — and the refusal is enforced by code, not by asking a model nicely.

A reason that was recorded

Icarus · psf/requests

Why does requests not support HTTP/2?

HTTP/2 is a complex protocol, and it is unlikely that Requests will achieve good support for it in its current form anytime soon. Additionally, support is likely blocked by the lack of HTTP/2 support in the underlying urllib3 library.

Issue #6856: HTTP/2 I am trying to get HTTP/2 with requests, and I found these: > It can: http://hyper.readthedocs.org/en/development/quickstart.html#requests-integration https://github.com/psf/requests/issues/2082#issuecomment-44869333 …
issue:6856
Issue #6752: RFC9113 — HTTP/2.0 I can't find support for HTTP/2.0 in this package, I am also not sure if `urllib3` supports HTTP… https://datatracker.ietf.org/doc/html/rfc9113 It is probably still blocked by the support of HTTP/2.0 in `urllib3` — the tracking issue https:… …
issue:6752

A reason that was never recorded

Icarus · psf/requests

Why is the redirect limit 30?

Honest unknown

No one wrote this down.

searched: doc:docs/user/quickstart.rst#L496–L573, code:tests/test_requests.py#L262–L275, code:src/requests/exceptions.py#L106–L107, issue:7209, code:tests/test_requests.py#L251–L260, issue:6942, issue:7248, issue:6481, issue:6946, issue:6981, pr:7501, code:src/requests/sessions.py#L186–L307, issue:6758, issue:6407, issue:6784, issue:6471, pr:7487, issue:7020, issue:6546, issue:6723

Two real exchanges about psf/requests, a repository it had not seen before, quoted word for word.

III · The wings

How it works

01

Connect a repository

Sign in with GitHub, point Icarus at a repo. It indexes source, pull requests and issues — 22 file types, ~17 languages.

02

Hold a key and ask

Hold Right Option anywhere on your Mac and speak, or press ⌘⇧I to type.

03

Read the proof

A one-line spoken answer, with the quoted evidence on screen linked to the exact lines on GitHub. Or nobody recorded a reason, and it says so.

IV · The wax

What it will not do

A tool that hides its limits is asking to be trusted rather than checked.

V · What he carried

Your code

Icarus currently requests GitHub's repo scope, which is broad. A GitHub App with per-repository read-only access is the planned replacement. Said here rather than buried.

VI · The descent

Install

Four steps, about two minutes. Not notarized — that needs a paid Developer ID this alpha does not have — so every install path is below with the checksum, and you can verify the download yourself.

Get started · macOS, Apple Silicon · ~2 minutes

01

Install

Download the .dmg below, or use one of the terminal paths that follow.

02

Sign in

Open Icarus, click "Sign in with GitHub." Asks for your identity only — nothing else, yet.

03

Connect a repo

Type owner/repo and press Connect. Icarus indexes it — seconds to a few minutes.

04

Claude Code — one time

Settings → Connect, approve Keychain access. Skip if you don't use Claude Code.

Other ways to install — terminal, Homebrew, by hand, checksum

Terminal — recommended

curl -fsSLO https://icarus-website-kappa.vercel.app/install.sh
less install.sh        # ~100 lines, half of them comments — read it
sh install.sh

Three steps, not one: piping a script from the internet into a shell runs code you have not read. It verifies the disk image's checksum and refuses if it does not match. If Claude Code is installed it also registers Icarus as an MCP server, leaving any existing icarus entry alone.

Why the terminal: browsers quarantine downloads, and that tag is what triggers the "unverified developer" dialog. curl does not. That skips the prompt, not an inspection — macOS has checked this app on neither path.

Or with Homebrew

brew install --cask alankritxghosh/icarus/icarus
xattr -dr com.apple.quarantine /Applications/Icarus.app

Both lines are needed — Homebrew quarantines its downloads and a cask cannot waive that. In exchange: brew upgrade, a clean uninstall, and a checksum Homebrew verifies itself. The tap is public.

Or the disk image, by hand

1.  Download Icarus.dmg below and open it
2.  Drag Icarus onto the Applications folder beside it
3.  Open Icarus. macOS says it "cannot be opened because Apple
    cannot check it for malicious software" — this is expected
4.  System Settings → Privacy & Security, scroll down, then
    click "Open Anyway" beside the Icarus message and confirm

If no "Open Anyway" button appears, open Terminal and run xattr -dr com.apple.quarantine /Applications/Icarus.app, then open Icarus normally. (On macOS 14 and earlier you can instead right-click Icarus → Open.)

SHA-256 of Icarus.dmgc4d2837c847135823bd310a99f2662c71d957787d9b14490f97d8d33a69ec76e
Check yours with shasum -a 256 Icarus.dmg. Detects a corrupted or altered download; not a substitute for Apple's signature.

After that first launch it opens normally. Microphone and speech permissions are asked the first time you hold the talk key; decline both and typed questions still work. Something broke? Email me — reports are genuinely useful.

↓ Download for macOS Apple silicon · ~2352 KB

VII · A second pair of wings

The GitHub extension

Optional. Select lines in a file on GitHub, ask what they do or why they are there, get the same cited answer or the same honest unknown without leaving the page.

Not on the Chrome Web Store, so it installs the developer way and Chrome will keep saying so for as long as it is installed. Accurate, and unremovable short of a store listing.

Install it
1.  Download icarus-extension.zip below and unzip it
2.  Open chrome://extensions and turn on "Developer mode"
3.  Click "Load unpacked" and choose the unzipped folder
4.  Click the Icarus toolbar icon, then "Connect Mac app"
    (or "Sign in with GitHub" if you don't have the app installed)

It acts only on repositories you have already connected, and only on file pages (github.com/owner/repo/blob/…). It sends the lines you select to the same brain the app talks to, and watches nothing you have not asked about.

SHA-256 of icarus-extension.zipef09faf4e5db1dfabfa924a7f1c845dab544e5558a21e6b6bdbd62da2f462e4f
Check yours with shasum -a 256 icarus-extension.zip. No auto-update, unlike the app — a new version means loading it again.

↓ Download the extension Chrome · version 0.2.0 · ~22 KB

VIII · What your agent cannot see

Claude Code, Cursor, Codex

A merged pull request leaves a commit. A refused one leaves nothing — so git log, git blame and the working tree are blind to every change your team tried and closed. Your agent reads exactly those three. Icarus reads the rest.

Claude Code

Already done if you followed Get started. Settings shows live status and can repair it after a manual or Homebrew install. By hand:

claude mcp add --transport stdio --scope user icarus -- /Applications/Icarus.app/Contents/MacOS/Icarus --mcp

--scope user installs it once for every project. The app is the server — no package, no credential to paste.

Cursor, Codex, anything else that speaks MCP · repair

The config

{
  "mcpServers": {
    "icarus": {
      "type": "stdio",
      "command": "/Applications/Icarus.app/Contents/MacOS/Icarus",
      "args": ["--mcp"]
    }
  }
}

Put that in your client's MCP configuration — .cursor/mcp.json for Cursor, .mcp.json for a project-scoped Claude Code setup.

Repair and permissions

Settings detects the checkout-only development adapter and migrates that known legacy entry only after you click Repair. It never overwrites an unrelated server of the same name.

Three read-only tools: the recorded why behind a change, an explanation of specific lines, structured context before a task. Each call names the repository it expects and Icarus refuses if a different one is connected — one repository at a time. It never edits code and never opens a pull request.