How it works: Installer and updates

v0.10.7

The installer: presets, parts, and saved choices

./install.sh opens a full-screen checklist when you run it in a terminal. It always sets up the core: the vault, its hooks, the five skills, the researcher agent, and the plugins. Everything else is a part you tick or untick.

You start by picking who you are, which sets the starting ticks; you can change any tick before installing:

  • "I'm new to the terminal" (starter): the full terminal setup, nothing to figure out. It leaves workflow unticked.
  • "I build things" (builder): everything above, plus the workflow part.
  • "I'm an engineer with my own setup" (engineer): leaves your shell and terminal alone, and ticks only playwright and workflow.

The parts, each with the sentence the checklist shows:

Part What the checklist says
zsh A friendlier command line that suggests as you type.
tools Handy helpers for finding files and reading them.
mise Keeps the languages other tools run on up to date.
statusline A small bar in Claude Code showing what it is doing.
playwright Lets Claude open a web browser and look at pages.
wezterm A fast, good-looking terminal app to work in.
workflow Agents, review, and git rules for working on code.
job search A workspace for job applications and resumes.

Playwright runs through npx. If you have none, mise is ticked for you and the checklist says why. Job search installs Node and poppler when they are missing.

The screens only collect your choices; the install itself is the same scripts you could run by hand. They never overwrite a skill, hook, or setting of yours, whatever you tick.

Saved choices

When you install, your choices go to ~/.config/leaven/choices: the preset, the ticked parts, the vault location, the GitHub backup choice, job search, and every part you have been offered. Run ./install.sh again and the checklist opens with those ticks, which is how you add a part later. Unticking a part stops its updates; it removes nothing, because the installer can't tell whether something else on your machine uses that package.

Updates and releases

The pack has numbered releases, such as v0.10.0. ./install.sh --update moves your clone to the newest one and reinstalls with your saved choices. When you have no saved choices, it works out what you already have from your machine, so a first update adds nothing and drops nothing unless you choose. When a release adds a part you have not been offered, the checklist opens with that part marked new and unticked; a part you have seen and left unticked is not offered again. When there is nothing new, the update runs straight through. What each version number means is in how releases are numbered.

Updating the pack through GitHub

The pack lives on GitHub, and your clone of it (~/leaven if you followed the setup guides) is your copy. Its owner keeps improving it, and your copy stays as it was until you update it. Your access is read-only: you can download every change, and nothing you do can change the shared copy, so you can't break it for anyone else.

Updating

Ask Claude, in any folder:

Ask Claude
Update the starter pack.

The installer left instructions for this in ~/.claude/CLAUDE.md, so Claude:

  1. Notes the clone's current commit, then runs ./install.sh --update in it, which moves it to the newest release and reinstalls with your saved choices. It is safe to rerun. The installer replaces the pack's own skills, hooks, agents, rules, and standards with the current release; one you edited is first copied to ~/.config/leaven/backup-<stamp>/, so keep your own under other names. settings.json and CLAUDE.md are copied to <file>.bak-<stamp> beside the original when a run changes them.
  2. Tells you what changed, from the notes that came with each change.

By hand, in your clone of the pack (use your own path if it is not ~/leaven):

Terminal
cd ~/leaven && ./install.sh --update

A new clone starts on the newest release's tag with no branch checked out, and an update moves it to a newer release the same way; that is expected, and it is why you update with --update and not git pull. A clone already on the newest release stays where it is. If you cloned before releases existed, your clone is on main: run git pull once first, then ./install.sh --update; if git pull says you are not on a branch, run git switch main before it. ./install.sh prints a line when its clone is on a branch instead of a release.

On Windows (WSL) and Linux, an update that needs your password for a new package prints the command to run. Claude can't type a password, so run that command yourself. On a Mac none is needed unless the update switches your login shell to zsh. When a release adds a part, an update run by Claude prints a line naming it and the command that adds it; to pick it from the checklist yourself, run ./install.sh --update in a terminal.

To look before you update, ask "what's new in the starter pack?" Claude checks GitHub and lists the changes you haven't pulled yet, without installing anything.

How Claude talks to GitHub

gh is GitHub's command-line tool. You logged in with it once during setup, and that login also lets git download from your private repositories without a password. Claude uses gh for anything on GitHub: "when was the starter pack last updated?", "is my memory vault backed up?". gh auth status shows which account you are logged in as.

If an update ever fails with "Authentication failed", log in again:

Terminal
gh auth login --hostname github.com --git-protocol https --web

Note the one-time code, press Enter when asked, and approve it in the browser; the login waits for that Enter. If it says unknown flag: --git-protocol, this Ubuntu's gh is too old; install a current one from install_linux.md and run the login again.

Your own changes

Read-only means a change you make inside your clone stays on your machine, and the next update may refuse to run because of it. Put your changes where they belong:

  • A skill of your own: a new folder in ~/.claude/skills/, under a name of your own (writing your own skills, above).
  • Standing instructions: ~/.claude/CLAUDE.md, below the Memory section. Updates rewrite only that section.
  • Your notes, and the job-search files if you added them: ~/memory and ~/job-search, backed up to your own GitHub repositories.

If an update stops because your clone "has uncommitted changes to tracked files", ask Claude to show you what you changed and set it aside, then update.

To suggest a change to the pack itself, ask Claude:

Ask Claude
Suggest to the starter pack that bod also lists today's birthdays.

Claude drafts a GitHub issue, a note on the pack's repository for its owner, and shows you the text before filing it. Read-only access is enough to open one.