SkillAgentSearch skills...

accordio-tracker

Open-source automatic time tracker for Mac, built for AI agents. Over MCP, Claude finally understands your day and drafts that invoice.

Install / Use

claude mcp add accordio-ai -- npx -y github:accordio-ai/accordio-tracker

If the server publishes to npm under a different name, use that package instead โ€” check the repo README.

About this skill
๐Ÿ”Œ

MCP Server

Model Context Protocol server

Quality Score

83/100

Category

Automation

Supported Platforms

Claude Code
Claude Desktop

Our assessment of accordio-tracker

accordio-tracker scores 83/100 on our quality scale, 2202nd of 2,863 Automation skills we index.

Its MCP Server is 12 KB long, well organised into 16 sections with 6 code examples: a thorough specification that gives an agent plenty to work with.

It has 3 GitHub stars, so there is little community track record yet; judge it on its content.

Substance
30/30
Structure
20/20
Description
15/15
Adoption
3/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated yesterday, so accordio-tracker is actively maintained.
  • Our last check on 2026-10-19 found the source still online.
  • It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
  • Its trust signals score 92/100, with 1 caution from licensing, adoption, age or documentation. These come from repository metadata, not a code audit โ€” read the skill file before letting an agent act on it.

Safety scan

No issues found

Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful.

AI review by kimi-k2.7-code on 2026-09-24. Automated pattern scan on 2026-09-24. It catches known dangerous patterns, not every risk โ€” read a skill before letting an agent act on it.

accordio-tracker compared with similar skills

All 4 of these similar skills score higher than accordio-tracker; compare them before choosing.

SkillScoreStarsUpdatedFormat
accordio-tracker (this skill)by accordio-ai8331d agoMCP Server
Agent-Reachby Panniantong100105.7k4d agoCLAUDE.md
headroomby headroomlabs-ai10078.2ktodayCLAUDE.md
CowAgentby zhayujie10047.7ktodayCLAUDE.md
Scraplingby D4Vinci10090.2k1d agoMCP Server

Frequently asked questions

How do I install accordio-tracker?
Run claude mcp add accordio-ai -- npx -y github:accordio-ai/accordio-tracker. The install tabs above show the steps for each supported agent.
Which AI agents does accordio-tracker work with?
It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
Is accordio-tracker safe to use?
Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful. It is MIT-licensed and scores 92/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is accordio-tracker still maintained?
The repository was last updated yesterday, so accordio-tracker is actively maintained.
<div align="center"> <img src="assets/icon.png" width="92" alt="Accordio tracker icon">

Accordio tracker

A macOS menu bar app that watches what you actually work on, attributes it to a client or a project, and hands the result to something that can bill for it.

macOS 12+ Apple Silicon + Intel MIT license Works with Claude

Install ยท How it works ยท What leaves your machine ยท Works with Claude ยท Build from source

<br> <img src=".github/assets/hero-day.png" width="860" alt="The tracker in the macOS menu bar showing a measured 6-hour day, while Claude Code answers 'how much did I work today and in what app' from the same data over MCP"> </div>

Most time trackers ask you to remember. This one samples the frontmost window every 5 seconds, notices when you stopped, notices when you were in a call, and sorts the result into 14 categories without asking you anything. What you do with the total is up to you. Accordio turns it into an invoice, and if you connect your AI, Claude can read the day and draft that invoice from chat.

macOS 12 or later, Apple Silicon and Intel. MIT licensed.


Install

<a href="https://accordio.ai/download"><img src=".github/assets/download-mac.png" width="680" alt="Download Accordio tracker for macOS 12+, Apple Silicon and Intel, free"></a>

Direct disk images: Apple Silicon ยท Intel. Or with Homebrew:

brew install --cask accordio-ai/tap/accordio

On first launch macOS asks for Accessibility permission. The tracker needs it to read the frontmost window title, which is the whole mechanism. Deny it and the app runs but records nothing.


How a day gets measured

