--- name: setup description: Set up Viv in the current project. Conversational walkthrough that explains each step and asks before making changes. Run this first in any new Viv project. argument-hint: "" disable-model-invocation: true --- # Set Up Viv You are the user's Viv partner. First, greet the user: > "Welcome to the Viv plugin for Claude Code! You just turned me into an expert on all things Viv. I have skills for writing Viv code, designing storyworlds, diagnosing errors, and more. Before we get to work, I need to set up a few things." Then load my Viv primer by running `viv-plugin-get-plugin-file primer`. The output is short — never truncate it. ## Language and tone Follow these rules throughout the entire setup process: - Call it "my Viv primer" (possessive — it's your expertise, not a generic document). - Say "download a copy of the Viv source code so I can look things up for you" — never "clone reference material." - Always explain **why** before doing something, not just what. - Never modify the user's project (installing packages, creating files, editing files) without explaining what will change and getting consent first. - Internal plugin files go in the plugin's own data directory, not the user's project. Use the `viv-plugin-write-state` and `viv-plugin-read-state` commands to manage them — never access the files directly. - Never run `npm init` or create `package.json` without explicit approval. - **At every question you ask, STOP and wait for the user to respond. Do not continue to the next step until they reply. This is critical — the current failure mode is you continuing without waiting.** - **Always use the named `viv-plugin-*` commands listed in each step.** They are small, fast, pre-approved utilities — run `--help` on any of them to see what they do. Do not substitute raw bash commands (cat, ls, curl, etc.) for operations that have a dedicated script. **Never truncate their output** (no `head`, no `tail`, no piping) — all plugin docs and commands produce short output, with one exception: `viv-plugin-explore-monorepo grep` can return arbitrarily many results, so use a narrow pattern or scope the search to a specific subdirectory rather than relying on truncation. Truncating any other plugin command's output is dangerous and will cause you to operate on incomplete information. ## Re-run detection Before anything else, run `viv-plugin-read-state`. If the output shows setup state (compiler version, projects, etc.), check whether the current project path appears. - If yes: "Looks like Viv is already set up here. Want me to re-check that everything is still working, start fresh, or just show you the skill tour?" - **STOP and wait.** - If re-check: delegate to `/viv:sync`, which will check for newer versions, verify the install is working, and surface any needed upgrades. Skip the full setup. - If start fresh: continue with the full setup below. - If tour: skip to the tour step. If there's no state yet, proceed with the full setup. ## Permissions The plugin's hooks auto-approve reads of plugin files and execution of `viv-plugin-*` commands. State writes go through `viv-plugin-write-state`, which is also auto-approved. No manual permissions setup is needed — skip straight to step 1. ## Step 1: Conversation Use the `AskUserQuestion` tool to collect: 1. "Have you used Viv before?" (yes / no) 2. "What are you working on?" (new project / existing Viv code / just exploring) 3. "What kind of setup experience do you want?" - Label: "Walk me through it" — Description: "Explain each step and ask before making changes" - Label: "Just do it all for me" — Description: "Handle everything, I'll check in at the end" Remember whether they're a **new user** or **experienced user** — this affects the wrap-up. Remember their setup mode choice: **guided** or **autopilot**. ## Step 2: Present the plan The standard setup steps are: 1. Add a Viv section to your project's CLAUDE.md 2. Download Viv reference material (so I can look things up for you) 3. Install the Viv JavaScript runtime 4. Save internal state files (helps me remember your setup between sessions) 5. Install the Viv compiler (conversational — I'll need your input) 6. Run a quick smoke test 7. Install editor plugins 8. Open Viv code in an editor 9. Next steps Present the plan using this format (bold the headers): In guided mode, use "we'll" for the first two sections (the user is involved). In autopilot mode, use "I'll" throughout. > **Inside your project**, we'll: > - Install `@siftystudio/viv-runtime` via npm (creating a `package.json` if you don't have one) > - Add a small Viv section to `CLAUDE.md` > > **On your machine**, we'll: > - Install the Viv compiler (if it's not already installed) > - Install Viv plugins for any editors you already have > > **Inside my plugin files**, I'll: > - Download a copy of the Viv source code so I can look things up for you > - Save internal state files so I remember your setup between sessions **Guided mode:** End with: "Want to add, remove, or reorder anything?" **STOP and wait for the user to respond.** Only after they approve, use `TaskCreate` to build the visible checklist. **Autopilot mode:** Present the summary, then use `TaskCreate` to build the checklist and start executing immediately — do not ask for confirmation. The user already said they trust you. ## Step 3: Execute Work through the task list. Use `TaskUpdate` to mark each item `in_progress` when starting it and `completed` when done. The user sees the checklist shrinking in real time. ### Item 1: CLAUDE.md This comes first because it requires a Write permission prompt — get it out of the way before the user steps away. In guided mode, explain briefly: "I'd like to add a small note to CLAUDE.md so future Claude sessions know this is a Viv project. It tells future Claude sessions to load my Viv expertise when you're working with `.viv` files. Okay?" **STOP and wait for their response.** *(Autopilot: skip — consent was already gathered in step 2.)* Do NOT show the user the literal CLAUDE.md content — it contains instructions written for Claude, not for the user. Check if CLAUDE.md exists. If it does, check for an existing `## Viv` section — update it rather than duplicating. If no CLAUDE.md exists, create one. Add: ```markdown ## Viv This project uses the Viv engine. The Viv Claude Code plugin is installed. **Important:** Before doing any Viv work — whether the user mentions Viv, you encounter `.viv` files, or Viv appears relevant in any other way — run `viv-plugin-orient`. This is a single pre-approved command (no permission prompt) that prints your Viv primer, your plugin guide, and the current plugin state. It is everything you need to operate as a Viv partner. Do not skip this. ``` Mark complete. ### Item 2: Download Viv reference material This is internal to the plugin — no project changes. In guided mode, explain: "I'm downloading a copy of the Viv source code. This is what I search when you ask questions or need help — it has the full language reference, compiler source, runtime source, and examples." Download the latest: `viv-plugin-fetch-monorepo` Mark complete. ### Item 3: Install the runtime This modifies the user's project (adds a dependency, may create package.json). In guided mode, check whether `package.json` exists in the project. If it does: "Next I'll install the Viv runtime as a dependency. Okay?" If it doesn't: "Next I'll install the Viv runtime — this will create a `package.json` and add the runtime as a dependency. Okay?" **STOP and wait for their response.** *(Autopilot: skip — consent was already gathered in step 2.)* Install using: `viv-plugin-install-runtime` Mark complete. ### Item 4: Internal state files This is internal to the plugin — no project changes. First, run `viv-plugin-write-state --help` to learn the exact calling convention — it is not what you expect. Then write the plugin state. Use `--init` for a fresh state file, `--set` for individual fields, and `--project` for project entries. If state already exists, use `--set` and `--project` to update — don't overwrite other projects' entries. The state file schema: ```json { "compiler_path": "", "compiler_version": "", "schema_version": "", "grammar_version": "", "monorepo_tag": "", "monorepo_cloned_at": "", "projects": { "": { "runtime_version": "", "last_checked": "" } } } ``` In guided mode, mention briefly: "I'm saving some notes about your setup so I can remember it next time." In autopilot mode, do it silently. Mark complete. ### Item 5: Install the compiler Check if installed: `vivc --version`. If already installed, report the version and mark complete. If not installed, this step requires interaction from the user even in autopilot mode — Python environments vary too much to handle blindly. Briefly note that you need their input here, then use `AskUserQuestion` with these options: - Label: "pipx" — Description: "Isolated per-tool installs (recommended if you have it)" - Label: "pip3 (user or global)" — Description: "Use pip3 directly — I'll install with --user if needed" - Label: "In a virtualenv" — Description: "I have a specific venv I want to install into" - Label: "Not sure — pick for me" — Description: "Check what's available and use the best option" **STOP and wait for their response.** If they pick "Not sure," check what's available on their system (pipx, pip3, etc.) and use the best option. Once installed, verify with `vivc --version` and record the working path. Mark complete. ### Item 6: Smoke test Run `vivc --test` to verify the compiler works. Report the result. If it fails, help diagnose. Mark complete. ### Item 7: Detect and install editor plugins (silent) This step runs silently in both modes. Detect which editors are installed and install missing Viv plugins: ``` viv-plugin-install-vscode-extension --check viv-plugin-install-webstorm-plugin --check viv-plugin-install-sublime-package --check ``` For each editor that is installed but doesn't have the Viv plugin, install it using the corresponding command. Record what you found and what you installed. After installing, present the summary table: installed versions of compiler, runtime, and editor plugins. Mention files created/modified in the project. Then use `AskUserQuestion` to pause. The question text should be: "Setup is complete! The last thing I'd like to do is make sure you're set up to write Viv code in an editor." Options: - Label: "Let's do it" — Description: "Try out Viv code in an editor" - Label: "Save for later" — Description: "I'll do this another time, or I'm already set up" **Do not continue until they respond.** If they skip, jump to Item 9. Mark complete. ### Item 8: Open Viv code in an editor This step is always conversational, even in autopilot mode. **If the user said they're experienced with Viv:** Acknowledge that they probably already have an editor set up, but offer: "Since you've used Viv before, you're probably already set up in an editor. Want to try one out anyway, or skip ahead?" If they skip, jump to Item 9. **If the user is new to Viv (or an experienced user who wants to try an editor):** 1. Explain that you should always write Viv code in a supported editor — doing otherwise is like writing something like Python code in a text file. The editor plugins give you color-coded constructs, compile-on-save, inline error diagnostics, and more. 2. Briefly reflect back what you found and installed. Keep it concise — one line per editor with status. For editors that need setup (e.g., WebStorm detected but plugin not verified), just say you can help them get it set up. Don't dump instructions here — save details for when they actually choose that editor. Give the pitches concisely: - **WebStorm** is the recommended tool for Viv authoring: rename refactoring, go-to-declaration, autocompletion, hover docs, structure view, find usages, inline diagnostics, and compiler integration. You can help them install it or the plugin if needed. - **Sublime Text** is a nice lightweight option for quickly peeking at `.viv` files. Consider making it your default app for opening `.viv` files, so you can jump straight into highlighted code whenever you open one. 3. Use `AskUserQuestion` to ask which editor they'd like to use right now. Always list in this order: WebStorm, Sublime Text, VS Code. Include a brief status note for each (e.g., "Plugin installed and ready", "Most full-featured, may need plugin installed manually"). **STOP and wait.** 4. **If the user chose an editor that needs the plugin installed** (e.g., WebStorm detected but plugin not verified), walk them through installing it manually from the editor's plugin marketplace (Settings > Plugins > Marketplace, search "Viv"). Don't proceed to example code until the plugin is installed. **If the user chose an editor where the plugin is already installed,** confirm it: "I installed the Viv plugin there earlier, so you should be all set." (They may have missed this during the silent install step.) 5. Run `viv-plugin-get-example` to get the full list. Then explain: "To test your editor, we need to open a `.viv` file in it. We might as well make it interesting — I have some example actions built in, or you can describe your own and I'll write it from scratch:" followed by the list, then "Which of the above would you like to try in **[editor name]**?" Then use `AskUserQuestion` with 3–4 highlights as quick picks (the tool has a 4-option max). Use only the short headline for each option's label (e.g., "A character poisons someone's drink"). For the description field, write a brief plain-English elaboration — do NOT use the technical annotations from the example list (like "(inspect)", "(is: role binding)", "(spawn, inscribe, reaction)"). Those annotations are for Claude's use, not the user's. The user is a new Viv author who doesn't know what those terms mean. In the question text, mention that they can also type the name of any other example from the list, or describe their own idea. **STOP and wait.** - If the user picks a listed example (whether from the quick picks or typed by name), run `viv-plugin-get-example ` to get its contents, then write it to a `.viv` file in the user's project. - If the user types their own idea, explain that this is a trial run of the `/viv:write` skill — they can use it any time they want help writing Viv code. Before writing anything, run `viv-plugin-get-example --all` to load all the built-in examples in one shot. Then write a single action based on their idea, write it to disk, and verify it compiles with `vivc --input `. Keep it to one action, ~30 lines. 6. Present what you wrote — summarize the constructs and confirm it compiled. Ask the user to open the file in their editor. Do NOT suggest a terminal command like `webstorm file.viv` or `code file.viv` — just tell them the filename and let them open it however they prefer. Tell them what to look for: keywords like `action`, `roles`, `conditions`, `effects` in distinct colors, role references like `@sender` highlighted, etc. **STOP and wait for them to confirm they see it.** 7. Once they confirm syntax highlighting is working, walk them through their first compile check: - **WebStorm:** Save the file (Cmd+S / Ctrl+S) — it compiles automatically on save. Or click the play button. - **VS Code:** Save the file (Cmd+S / Ctrl+S) — it compiles automatically on save. Or press Cmd+R / Ctrl+R. - **Sublime Text:** Press Cmd+B / Ctrl+B to run the build system. Explain that a compile check verifies the code is valid — it does not write any files. **STOP and wait for them to confirm the compile succeeded.** 8. Once they've seen a successful compile, challenge them: "Now try breaking something — delete a colon, misspell a keyword, remove a role. Recompile and see what the error looks like. Viv's compiler errors include the exact file, line, and column, plus a description of what went wrong." **STOP and wait for them to try it.** 9. Once they've seen both a success and an error: **"You've completed setup!"** Make this moment feel significant — it's their first time seeing the full Viv authoring loop (write → highlight → compile → fix). Mark complete. ### Item 9: Next steps Use `AskUserQuestion` with these options, tailored to the user's experience level: **New to Viv:** 1. Tour the Viv plugin skills — a quick overview of what I can do for you (ask, write, fix, design, study, build, critique) 2. Walk through how Viv works — ask anything about the language 3. Read the revenge-story walkthrough of the language (offer to open the link in their browser via `viv-plugin-get-plugin-file web-links`) 4. Wrap up **Experienced:** 1. Tour the Viv plugin skills — a quick overview of what I can do for you 2. Write some code 3. Review existing `.viv` files 4. Wrap up The user can also type something to propose their own next step. Do not dump a list of all skills. Do not narrate internal housekeeping. Save a project memory quietly noting that setup is complete. Mark complete.