The tour

One Tuesday, two desks.

Scroll down and follow the same working day twice: on the left without PrivateGoat, on the right with it.

A grey pixel-art developer at a laptop covered in sticky notes, head in hands, a storm cloud overhead.
Left · Without PrivateGoatTyping notes during the call, tickets typed up after it.
PrivateGoat, a small goat in an olive helmet, saluting
Right · With PrivateGoatThe call recorded on the Mac, the tickets drafted for you to approve.
08:00

First coffee

Your coding agent reads yesterday’s meeting and the ticket over local MCP, and starts.

Without PrivateGoat
Acme trackerACME-142Pull requestsDocs
acme.tracker.example/browse/ACME-142
Acme Alpine/ACME-62/ACME-142
Admin: export the user list as CSV
To doCopy link

Admins need the full user list as a CSV download from the admin panel.

Run the export as a background job; the API returns a job id.

Add exported_at to the users table and email when the file is ready.

Open question: do we cap the export at 50k rows?

All notes
Mon standup?
Mon, 09:12
ACME-142 — export thing?? ask Lea re API …was it the users table ???
FinderFileEditViewWindowHelp
Tue 09:50
With PrivateGoat
~/acme-web — claude
> pick up ACME-142, check what we decided yesterday
⏺ privategoat · todos_list()
⎿ 3 open · 1 for ACME-142
⏺ privategoat · jira_issue(ACME-142)
⎿ "Admin: export the user list as CSV" · To do · story
⏺ privategoat · meeting_get("Product sync – Mon")
⎿ "…a background job, the API returns a job id…"
Plan: endpoint + background job + exported_at column. Starting with the endpoint.
✓ read locally — no Jira call needed
editing src/api/admin/export.ts
running tests…
Agent is working. Coffee time.
FinderFileEditViewWindowHelp
Tue 09:50
10:00
●In a meeting · until 10:15

Daily standup

Join the call and it asks whether to record. Yesterday is already on your timeline.

Without PrivateGoat
Daily standup · 14:52
You
Mara
Jonas
Lea
Priya
Sam
Noah
Ines
Mara: Okay… let’s take it offline.
Leave
~ — zsh
90d4a6e claude test(export): job id is returned
c58b2f0 claude feat(export): stream users in batches
7f1e3d9 codex refactor(jobs): shared retry helper
e2a64c5 lea feat(db): migration for exported_at
4d9b07a claude fix(export): close the cursor on error
b13f8e2 you chore: log export duration
58c0a1d claude test(export): batches of 500
0ae7d63 lea fix(db): index on users.exported_at
d6f2b94 claude docs(export): describe the job states
> cd ~/acme-infra && git log --oneline --since=yesterday
7c3a9e1 noah feat(queue): exports worker pool
2f8d0b6 noah chore: raise worker memory to 1 GiB
b94e1c7 codex fix(ci): cache pnpm store
61a7f2d noah feat(storage): exports bucket, 7-day TTL
FinderFileEditViewWindowHelp
Tue 10:15
With PrivateGoat
Daily standup · 14:52
You
Mara
Jonas
Lea
Priya
Sam
Noah
Ines
Mara: Great, thanks.
Leave
Recording
Teams is using the microphone
Record this meeting? ⌃⌥R works too.
RecordNot now
PrivateGoat
Timeline· 3 entries
Day
Week
Threads
‹ Mon 5. Oct ›TodaySummarise this day
MeetingAgent chatCommits
09:12
CSV export endpoint
acme-api, acme-web · feature/acme-142-csv-export · 2 agent chats · 21 commits
ACME-142
13:00
Product sync
30 min
15:40
Job queue for exports
acme-api · feature/acme-142-export-job · 1 agent chat · 6 commits
ACME-142
FinderFileEditViewWindowHelp
Tue 10:15
10:40

“Where’s that ticket?”

⌃⌥J, three letters, ⌃C. The ticket is on your clipboard.

Without PrivateGoat
Acme trackerACME-157
acme.tracker.example/browse/ACME-157
Acme Alpine/ACME-62/ACME-157
GPX import fails for routes over 50 km
In progressLink copied

Importing a GPX route longer than 50 km fails after parsing.

Reproduce with the alpine traverse track and check the distance guard.

