GitHub Repo Sync

Keep a GitHub repo in sync with your Groupthink record.

On this page

Groupthink has three GitHub features. 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 your GitHub connection or 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.

Repo sync uses the same GitHub connection as GitHub Issues: you connect GitHub once, give the Groupthink GitHub App access to your repo, and choose Use my GitHub connection. There is no token to create, paste or renew. If you'd rather not install the app, you can still use a personal access token you create. See Use a personal access token instead.

Where it lives

User settings > Connections, 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 or updates a block it wrote earlier, 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: date, attendees, follow-ups, key intel, and action items.
meetings/open-threads.md Open threads from every meeting, added under a dated heading for each meeting.
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...] Update 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 not added a second time, 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.

Captures you change later

Groupthink writes each capture to the repo when it is processed, and keeps it in step after that. The block in the repo is rewritten on the next sync when you:

  • edit the capture's text;
  • file it to a different person, or add or remove someone it is about;
  • rename a contact it names, or merge two contacts;
  • change when it happened. A new time on the same day updates the block where it is. A different day moves the block to that day's file, with a commit like [groupthink:capture:NI...] Move capture to 2026-08-21.

Every other change is a commit like [groupthink:capture:NI...] Update capture. The repo then says the same thing as the capture export. This only happens while the connection is verified, Captures is on, and your plan includes repo sync.

captures/README.md describes the same behavior. If you connected before 2026-09-12, your README said captures are written once and never rewritten. Groupthink corrects that section the next time it syncs a capture, or when you click Backfill history now, with a commit like [groupthink:readme] Update capture history README. It only replaces the section if you have not edited it yourself.

What happens if your subscription lapses

Syncing stops, and there is no email. The GitHub repo sync section in Settings shows an amber Syncing is paused notice. The connection stays in place, along with your token if you use one, and Disconnect still works, so you can remove it 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.

What Groupthink can access

When you sync through your GitHub connection, each commit uses a short-lived key that GitHub issues to the Groupthink app for one repo only, with one permission: Contents: Read and write. The key lasts an hour at most, and Groupthink never stores it. Before each commit, Groupthink also checks that your own GitHub account can push to the repo, so it never writes anywhere you can't.

On GitHub, the Groupthink app needs Contents: Read and write on the repo you sync. If you installed the app before repo sync used it, GitHub asks you to approve that permission. See Approve the Groupthink app's updated permissions.

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. Installing the Groupthink app on an organization usually needs an owner of that organization.)
  • Repository name: something plain, like my-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 .gitignore and license as None.
  • Click Create repository.
  • Note the full name as owner/name, for example jordan-lee/my-notes. You will type this into Groupthink.

2. Connect GitHub and give the Groupthink app access to the repo

Skip to step 3 if you already connected GitHub for GitHub Issues. Check only that the app can reach this repo (the last two boxes below).

  • In Groupthink, click your profile avatar and choose User settings, then open the Connections tab. Direct link: app.groupthink.com/settings#connections.
  • In the Action item sync section, find the GitHub Issues row and click Connect. GitHub opens.
  • Sign in to GitHub if asked, and authorize Groupthink.
  • GitHub asks where to install the Groupthink app. Pick the account that owns the repo from step 1. For a repo under your personal account, that's you.
  • Under Repository access, choose Only select repositories and pick the repo from step 1. You don't need to give it all your repos.
  • Click Install. GitHub returns you to the Connections tab, where GitHub shows as Connected.

3. Turn on repo sync in Groupthink

  • Still in User 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.
  • Under How Groupthink gets access, choose Use my GitHub connection. If it says Connect your GitHub account to use it here. with a Connect GitHub button, step 2 isn't finished.
  • Repository: the owner/name from step 1.
  • Branch: main. (Leave it blank and Groupthink uses main. Type master only if your repo uses that.)
  • Click Connect. Groupthink saves the connection and checks access with GitHub right away. You do not have to click anything else.
  • You should land on a green Groupthink will commit your meetings and captures to owner/name@main through your GitHub connection.
  • If instead you get a red message, the check did not pass. The message says why and what to do. See Troubleshooting. Fix the field it names and click Save changes, which checks again. If you reload the page first, the same state shows as an amber Saved, but not verified yet. Nothing is committed to your repo until this verifies.

Test connection stays on the section for later. Use it to re-check an existing connection.

4. Choose what to sync and backfill your history

Once the connection is verified, 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. Verifying 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 chip does not change while you watch. It updates when you come back to the tab from another window or tab, or when you refresh the page.

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.md and a folder per year, with one YYYY-MM-DD.md file 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, and intel/people-dossiers.md has 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.md is 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 "Theo" captures/ finds every capture that mentions Theo. Obsidian opens the folder as a vault with no setup.
  • Pull before each session. Groupthink commits to GitHub, not to your clone.

Troubleshooting

A failed check shows its message in red with a Try again button. After a reload, the same message sits under amber Saved, but not verified yet with a Verify now button. Either button checks again.

Approve the Groupthink app's updated permissions

"Groupthink needs permission to write files to owner/name." The Groupthink app is installed, but you haven't approved the permission repo sync needs. This happens if you installed the app before repo sync used it. On GitHub, open Settings > Applications > Installed GitHub Apps, open the Groupthink app, and accept the updated permissions. For a repo owned by an organization, an owner of that organization does this. Then click Verify now.

"Groupthink's GitHub App doesn't have access to owner/name." The Groupthink app is installed, but not on this repo. On GitHub, open Settings > Applications > Installed GitHub Apps, open the Groupthink app, add the repo under Repository access, and save. Then click Verify now.

