setup ยท diff
git:20260904.ee0eb1b to git:20260922.147dd82
81 added, 208 removed. Audit B to A.
---
name: setup
- description: "Install Chewbacca by talking, not by answering a terminal wizard. Use when the user wants to set up this kit, run setup.sh, finish a half-finished install, or add one tool that was skipped. Also use when they ask what the installer is about to change on their machine."
+ description: "Install or repair Chewbacca for the agent and platform the person actually uses. Use for a first install, a partial setup, selecting a runtime, or explaining what setup changes."
license: MIT
- requires: [chewbacca]
---
- # Setting up Chewbacca
-
- `setup.sh` takes every answer as a flag. You ask the questions here, in
- conversation, then run it once. The terminal is where you run commands, not
- where the user fills in a form.
-
- Never tell them to run `setup.sh` themselves and answer prompts. There are no
- prompts.
-
- ## 0. Check the machine before asking anything
-
- Assume nothing is installed. This kit is aimed at people whose Mac has Claude
- on it and not much else, and macOS ships only bash, curl, and stubs at
- `/usr/bin/git` and `/usr/bin/python3` that do nothing until the Command Line
- Tools are installed.
-
- ```bash
- ./bin/bootstrap.sh --check
- ```
-
- Read the result back in plain words. If anything is missing, run it for real:
-
- ```bash
- ./bin/bootstrap.sh
- ```
-
- It installs the Command Line Tools, Homebrew, gh, node, jq, uv, and the claude
- CLI. Three things it cannot do alone, and you should not pretend otherwise:
-
- - **The Command Line Tools dialog.** A window opens with an Install button.
- Tell them to click it and say you will wait. Re-run bootstrap after.
- - **The Homebrew password prompt.** Homebrew writes outside their account, so
- it asks for their login password. Say that plainly before it appears, or a
- password prompt out of nowhere reads like something has gone wrong.
- - **`gh auth login`.** It opens a browser and needs their GitHub account. If
- they do not have one, that is a real fork in the road: say so, because two
- repos get created and pushed.
+ # Set up Chewbacca
- Do not start the questions until bootstrap says Ready. Answers collected
- against a machine that then fails prerequisites are answers you have to ask
- for twice.
+ Give the person a working first task while preserving their accounts, permissions,
+ existing instructions and personal choices.
- ## 1. Look before you ask
+ ## Start with the requested outcome and installed runtime
- Most of what the old version of this skill asked for is sitting on the machine
- already. Read it instead of asking.
+ Read `docs/RUNTIMES.md`. From the checkout, inspect without changing anything:
- ```bash
- ls /Applications
- defaults read com.apple.dock persistent-apps 2>/dev/null | grep -o '"file-label" = [^;]*'
- id -F # their real name, from the Mac's own account record
+ ```sh
+ python3 tools/agent_runtime.py plan --runtime auto
```
- Their first name comes from `id -F`. Do not ask for it. Say which name you are
- using and let them correct it.
-
- Then read the app list against the table below and **tell them what you found**
- rather than asking them to inventory their own life from memory. "I see you have
- Notion and Spotify" is a better opening than "do you use a task manager".
-
- | What is installed | What it means | Setup needed |
- | ------------------------------------------------------ | --------------------------- | --------------------- |
- | Calendar, Contacts, Messages, Mail, Notes, Reminders | Already works through `mac` | A permission click |
- | Notion | Can be connected | They sign in, once |
- | Todoist, Linear, Slack, Gmail, Spotify, Google Drive | Can be connected | They sign in, once |
- | Anything else | Nothing to do | None |
-
- Apple's apps are the important row. They need no account, no key, and no
- signup, and they cover most of what someone actually wants. Lead with those.
-
- ## 2. Ask about their life, never about their credentials
-
- The old version of this skill asked nine questions, six of which were API keys
- by name: Anthropic, GitHub, Todoist, Composio URL, Composio key. That asks a
- person to know what Composio is in order to answer, and being asked for a token
- you have never heard of does not read as optional. It reads as a thing you are
- failing to have.
-
- **The rule: never say the name of a service they have not said first.**
-
- Ask two or three open questions, in their words:
-
- - "What do you use to keep track of what you need to do?" Not "do you use
- Todoist."
- - "Where do you write things down?" Not "do you have Notion."
- - "What do you want help with most?" This one decides more than any credential.
-
- Then map their answer yourself:
-
- | They say | You wire | You say |
- | --------------------------------- | --------------------------------- | ---------------------------------------------- |
- | "Apple Notes", "Reminders", "the calendar" | Nothing. It already works | "That already works, I can read it right now" |
- | "Notion", "Todoist", "Linear", "Slack" | The connector for that one | What signing in gets them, then the link |
- | "Paper", "my head", "nothing" | Nothing | Offer their second brain as the answer |
- | "I don't know" | Nothing | Move on. Ask again in a week when it matters |
-
- Never present a service they did not name. If they say Notion, set up Notion and
- say nothing about the other forty things that were possible.
-
- ## 3. Explain anything you cannot make simple
-
- Some things genuinely cannot be made effortless. Those get an explanation before
- they happen, not an apology after.
-
- Three of them, and the phrasing matters because each one looks like a failure to
- someone who was not warned:
-
- - **A window opens asking to install developer tools.** Say: "Apple is going to
- ask to install some tools. Click Install. It is a big download so it takes a
- few minutes, and I will wait." Otherwise a stalled progress bar reads as a
- crash.
- - **A password prompt appears.** Say it before it appears: "This will ask for
- your Mac password. That is Homebrew, which installs software outside your
- account, so macOS makes it ask. It is your normal login password and it does
- not go anywhere." A password box out of nowhere is the scariest moment in the
- whole install.
- - **macOS asks whether Claude can see your screen and control your Mac.** Say
- what each grant actually allows and why it is needed for the thing they asked
- for. Do it one toggle at a time, in the moment, not as a checklist at the end.
-
- If they ask what something is, answer in one sentence with no jargon, then move
- on. Do not teach them what an MCP server is. They do not need to know and the
- kit works either way.
-
- ## 4. Ask the two consequential ones separately
-
- These change how Claude behaves on the whole machine. Both default to off. Ask
- each as its own question and take a plain no for an answer.
-
- **Permission prompts.** `--bypass-permissions` stops Claude asking before it
- runs a shell command or writes a file. It applies to every project, and it is
- written to three separate files, so undoing it is not one edit. Ask with a
- concrete example rather than in the abstract: "Right now I will ask before I
- send a text or change a file. Want me to stop asking?" Leave it off unless they
- say yes. Do not sell it.
-
- **Session opener.** Offer it, do not warn about it. Claude can open every reply
- with a line they choose, injected on every prompt so it holds across the whole
- session and every session after. Two ship with the kit: `prayer`, a prayer to
- Jesus Christ specific to the work in front of them, and `gratitude`, one
- concrete sentence about something worth being grateful for. Ask which, if
- either, and take none for an answer.
+ If they named an agent, select it explicitly. If none is detected, explain the
+ supported choices. Do not install Claude, require a GitHub account, or ask for API
+ keys merely because this kit historically used them. A desktop app may be present
+ without its CLI; a missing CLI is not evidence of a missing account.
- It is off by default because it is a surprising thing to inherit from a coding
- tool, not because it is an afterthought. Say it can be added any time:
+ For an existing supported agent, preview and install its adapter:
- ```bash
- ./setup.sh --only settings --session-opener prayer
+ ```sh
+ bash setup.sh --runtime codex --dry-run
+ bash setup.sh --runtime codex
```
- If they want their own line instead, that is one string in `OPENERS` in
- setup.sh, and you can write it with them.
+ Use `claude-code` or `both` when that matches the request. `--brain-dir PATH`
+ selects an existing private brain. `--name NAME` is optional and initializes only
+ an empty identity file. Without a name, leave identity unknown. Never infer a
+ person's identity from a username, home-directory path, device owner or git author.
+ Never replace their existing notes with starter templates.
- ## 5. Confirm before you run anything
+ The runtime installer creates blank private context, links skills and installs
+ native instructions and hooks. It does not import contacts, messages, calendar,
+ email or files, change permission policies, select an account, or publish a repo.
+ Read back its result: missing dependencies, preserved conflicts and untrusted
+ hooks are separate conditions. Configure only what the user requested.
- Say what changes in their words first, and put the command underneath for
- anyone who wants it. Not the reverse.
+ ## Choose additional setup only when it is useful
- - what Claude will be able to do afterwards that it cannot do now
- - where their second brain lives, as a path they could open in Finder
- - whether Claude will ask permission before acting
- - that `chewbacca uninstall` reverses all of it
+ The full Mac bootstrap is a separate path for people who need the Mac toolkit.
+ Inspect `bin/bootstrap.sh --check` and preview the chosen profile first. Explain
+ package downloads and any OS dialogs before running a full install.
- Mention a repo, a credential, or a config file only if one is actually involved.
- On the personal profile none of them are, and listing them anyway invents
- complexity that is not there.
+ - `personal`: personal assistance without GitHub repositories.
+ - `student`: personal setup plus coursework tools.
+ - `developer`: the larger toolkit, including GitHub operations.
+ - `portable`: the shared configuration portions of the historical installer.
- `--dry-run` prints this without touching anything. Use it when they hesitate.
+ A repository creation or push requires authorization for that action; wanting a
+ coding assistant is not enough. Use runtime-only setup when that is sufficient.
+ Native Windows currently gets instruction exports; shell hooks run in WSL.
+ Never promise that Mac automation works on Linux or Windows.
- ## 6. Run it
+ ## Learn preferences through useful work
- Most installs are one line, because the profile carries the defaults and the
- name came from the Mac:
+ Start with one concrete question if the goal is not known: "What would you like
+ help with today?" Use the answer before collecting more context. A short answer,
+ a pasted example, a file they select, or a skipped question are all acceptable.
- ```bash
- ./setup.sh --profile personal --name Jane
- ```
+ Use their chosen language, name and pronouns. Adapt the amount of detail and the
+ format when they ask; do not infer disability, religion, profession or technical
+ ability. Instructions should also make sense without color or a screenshot.
- Add `--profile student` if they are in school, or `--profile developer` if they
- write code and have a GitHub account. Anything else they mentioned gets wired
- after this run, one service at a time, as its own small step they can watch.
+ Session openers are optional. Prayer, gratitude and none are supported by the
+ full installer; none is the default. Never impose the author's beliefs or style.
+ Permission bypass is a separate explicit choice, and it does not authorize
+ sending messages, reading unrelated private sources or publishing work.
- When a key is genuinely involved, write the answers to a file instead, so the
- value never lands in shell history:
+ ## Connect one authorized source at a time
- ```bash
- cat > setup.answers.json <<'JSON'
- {
- "name": "Jane",
- "repo_dir": "~/dev",
- "github_user": "janedoe",
- "anthropic_key": "sk-ant-...",
- "bypass_permissions": false,
- "session_opener": "none"
- }
- JSON
- ./setup.sh --answers setup.answers.json
- ```
+ Read `skills/your-data/SKILL.md` and `docs/PRIVACY.md` before importing personal
+ sources. Ask which source is useful for the current goal unless already stated.
+ Existing OS permission is capability, not consent to import everything.
- Delete the answers file afterwards if it held a key, and say that you did.
+ Describe where selected content may be sent: the active model provider, a
+ connected service, or a local store. Do not promise local-only processing because
+ a database is stored locally. Never ask someone to paste a secret into chat;
+ prefer the provider's supported sign-in flow.
- ## 7. Read the output back to them
+ For a blocked OS or account step, finish the authorized preparation, explain the
+ specific capability needed, and hand over only the host-owned consent action.
+ Do not change trust databases or work around a denied control surface.
- Run `./doctor.sh` and translate it. A warning is not a failure. Name what is
- missing, what it costs them, and the one command that fixes it.
+ ## Verify the actual first task
- Re-running is safe. One section at a time:
+ Use a harmless task tied to the person's goal. On a blank setup, read the new
+ context files and verify that the host discovers the instructions and skills.
+ A command-line adapter test does not prove the host dispatched its hooks. Review
+ native hook activation and test both a refusal and an allowed operation before
+ claiming enforcement. Never spend model quota merely to label setup healthy.
- ```bash
- ./setup.sh --only tools # a tool arrived after the first run, like uv
- ./setup.sh --only plugins # the claude CLI was missing at the time
- ./setup.sh --only mcp
- ```
+ `chewbacca agent status --runtime NAME` describes the integration. The full
+ `chewbacca doctor` also checks optional Mac tools; distinguish an irrelevant
+ optional tool from a failure of the selected runtime. Report partial installation
+ accurately, with one concrete next action only when the host requires the person.
- Sections: `prereq repos settings editor desktop mcp rules plugins tools plynn verify`
+ `chewbacca agent remove --runtime NAME` reverses recorded adapter changes while
+ preserving later edits and the shared brain. `chewbacca uninstall` handles the
+ historical full toolkit; neither is a promise to erase every external dependency.
- ## 8. Hand off what a script cannot do
+ ## Examples and failure cases
- Screen Recording, Accessibility, and any consent screen need a real click. The
- [agent-setup](../agent-setup) skill covers those. Switch to it once the
- install is done rather than leaving a checklist behind.
+ A Codex user on Linux asks for help with a repo: install the Codex adapter, leave
+ Mac tools and Claude untouched, and verify native discovery.
- ## What to never do here
+ A person on a family Mac asks for reminders: leave the account owner's name out
+ of their identity, establish the intended reminder, and request only the relevant
+ app access. Do not scan Contacts to make the greeting seem personal.
- - Do not turn on `--bypass-permissions` because it makes your own job easier.
- - Do not enable the session opener without being asked.
- - Do not read a key out of their environment, keychain, or `gh auth token` and
- pass it in. If they did not give it to you, it does not get written.
- - **Do not name a service they have not named.** Composio, Todoist, Notion, an
- Anthropic API key: every one of those is a question that assumes knowledge,
- and being asked for a token you have never heard of does not read as optional.
- - Do not explain what a hook, an MCP server, a skill, or a subagent is unless
- they ask. The kit works either way, and the words cost them attention they
- should be spending on what it can do.
- - Do not hand them a checklist at the end. Anything a script cannot do, walk
- them through in the moment, one step at a time.
- - Do not paste a key into a chat message you then echo back.
+ An existing Claude user adds Codex: connect the same brain, preserve their opener
+ and permissions, and report any conflicting skill names or required hook review.