# acme-dev
Priya10:26
Map tiles look good on the beta build.
Jonas10:40
Where's the ticket for the GPX import bug? Need the link for the release notes.
You10:40
let me check quickly
You10:41
here: acme.tracker.example/browse/ACME-157
Message #acme-dev
9.8 stypical
FinderFileEditViewWindowHelp
Tue 10:41
With PrivateGoat
Jira
gpx
OutlineAcme Alpine › ACME-8 › ACME-62 › ACME-157
ACME-8Route planningIN PROGRESS
ACME-62Import & exportIN PROGRESS
ACME-157GPX import fails for routes over 50 kmIN PROGRESS
ACME-121GPX exportTO DO
ACME-157 copied
⌃⌥J
gpx
⌃C
⌘V
↩
Answered in 1 second.
# acme-dev
Jonas10:40
Where's the ticket for the GPX import bug? Need the link for the release notes.
You10:40
let me check quickly
You10:40
ACME-157 – GPX import fails for routes over 50 km
Jonas10:41
perfect, thanks!
Message #acme-dev
1.0 stypical
FinderFileEditViewWindowHelp
Tue 10:41
13:00
●In a meeting · until 13:50

Product meeting

Transcribed on your Mac while you talk. Nothing to write down.

Without PrivateGoat
Product meeting · 01:40
You
Mara
Jonas
Lea
Priya
Priya: Open question: does the export include the hiking stats?
Leave
All notes
Product mtg
Today, 13:02
export btn admin?? api … job id? some column…
FinderFileEditViewWindowHelp
Tue 13:50
With PrivateGoat
Product meeting · 01:40
You
Mara
Jonas
Lea
Priya
Priya: Open question: does the export include the hiking stats?
Leave
Recording
Transcript
Elapsed
Clock
[00:12] Others: Admins need to export the user list as CSV.
[00:31] Others: That's a new endpoint. It runs as a background job and returns a job id.
[00:52] Others: I'll put an Export button on the users table.
[01:10] Others: And we need an exported_at column, so we know what went out.
[01:34] Others: Open question: does the export include the hiking stats?
01:40 / Recording
You
Others
Processed privately on this Mac
FinderFileEditViewWindowHelp
Tue 13:50
13:50

Minutes, then Jira

Decisions, actions and open questions. Group the actions and send them to Jira in one go.

Without PrivateGoat
All notes
Product mtg
Today, 13:02
export btn admin?? api … job id? some column…
Acme trackerCreate issue
acme.tracker.example/secure/CreateIssue!default.jspa
Projects / Acme AlpineCreate
Create issue
Project
Acme Alpine (ACME)
Issue type
Task
Summary
CSV export for admins
Description
So in the meeting we said admins should be able to export the users, there was something about a job and an id and also a column but I'm not sure which one, Lea knows, also maybe hiking stats??? we should check with Mara and also the button
ACME-160 created
FinderFileEditViewWindowHelp
Tue 14:00
With PrivateGoat
PrivateGoat
Product meeting
Tue 13:00 · You + 4 others
✓ transcribed · summarised
Admins get a CSV export of the user list; it runs as a background job.
Overview
Decisions 2
Actions 4
Questions 1
Transcript

The meeting settled on a background CSV export behind the admin guard, with an exported_at column.

People named: Mara, Lea, Jonas, Priya
Decisions
  • Export runs as a background job; the API returns a job id
  • Add an exported_at column
Actions
  • Add the Export button to the users table
  • Add the export endpoint
  • Run the export as a background job
  • Add the exported_at column
Open questions
  • Does the export include the hiking stats?
Notes as:General·Instructions…·Summarise again·Follow-up email…
Actions4 suggestions · 4 of 4 reviewedHide handled
4 selectedClear
Add the Export button to the users table
Jonas
13:52
Add the export endpoint
Lea
13:53
Run the export as a background job
Lea
13:54
Add the exported_at column
Lea
13:55
Send to Jira· ACMEStory + sub-tasks ▾
Story
Admin: export the user list as CSVUnassigned ⌄
├Sub-task
Add the Export button to the users tableUnassigned ⌄
├Sub-task
Add the export endpointUnassigned ⌄
├Sub-task
Run the export as a background jobUnassigned ⌄
└Sub-task
Add the exported_at columnUnassigned ⌄
Description of the selected row
> "Admins need to export the user list as CSV." — Product meeting
⇥Tab to move⌘↩Create
✓ Created ACME-160 – ACME-164
FinderFileEditViewWindowHelp
Tue 14:00
15:00

