Hawkeyecontrol plane

Documentation

Docs

One setup path, walked end to end: what you need before you start, 7 steps, and how to tell each one worked. Every platform, filename, version and client state below is rendered from the same record the installers are built from, so this page cannot drift from the release it describes. It is not a full reference — the API and event reference, the per-task guides and the error-code troubleshooting index are not written yet, and the end of this page says so rather than implying otherwise.

Before you start

  • An account. Signup is open on this deployment — create one, and you are the owner of a new org.
  • A computer on one of the platforms an installer is published for: Windows, macOS and Linux. The table below says which file is which. The native iOS and Android apps are in active development and not yet published for general download. Until then, one thing does work from a phone: signing in from any browser, including a phone browser, reaches machines, the agent, files and approvals.
  • Node >=22.13.0, for the AI-client step only. The MCP server the app points your client at needs it; the desktop app, machine enrolment and the web app do not. The app checks for it and reports what it found rather than writing a client config that cannot run.

Setup, step by step

The desktop app has a Setup panel that performs and re-checks these one row at a time, so you do not have to hold the order in your head. Every row re-probes on each check rather than showing a cached answer, and most carry a re-run button for later. What follows is the same sequence, so you can read it before installing anything.

StepWhat it doesYou know it worked when
1. Install the desktop app Take the installer for your platform from /download and run it. Every artifact is served unauthenticated, and SHA256SUMS.txt beside them lets you check the bytes you got. Hawkeye opens and asks you to sign in.
2. Sign in to Hawkeye Sign in inside the app. There is no key to copy anywhere in this flow: the app pairs itself and stores its own device token. Setup's first row reports a paired device token whose refresh is healthy.
3. Enrol this machine The app enrols the computer it is running on into your org, on a single-use link it mints for that one machine. A machine that attests strongly joins on that link's authority; one that cannot attest waits for an admin to approve it on the Computers page rather than joining anyway. Setup reports the machine has claimed a device credential in your org — not merely pending approval — and it appears on the Computers page.
4. Start the background daemons The per-machine services that hold the outbound tunnel open and do the work an AI client asks for. The app supervises them; nothing is dialled in to from the internet. Setup reports every supervised service running.
5. Grant desktop control Screen and input access, which the OS — not Hawkeye — grants. Needed only for the tools that see or drive the screen; shell and file transfer work without it. Setup reports the OS permissions this platform actually has: on macOS Screen Recording and Accessibility granted, on Windows the interactive browser-server task running, and on Linux that runtime availability is not measured.
6. Connect an AI client The app writes the client's own config to point at the MCP server it ships, and refuses to write one pointing at a server path that does not exist. The client then pairs on its first tool call: a short device code and a URL to approve it at. The client lists the hawkeye server, and approving the device code once lets the next tool call through.
7. Run the first safe action Ask the connected client to call hawk_health. It reads state and changes nothing, which is what makes it the right first call. It answers with the state of the daemons, the job queue, the browser pool and desktop availability — so the whole chain from client to machine is up.

Step 1's files are the current release, 0.1.31. They are served without signing in, and SHA256SUMS.txt beside them lets you check the bytes you received — with the honest limit that the digest comes from the same origin as the download, so it proves the bytes arrived intact, not that this site is honest.

Which installer

PlatformFileSizeSigningNotes
Windows Hawkeye-Setup-0.1.31.exe 207 MB Code-signed Signed (Azure Trusted Signing). Windows may still show a brief SmartScreen notice until the publisher builds download reputation — if so, choose More info → Run anyway.
Linux hawkeye-desktop_0.1.31_amd64.deb 208 MB Unsigned Unsigned — Linux has no equivalent gate. Install with your package manager or dpkg -i.
Linux Hawkeye-0.1.31.AppImage 255 MB Unsigned Unsigned — Linux has no equivalent gate. chmod +x it, then run it.
macOS Hawkeye-0.1.31-arm64.dmg 253 MB Code-signed Signed and notarized (Developer ID). The DMG itself is also notarized and stapled, not only the app inside it, so it opens cleanly even offline. Opens with a plain double-click, no right-click workaround needed. Then also install the permission-service .pkg below to make Screen Recording/Accessibility Request buttons work.
macOS Hawkeye-0.1.31-x64.dmg 257 MB Code-signed Signed and notarized (Developer ID). The DMG itself is also notarized and stapled, not only the app inside it, so it opens cleanly even offline. Opens with a plain double-click, no right-click workaround needed. No Intel permission-service installer exists yet — see release.ts.
macOS Hawkeye-Installer-0.1.31-arm64.pkg 336 MB Code-signed Signed, notarized .pkg (Developer ID). This does NOT install the Hawkeye app itself — install the .dmg above first. It installs the signed native permission service that Screen Recording/Accessibility grants are attributed to, so the in-app Request buttons actually work.

The download page picks one for your browser and lists all of them; every link above is the same immutable, versioned URL it serves.

Which AI clients

The state beside each client is the manifest's own word for it, not a badge somebody typed. Connect your AI client has the exact command for each one and a handshake you can run yourself to prove the server answers before you blame a client.