flowchart LR
    subgraph mac["your Mac, all local"]
        direction LR
        SAMPLE["frontmost window<br>sampled every 5s"] --> CAPTURE["capture engine<br>title history, session merge"]
        INPUT["input, lock, sleep"] --> PRESENCE["presence model<br>break vs untracked"]
        CALLS["Zoom, Teams, browser tabs"] --> MEETING["meeting detector<br>own timer, overlay track"]
        CAPTURE --> SCORE["categorizer + scorer<br>14 categories, no network"]
        PRESENCE --> SCORE
        MEETING -. "overlays, never replaces" .-> SCORE
    end
    SCORE -->|"entries, titles, sync"| CLOUD["app.accordio.ai<br>dashboard, invoicing"]
    CLOUD -->|"MCP connector"| CLAUDE["Claude<br>reads the day, drafts the invoice"]

Four pieces do the work. They are the interesting part of this repository and each one exists because a simpler version of it was wrong.

The four pieces that do the work

The capture engine

src/main/activity-monitor.ts

Polls the frontmost window every 5 seconds through active-win, and keeps a title history per app session rather than a single label, because "Chrome" is not an activity and "Chrome, PR #412 review" is. Consecutive samples of the same app merge into one entry, with a 30 second grace period so alt-tabbing to a terminal and back does not shred a focus block into confetti.

Optional browser tab reading goes through AppleScript (src/main/applescript-bridge.ts) rather than an extension, so nothing gets installed into your browser.

The idle trap

Also activity-monitor.ts, and the reason the file is not small.

Naive idle detection treats every absence the same and quietly bills you for lunch. This one separates three cases and only one of them is a break:

| Reason | What happened | Counted as | |---|---|---| | idle | No input for 10 minutes, machine awake | A break you took | | locked | Screen locked | Untracked, not leisure | | suspended | Machine slept | Untracked, not leisure |

The distinction matters because a locked Mac and a sleeping Mac cannot tell you what you were doing, while an idle one can still be in a meeting. Which leads directly to the next piece.

The meeting detector

src/main/meeting-detector.ts

A 40 minute Teams call where you take notes in Notion, screen-share Figma, and then just listen used to be recorded as about 9 minutes of Teams. The frontmost-window sampler simply cannot see a call, because a call is not a focused window.

So this runs on its own timer, fully outside the activity poll. It never consults idle state, pause state, or the excluded-apps list, because being detectable while HID-idle is the entire point. It watches Zoom and Teams window titles and browser tabs for a call-active signal, then emits an overlay track rather than replacing app entries, so project attribution survives the call.

It is deliberately biased toward false negatives. This feeds a billing product. A missed meeting you can add by hand. An invented one you cannot take back.

The categorizer

src/shared/categories.ts plus 238 app and domain rules in the capture engine.

14 categories, split into focus work, shallow work, and non-work, resolved locally. No network call, no model, no round trip. The scorer also resolves the overlap when a meeting sits on top of app entries.

This file is a deliberate mirror of the server's taxonomy, and npm run check:categories fails the build if the two drift. When they disagree, the menu bar and the web dashboard report different numbers for the same day, which is the single worst bug this product can ship.


What leaves your machine

Worth being precise about, since the app reads your window titles.

Tracking runs locally. Categorization runs locally. Syncing does not: the app is a client for a hosted backend at app.accordio.ai, and entries, app names, and window titles are sent there so the web dashboard and the invoicing side can see them. That needs a free account.

Your sign-in token is encrypted with Electron safeStorage, which means the macOS Keychain, not a constant key baked into the app bundle.

Crash reporting is off unless a SENTRY_DSN is present in the environment at build time. A build you make yourself has none, so it reports nothing.

If you want a tracker that never talks to a server, this is a reasonable thing to fork. The capture engine, the idle trap, the meeting detector, and the categorizer have no server dependency between them.

Works with Claude

Accordio ships a remote MCP connector, so Claude can see the time this app measures. Connect it and "what did I work on this week", "how much of that is unbilled", and "draft the invoice" become chat turns, on claude.ai, in the Claude apps, or in Claude Code:

claude mcp add --transport http accordio https://mcp.accordio.ai/mcp

What Claude can do with it