Talking to your agent

⌃⌥D: speak, and it types into any app. Transcribed on your Mac.

Without PrivateGoat
Agent · acme-web
Add the export endpoint for ACME-162
Done. POST /admin/users/export returns a job id.
Now the background job for ACME-163: stream the users in batches of 500, write the CSV to the exports bucket, set exported_at when it fin
FinderFileEditViewWindowHelp
Tue 15:05
With PrivateGoat
Agent · acme-web
Add the export endpoint for ACME-162
Done. POST /admin/users/export returns a job id.
Now the background job for ACME-163: stream the users in batches of 500, write the CSV to the exports bucket, set exported_at when it finishes, and retry twice on failure.
On it. Batches of 500, retry twice, exported_at on success.
Ask the agent…
⌃⌥D
Listening
it finishes, and retry twice on failure.
Speak naturally. Press ⌃⌥D again to finish.
MacBook Pro Microphone
FinderFileEditViewWindowHelp
Tue 15:05
16:30

“How was the meeting?”

The follow-up email writes itself from the notes. You send it.

Without PrivateGoat
All notes
Product mtg
Today, 13:02
export btn admin?? api … job id? some column…
# Mara
Mara16:30
How was the product meeting? I missed the end.
You16:32
it was fine, export stuff. will send notes later
Mara16:34
Which column? And are the hiking stats in?
uh, let me check wi
FinderFileEditViewWindowHelp
Tue 16:35
With PrivateGoat
Follow-up email
Nothing is sent until you copy it or open it in your mail app.
Professional
Concise
Action-oriented
Subject
Follow-up: Product meeting
Body
Thanks, everyone. Short recap: Admins get a CSV export of the user list. It runs as a background job; the API returns a job id. We add an exported_at column. Open: does the export include the hiking stats? Mara to decide. Tickets: ACME-160 to ACME-164. Best regards,
# Mara
Mara16:30
How was the product meeting? I missed the end.
You16:32
Short recap: CSV export of the user list, runs as a background job (API returns a job id), new exported_at column. Open: hiking stats? Tickets ACME-160 to ACME-164.
Mara16:34
Perfect, I'll decide on the stats.
Message #Mara
FinderFileEditViewWindowHelp
Tue 16:35
17:00

Done for today

Meetings, tickets, agent sessions and commits: the day, in one place.

Without PrivateGoat
Acme tracker
acme.tracker.example/secure/CreateIssue!default.jspa
Projects / Acme AlpineCreate
Create issue
Project
Acme Alpine (ACME)
Issue type
Task
Summary
Export
Description
Add a description…
Acme tracker
acme.tracker.example/secure/CreateIssue!default.jspa
Projects / Acme AlpineCreate
Create issue
Project
Acme Alpine (ACME)
Issue type
Task
Summary
Export job
Description
see meeting
Acme tracker
acme.tracker.example/secure/CreateIssue!default.jspa
Projects / Acme AlpineCreate
Create issue
Project
Acme Alpine (ACME)
Issue type
Task
Summary
Column??
Description
Add a description…
Acme tracker
acme.tracker.example/secure/CreateIssue!default.jspa
Projects / Acme AlpineCreate
Create issue
Project
Acme Alpine (ACME)
Issue type
Task
Summary
hiking stats — ask Mara
Description
todo
FinderFileEditViewWindowHelp
Tue 19:40
With PrivateGoat
PrivateGoat
Timeline· 5 entries
Day
Week
Threads
‹ Tue 6. Oct ›TodaySummarise this day
MeetingAgent chatCommits
08:05
Export endpoint and job
acme-web · feature/acme-162-export-job · 1 agent chat · 7 commits
ACME-162ACME-163
Built the export endpoint and job runner.
10:00
Daily standup
You + 4 others · 15 min
Standup: no blockers.
13:00
Product meeting
You + 4 others · 50 min
ACME-160ACME-161
Decided the CSV export; 5 tickets created.
15:00
Background job for exports
acme-web · 1 agent chat · 3 commits
ACME-163
Batching and retries for the export job.
16:30
exported_at column
acme-web · 2 commits
ACME-164
Migration for exported_at.
Done for today
5 tickets in Jira
Notes and follow-up sent
The day, summarised
FinderFileEditViewWindowHelp
Tue 17:30

All of it.Locally.On your Mac.

Meetings, dictation, your Jira search. PrivateGoat uploads nothing.

