install guide/30–45 minutes/re-run safe
Install thoughtnet
This page is the whole install, spelled out. Most of the work is done by a guided script — you double-click one file, answer its questions, and it builds your deployment on your own accounts, testing each key as you paste it. Keep this page open on a second screen and follow along.
Before you start: three free accounts
Everything runs on accounts you own. Make these first if you don't have them:
- GitHub — where your notes will live, in a private repository. github.com/signup
- Cloudflare — where your copy of thoughtnet runs. The free tier covers it, with one heads-up: on a new account, Cloudflare asks you to activate R2 (its file storage, where your voice notes and photos live) before first use, and activation wants a payment method on file. It stays free — this workload costs $0. Activate it now to save a pause later: dashboard → R2 → Get started. dash.cloudflare.com/sign-up
- Anthropic — the AI that tags your notes and reads your photos, billed to you at a few dollars a month. Add a small prepaid credit ($5 is plenty to start). console.anthropic.com
You'll also receive access to the thoughtnet code repository with your license — this page is public, the code isn't.
Step 1 — Install two small tools
- Node (the runtime the installer uses): download the LTS installer from nodejs.org and click through it. Defaults are fine.
- GitHub Desktop (how you get the code and, later, updates — no command line): desktop.github.com. Install it and sign in to your GitHub account.
Step 2 — Get the code
- In GitHub Desktop: File → Clone repository, pick the thoughtnet repository from the list (it appears once your access is granted), choose where to put it, clone.
- That folder is now your copy. Remember where it is.
Step 3 — Double-click setup
- Open the cloned folder and double-click
setup.cmd(Windows) orsetup.command(Mac). - A terminal window opens and takes over. If Node is missing it says so and opens the download page; otherwise it installs the one pinned dependency and begins.
Mac may warn about an unidentified developer the first time — right-click the file, Open, Open. If you'd rather use a terminal: npm run setup from the folder does the same thing.
Step 4 — Answer the prompts
The script walks these in order. Nothing is destructive and it's safe to re-run from the top if anything is interrupted — it detects what already exists.
- Cloudflare login. A browser window opens; click Allow. That's the whole login.
- Create your vault. The script pauses and gives you two links to open:
first github.com/new — create a new private repository named
thoughtnet-vault(no readme needed). then github.com/settings/personal-access-tokens/new — generate a fine-grained token: under "Repository access" choose Only select repositories and pick just the vault; under "Permissions" set Contents to Read and write and nothing else. Copy thegithub_pat_...value somewhere handy. Back in the terminal, type your vault's name asyourname/thoughtnet-vault. - Personalize. A one-line "who is this brain for" blurb (the AI uses it for context), your timezone (it guesses; Enter accepts), and a name for your brain — naming it is the fun part, and the name becomes your personal URL.
- It builds. Database, media storage, schema, first deploy — a minute or two of output ends with your personal URL, something like
https://mybrain.yourname.workers.dev. Two first-time-account moments are normal here: if the script stops saying R2 is not activated, do the R2 activation from the accounts step above and double-click setup again; and on the very first deploy Cloudflare asks you to register a workers.dev subdomain — that's theyournamepart of your URL. Pick something short you like; every app you ever deploy on that account uses it. - Secrets. The script generates your app token itself, then asks you to paste the GitHub token from earlier and your Anthropic API key. Each one is tested the moment you paste it — wrong permissions or a mistyped key gets a plain-English fix-it message right there, not a mystery later. A vault repository that turns out to be public gets refused outright: your notes are not allowed to be world-readable. (If someone is helping you over a screenshare, this is the step where you pause sharing.)
- Reminders (optional). Say yes, give it a contact email (the push service requires one), and captured "remind me at four" items will push real notifications to your phone. You can also say no and turn it on later.
Step 5 — Put it on your phone
- Open your personal URL (from step 4) in Chrome (Android) or Safari (iPhone).
- Paste the app token when asked — the script printed it at the end, clearly marked. It's stored only on the device.
- Browser menu → Add to Home screen. The red button is now one tap away.
- Tap it. Say something. Watch the echo come back.
On Android, there's an upgrade: a native thoughtnet app with a real
home-screen record-button widget (one tap from anywhere straight into the mic),
share-to-thoughtnet from any app, an offline capture queue, and reminder alarms that
need no push server. Download the .apk from the code repository's
Releases page — the same access you cloned with in step 2 covers it — open it,
allow the install when Android asks, and enter the same URL + token.
Full steps: android/README.md in the repo. Run either version, or both.
Step 6 — Open your vault in Obsidian
- Install Obsidian (free) on your desktop: obsidian.md.
- In GitHub Desktop, clone your
thoughtnet-vaultrepository the same way as step 2. - Open that folder as a vault in Obsidian, install the community plugin Obsidian Git, and enable auto-pull.
- Captures from your phone now appear in Obsidian within a couple of minutes — graph, backlinks, search, audio playback, all of it.
Updating, later
When an update ships: double-click update.cmd /
update.command in the code folder. It applies any database
changes, then redeploys — the one safe order, automated. If it says git
isn't available on your machine, pull the latest in GitHub Desktop first
(Repository → Pull), then let it continue — it still handles the rest.
If it complains about conflict markers in wrangler.toml,
open that file, keep YOUR values, take any new lines, delete the marker
lines, and run it again. Your notes are never touched by updates.
On the native Android app, an update is just a newer .apk
from the same Releases page — it installs over the old one in place.
If something goes wrong
- The script stopped or I closed it by accident.
- Double-click setup again. Every step checks what already exists and skips ahead; nothing is created twice.
- A re-run asked "rotate the device token?"
- Answer y if you never reached the final screen that printed your token — it mints a fresh one and prints it this time. Answer n if your phone is already set up and working: rotating logs every device out until the new token is re-entered.
- It rejected my GitHub token.
- The message says exactly why — usually the token wasn't scoped to the vault repository, or Contents wasn't set to Read and write. Generate a fresh one with those two settings and paste again.
- I need to redo just the keys.
- Run
node scripts/provision.mjs --secrets-onlyfrom a terminal in the folder. It re-does only the secrets step against your existing deployment. - Something else.
- Get in touch — it reaches the person who built this, not a ticket queue. Say which step you were on and what the screen said, and you'll get a real answer.