Set up Daily Focus

Install it, open it, and answer a few questions. This page covers what to have ready, how to keep it running, and what to do if something gets in the way.

What you need

  • Claude Code or Codex, installed and signed in

    It reads your sources and writes the brief. Claude Code needs a paid Claude plan. Codex needs ChatGPT Plus or higher, and version 0.144.0 or newer.

  • A Mac with Apple silicon, or Node.js

    The menu bar app needs macOS 13.5 or newer and brings everything else with it. On Linux or Windows, or to run Daily Focus yourself on a Mac, you need Node.js 22.18 or newer; 24 is recommended.

  • GitHub and Jira, only if you use them

    Setup asks. Tick one and Daily Focus connects it: it reads through the GitHub CLI or the Atlassian CLI, uses yours if you have it, and otherwise gets it from GitHub or Atlassian for you. Leave both unticked if you use neither.

Install

On a Mac

  1. Download the app. Download for Mac
  2. Open the disk image, drag Daily Focus to Applications, and open it from there.
  3. It lives in the menu bar, with no window or Dock icon. Click the bullseye and choose Open Daily Focus.
  4. In the same menu, tick Open at Login, so it’s running when the brief is due.

On Linux or Windows

  1. Run it from a terminal, with Node.js.
    npx daily-focus
  2. Your browser opens on localhost:4321.
  3. Keep the terminal open: the brief is written only while Daily Focus runs. To run it in the background, see Keep it running.

The Node.js steps work on a Mac too, if you’d rather run Daily Focus yourself. The app is the easier way there: it keeps Daily Focus running, brings the live agenda from Calendar.app, and updates itself.

Either way, Daily Focus opens on a setup screen that asks a few questions, one at a time, with the likely answer already ticked. You can change every answer later on the settings page.

Keep it running

The morning brief is written only while Daily Focus runs. If it wasn’t running at the time you chose, it writes the brief as soon as it starts that day. Use one of these, not both.

With the menu bar app

Tick Open at Login in its menu. The app then starts Daily Focus when you log in, and starts it again if it stops.

On Linux or Windows

Keep daily-focus running in a terminal, or install it with npm install -g daily-focus and start daily-focus --no-open with your system’s own service manager, such as a systemd user service.

On a Mac without the app

Install Daily Focus and let macOS run it at every login, and again after a crash:

npm install -g daily-focus daily-focus service

Install it globally first; the service won’t run from npx. Run daily-focus service again after updating or switching Node.js versions, and daily-focus service --remove to stop and remove it.

Connect your tools

All optional. Daily Focus reads what you’re already signed in to.

GitHub

Tick GitHub in setup and choose Connect GitHub. Daily Focus uses your own GitHub CLI if you have one, and otherwise gets it from GitHub. Then it shows a code to enter on GitHub. To sign in again later, or as another account, use Sign in again under Pull requests on the settings page. In a terminal, this does the same:

gh auth login

If your organisation uses SAML single sign-on, authorise the token for it, or the board reports that GitHub refused the read.

Jira

Tick Jira in setup and choose Connect Jira. Daily Focus uses your own Atlassian CLI if you have one, and otherwise gets it from Atlassian. Atlassian’s sign-in then opens in your browser, which has to be the one on the computer running Daily Focus. Once you approve, Daily Focus asks which site you chose there; on Windows a small window asks instead. In a terminal, this does the same:

acli jira auth login --web

For Jira in the brief, an Atlassian connector in Claude Code or Codex works as well.

Calendar on a Mac

The live agenda reads Calendar.app, so a meeting moved during the day shows at once. The menu bar app comes with everything it needs, and macOS asks for calendar access the first time. Without the app, build the calendar helper once; it needs the Xcode command line tools.

daily-focus build-calendar

Calendar on Windows and Linux

Connect the Google or Microsoft account your calendar is on, in setup or under Calendar on the settings page, and the live agenda reads it the same way. Daily Focus says what it will read, then opens Google’s or Microsoft’s own sign-in page, which has to be in the browser on the computer running Daily Focus. It only ever reads your calendars’ names and today’s events, and they never go to Claude Code or Codex; the privacy policy has the details.

A work or school Microsoft account may need your IT admin to approve Daily Focus first. If so, the sign-in says so and gives you a link to send them. On Linux, Daily Focus keeps the sign-in in your desktop’s keyring, through secret-tool; on Debian and Ubuntu it comes in the libsecret-tools package.