Local AI. No cloud uploads. No subscription.

Sorry, data brokers. Nothing to see here.

The 28-second version.

Two people with good ideas, the chores that pile up around them, and a goat that clears them away. Sound on.

Everything it does.

First the problems you may recognise from your own week, each with what PrivateGoat does about it. Then the complete list.

  • “Legal won’t let us use a cloud note-taker.”

    Records both sides of the call and transcribes on your Mac. The audio never leaves it.

  • “Nobody rereads a transcript.”

    A summary first, then the action items, marked as said or only implied.

  • “Action items die in the meeting notes.”

    They wait in an inbox. Add them as to-dos, drag to reorder, and one click writes what, why and done-when from what was said.

  • “Jira is slow when I already know what I want.”

    Your Jira, cached on your Mac. from any app, three letters, .

  • “Creating a ticket takes longer than doing the work.”

    The fastest way to create a Jira ticket: send a to-do with its parent and type. Assign and move tickets too; every change is logged and can be undone.

  • “My coding agent knows nothing about our meetings or tickets.”

    A local MCP server: Claude Code, Codex and others read your cached Jira, meetings and to-dos, and draft to-dos you approve.

  • “Which agent session worked on which ticket?”

    Every Claude Code, Codex and DeepSeek session, filed under the ticket it worked on.

  • “What did I actually do today?”

    The Timeline: meetings, agent sessions and commits across every local branch, with one line per piece of work written locally.

  • “Typing is slow.”

    and speak: it types into any app, even during a meeting, and puts your clipboard back afterwards.

  • “It always gets our names wrong.”

    Fix a name once in the transcript. It is spelled right next time.

  • “What exactly did she say about Friday?”

    Ask your meetings; answers show where it was said. Play it back at 1.5×, the transcript following along.

  • “I don’t want another API token in a config file.”

    Your keys live in the Keychain and open with Touch ID, like a password manager.

  • “Work apps are joyless.”

    A small goat lives on your desktop. It wanders, grazes, naps, and salutes when you click it.

The complete list.

Meetings

  • Mic and system audio

    Records your mic and your Mac’s system audio together: both sides of the call.

  • No audio driver

    No BlackHole, no virtual audio driver to install.

  • Live transcript

    The transcript writes itself while you talk.

  • One capture dial

    One dial: from just recording to live subtitles.

  • Live translation

    Live translation into English.

  • Language detection

    Detects the language, even when it changes mid-meeting.

  • Transcribe later

    Record now, transcribe later.

  • Start from anywhere

    starts a meeting.

  • Fix a name once

    Fix a name once. It is spelled right next time.

  • Search a transcript

    Search inside a transcript.

  • Faster playback

    Play it back at 1.5×, the transcript following along.

  • Summary first

    A summary first. Then the action items.

  • Said or implied

    It tells you what was said and what was only implied.

  • Ask your meetings

    Ask your meetings. Answers show where it was said.

To-dos

  • Inbox of suggestions

    Suggestions wait in an inbox. You decide what becomes a to-do.

  • Meeting to Jira, in one flow

    Recording, transcript, summary, actions, Jira: group, merge and accept, then create epic › story › subtask in one go.

  • Pick several

    ⌘-click to pick several suggestions, then merge, group, accept or dismiss them together.

  • Drag to reorder

    Drag to reorder.

  • Write descriptions

    One click writes what, why and done-when from what was said.

  • Send to Jira

    Send it to Jira with the right parent and type, when you decide.

  • Markdown notebook

    A notebook for everything else.

Sharing

  • Team folder

    Share meetings through a folder your team already syncs: Dropbox, OneDrive, a network share. PrivateGoat uploads nothing.

  • Never the audio

    Summary and transcript. Never the audio.

  • Also recorded by

    A teammate’s notes of the same meeting appear under yours, read-only.

Jira

  • Local cache

    Your Jira, cached on your Mac. Search is instant, even offline.

  • Board and tree

    See where every ticket lives: epic › story › subtask.

  • Copy a ticket fast

    , three letters, . The ticket is on your clipboard.

  • Create and edit

    The fastest way to create a Jira ticket. Assign and move them too; every change is logged and can be undone.

  • One search

    One search for meetings, notes, to-dos and tickets.

  • Sign in with Atlassian

    Sign in with Atlassian, pick your projects.

