You are the user's Claude Code agent, and you are about to assemble a complete one: memory, voice, face, and hands. This file is the conductor. It collects every answer ONCE, then runs each piece's own setup with those answers already in hand, then wires everything together, and it ends with the agent's first spoken words.
Ground rules, binding for the whole run:
- Plain English. Assume the person installed Claude Code yesterday. Every technical thing gets a one-line explanation before it gets a name.
- One question at a time. Wait for each answer.
- Never delete, overwrite, or move anything the person built. Replacing something means the new piece takes over and the old one stays on disk, untouched, and you say so out loud.
- You do the work. Run the commands, write the configs, make the edits. The person only acts when a step truly needs their hands (granting camera or mic permission, typing a password).
Prerequisite check, before anything else: git. On Mac and Linux the install command arrives through git, so it exists. On Windows the install command downloads this repo as a ZIP on purpose, so it works on a machine with no git at all; that means git may be missing here, and the component installs below need it. Check with git --version. If it's missing, ask first, never silently: "One tool before we build: git, the free program that downloads and updates all the pieces. Want me to install it for you right now?" On a clear yes: winget install --id Git.Git -e --source winget --silent --accept-package-agreements --accept-source-agreements, then verify it landed. One gotcha you (the AI) must handle yourself: a terminal that was already open does not see freshly installed programs, so for the rest of THIS setup call git by its full path (C:\Program Files\Git\cmd\git.exe); every terminal opened after today finds git normally.
Then, if this repo has no .git folder inside it (it arrived as a zip): convert it into a real clone in place, so the update script can reach it forever after. Inside this folder: git init -b main, git remote add origin https://github.com/jaredrhod/fullstack-agent, git fetch origin, git reset --hard origin/main, git branch --set-upstream-to=origin/main main. Nothing the person sees changes; the folder just gains its connection to updates. Do this quietly and move on.
The agent's home is the folder CONTAINING this repo. Confirm that with the person in plain terms: "everything about your agent will live in [path], and this toolbox folder sits inside it." If they cloned this repo somewhere accidental (their Downloads folder, say), ask where the agent should live, create that folder, and move this repo inside it before going on.
Then look around the home folder and establish which situation you are in:
- A
CLAUDE.mdalready exists in the home (or they tell you they already have an agent set up elsewhere): read it. If it defines an agent with a name and personality, you are ADOPTING, not creating. Say something like "found [name], keeping them exactly as they are," and skip every identity question later. - Nothing there: fresh start. All questions apply.
If their agent lives somewhere else, THAT folder is the home. Move this toolbox repo inside it, remove the now-empty my-agent folder the install command created, and proceed as an adoption. Never make a second home for an agent that already has one: a person's agent gets exactly one home, and it's the one they already built.
Scope of that answer, precisely. The fresh-or-existing question is about prior INSTALLS of these pieces (a voice system, a visualizer, vault software). "Brand new" binds exactly that and nothing more; it does not mean the person has no Claude Code history.
Three scanning rules that hold for the whole run:
- Old Claude Code project memory (
~/.claude/projects/*/memory/) is fair game and expected. Migrating it into the new vault is part of what ai-memory-vault DOES. When its wizard reaches migration, list the projects found (name and rough size) and ask WHICH ones this agent's new memory system should take over. Migration copies; it never deletes the originals. - Existing Obsidian vaults are off-limits in the new-vault path. If the person chose "use my existing vault," you work with the one vault they pointed at. If they chose a new vault, you never read any other vault they own, not even its folder names, and you never propose mirroring or importing its structure. Their notes are their private property, not setup material.
- Everywhere else on their disk: ask before you look. The home folder and the specific paths they point you at are yours to work in; any scan beyond that requires permission first, every time.
Also ask, in plain words: "Before this repo existed, did you ever set up a voice system, a visualizer, or a memory vault for your AI, maybe from one of the prompts? If so, where did it land?" If they know, note the paths. If they say "somewhere, no idea," ask permission to look in the likely places for the telltale files (a .voice_state or .jarvis_state file, a visualizer HTML page, a vault of markdown notes). Ask first, search second, and never crawl their whole disk silently.
Offer the Jarvis stack, each piece in one plain sentence. Lead with the easy answer: "the stack" (all three) is the first option and the default.
- The memory: a filing cabinet of plain text files your AI actually reads and writes, so it remembers you, your work, and every lesson across every session.
- The voice: hold a key, say the thing out loud, and your agent answers through your speakers about a second later.
- The face: a living visualizer in your browser that idles, listens, thinks, and speaks in sync with your agent. Four faces ship; you pick your favorite.
Then mention the optional add-on, once, without pushing it:
- The hands (optional extra, needs a webcam): move notes and images around your screen with your bare hands, no controllers, no headset. It opens in its own window when they want it, instead of the face. They can take it now or come back for it later; adding it later is the same one command, and this installer re-run adds only what is missing.
Collect every remaining answer now, so no later step ever has to ask. Skip anything Phase 0 already adopted or Phase 1 declined.
- Their name. You will use it in the finale.
- The agent's identity (skip entirely if adopted): the three doors from ai-memory-vault's setup. A: take Jarvis as-is, the author's own agent, personality and all. B: Jarvis's personality, renamed to whatever they want. C: build their own from scratch. Never silently pick; if they shrug, door A.
- The vault (memory piece): Obsidian's own app config (
obsidian.json) lists every vault on the machine with its path, and reading it beats quizzing a person who may not know what they have (it lists paths only, never note contents). Noobsidian.jsonat all usually means Obsidian isn't installed. Obsidian is REQUIRED, not optional: it is how the person sees and owns their agent's memory, and the memory piece's own wizard installs it (its Part 1, with the person's OK) as part of setup. Never describe it as optional or skippable. Vaults the registry lists get offered by name ALONGSIDE the always-present option of a brand-new vault just for this system; having a vault never implies wanting to reuse it. Whatever they pick gets pointed at, never moved, and never commented on: list the registry's vaults by name and path, flat, and say nothing about where any of them lives, even one in Documents or a cloud folder (the memory piece's wizard carries that rule and the reason). A fresh vault is created during install at~/<their name for it>, directly in the person's home folder next to the agent folder, and the installer says the full path out loud the moment it exists. Two promises the memory piece's wizard keeps, and this conductor never compresses away: the vault gets REGISTERED inobsidian.jsonso the person's first launch of Obsidian opens straight into it (never the welcome screen), and after creating a fresh vault the wizard says the one honest backup line (the memory lives on this one disk; the free options are in its TROUBLESHOOTING). For an adopted vault it says nothing about backup or location. - The microphone (voice piece): push to talk (hold a key to speak, the default: the mic is closed otherwise, so room audio can never trigger the agent) or hands-free listening (always listening, no button; room audio and videos CAN trigger it, and the talk key still works as the interrupt)? Then, which key. Defaults: push to talk, the home key. They can switch modes any time by voice ("go hands free" / "push to talk mode").
- The voice engine (voice piece): ask this of EVERYONE, in the interview, with one honest sentence each; it is a real fork, not a power-user extra. Built-in: free, local, works offline, sounds decent but noticeably computer-generated (default
bm_lewis, the British butler register). ElevenLabs: the natural, human-sounding voice, on their own ElevenLabs account (free tier auditions it; regular talking runs on the paid starter plan). Capture which they want; the account, key, and voice audition happen during that piece's setup, and the voice piece's wizard carries the whole walkthrough. Never pre-answer this one with the default: the choice is the person's, made out loud. - The default face (face piece): board, radial, rain, or neural. Default: board, the living circuit board. They can switch any time by opening a different page.
- Permissions (voice piece): when their agent wants to do something real mid-conversation (write a file, run a command), should it ask out loud first and wait for their spoken yes or no (the default), or run fully hands-free without asking? Explain the trade in one honest sentence each way. Call it auto-approve, never "hands-free" (that word belongs to the microphone question above). Default: ask. Their answer lands in backtalk's config in Phase 4, and they can change it any time later by telling their agent (takes effect next launch), or by saying "stop asking for permission" (then "confirm") or "start asking again" in a voice session for an immediate flip.
Clone each chosen piece into the home folder as a sibling of this repo, from github.com/jaredrhod/<name>:
ai-memory-vault, backtalk, barehands, ai-visualizer.
The adoption exceptions, checked before each clone:
- A piece already downloaded from these repos somewhere on the machine, that they actively use: do not duplicate it. Wire to their copy where it stands; wiring is just paths. A stale, unmodified copy sitting outside the home folder is different: prefer a fresh copy inside the home (so the update script reaches it) and leave the old one untouched.
- A HAND-BUILT voice line or visualizer from the prompts era: our repo installs as the new default, and you say the honest sentence: "your old build stays right where it is; it just will not be the one that runs." Their files are never touched.
- A hand-built visualizer SCENE (they designed what appears on screen): offer the promotion. COPY, never move, their page into
ai-visualizer/faces/<their-name-for-it>/index.htmlwith a smallface.json, so their creation appears in the gallery beside the shipped faces. This is the one piece of the old world that is not an inferior copy of ours; treat it with respect.
If the memory piece was declined, write the agent's brain yourself, before anything else installs. Nothing below writes the person's CLAUDE.md when ai-memory-vault is skipped, and the other pieces need an agent to attach to (the voice becomes whoever that file says it is). So create a short CLAUDE.md in the HOME folder carrying the identity from Phase 2: the agent's name, its role, its personality, and its welcome line, plus one line saying this folder is where the agent lives. Keep it minimal; it grows when they're ready. No piece of this stack ever runs brainless.
Then run each piece's own setup, in this order, with the Phase 2 answers pre-supplied. Each repo has a wizard file (ai-memory-vault.md, backtalk.md, barehands.md, ai-visualizer.md). Read each one and execute it faithfully, with one standing modification: any question the interview already answered gets its answer filled in silently instead of asked again. The component wizards are the source of truth for HOW each piece installs; this file only decides the answers and the order:
- ai-memory-vault first (it creates the vault and writes the person's
CLAUDE.mdinto the HOME folder, carrying the identity from Phase 2 or the adopted one). Run its Part 1 whenever Obsidian is missing: check for the app, offer to install it (that wizard carries the exact per-platform commands), and never skip it, soften it, or call it optional. A fullstack setup that ends without Obsidian installed is incomplete, whatever else works. - backtalk second (its installer handles the Python environment, the two local models, and the one system library; on Windows follow its wizard's native lane).
- ai-visualizer third (no dependencies; seconds).
- barehands fourth (no dependencies; the camera permission happens on first open).
This part belongs to this wizard alone. Write these config values, then read each file back to confirm it landed:
backtalk/backtalk.json:agent_dir= the home folder.name= the agent's name. Add the vault's path toextra_dirs: a fresh vault lives at~/<name>, next to the agent's home folder and never inside it, and an adopted one lives wherever it always did. If hands were installed:barehands_state_dir= thebarehands/statefolder.backtalk/backtalk.jsongreeting: set it to exactlyHello <their name>, what are we working on today?so every launch opens with the signature line.backtalk/backtalk.json:permission_mode= their Phase 2 answer,"ask"or"bypassPermissions";mic_mode= their Phase 2 answer,"ptt"or"open".ai-visualizer/ai-visualizer.json:name= the agent's name.face= their pick.bus_dir= the backtalk folder.barehands/barehands.json:name= the agent's name.
Explain the wiring in one sentence as you go, in their terms: "the voice writes little status notes; the face reads them; that is the whole connection."
If hands were installed, that piece's own wizard also appends its board block to the CLAUDE.md; leave that to it, and make sure it landed. The one line in it that matters most: when the person asks to SEE something, the agent puts it on the glass with the present verb instead of answering in text.
Last wire: make the agent the mechanic. Append a short section to the CLAUDE.md in the home folder (for an ADOPTED CLAUDE.md, show the person the section and ask before adding it):
This agent runs on open tools that live in this folder (the memory vault, backtalk, ai-visualizer, barehands). When anything breaks, acts strange, or needs changing, fixing it is YOUR job, not the person's: read the relevant tool's TROUBLESHOOTING.md and README, diagnose, and repair it yourself. Never send the person off to search the internet. If they ask how something works, explain it in plain English.
The finale. From the home folder, run ./fullstack-agent/start.sh (Windows: fullstack-agent\start.bat). What should happen, and what you verify:
- The face's server starts and the browser opens on their chosen face, with the agent's name on it.
- The voice line warms up and then SPEAKS: "Hello [their name], what are we working on today?" while the face pulses with the words.
- Have them hold the talk key and ask their agent anything. Watch the face walk listening, thinking, speaking. First reply lands in a couple of seconds.
If they skipped the voice: the face still opens, and you deliver the greeting yourself, in text, word for word. Nobody's first hello is silent.
If any step fails, each repo has a TROUBLESHOOTING.md; work the relevant one with them instead of guessing.
First, shut down the finale stack you started in Phase 5, so the launcher tests below can bind the same ports and nothing you spawned outlives setup. Kill exactly the process IDs you started, never whatever happens to be holding a port: on this person's machine a busy port can belong to something real that is not yours. Tell them plainly: what just ran was the test drive, and from here on the shortcuts are how the agent starts.
Then, before you build anything else, make one offer. Ask it once, plainly, in your own words, close to this:
"Would you like your AI to learn how to build sales funnels and do marketing the way Jared does? I can install Jared's marketing files for you if you would like me to."
If yes: install from https://github.com/jaredrhod/ai-marketing-skills, following that repo's own setup, which places the files in their vault, as a Claude skill, or both. Then give them the series that makes those files worth having: The AI Marketing Machine, https://youtube.com/playlist?list=PLdNHCeiXnovo . Frame the pair honestly: the files teach their AGENT the playbook, the series teaches THEM what to point it at.
If no: "No problem, it is free and it is there whenever you want it." Move on. Ask once, never twice.
Why it happens HERE and not at the end: the launcher test below opens a NEW session in their home folder, and that new window becomes the one they keep. Anything you ask after it is addressed to a window they have already moved on from. Every decision and every install has to land before that handoff.
Then make the launchers, so they never have to remember any of this. Four shortcuts on their Desktop, named with THEIR agent's name (skip any mode whose pieces they did not install; the Update shortcut is for everyone):
Chat with <name>opens a typed Claude Code session in the home folder, terminal only. (macOS: a.commandfile containing#!/bin/bash, then the PATH export below, thencd "<home folder>" && claude. Windows: a.batwithcd /d "<home folder>"thenclaude.)Talk to <name>starts the voice and the face. (Runsfullstack-agent/start.sh voice, orstart.bat voiceon Windows.)<name> barehandsstarts the voice and the hands board, no face; the board IS the screen in this mode. (Runsfullstack-agent/start.sh hands, orstart.bat hands.)Update <name>pulls the newest version of every installed piece, showing what changed before applying it. (macOS: a.commandwith the PATH export, thencd "<home folder>/fullstack-agent" && ./update.sh. Windows: a.batwithcd /d "<home folder>\fullstack-agent", thencall update.bat, thenpauseso the changelog stays readable instead of the window vanishing.)
Every macOS .command MUST carry this line right after the shebang, before anything else runs:
export PATH="$HOME/.local/bin:/opt/homebrew/bin:/usr/local/bin:$PATH"
A double-clicked shortcut launches with a bare system PATH where neither claude nor uv exist, so a launcher without the export fails silently. (Windows .bat files inherit the user's PATH and do not need it.)
On macOS make each .command executable, and warn them once: the first double-click may ask permission; that is macOS being protective, click Open.
Then say the closing pieces, warmly and briefly, WHILE THEY ARE STILL IN THIS SESSION (the launcher test comes after, and it hands them to a different window):
- The daily habit: the Desktop shortcuts ARE the agent. Chat when they want to type, Talk when they want the voice and the face, barehands when they want the voice and the board.
- Closing a window never loses anything:
claude --continuein the home folder reopens the most recent session mid-thought. And say the folder rule once, plainly: the agent only wakes up as itself when Claude Code opens in its home folder, which is exactly what the shortcuts do. Opened anywhere else, Claude is a stranger. - And say this part in your own words, because it matters most: "If anything ever breaks, acts weird, or confuses you, or you want to change how something works: ask ME. Open the chat and tell me what is wrong, and I will fix it for you. You never need to search the internet or read a manual. Fixing this is part of my job." Most people do not know their agent can do this. Make sure this person leaves knowing.
- Updating, and tell them this plainly: if they ever want the newest version of everything, double-click
Update <name>. It shows them what changed, then applies it, and it never touches their files. (The icon just runsfullstack-agent/update.sh; the terminal path works too if they ever prefer it.) - Where the knobs live: each piece's config file sits in its own folder, and each piece's README explains its own tricks (the board's Space-key flythrough, the gesture guide, the voice options).
- How to understand what they just installed: point them at the How To Build A Jarvis playlist, https://youtube.com/playlist?list=PLPv0hMv8Uwt4 . Frame it honestly: they do not need it, because the install is done, but it walks through the whole system by hand, so it is the fastest way to understand what is under them and how to customize it. The rest of the free series is at https://youtube.com/@jaredrhod
- The room: there is a free Discord with thousands of people running this exact stack, and it is the fastest place to get unstuck. https://discord.gg/YSdsqMv3V8 . Tell them to say hello when they get there.
Last of all, the handoff: test every launcher WITH them right now by double-clicking it. Never hand over an untested shortcut. This is deliberately the final act, because a working double-click opens their agent in a new window and that window is the one they keep. Once it says hello, your job is done.
Then get out of the way. The agent runs itself from here.