ClientStateWhat that means
Claude Code (CLI) supported A local stdio server registered with the claude CLI by a script in this repo.
Claude Desktop supported A .mcpb bundle whose manifest declares darwin and win32 — macOS and Windows only.
ChatGPT desktop app — Codex mode, and the Codex CLI supported Codex mode and the Codex CLI read an MCP stanza. This is NOT all of ChatGPT: chat mode and the phone apps are a separate row below.
Any other MCP client manual setup A generic stdio stanza, pasted by hand. Nothing in this repository installs it and nothing verifies it worked.
ChatGPT chat mode, and the mobile apps not possible today Neither can reach a local stdio server at all. Nothing in this repository delivers it and no amount of configuration will.

Step 6 above does the wiring for 3 of these from inside the app, so the notes' references to scripts are the alternative route for somebody working from a source checkout, not a prerequisite for you.

What this documents

The versions these instructions were written against. Each is read from that component's own manifest, so a component that moves without this page moving fails the release rather than shipping a stale number.

ComponentVersionNotes
Hawkeye desktop app 0.1.31 The build the installers on /download actually are.
hawkeye-bridge MCP server 2.6.5 The .mcpb bundle version. NOT the serverInfo version — see this list's header.
hawk_xferd machine daemon 2.15.92 The per-machine daemon the installers supervise.

Core ideas

  • Org. Everything — machines, members, plan, agent traffic — is scoped to one org. You can belong to more than one and switch between them.
  • Machine. A computer you enrolled. It dials OUT to Hawkeye over its own tunnel; nothing on the internet dials in to it. The agent does keep one listener of its own, on 8891, for callers already on your LAN or tailnet — a faster local path, same key as everything else, and XFER_PORT_DIRECT=0 turns it off.
  • Engines. The coding agents the app can start on an enrolled machine: Claude Code, Codex or Grok. Each runs with the login already in that app; Hawkeye never reads the credential.
  • Agent channel. How AI sessions on your machines talk to each other and to sessions in another org, when both sides approve the connection. Every cross-org call is a request the other side grants, not an obstacle to route around.
  • Audit. Privileged actions are written down — who did what, on which machine, on whose authority. What that gives you between those boundaries is a record of what was done, not a gate in front of it. Read it as evidence after the fact, not as a control that stops something first. One caller stands outside even the record's attribution: the shared fleet key is a break-glass credential, accepted without an identity chain, so its actions are attributable to the key rather than to a person, and the policy that is being observed is not evaluated for it at all. Its uses are counted and the recent ones kept, which is how a machine can show you how often break-glass was reached for. Narrowing it is open work, not a shipped property — treat possession of that key as possession of the fleet.
  • Authority (observe_only). Enrollment and client pairing require approval. After pairing, allowed actions execute without per-action approval: each machine's policy is evaluated and written to the audit trail in observe mode (XFER_POLICY_MODE defaults to observe, deliberately) rather than applied. A connected AI client can still raise an explicit human request when it creates one, and cross-org access is still a request the other side grants.

Taking it back

Three things can be revoked from the panel once you are signed in, and one cannot. Saying which is which matters more here than anywhere else on this page: a paired client is root-equivalent on every machine your org has enrolled.

  • A paired AI client. /devices lists every app credential paired to the org and revokes any of them; a revoke takes effect on that client's very next call.
  • An install link you sent someone. /installs revokes it, and a revoked link enrols nothing afterwards.
  • A person. Removing a member deletes the membership and drops the org from their existing sessions in the same write, so their access to this org ends immediately rather than at a session's next expiry.
  • A machine cannot be de-enrolled from the panel, and there is no uninstaller. Stated plainly because the alternative is a reader following an invented procedure: no route in this control plane removes an enrolled machine, and this repository ships no uninstall script for any platform. Stop the machine's services and remove its install directory yourself, revoke the paired clients above so nothing can reach it, and write in for the org-side record. That is the true answer today, not the one anybody wants.

Plans and billing

See the pricing page for what each plan includes. Once you are on a paid plan, invoices, card updates and cancellation are self-serve from the Plan page's "Manage billing" button.

Your data

See Privacy for what is collected and how to export or delete it (both are self-serve, from /account once signed in).

If a step does not work

  • Re-run the single Setup row that is not green. Each one re-probes on every check and reports what it actually found, including "this platform does not measure that", rather than caching a stale answer.
  • Ask the connected client for hawk_health — it reports the daemons, the job queue, the browser pool and desktop availability in one answer, so it tells you which link in the chain is down.
  • Check status for the control plane itself. It is a live check run on the request that renders it, and it says out loud what it cannot observe.
  • Still stuck: support. Send the step name and what the Setup row said — never a token, a key file or a raw privileged log.

Not written yet

TODO — not filled in yet

These are deliberately blank rather than invented. Nothing below is a placeholder standing in for a real answer; where a fact is missing, it is missing.

  • Troubleshooting by error code. Product errors do not yet carry a stable sanitized code, so there is no code-to-recovery-page index to link from them. The four fallbacks above are what exists.
  • An API and event reference, a changelog and a deprecation policy. None of the three is published. The version table above is the closest thing to a "last tested with" record today.
  • Per-task guides. Shell, file transfer, browser and desktop handoff, requests, receipts, machine and client management and cross-machine jobs are all real, and none has a page of its own here yet.
  • A verified uninstall procedure. See "Taking it back" — there is no uninstaller in this product to document, so nothing is documented. Writing steps nobody has run would be worse than this gap.