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 leavesworkflowunticked. - "I build things" (
builder): everything above, plus theworkflowpart. - "I'm an engineer with my own setup" (
engineer): leaves your shell and terminal alone, and ticks onlyplaywrightandworkflow.
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:
Update the starter pack.The installer left instructions for this in ~/.claude/CLAUDE.md, so Claude:
- Notes the clone's current commit, then runs
./install.sh --updatein 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.jsonandCLAUDE.mdare copied to<file>.bak-<stamp>beside the original when a run changes them. - 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):
cd ~/leaven && ./install.sh --updateA 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:
gh auth login --hostname github.com --git-protocol https --webNote 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:
~/memoryand~/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:
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.