It runs on your Mac and hears your calls, both sides, transcribed on‑device. When a call ends it asks which client it belongs to; if it can already tell, it files the call there and shows Change. Bind a folder once and the agent working there pulls that client's context without a paste. Then you see each promise with what the agent reported about it.
Kato runs on your Mac. Send yourself the link and it'll be waiting when you sit down.
Apple Silicon · macOS 14+ · signed & notarized · no API key.
Free download. Kato stays paused until you start the 7‑day trial, which takes a card.
Kato transcribes on your Mac, with Apple's on-device speech until its whisper.cpp model has downloaded: your mic and the call's audio as two sides, and the audio never leaves.
It starts on its own on any call, client or personal, when a meeting app or a browser is in front with your mic in use. The menu bar shows when it's listening, and the Blind Kato switch stops it.
Once a call is filed it sets out what you owe, what they owe and what got decided.
On a new install it asks which client, with your recent clients first. If you turn on Brief me before calendar calls and give Kato your calendar, it files the call when the calendar names exactly one client. A call that picks back up within 45 seconds stays under the client it was filed to, and Change on the card moves a call it filed.
Press ⌃⌥⌘S when someone shares a screen in Zoom, Teams or a browser call, and that frame of the meeting window stays with the call for your agent.
To pull out the promises, the transcript text of a filed call goes to the brain, secret-scrubbed for keys, cards and emails, and logged in the egress ledger. A call you leave unfiled doesn't go, and neither does one filed under a sealed client.
Between calls, Kato reads the text of the window you're in through the macOS Accessibility API, on your Mac.
When Kato catches a promise you made in WhatsApp, Slack or Gmail in Chrome, it goes on your list with the app and the day it came from. It misses some.
It keeps a window's text only once it can tie that window to a client, mostly by the client's name in the title. A chat window titled just WhatsApp gives no row and no warning.
If the screen never named the client, Kato doesn't state one on the row.
It reads best in Chrome, and today the Mail app, Safari, Preview and Slack's Mac app give it almost nothing.
kato connect registers Kato as an MCP server in Claude Code, Cursor, Codex and OpenCode, whichever are on your Mac.
kato bind ties a folder to one client.
An agent working in that folder asks Kato what's new and gets that client's calls and screen context, with no paste. After 7 days the agent gets what Kato pulled out of a call, not its transcript. Past the newest 50 calls it gets only the promises.
Kato goes by the folder the agent starts it in. We have run that with Claude Code and Cursor, not yet with Codex or OpenCode.
Over MCP, a folder bound to one client never receives another client's content, and a folder bound to no client gets nothing.
That wall holds over MCP only: an agent with a shell or file access can run kato or read the brain's files, where call records are plain files, so keeping two clients apart also takes limiting that agent in its own settings.
Kato can also bind a git repo with no command and no answer from you: once it has filed your work in that repo under one client on 2 days, agents there get that client. kato bind ~/kato --unbind <folder> stops it.
A promise you hand to an agent from your list tells it to report back to Kato, and the row says so.
An agent you started yourself reports a finished promise by its id only if you ask it to, so put that in its instructions.
If the work is a commit carrying Kato's hand-off line, Kato checks git and the row reads committed, with the time.
An agent's word alone is shown as exactly that: says done, not verified.
After 3 days it closes as closed on your agent's word, and you can reopen it until the end of the day you first see it.
Download Kato, start the trial and paste the emailed license under Settings in Kato's right-click menu. Install the command-line tool from the same menu, then add a client and bind its folder: the commands are in the questions below. Take a call and pick that client when Kato asks. One price, and the usage limits are on the terms page.
Checkout emails your license and your download link.
Checkout emails your license and your download link.
Every card on this page is an illustration with sample data from a demo account, not a screenshot or real usage. The real ledger lives on your Mac and is yours to read: each row shows where the text went, its size and its hash.
Your journal, your memory files and call transcription are on-device for everyone. The menu-bar app can't use a local model today: it stays paused without a license, and a license picks the hosted brain first. The kato command line can run on Ollama, though local models miss more than hosted Claude. A call you leave unfiled stays on the Mac, with no summary or promises, until its transcript is deleted after 7 days. Sealing a client is not a way to keep its calls: it erases them.
Kato runs on your Mac. You're not on one right now, so send yourself the link below.
One plan. Kato: $29/month USD · 7-day trial, card up front · $0 today.
Card via Stripe · $0 today, $29/month after the trial · cancel any time · your statement reads INSTALLKATO.COM
Mail yourself the link and open it on your Mac. The email also says what to try first.
We send the link, add your address to our contact list and record the signup in our analytics.
kato connect registers Kato as an MCP server in Claude Code, Cursor, Codex and OpenCode, whichever are on your Mac. A promise on your list can also be handed straight to Claude Code, Codex, Cursor or Grok.kato into ~/.local/bin, so add that to your PATH if your terminal can't find it. Run kato connect ~/kato once. For each client, run kato track ~/kato acme, then kato bind ~/kato acme ~/work/acme with that client's folder.defaults write mx.armando.kato kato.call.enabled -bool false and reopen Kato. Its whisper.cpp model listens for English and Spanish unless you change kato.call.languages. Kato doesn't tell the others on the call; telling them is on you.kato unseal brings none of it back. The summaries, promises and memory stay, and Time Machine copies aren't covered. Later calls under a sealed client keep no transcript and get no summary or promises. Seal a client only when that is what you want, with kato seal ~/kato acme. To remove a client whole, run kato forget ~/kato space acme, which has no undo.kato export ~/kato writes the whole thing out as a plain-file bundle: the journal lines and the saved copies of what was sent stay encrypted, and your Mac's key opens them.defaults write mx.armando.kato kato.call.retentionDays -int 0. Either way Kato keeps only the newest 50 calls and their plans, personal and unfiled calls included. An older call goes whole, summary and decisions too, though your daily backups can still hold a copy. Its promises stay. The copy sent to the brain is separate: for a filed call, the scrubbed text stays encrypted on this Mac in the ledger's saved copies, the newest 32 MB, and in your daily backups. Screen text in the journal is kept until you pick 90, 30 or 14 days in Inspect my brain, under Keeping, and the backups keep their copies either way, with no end date. Sealing or forgetting a client erases its saved copies, backups included. Kato keeps Time Machine off its journal, capture logs and backups, not the rest of ~/kato, so where Time Machine is on, its copies of call records outlast all of this.~/kato holds the memory, transcripts, saved copies and backups, and the sweep that empties transcripts stops, because only the app runs it. First run kato connect ~/kato --undo to take Kato out of your agents. Then delete ~/kato to erase what it holds. Kato's Keychain items stay until you remove them in Keychain Access.