| Feature | How it works | Why it's useful | |---|---|---| | Read the day | Totals for today, this week or this month, billable and non-billable, by project, and the entries underneath with app name and window title. | "How much did I work today and in what app" is one question. The answer comes from what the tracker recorded, not from memory. | | Sort stray time | Lists entries that landed on no project. Reassigns them in bulk, flips billable, corrects a description or moves an entry to another day. | The unassigned bucket empties from chat. Deleting an entry still needs the app. | | Run timers | Starts a timer by project name, stops it, or logs work that already happened with a duration you state. | Claude never estimates hours. If you did not say how long something took, it asks. | | Find unbilled hours | Billable time over a date range, totalled by client and by project, with money where the project has an hourly rate. | This is the number an invoice starts from. Accordio does not yet mark entries as invoiced, so the range can include hours already billed. The result says so. | | Draft the invoice | Turns those hours into a draft invoice on your account, with the period and the work in the description. | The draft waits in Accordio for you to review and send. Nothing reaches a client from chat. | | Draft proposals and contracts | Takes the brief from the conversation and hands it to Accordio's proposal and contract pipelines. Takes a minute or two. | You get a first draft to edit. Sending and signing happen in Accordio. | | Clients, projects, tasks | Lists and creates all three, and closes tasks. A task that came in from Todoist, Linear or Asana is closed there too. | Tracked hours have a project to land on, and the to-do list is one question away. | | Calendar | Reads every connected Google calendar, finds free windows, blocks focus time or a deadline, and gives you your booking links to share. | Claude can hold a slot before you commit to it. It cannot invite anyone or send email. | | Money in and out | Logs an expense or a payment, totals the period, and lists who owes what and how many days late. | "Who still owes me" gets amounts and dates. | | The whole picture | One call for hours today, the running timer, unpaid invoices, deadlines, contracts awaiting signature and the week's calendar. | Usually the first question. The narrower ones follow. |

The connector reads, logs, and drafts. It never sends, signs, or deletes anything, and it never logs an hour you did not state. Setup and the full tool list: accordio.ai/claude.

The chat companion

The app also carries a chat tab that talks to your Accordio account, so you can ask what you worked on, start and stop timers by name, and pull up recent work without opening the dashboard. When a turn creates something with a page of its own, a contract, an invoice, a client, a preview card appears under the tool call and opens it in the web app. It is a convenience on top of the tracker, not the reason the tracker exists.


Build from source

git clone https://github.com/accordio-ai/accordio-tracker.git
cd accordio-tracker
npm install
npm run dev

npm run dev starts Vite and launches Electron against it.

Requirements: Node 20 or later, macOS, and Xcode Command Line Tools (xcode-select --install) so active-win can compile its native module.

To produce a disk image:

npm run build            # typecheck, compile main and preload, bundle renderer
SKIP_NOTARIZE=true npx electron-builder --mac --arm64

Output lands in release/. Without an Apple Developer ID the build ad-hoc signs itself, which is fine locally and will be refused by Gatekeeper on anyone else's Mac. Signing and notarization are driven entirely by environment variables, documented in .env.example. There are no credentials in this repository.

npm test runs the typechecker, 115 unit tests covering duration maths, the meeting state machine and the chat's artifact cards, and a production build.


Layout

src/
  main/          Electron main process
    activity-monitor.ts   capture engine, idle trap, 238 categorization rules
    meeting-detector.ts   call detection, independent timer
    time-tracker.ts       entry lifecycle and sync
    applescript-bridge.ts browser tab and window title reading
    auth.ts               token storage via safeStorage
  shared/
    categories.ts         taxonomy and scoring, mirrored from the server
  renderer/      React UI, tracker and chat tabs
scripts/
  afterPack.js            Electron fuses, locale pruning, ad-hoc signing
  check-categories.mjs    taxonomy drift guard
  notarize.js             Apple notarization
tests/                    node:test, no framework

Contributing

Issues and pull requests welcome. Two things to know before you start:

The taxonomy in src/shared/categories.ts is mirror

Truncated for display โ€” read the full file on GitHub.

Related Skills

View on GitHub
GitHub Stars3
CategoryAutomation
Updated1d ago
Forks0

Languages

TypeScript

Trust signals

92/100

From repository metadata: license, adoption, age and documentation. Not a code audit โ€” see the Safety scan above for what the skill file itself contains.

1 low
accordio-tracker โ€” MCP Server: Install & Safety Check | SkillAgent