GitHub Repo Sync
Groupthink has three GitHub features, each with its own connection. GitHub Issues files meeting action items as GitHub issues (free, uses the Groupthink GitHub App). GitHub repo sync commits your meetings and captures to a repo you own as Markdown files (Pro, uses a personal access token). GitHub activity signal reads your GitHub activity to keep relationships current. This page is about GitHub repo sync.
GitHub repo sync is a Pro feature, and it is included in your 30-day free trial.
Groupthink commits your meetings and captures to a private GitHub repo you own, as Markdown. Every meeting recap and every voice note, quick capture, or question you ask lands in the repo as a commit. Your history stays yours, in plain files, and works with any tool that reads a folder: Claude Code, Obsidian, grep, or a text editor.
This page explains what repo sync does. For the step-by-step setup, see Set up repo sync below.
This is a different GitHub connection from the one that files action items as GitHub issues. That one uses the Groupthink GitHub App and is free. See GitHub Issues. Repo sync uses a personal access token you create, scoped to one repo.
Where it lives
User settings > Connections & Integrations, in the section titled GitHub repo sync. It sits below Use GitHub activity as relationship signal and Action item sync. Direct link: app.groupthink.com/settings#connections.
What Groupthink writes to your repo
Everything is Markdown. Groupthink reads the file, adds to it, and commits. It never deletes a file.
| Path | What it holds |
|---|---|
captures/YYYY/YYYY-MM-DD.md |
One file per day, in your timezone. Each capture is a block with the time, the source, who it was filed to, and your text. |
captures/README.md |
Explains the capture file layout and source labels. |
meetings/YYYY-MM-DD-{title}.md |
One file per meeting: summary, key intel, and what was decided. |
meetings/{person}-agenda.md |
Open threads with a person, newest at the top. |
actions.md |
Action items from every meeting, appended. |
intel/people-dossiers.md |
Dated entries under each person: relationship signals from meetings, plus a one-line entry for each capture filed to them. |
memory/MEMORY.md |
One or two high-signal lines per meeting. Claude Code reads this file on session start. |
The capture day files are byte-for-byte the same files you get from Export my captures. A synced repo and an export of the same history match.
When commits happen
- Captures: within about a minute of Groupthink finishing processing the capture. A typed capture is fast. A voice note is committed after transcription.
- Meetings: when the recap is ready after the meeting ends.
- Backfill: the first time the connection verifies, Groupthink writes your whole capture history into the repo, one commit per day that has captures. You can also trigger this by hand with Backfill history now.
Commit messages are tagged so you can tell them apart in the history:
[groupthink:backfill] Backfill 2026-08-20 captures[groupthink:capture:NI...] Add capture[groupthink:capture:NI...] Patch people dossiers[groupthink:AM...] Add meeting notes
Choosing what to sync
Once connected, the section shows two switches under What to sync: Meetings and Captures. Both are on by default. Turn one off and Groupthink stops committing that kind of content until you turn it back on. Switching a toggle does not remove anything already in the repo.
Safe to run twice
Every block Groupthink writes ends with a hidden comment carrying its ID, like <!-- [groupthink:capture:NI...] -->. Before writing, Groupthink checks for that marker. A capture already in the file is never written again, so Backfill history now is safe to click more than once. Days already in the repo are left alone and only missing captures are added.
If you edit the files by hand, keep those comments in place.
Append-only
Groupthink writes each capture to the repo once, when it is processed, and does not rewrite it later. If you later file a capture to a different person, or edit its text in Groupthink, the block in the repo keeps what was true at commit time. The capture export always reflects the current state. The repo's captures/README.md says the same thing.
What happens if your subscription lapses
Syncing stops. No error, no email. The connection and your token stay in place, and Disconnect still works, so you can remove the token from Groupthink whenever you want. Resubscribe and syncing resumes from there. Anything that happened in between is not committed automatically; click Backfill history now to catch the repo up on captures.
Exporting your data stays free on every plan.
Token permissions
Repo sync uses a fine-grained GitHub personal access token. Scope it to just the repo you are syncing to, with one permission:
- Contents: Read and write
GitHub adds Metadata: Read-only on its own. Nothing else is needed. Groupthink stores the token encrypted, never shows it back to you, and never writes it to logs.
Set up repo sync
The full walkthrough, from an empty GitHub account to watching your first capture land as a commit. It assumes nothing exists yet. Every step is a checkbox. You need an active trial or a Pro subscription before step 3; if the section shows a Pro chip and an Upgrade to Pro button, your trial has ended, so upgrade first.
1. Create a private repo on GitHub
- Go to github.com/new.
- Owner: your personal account. (An organization works too, but the org may need to approve the token in step 2.)
- Repository name: something plain, like
groupthink-notes. - Visibility: Private. The files will contain your notes about real people.
- Turn Add README on (it is a toggle, off by default). This matters. Groupthink verifies the connection by looking up the branch, and a repo with no commits has no branch yet. The README gives the repo its first commit and creates
main. - Leave
.gitignoreand license as None. - Click Create repository.
- Note the full name as
owner/name, for exampledmorrill/groupthink-notes. You will paste this into Groupthink.
2. Create a fine-grained personal access token
Groupthink writes to the repo with a token you create. Scope it to that one repo only.
- Go to github.com/settings/personal-access-tokens/new. (From GitHub: profile photo > Settings > Developer settings > Personal access tokens > Fine-grained tokens > Generate new token.)
- GitHub shows Confirm access first. Approve it on GitHub Mobile, use your passkey, or click Use your password. This is GitHub's sudo mode; it asks once every few hours before anything security-related, and you land on the token form when it clears.
- Token name:
groupthink-repo-sync. - Expiration: pick the longest you are comfortable with. When the token expires, syncing stops and Test connection reports an invalid token. You paste a new one in Groupthink to resume.
- Resource owner: the account or organization that owns the repo from step 1.
- Repository access: Only select repositories, then pick the repo from step 1. Do not pick All repositories.
- Permissions > Repository permissions > Contents: set to Read and write.
- Confirm Metadata shows Read-only. GitHub adds it automatically. No other permission is needed.
- Click Generate token.
- Copy the token. It starts with
github_pat_. GitHub shows it once. If you lose it, generate another.
3. Connect the repo in Groupthink
- In Groupthink, click your profile avatar and choose User settings, then open the Connections & Integrations tab. Direct link: app.groupthink.com/settings#connections.
- Scroll past Use GitHub activity as relationship signal and Action item sync to the section titled GitHub repo sync.
- Confirm there is no Pro chip next to the heading and the fields are editable. If you see Repo sync is part of Groupthink Pro with an Upgrade to Pro button, upgrade and come back.
- Personal access token: paste the token from step 2. It is masked as you type and is never shown again after you save.
- Repository: the
owner/namefrom step 1. - Branch:
main. (Leave it blank and Groupthink usesmain. Typemasteronly if your repo uses that.) - Click Connect.
- You should see Connection saved. and then a green Connected — owner/name@main banner. The token field clears.
- Click Test connection. This is the step that verifies the token against GitHub. Success looks like a green message: PAT verified. Groupthink will commit your meetings and captures to owner/name@main.
Do not skip Test connection. Until the connection has verified once, Groupthink does not commit anything and a backfill request is refused.
4. Choose what to sync and backfill your history
After the connection verifies, the section grows a What to sync block and a status line.
- Under What to sync, confirm both Meetings and Captures are on. They are on by default.
- Look at the Backfill history now button. The first successful Test connection queues a backfill on its own, so you may already see a chip next to the button reading Backfill queued or Backfilling your history…. If the chip is not there, click Backfill history now.
- Wait. The chip moves from Backfill queued to Backfilling your history… to History backfilled. The page updates on its own; refresh if you want to hurry it.
What the backfill writes: captures/README.md, then one file per day that has captures, one commit per day. It does not write meeting files; meetings are committed going forward as recaps arrive. Plan on one to two seconds per day of history. A year of daily captures takes a few minutes. The job gives up after fourteen minutes and the chip reads Last backfill failed; click Backfill history now again and it picks up where it stopped, since days already written are skipped.
- The status line now reads Last synced with a time, instead of Nothing synced yet.
5. Look at the repo
- Click Open repo on GitHub in the status line, or open the repo yourself.
- You should see a
captures/folder next to the README you created. Inside:README.mdand a folder per year, with oneYYYY-MM-DD.mdfile per day you captured something. - Open a day file. Each capture is a heading with the time, the source, and who it was filed to, then your text. The hidden comment at the end of each block is expected; leave it in place.
- Open the commit history. You should see one commit per day file, named like
[groupthink:backfill] Backfill 2026-08-20 captures, plus[groupthink:backfill] Add capture history README.
If you had no captures yet, the backfill writes only captures/README.md. That is correct.
6. Make a capture and watch it land
- In Groupthink, capture something: record a voice note, type a quick capture, or ask Groupthink a question about someone.
- Wait about a minute. A typed capture commits as soon as Groupthink finishes processing it. A voice note has to be transcribed first, so give it a little longer.
- Refresh the repo. Today's file under
captures/has a new block, and the latest commit is[groupthink:capture:NI...] Add capture. - If you filed the capture to a person, there is a second commit,
[groupthink:capture:NI...] Patch people dossiers, andintel/people-dossiers.mdhas a one-line entry under that person. - Back in settings, Last synced has moved forward.
Meetings work the same way. After your next meeting recap is ready, look for meetings/YYYY-MM-DD-{title}.md, plus commits that touch actions.md, intel/people-dossiers.md, and memory/MEMORY.md.
7. Optional: point Claude Code at it
- Clone the repo:
git clone git@github.com:owner/name.git. - Open a Claude Code session in that folder.
memory/MEMORY.mdis the file Claude Code reads on session start, and Groupthink writes one or two lines to it per meeting. - Everything else is plain text.
grep -r "Adam" captures/finds every capture that mentions Adam. Obsidian opens the folder as a vault with no setup. - Pull before each session. Groupthink commits to GitHub, not to your clone.
Troubleshooting
Test connection says "Invalid Token" or "The PAT was rejected." The token expired, was revoked, or was pasted with a stray space. Generate a new one (step 2), paste it into the Replace PAT field, click Save changes, then Test connection again.
Test connection says "Repo or Branch Not Found."
Check three things. The Repository field is owner/name, not a URL. The Branch matches the repo's default branch (usually main). And the token's Repository access includes this repo. A token scoped to the wrong repo gets a 404, not a permissions error.
Test connection says "GitHub returned HTTP 409." The repo has no commits, so there is no branch to find. Add a README on GitHub (step 1), then test again.
The section shows a Pro chip and the fields are greyed out. Your workspace has neither an active trial nor a Pro subscription. Click Upgrade to Pro, finish checkout on Stripe, and the section unlocks when you return. If you are on a trial or already paying and still see the chip, refresh the page, then email support.
I clicked Connect and nothing is syncing. Click Test connection. Connecting saves the token; testing verifies it. Nothing commits until the connection has verified once.
Backfill history now does nothing, or shows an error about verifying the repo. Same fix: click Test connection first, then backfill.
The chip says "Last backfill failed." Click Backfill history now again. Days already in the repo are skipped. If it fails twice, run Test connection to check the token, then email support with your repo name (not your token).
The chip has said "Backfilling your history…" for a long time. A very long history can take several minutes. Past twenty minutes, Groupthink treats the run as stuck and lets you start another: click Test connection or Backfill history now.
A capture I edited in Groupthink did not change in the repo. Expected. Repo sync is append-only: each capture is written once and not rewritten. The capture export always reflects the current state. See Append-only.
My trial ended, or my subscription lapsed, and commits stopped. That is the designed behavior. Upgrade or resubscribe and new captures sync again; click Backfill history now to fill in the gap. Whatever is already in the repo stays there — it is your repo, and Groupthink never deletes from it. You can also click Disconnect at any time to remove the token from Groupthink.
Frequently asked questions
Is repo sync included in the free trial?
Yes. The 30-day trial includes every feature, repo sync among them. Connect a repo during your trial and your whole history backfills the same way it would on Pro. When the trial ends without an upgrade, new captures stop syncing — but everything already committed stays in your repo, and you can still export your history at any time for free. See Export your data.
Does the repo have to be private?
No, but it should be. The files contain your notes about real people. Groupthink does not check the repo's visibility.
Can I use an organization's repo?
Yes, if you can create a fine-grained token for it. Some organizations require an admin to approve fine-grained tokens before they work.
Why has nothing synced yet?
The connection has to be verified first. After you click Connect, click Test connection. The status line under the connection reads Nothing synced yet until the first commit lands. See the troubleshooting section of the setup guide.
I had a repo connected before repo sync became a Pro feature. Did I lose it?
No. Connections that were already verified kept working when the Pro gate shipped, whether or not the account pays.
Related
- Export Your Data
- Github (action items as GitHub issues)
- MCP Server
- Managing Your Billing & Subscription
Getting help
Questions about repo sync? Email support@groupthink.com.