Skip to content

Your activity stays on your Mac

Not as a promise in a policy: by how Hourbrook is built. Apps, window titles and web addresses go into a database on your Mac, and sync never sends them. What leaves is what you choose to send: the entries you log, and answers you ask Claude for.

No download yet: join the waitlist and get one email when it's ready.

Join the waitlist

What goes where

Three places your time can be. Most of it never gets past the first.

Stays on this Mac

In a database in your Library folder.

  • Which apps you used, and when
  • Window titles and web addresses
  • Memories, the brook, time away
  • The model that drafts your entries
  • Calendar events
  • Rules and never-record lists

Syncs to your account

When you're signed in, so the web and your other Macs see it.

  • Entries you log: title, project, time, note, tags
  • Projects, clients, rates, invoices
  • Your tasks and plans, private to you

On a team, teammates see the entries; tasks stay yours. A task you make from an issue Hourbrook noticed takes that issue's key and title, read from a window title or branch name.

Leaves only when you connect it

Each one off until you turn it on.

  • Jira: worklogs for entries you log to the projects you pick
  • Linear and GitHub: issues assigned to you come in
  • Claude on your Mac: answers with your logged entries, totals, time Hourbrook saw, and agent time by repository name; minutes per app only if you turn that on
  • Claude on claude.ai: a separate connection you sign in to, which reads your synced entries from Hourbrook's server, never activity
  • Reports you share by link

Check it yourself

Hourbrook's code isn't public yet, so here is how to check what it does from the outside, on your own Mac.

Every server the app talks to

This is the whole list, read from the app's code for version 0.1.2. Most of it stays silent until you connect something.

ServerWhat forWhen
hourbrook-api.mlazarev.workers.devHourbrook's server, on Cloudflare: signing in, and syncing your entries, projects, clients, tasks and plansWhile you're signed in: a few seconds after you change something, every 5 minutes, and once a minute to see whether a timer runs elsewhere
api.linear.appLinear: the issues assigned to youOnly once you connect Linear: about every 15 minutes, and when you refresh
api.github.comgithub.comGitHub: the issues assigned to you, and an issue's details when you open it. github.com only for connectingOnly once you connect GitHub: about every 15 minutes, and when you refresh
api.atlassian.comauth.atlassian.comJira: your issues, and worklogs for entries you log to the Jira projects you pickedOnly once you connect Jira
api.track.toggl.comapi.harvestapp.comToggl Track and Harvest: reading your old entries to import themOnly while you run an import, with the token you paste
hourbrook.comUpdates, from version 0.1.2: the signed update feed (/download/appcast.xml), and the new version's disk image when you choose to install itAbout once a day while “Check for updates automatically” is on in Settings, and when you choose Check for Updates
A client's own websiteThat website's icon, as the client's logo. Fetched straight from the site, with no cookies, so no icon service learns who your clients areOnly when you click “Use the website's icon” on a client