"Repo sync uses your GitHub connection, and none of your GitHub connections covers owner." None of your GitHub connections covers the repo's owner. For example, you connected GitHub for your personal account and the repo belongs to an organization. Connect GitHub again (step 2) and install the app on the account that owns the repo.

"Repo sync can only write to repos your own GitHub account can write to, and it can't write to owner/name." Repo sync only writes to repos your own GitHub account can push to. Ask the repo's owner for write access, or pick a repo you own.

"GitHub rejected your sign-in while Groupthink was checking access to the repo.", "Groupthink's GitHub App is no longer installed on this account.", or "GitHub refused Groupthink access to owner/name." GitHub rejected your sign-in, or the Groupthink app was removed. Some organizations also require you to authorize apps for single sign-on. Reconnect GitHub from the Connections tab, then click Verify now.

"Syncing through your GitHub connection is turned off for now." Syncing through your GitHub connection is turned off for your account for now. Switch to Use a personal access token (see below) to keep syncing.

When your personal access token expires or is revoked (token setup only)

Groupthink finds out the next time it tries to commit something, such as a new capture or a meeting recap. It checks the token with GitHub again, and if GitHub still rejects it:

  • The GitHub repo sync section in Settings switches from the green verified message to amber Saved, but not verified yet, with The PAT was rejected. Check that it has not expired and has contents:write permission.
  • You get one email, titled Reconnect your GitHub Repo Push to continue using Groupthink. It is sent once per break, not again for every capture that fails.
  • Nothing is committed to your repo until you fix it.

To fix it, generate a new token (step 2), paste it into the Replace PAT field, and click Save changes. Groupthink checks the new token right away, and the section turns green again when it passes. Captures from while the token was broken are not committed on their own; click Backfill history now to catch the repo up.

Test connection says "The PAT was rejected." (token setup only) 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 "Could not find owner/name@main." Check three things. The Repository field is owner/name, not a URL. The Branch matches the repo's default branch (usually main). And Groupthink can reach the repo: with your GitHub connection, the Groupthink app's Repository access includes it; with a token, the token's Repository access includes it. A key scoped to the wrong repo gets a 404, not a permissions error.

Test connection says "Groupthink needs a branch to commit to." 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.

The section shows an amber "Saved, but not verified yet". The connection was saved but the check against GitHub did not pass, so nothing is being committed. The message underneath names the reason, such as a permission to approve, a repo the app or token cannot reach, or an expired or mistyped token. Fix that field and click Save changes, which checks again. If you fixed something on GitHub instead, click Verify now. (Connecting used to save without checking, which left people with a green banner over a connection that never synced. That was fixed on 2026-08-27; Connect now verifies on the first click.)

Backfill history now does nothing, or shows an error about verifying the repo. The connection is not verified. Click Verify now (or Test connection), 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 access, then email support with your repo name (never a 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. The block is rewritten on the next sync, as long as the connection is verified, Captures is on, and your plan includes repo sync. If you edited that block in the repo by hand, Groupthink may not be able to find it, and leaves it as it is. See Captures you change later.

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 a file from it. You can also click Disconnect at any time to remove the connection from Groupthink.

Use a personal access token instead

If you don't want to install the Groupthink app, repo sync can use a fine-grained personal access token you create. The token expires on the date you pick, and syncing stops until you replace it.

  1. Go to github.com/settings/personal-access-tokens/new. Name it groupthink-repo-sync and pick an expiration.
  2. Resource owner: the account or organization that owns the repo. Repository access: Only select repositories, then pick the repo.
  3. Permissions > Repository permissions > Contents: Read and write. GitHub adds Metadata: Read-only on its own. Nothing else is needed.
  4. Click Generate token and copy it. It starts with github_pat_, and GitHub shows it once.
  5. In Groupthink's GitHub repo sync section, under How Groupthink gets access, choose Use a personal access token. Paste the token into Personal access token. It stays hidden; use the show/hide button if you want to check it. Fill in Repository and Branch, then click Connect.
  6. You should see a green PAT verified. Groupthink will commit your meetings and captures to owner/name@main. The token field clears.

When the token expires, generate a new one, paste it into Replace PAT, and click Save changes. Groupthink stores the token encrypted and never shows it back to you after you save.

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. Install the Groupthink app on the organization and give it access to the repo. That usually needs an organization owner. Your own GitHub account also needs write access to the repo. With a personal access token instead, some organizations require an admin to approve fine-grained tokens before they work.

How do I find which repo I'm syncing to?

Groupthink doesn't choose a repo for you or create one. It writes to the repo you typed in when you connected. To see which one that is:

  • In Groupthink: open User settings > Connections and scroll to GitHub repo sync. A verified connection says Groupthink will commit your meetings and captures to owner/name@branch (with through your GitHub connection or PAT verified depending on how it gets access), and the status line has an Open repo on GitHub link. If the section instead shows amber Saved, but not verified yet, or no repo at all, setup isn't finished and nothing is being committed anywhere.
  • On GitHub: open Settings > Applications > Installed GitHub Apps > the Groupthink app to see which repos it can reach. With a token, open your fine-grained tokens and click the one you made for Groupthink; its Repository access lists the one repo it can write to.
  • In the repo: Groupthink's commits start with [groupthink:. If a repo's recent history has none, Groupthink hasn't written to it.

Why has nothing synced yet?

The connection has to be verified. Connect does that for you; if the section shows amber Saved, but not verified yet, it did not pass: read the message, fix what it names, and click Save changes. The status line under the connection reads Nothing synced yet until the first commit lands. See the troubleshooting section below.

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.

Getting help

Questions about repo sync? Email support@groupthink.com.