Agents

  • Local MCP server

    Your coding agent reads your meetings and tickets locally, over MCP.

  • Twelve tools

    jira_searchjira_issuejira_projectsmeetings_listmeeting_gettodos_listsessions_for_issuetimelinetodo_createtodo_updatetodo_getsessions_search

  • Agents draft, you approve

    Agents draft. You approve. Nothing reaches Jira without you.

  • Sessions per ticket

    Every agent session, filed under the ticket it worked on.

  • Search your Claude Code conversations

    Type a word you remember and find the conversation it was in, newest first, the matching line highlighted. The index stays on your Mac.

Timeline

  • One day, one timeline

    What did I do today? Meetings, agent sessions and commits, on one timeline.

  • Local day digest

    One line per piece of work, written locally.

Dictation

  • Dictate anywhere

    : speak, and it types into any app.

  • Clipboard restored

    Your clipboard is put back afterwards.

  • Local transcription

    Transcribed on your Mac, the words firming up as you speak.

  • Works mid-meeting

    Even during a meeting.

Privacy

  • Audio never uploaded

    Your meeting audio never leaves your Mac.

  • Files on disk

    Recordings and transcripts are files on your Mac.

  • Transcribed locally

    Transcribed on your Mac.

  • Local by default

    Local by default. Cloud models only if you switch them on.

  • No analytics

    No analytics. No tracking.

  • Only when you send

    Nothing goes to Jira until you send it.

  • Keys in the Keychain

    Your keys live in the Keychain and open with Touch ID, like a password manager.

  • No screen video

    It saves the call’s sound, never a screen video. Pictures of the call window only if you switch them on.

The app

  • Native Mac app

    A native Mac app.

  • Menu-bar app

    Lives in your menu bar.

  • Local language model

    Summaries are written by a local model on your Mac.

  • Minds your memory

    If the model won’t fit in memory, the summary waits, names the apps holding the memory, and starts by itself once there is room.

  • Setup assistant

    A setup assistant sets everything up on first launch.

  • Desktop goat

    A small goat lives on your desktop. It salutes when you click it.

  • It listens along

    It listens while you dictate.

For your security review.

Everything PrivateGoat sends over the network, and what it never sends.

What leaves your Mac

Meeting audio, transcripts, summaries
Never. They are files on your Mac.
Speech models
Downloaded once from Hugging Face, pinned and checksum-verified.
Summary models
Pulled through Ollama from Ollama's registry. They run on your Mac.
Cloud models
Only if you switch them on. Off by default.
Jira
Your own Atlassian site, if you connect it. Text goes to Jira only when you send it.
Updates
Checks privategoat.app for signed updates. Switch it off in Settings.
Sharing
Through a team folder you choose. PrivateGoat uploads nothing.
Analytics, tracking
None.

Questions.

Does my meeting audio leave my Mac?

No. Whisper transcribes on your Mac, and no part of the app uploads meeting audio. Recordings and transcripts are files on disk, encrypted in a vault if you choose.

Is my data used to train AI models?

Your meetings never reach us, so there is nothing to train on. Summaries are written by a local model on your Mac; cloud models are off unless you switch them on.

Which call apps does it work with?

Zoom, Teams, Google Meet, a call in the browser: anything that plays sound on your Mac. It records your microphone and the Mac’s sound, so no bot joins the call and there is no virtual audio driver to install.

Does it record my screen?

No video. macOS asks for the Screen Recording permission because that is how system audio is captured. The one exception is yours to switch on: an experimental setting, off by default, keeps screenshots of the call window on your Mac.

Does it need an internet connection?

For setup, yes: the setup assistant downloads the models. After that, transcription runs on your Mac and your Jira search works offline.

Can it change things in Jira on its own?

No. Action items wait for you to accept them, and nothing goes to Jira until you send it. Coding agents that use it over MCP can only draft local to-dos for you to review.

Where are my Jira sign-in and keys stored?

In the macOS Keychain, unlocked with Touch ID, like a password manager.

What does it cost?

Nothing. It is free, with no subscription.

How do I get it?

Download the app for Mac from the latest release, or install it with Homebrew: brew install --cask tomw1808/privategoat/privategoat. Questions, ideas and bug reports go to the Telegram group.

Get PrivateGoat.

Prefer Homebrew? One line in the terminal:

brew install --cask tomw1808/privategoat/privategoat

Questions, ideas, bug reports: Join the Telegram group