No analytics, no crash reporter, no ads, and no favicon or font services. Update checks send no profile of your Mac (Sparkle's system profiling is off), and version 0.1.1 makes none at all. The app also answers on 127.0.0.1:47615 when you turn on “Show memories in the web app on this Mac” (off by default): that address can only be reached from this Mac, by the Hourbrook web page you paired. Links you click, like an issue page or signing in with GitHub, open in your browser, not in the app.

Watch it live

A firewall that asks per connection shows each one as it happens. LuLu is free; Little Snitch is paid. Both list connections by app, so you can deny Hourbrook anything you don't expect.

Without installing anything, Terminal shows the open connections:

nettop -p Hourbrook        # live, per connection
lsof -i -n -P | grep Hourbrook   # a snapshot

Open the database

Everything Hourbrook records is in one SQLite file in your Library folder, with its daily backups beside it in Backups. Open it read-only while the app runs:

cd ~/Library/Application\ Support/Hourbrook
sqlite3 -readonly hourbrook.sqlite

.tables
SELECT app_name, title, url,
       datetime(start, 'unixepoch', 'localtime')
  FROM activity ORDER BY start DESC LIMIT 20;

The activity table is what never leaves the Mac. Entries are in entry; those are what sync sends.

The test, as it stands in our code

Entry sync has a test that plants a secret app, window title and web address in the activity, runs entry sync, and fails if any of them appears in a request body. It runs with the rest of Hourbrook's tests. You can't run it yourself while the code is private; the checks above work on the app you installed.

It covers entry sync, the part that carries your time. Task sync, invoices and Jira aren't in this test yet; they send what you made in the app, not activity.

func testRawActivityNeverAppearsInAnyRequest() async throws {
    let store = try Store.inMemory()
    try seed(store)
    try store.insert(ActivitySegment(
        bundleID: "com.secret.app", appName: "Secret",
        title: "TOP-SECRET-TITLE",
        url: "https://secret.example/x",
        start: t0, end: t0 + 60))
    let t = ScriptedTransport { _, _ in syncReply() }
    _ = try await SyncEngine().run(store: store, client: signedIn(t))
    let all = t.requests.compactMap(\.httpBody)
        .map { String(decoding: $0, as: UTF8.self) }.joined()
    for s in ["TOP-SECRET-TITLE", "secret.example",
              "com.secret.app", "Secret"] {
        XCTAssertFalse(all.contains(s), s)
    }
}

Drafts are made on your Mac

Drafted entries come from a small model that lives on your Mac and learns only from entries you logged: repositories, sites, issue keys, words in titles. Rules you write always win, and every draft shows why it was made.

There is no cloud model behind the drafts, so there is nothing about your day to send to one.

What Claude can see, if you ask it

Connect Claude Code, Claude Desktop or Cursor and they can ask Hourbrook what you did, log time or start a timer, through a small server that runs on your Mac.

They see entries you logged, your projects and tasks, totals, how much time Hourbrook saw, and agent time by repository name. Minutes per app only if you turn that on. Never window titles, web addresses, meeting titles or what you typed to an agent. What Hourbrook answers goes to that AI app's model, which is usually in the cloud, under its own terms.

Your controls

All in Settings, all on your Mac.

What's recorded

Window titleson or off

Web addresseson or off

Apps and sites to never recordyour list

Pause tracking15 min, 1 h, till tomorrow

How long it's kept

Delete activity older than30, 90, 365 days

Delete one memorywith Undo

Delete all activityentries stay

The daily backups on your Mac still hold it until they roll over after seven days.

Taking it with you

Export projects, clients, entries, rulesJSON

Back up the databasedaily copies

The fine print

Do I need an account?

During the beta, yes: the app asks you to sign in before it opens. Your activity still stays on the Mac.

Where do synced entries live?

On Hourbrook's server, which runs on Cloudflare. They aren't end-to-end encrypted: the server reads them to show your web dashboard and your team's reports.

Can my employer see what I did all day?

No. A team sees the entries people chose to log, never the apps, titles, pages or memories behind them. Tasks stay private to each person.

Do you sell or share data?

No. There are no ads and no analytics in the app.

Is it open source?

Not yet. Until it is, check it yourself: watch every connection the app makes and open its database on your Mac.

How do I check what any tracker records?

Five checks that work on any app, ours included, are in the guide to automatic time tracking without screenshots.

Is Hourbrook certified?

Not yet. It's a beta, and there is no ISO 27001 or SOC 2 report to show you. We'd rather say so than imply it.

What about the Claude Code hooks?

They're optional. When a session starts or you send a prompt, they pass the repository, the branch and the first line of the prompt to the app on your Mac, to match agent time to the right task. The prompt isn't kept.

Which windows count as private?

A private window is kept only as “Private window”, with no title or address, when Hourbrook can tell it's private: Chrome, Arc, Brave, Edge and Vivaldi when Web addresses is on (macOS asks you to allow it per browser); Safari when its Window menu is in English and Accessibility is allowed; Firefox by its window title. When it can't tell in Safari, the address is left out but the title is kept. The time itself is still counted.

Which password managers are skipped?

1Password, Bitwarden and Keychain Access, by default. Add any other app to Never record these apps.

What if Hourbrook disappears?

Your activity and entries are in a database on your Mac, and Export writes your projects, clients, entries and rules as JSON any tool can read. Privacy policy (draft)

No download yet. Join the waitlist and we'll send one email when it's ready to install.Join