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
- Download the app. Download for Mac
- Open the disk image, drag Daily Focus to Applications, and open it from there.
- It lives in the menu bar, with no window or Dock icon. Click the bullseye and choose Open Daily Focus.
- In the same menu, tick Open at Login, so it’s running when the brief is due.
On Linux or Windows
- Run it from a terminal, with Node.js.
npx daily-focus - Your browser opens on
localhost:4321. - 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 serviceInstall 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 loginIf 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 --webFor 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-calendarCalendar 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 4322Reach 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:4321Don’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.
| Flag | Variable | Default | What it’s for |
|---|---|---|---|
--data | DAILY_FOCUS_DATA | ~/.daily-focus | Where your briefs, notes and settings live, in a folder for each profile |
--profile | DAILY_FOCUS_PROFILE | The one there is, or work | Which dashboard this is: work or personal. Its setup then doesn’t ask |
--port | DAILY_FOCUS_PORT | 4321 | The port it listens on |
--host | DAILY_FOCUS_HOST | 127.0.0.1 | Your computer only, by default. A name given here is one more it answers to |
Commands
daily-focus | Start Daily Focus and open it in your browser |
|---|---|
daily-focus service | Keep it running in the background on a Mac without the app; --remove takes it away |
daily-focus build-calendar | Build the calendar helper, on a Mac without the app |
daily-focus init | Create 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 serviceUninstall
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-focusYour 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 loginorcodex 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-focusinstead, 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.