Your other sources

The morning brief can read anything Claude Code or Codex can reach. With Codex, that’s the apps linked to your ChatGPT account. With Claude Code, add each connector to Tools Claude Code may use under Morning agent on the settings page, or the brief reports it as out of reach.

Google Tasks has no connector, so it takes a small export to Google Drive first. The Apps Script guide sets it up in a few minutes.

A dashboard for home

Daily Focus can brief your personal life too: family calendars, reminders, messages, paperwork and your own projects. Run a second dashboard for the other profile, on its own port. Both keep their data in the same folder, one in ~/.daily-focus/work and the other in ~/.daily-focus/personal.

With the menu bar app, choose Add a Personal Dashboard from its menu, or Add a Work Dashboard if the first one briefs your personal life. It opens on its own setup screen, and the menu then shows both.

Without the app, start a second dashboard with the other profile and a port of its own. On a Mac, run it as a service beside the first, here a personal one:

daily-focus service --profile personal --port 4322

Reach it from your other devices

Personal sources often live on one computer, such as a Mac at home with your messages and reminders. Run Daily Focus there and reach it through Tailscale Serve, which only your own devices can use:

tailscale serve --bg http://127.0.0.1:4321

Don’t open it to your local network instead. Daily Focus has no login, and a personal brief holds your mail and messages.

Where it keeps things

Four options say where Daily Focus keeps your data, which dashboard it is and how it listens. Give them when you start it, as flags or environment variables; a flag wins. Most people never change them. Everything else is on the settings page.

FlagVariableDefaultWhat it’s for
--dataDAILY_FOCUS_DATA~/.daily-focusWhere your briefs, notes and settings live, in a folder for each profile
--profileDAILY_FOCUS_PROFILEThe one there is, or workWhich dashboard this is: work or personal. Its setup then doesn’t ask
--portDAILY_FOCUS_PORT4321The port it listens on
--hostDAILY_FOCUS_HOST127.0.0.1Your computer only, by default. A name given here is one more it answers to

Commands

daily-focusStart Daily Focus and open it in your browser
daily-focus serviceKeep it running in the background on a Mac without the app; --remove takes it away
daily-focus build-calendarBuild the calendar helper, on a Mac without the app
daily-focus initCreate the data folder with an objective and a source list to fill in by hand

daily-focus --help lists every command and flag.

Update

The menu bar app looks for new releases a few times a day and offers each one in its menu, under Updates. Choose Update Automatically there to have them go in on their own while you’re not using it, or Development Builds to get every change as soon as it’s merged.

With Node.js, npx daily-focus@latest runs the newest version. If you installed it globally, update it and restart the service:

npm install -g daily-focus daily-focus service

Uninstall

The menu bar app: choose Quit Daily Focus from its menu, then move the app to the Trash.

The service:

daily-focus service --remove npm uninstall -g daily-focus

Your briefs, notes and settings stay in ~/.daily-focus, and what the app downloaded in ~/Library/Application Support/Daily Focus. Delete both folders to remove everything.

If something gets in the way

Setup can’t find Claude Code or Codex
The setup screen says what’s wrong with each and the command that fixes it, such as claude auth login or codex login. If it’s installed somewhere unusual, give setup its path.
PowerShell says running scripts is disabled
On Windows, PowerShell won’t run npm’s scripts until you allow it. Type npx.cmd daily-focus instead, or use Command Prompt.
Daily Focus is gone after a restart
It was probably started in a terminal and ended with it. Use the menu bar app or the background service to keep it running.
The page doesn’t load
With the app, choose Restart Dashboard from its menu, or Show Log to see why. With the service, read ~/Library/Logs/local.daily-focus.log.
The menu says “Run by another process”
A service or a terminal is running Daily Focus, and the app only watches it. Stop the other one, then quit and reopen the app.
Port 4321 is in use
Another program has it. Stop that program, or start Daily Focus on another port with --port 4322.
The GitHub or Jira board shows a warning
Choose Connect under the warning, or Sign in again under Pull requests or Jira tickets on the settings page. If you don’t use it, turn it off there. If Daily Focus can’t find a tool you installed yourself, give its path on the settings page.
A source is missing from the brief
The run’s report, behind “updated … ago” on the Today tab, names the sources it couldn’t reach. Under Claude Code, add the connector to the tools it may use.

Still stuck? Open an issue on GitHub.