This is the recipe for connecting Obsidian, Claude, and GitHub: a private backup of everything you write, and a public page that shows what you are building. It took me a few weeks of trial and error. It should take you an afternoon.
Written for a colleague on a Mac who has never used git. No prior programming assumed. Everything here is free, and nothing here is permanent, so you can bail at any step without losing your notes.
This page is long because it answers the questions you will actually have at 10pm when something does not work. You do not have to read it first. Do these five things tonight and stop:
life-vault. Step 02That is a real win and a complete stopping point. The website, the terminal, and Claude running inside your vault are all still there next weekend. Nothing below expires.
Two separate things. Keeping them separate is the single most important decision in this guide, so it comes first.
You do not need to learn git. You need to understand it well enough to tell Claude what you want and to know when something has gone sideways. Here is the entire mental model.
index.html in a public repo, flip a switch, and GitHub serves it as a live website. This is how the site you are reading exists.This is the longest section and it is the only one with any real friction in it. Everything after this is one sentence to Claude and a button. Go slowly here and the rest is easy.
If you have never used it: press Command and Space together, type Terminal, press Enter. You get a window with a line of text ending in a % sign. That is the prompt. It means the computer is sitting there waiting for you to tell it something.
You paste a line in, press Enter, it runs. Command + V pastes, same as everywhere else. That is the whole skill.
$ at the start of lines in this guide is not part of the command. It is just showing you where the prompt is. Copy what comes after it.Go to github.com and sign up. Pick the username carefully: it becomes your web address, so it should be the name you want on the thing. Changing it later breaks every link you have ever shared.
Short answer to the question you are about to ask: no, this is not the giant Xcode app. Xcode is the fifteen-plus gigabyte thing in the App Store, and you do not need it. What you need is a smaller bundle called the Command Line Tools, which is what actually puts git on your Mac. On my machine it is about 1.9 GB. Real, but a one-time download, and dozens of other things you will eventually install depend on it.
First, check whether you already have it. Paste this and press Enter:
If it prints something like git version 2.50.1, you are already done, skip ahead. If a dialog pops up offering to install developer tools, click Install and let it run. If you want to trigger it deliberately:
Then tell git who you are, using the same email as your GitHub account. These two print nothing. That is correct.
Download it from desktop.github.com, open it, and sign in with your GitHub account when it asks.
I originally wrote this guide treating GitHub Desktop as the alternative to the terminal. That was wrong. Install it either way. Its real value is not the buttons, it is the window: it shows you, line by line and in color, exactly what changed since your last save point, which repos you have, and whether you have pushed. Claude Code can tell you all of that, but you have to ask, and when you are learning you do not yet know to ask. Having the picture open next to you is how the model in your head gets built.
Signing in here also handles authentication for anything you push from this app, so it doubles as a safety net if the command line login gives you trouble.
This is the view worth understanding, because it is the whole of git in one picture. Left side: which files changed since your last save point. Right side: exactly what changed inside the file you clicked, green for added, red for removed. Bottom left: the box where you write what you did, and the button that saves it.
git commit in the terminal, and both write to the same history.Once you can read that screen, nothing in git is mysterious anymore. A commit is that list of changes plus the sentence you wrote about them. Everything else is logistics.
GitHub stopped accepting plain passwords over the command line years ago. This is why half the tutorials you will find online are wrong, and why the wrong ones send you off to generate a long token and paste it somewhere. Do not do that. Pick one of these two.
You already signed in during step 1d. That is it. Push from the app with a button, and do your commits there.
Downside: Claude Code cannot push for you, so you switch to the app for that one action. Perfectly fine for months.
ghOne command to install, one to log in, and then everything works from anywhere, including Claude Code pushing on your behalf.
If you do not have Homebrew, the Mac package manager, install it first from brew.sh (one line, paste it, it asks for your Mac password). Or skip Homebrew entirely and download the .pkg installer from cli.github.com, which is a normal double-click install.
gh auth login asks you five questions in a row. Use the arrow keys to move, Enter to choose. Here are the answers, in order, so you are not guessing:
To confirm it worked, any time, forever:
gh auth login and GitHub Desktop both store the credential properly in your Mac keychain instead. I made this exact mistake and had to rotate a token because of it.
These are not competing options so much as three surfaces on the same thing. You will probably end up using all three. What matters is knowing which one to reach for.
npm install -g @anthropic-ai/claude-code, then type claude inside any folder.Do this first, before any website. It is the step with real value on day one, and it teaches you the whole loop on something where mistakes cost nothing.
On GitHub, click New repository. Name it something like life-vault. Choose Private. Do not add a README, a license, or a gitignore, because you want an empty one. Create it, and leave that page open, because it shows you the two commands you need next.
Obsidian constantly rewrites a couple of small housekeeping files, like which pane was open and how big the window was. If you track those, every single save looks like a change and your history fills up with junk. So you list them in a file called .gitignore and git pretends they do not exist.
That is the entire concept. You do not need to hand-craft this file. Hand it to Claude:
I have an Obsidian vault at [drag the folder in, or paste the path here] and I am about to put it in a private GitHub repo. Create a .gitignore at the root of the vault that ignores Obsidian's churn files and macOS junk, but KEEPS my themes, hotkeys, and plugin settings so they restore on a new machine. Then explain in two sentences what you ignored and why, so I understand what I just did.
For reference, what it should come out with is roughly four lines: the two Obsidian workspace files, the trash folder, and .DS_Store. If you would rather just make the file yourself, that is in the copy-paste kit at the bottom.
If you have Claude Code, open it in the vault folder and say "turn this folder into a git repo and push it to my new private repo called life-vault". It runs all of this for you. If you are on GitHub Desktop, skip to the paragraph after the commands. Either way, read the commands once, because you will see them a hundred times:
In GitHub Desktop instead: choose File, then Add Local Repository, point it at the vault folder, let it create the repo, write a summary, hit Commit, then Publish repository and make sure the "keep this code private" box is checked.
Refresh the GitHub page. Your notes are there, with history. From now on, saving your work is one sentence to Claude or one click in Desktop.
This is the piece nobody tells you about, and it is the difference between Claude being a chat window and Claude being something that actually knows your system. You put a file called CLAUDE.md at the root of your vault, describing the layout and the rules. Claude Code reads it automatically, every time, without being asked.
You do not have to be able to explain your own structure, and you do not have to remember where everything lives. Let Claude read it and write the file for you:
Look at the structure of this Obsidian vault. Read the folder names, sample a few notes from each, and work out how I actually organize things and what my conventions are (frontmatter, naming, tags, where new notes land). Then write a CLAUDE.md at the root of the vault that describes it, so that a future you starting fresh in this folder understands the system immediately. Include a short "rules" section covering anything you can infer about how I want files handled. Do not move, rename, or reorganize anything. Describe what exists. Show me the file before you write it.
That last line matters. Read what it produces. It will get one or two things subtly wrong about your intentions, you will correct them in a sentence, and the corrected version is better than anything you would have written cold.
Also completely fine, and more common than anyone admits. A folder of 400 loose notes is still a second brain. Ask for a proposal rather than an action:
This Obsidian vault has grown without a system. Read what is in here and propose an organization that fits the notes I actually write, not a generic template. Give me: the proposed folder structure with one line explaining each folder, which existing notes would go where, and what you are unsure about. Propose only. Do not create, move, or rename a single file yet. I want to approve the structure first, and then we will move things in small batches so I can stop you if it feels wrong.
Once you approve a structure and things are in place, run the first prompt to generate the CLAUDE.md.
Mine is longer than this, but this is the shape. Yours will look nothing like it, and should not:
Separate repo, public this time. The trick that makes this free and permanent: if you name a repo yourusername.github.io, GitHub serves it at https://yourusername.github.io automatically.
yourusername.github.io, all lowercase, matching your username. Set it Public.index.html..nojekyll next to it. This tells GitHub not to run an old blog engine over your files. Skipping it is the cause of a specific maddening bug where folders starting with an underscore silently vanish.main, folder / (root). Save.https://yourusername.github.io. It is live, on the actual internet, with a real address you can text someone.Do not write HTML. Describe what you want and have Claude produce the file. This is exactly the kind of contained make-me-a-thing job Cowork is good at, so if that is where you already live, start there and download the file it gives you into your site folder.
Build me a single self-contained index.html for a personal build log. Everything inline, no frameworks, no external files or fonts, so it works on GitHub Pages with zero setup and still opens if I double-click it. Contents: - A header with my name, one line about who I am, and links to my email and GitHub. - A "What I'm building" section with three project cards. Each card: title, one sentence, and a status chip reading LIVE, BUILDING, or PARKED. - A "Log" section, newest first. Each entry is a date and two or three sentences. - A footer with the date it was last updated. Style: plain and readable, generous whitespace, system fonts, one accent color. It should look like something a person made on purpose, not a template. Mobile has to look right, most people will open this on a phone. Ask me for the name, the one-liner, and the three projects before you write it.
That last line is the difference between a page about you and a page full of Lorem Ipsum you then have to edit. Answer the three questions, get the file, drop it in the folder, push it.
When you want to change it later, you do not start over. Open the same file with Claude and say what is different: "add a fourth project card for the asthma tracker, status BUILDING". It edits, you push, it is live in a minute.
Edit index.html, commit, push. Pages redeploys in under a minute. With Claude Code that is one sentence: "add a log entry for today about the intubation checklist, then push it". There is nothing else to it. No deploy pipeline, no server, no cost.
The temptation, once both repos exist, is to automate the bridge. Sync the vault to the site. Publish a folder. Do not.
Publishing should stay a deliberate act with a human in it, for two reasons. The obvious one is exposure: an automated pipeline eventually publishes the note you wrote at 3am. The less obvious one is that a vault note and a public page are different objects. The note is for you and it is allowed to be raw. The page is for a reader and it owes them a point.
What works instead, and takes ten seconds:
Read [the note] in my vault. Draft a log entry for my site from it: three sentences covering what I built, what broke, and what's next. No jargon a non-physician would trip on. Nothing identifiable about any patient. Show me the draft. Don't touch index.html until I say go.
You read it. You fix the sentence that is not true. Then you say go. That review step is the whole wall, and it costs you almost nothing.
Setup is an afternoon. The habit is the actual project. What has worked for me, after several versions that did not:
End of a work session, one sentence to Claude: "commit and push the vault". That is the entire daily ritual. In GitHub Desktop it is one click. Do not batch this. A week of uncommitted work is a week you will lose to a spilled coffee.
Once a week, update the public page. One log entry. It does not need to be a milestone, and "spent four hours on a thing that did not work" is a better entry than silence. The log is a record of effort, not a highlight reel, and the weeks where nothing shipped are the ones that make the record honest.
Once you have done the same publish steps a dozen times, write them down as a Claude Code skill: a folder in ~/.claude/skills/ with a SKILL.md inside describing the procedure in plain language. After that, one slash command runs the whole sequence. Mine handles updating the board on my site: it recounts the project totals from the page itself, pushes, verifies the change is actually live, and reads the result back to me. That last part is not decoration, it is an ADHD safeguard against believing I shipped something I did not.
Every one of these happened to me. None of them cost me anything except an evening the first time.
Give it sixty seconds, then hard refresh with Command + Shift + R. Browsers cache aggressively. If it is still stale after two minutes, check the Actions tab on GitHub for a red X, and check that you actually pushed rather than only committed.
Three usual causes: the repo is private, the file is named something other than index.html, or Pages is pointed at the wrong branch. Settings, Pages, confirm the branch is main and the folder is root. Also confirm the repo name matches your username exactly and is all lowercase.
That is Jekyll, GitHub's built-in blog engine, quietly processing your files. Anything starting with an underscore disappears. Add the empty .nojekyll file at the root and push. That is the whole fix.
Passwords over HTTPS have not worked for years. Run gh auth login and pick HTTPS when it asks. Do not go hunting for a personal access token to paste somewhere: that path ends with a secret sitting in a config file, and secrets in config files eventually get committed.
If it is a password, an API key, or a token, treat it as compromised the moment it was pushed, even to a private repo. Go to the service and revoke it, right now, before you do anything to the repo. Rotating the secret is the fix. Deleting the file is not, because the history still has it. If it is patient information, stop and get help from someone who knows the repo tools rather than improvising, because scrubbing history is one of the few genuinely destructive operations here.
It means the same file changed in two places, usually because you edited on a second machine. Show Claude the exact error text and say "walk me through fixing this". It is a five-minute problem and the error message contains everything needed to solve it.
Extremely common, and it produces a haunted feeling where your changes keep disappearing. Pick one folder as the real one, confirm it has the newest commits with git log, and delete or rename the other so you stop opening it by accident. I did this to myself and lost an hour before I noticed.
Nothing here is unrecoverable, that is the entire point of commits. On GitHub, open the repo, click the commit history, find the version from before you broke it, and restore it. Or say to Claude: "revert the site to the last commit that worked". The safety net is real, and knowing it is there is what lets you push things you are not sure about.
For a long time the traffic is you, plus a few people you sent the link to. That is fine. The page still does its job as an accountability device on day one. Then at some point somebody you did not expect brings it up, and it turns out to have been a portfolio the whole time. Build it for the first reason. The second one arrives on its own or it does not.
The failure mode for people like us is spending four weekends on the design and never posting the log. The bottleneck is contact with a reader, not quality. Ugly and shipped beats beautiful and local, every single time. If you catch yourself picking fonts for the second hour, that is the tell.
The most valuable entries are the ones that record why you chose something, not what you chose. Six months later the what is visible in the code. The why is gone, and it is the only part you actually needed.
Claude will happily generate the HTML, the commit messages, the whole site. Let it. What you should not outsource is what goes on the page and what stays in the vault. Keep the judgment, delegate the syntax, and you will never be blocked by not knowing a command.
.gitignore for an Obsidian vault