Needs you
Send the homepage quote to Nora
Harbor Studio · Aug 20 call
With agents
Wire the dispatcher container tests
Northstar · Claude Code
Done today
Send Dana the SOW draft
Vantage Health · committed 09:47
Chase the March invoice
Atlas Gym · Claude Code says done · not verified
Kato is listening
Pause
Needs you
Send the revised homepage by Friday
WhatsApp, Aug 20
Review the onboarding flow before Friday
Nova Labs · Slack, Aug 20
In your terminal
$ kato connect ~/kato
Claude Code registered
Cursor registered
$ kato track ~/kato harbor
Tracking Harbor (token "harbor"). Filed 0 of today's observations into it.
$ kato bind ~/kato harbor ~/work/harbor
bound: agents working in that folder now get this client's calls and screen context
Your agent, in ~/work/harbor
whats_new: 1 call, 2 screen rows from Harbor Studio
The same agent, in a folder bound to no client
this folder is bound to no client, so Kato returns nothing from it
Ready
Wire the dispatcher container tests
↩
Northstar · Aug 20 call
Done today
Send Dana the SOW draft
Vantage Health · committed 09:47
Send Nora the proposal
Bluebird Café · Claude Code says done · not verified
Closed
Chase the March invoice
Atlas Gym · closed on your agent's word · Aug 17

Kato is the eyes and ears of your agents.

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.

See exactly what leaves your Mac →

scroll: one simulated day with Kato↓

It hears the callBoth sides of the call, filed under the client.

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.

It sees what's on screenThe promise you typed in a chat counts too.

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.

The agent doorBind a folder once. The agent pulls the context.

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.

What it provesEach promise, with what the agent reported about 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.

Your next client call reaches your agent.

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.

Download Kato, free Email me the Mac link Start your 7-day free trial

Checkout emails your license and your download link.

Checkout emails your license and your download link.

Egress ledger
call transcript → kato-hosted · 6.4 KB · sha 7d91… allowed
screen text → kato-hosted · 1.2 KB · sha 3ab0… allowed
$ kato export ~/kato → ./kato-export-kato/

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.

Want that text to stay on your machine?

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.

Pricing

One plan. Kato: $29/month USD · 7-day trial, card up front · $0 today.

  • The brain, Kato's built-in AI, is included with no API key: it runs on hosted Claude through our gateway, and its calls land in your ledger.
  • Or use your own Anthropic key: the subscription stays, you pay Anthropic for the calls, and you switch to it in Kato's Settings menu.
  • The journal is encrypted at rest on your Mac, and you can cancel anytime.

Start your 7-day free trial

Card via Stripe · $0 today, $29/month after the trial · cancel any time · your statement reads INSTALLKATO.COM

Questions

What is Kato?
Kato is a Mac app that captures what your agents can't reach: your calls and what's on your screen, filed by client. Your agents pull it over MCP and do the work. You see each promise with what the agent reported about it.
Who is it for?
A one-person firm with a few clients that runs its work through agents.
Which agents does it work with?
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.
How do I connect an agent?
Right-click Kato in the menu bar, open Settings and choose Install the kato command-line tool. It links 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.
How does it read my screen?
Through the macOS Accessibility API, locally: it reads the same text a screen reader gets. By default Kato runs no OCR and keeps no pictures of your screen. It keeps a picture of a meeting window only when you press ⌃⌥⌘S during a call. There is an optional per-app deep read, off unless you enable it from Terminal, and every use of it is logged.
Are my calls transcribed in the cloud?
No: Kato transcribes on your Mac, with Apple's on-device speech until its whisper.cpp model has downloaded, and the audio never leaves. To pull out the promises and decisions, the transcript text goes to the brain like any other text: secret-scrubbed for keys, cards and emails, and logged in the egress ledger. Names and business detail go as written. Leave a call unfiled and its text stays on the Mac. Kato can also file a call without asking: when one client's domain or email address on file is said on it, when the meeting window's title names two of that client's people or one's email, or, if you turn on Brief me before calendar calls and give Kato your calendar, when the calendar names exactly one client. That can happen on a personal call, and the text goes when the call ends: Change moves the call and can't take the text back.
Which calls does it hear?
Any call, client or personal, once a meeting app or a browser is in front with your mic in use: Zoom, Teams, Webex, Slack huddles, Discord, Chrome, Firefox, Edge, Brave and Arc. On macOS 14.4 and later a web call in Safari isn't detected, and FaceTime isn't on the list. To turn call capture off, run 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.
What leaves my Mac?
Two streams of text go to the brain, both secret-scrubbed: the transcript of a filed call, and the text of the windows Kato files under a client that isn't sealed. Kato keeps an egress ledger of the cloud calls its brain makes, with their size and hash, so you can read what its brain sent. If macOS won't hand the app the ledger's Keychain key, the app makes a new one: the calls are still listed, but the saved copies of what was sent may not open. The kato command line logs its calls only when it can read that key. Five things sit outside that ledger: the one-time model download, a key check if you paste your own key, a draft you hand to WhatsApp, Telegram or Mail, work you hand to a coding agent, and what your agent pulls over MCP. Nothing Kato files under a sealed client goes to the brain or to your agents unless you send it or hand it on yourself. Screen text it can't tie to that client can still reach the brain. The Blind Kato menu-bar switch stops capture within seconds. What it already heard of a call still goes to the brain when the call closes, if that call is filed under a client that isn't sealed.
What does sealing a client do?
It keeps that client away from the brain and your agents, and it erases that client's transcripts, drafted follow-ups, kept frames, journal text and saved copies of what was sent, in your local backups too. 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.
Where is my memory stored?
The day journal is encrypted at rest. Your memory is plain local files you own, and 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.
How long does Kato keep what it captures?
A call's transcript stays 7 days by default, unfiled calls included. Kato then empties it and deletes the call's kept frames; the summary, promises and decisions stay. To keep transcripts past 7 days, run 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.
Does it send anything without me?
Kato sends no message without your keypress: it places a reply where you can send it, and in Mail your Return on its chip presses Send. The two streams of text above go to the brain with no keypress. Your agent does the work, under that agent's own permissions, and whatever it sends is its own.
Do I need an API key?
No: the AI is included, with no key to set up. You can use your own Anthropic key instead: the subscription stays, you pay Anthropic for the calls, and you switch to it in Kato's Settings menu. Running on a local model through Ollama works from the kato command line, not yet from the menu-bar app.
What does it cost?
One plan: $29/month USD, with a 7-day free trial, card up front and nothing charged today. The download itself is free, and Kato stays paused until you start the trial.
How does the trial work?
Nothing is charged until the 7 days end. You can cancel any time from the self-serve billing portal linked in your welcome email, or by replying to it.
What happens if I cancel?
Kato pauses. Your journal stays on your Mac, readable and exportable, and we never hold your memory.
What if I delete the app?
Deleting the app leaves your files: ~/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.
Who makes Kato?
An independent maker, and you're buying direct, not through a marketplace or reseller. Billing runs on Kato's own Stripe account, so your card statement reads INSTALLKATO.COM. Questions go to a human: iam@armando.mx.
What do I need?
An Apple Silicon Mac on macOS 14 or later, with 14.4 or later to capture both sides of a call (below that, mic only). macOS asks for Screen & System Audio Recording when your first call starts. Until you allow it Kato hears only your mic, so that call can come out one-sided, and ⌃⌥⌘S keeps nothing. No API key is needed. The app is signed and notarized by Apple.