Read this once. Follow top to bottom. Should take ~10 minutes.
This guide is for someone joining a team that already runs fstack. The team owner has already created the Supabase project, applied the schema, and pushed fstack to GitHub. You just need to get fstack running on your machine and pointed at the team's brain.
If you're the first person on the team (no shared brain exists yet), read
brain/README.mdfirst to set up the Supabase project, then come back here.
- A working Linux/macOS shell. WSL counts. Native Windows doesn't.
gitinstalled.nodeinstalled (only used to verify Bun didn't bring its own).- Claude Code installed and working.
- Three things from your team's fstack owner (DM only — never in chat or commits):
- The clone URL of your team's fstack repo (often the public
https://github.com/sanskarbasnet/fstackif your team uses fstack as-is, or your team's fork) - Brain URL (e.g.
https://xxxxxxxx.supabase.co) - Brain anon key (a long JWT starting with
eyJ...) - Your
agent_id— your handle in the team'sagentstable
- The clone URL of your team's fstack repo (often the public
If bun --version already prints 1.x.x, skip to Step 2. Otherwise:
curl -fsSL https://bun.sh/install | bash
source ~/.bashrc # or ~/.zshrc if you use zsh
bun --version # verify: should print 1.x.xBun installs into ~/.bun/bin/. The installer adds it to your shell rc automatically.
If curl | bash is blocked or you don't trust it:
# Option A — install via npm (if you already have node):
npm install -g bun
# Option B — manual: download from https://github.com/oven-sh/bun/releases
# Unzip bun-linux-x64.zip into ~/.bun/bin/ and chmod +x ~/.bun/bin/bunEither works. Bun is needed once — to compile the brain CLI into a self-contained binary. After that, Bun isn't on the hot path of fstack's day-to-day operation.
fstack lives in ~/.claude/skills/fstack/. Don't put it elsewhere. Claude Code looks under ~/.claude/skills/ to discover commands, and ./setup symlinks every skill out of fstack into the parent directory so they're discoverable.
git clone <CLONE_URL_FROM_TEAM_OWNER> ~/.claude/skills/fstack
cd ~/.claude/skills/fstackIf ~/.claude/ doesn't exist yet, that's fine — git will create it.
./setup./setup will:
- Detect your platform.
- Build the gstack-inherited browser daemon (Chromium + Playwright). Takes ~30s.
- Symlink every skill (
/sync,/intent,/review,/qa,/browse, etc.) under~/.claude/skills/. - Build the brain CLI (
fstack-brain) — Bun-compiled, ~80MB binary. Takes ~10s. - Symlink the brain binary to
~/.local/bin/fstack-brain. - Prompt for three values:
agent_id ← your handle. Must match a row in the brain's `agents`
table. Ask your team owner if you're unsure what to use.
brain_url ← the Supabase URL from your team owner
brain_anon_key ← the long JWT from your team owner
- Write
~/.fstack/config.yaml(mode 0600, only readable by you). - Install Claude Code hooks into
~/.claude/settings.json. - Run
fstack-brain doctor— should print all green.
If doctor reports failures, jump to Troubleshooting at the bottom.
- Does NOT install per-project. fstack is global on your machine; works in every git repo.
- Does NOT touch your project repos.
- Does NOT enable telemetry. fstack never sends data anywhere except your team's Supabase + LLM APIs you're already paying for.
- Does NOT enable auto-update. Versions are pinned. Run
git pullinside~/.claude/skills/fstackwhen the team agrees to upgrade.
cd ~/path/to/some/git/repo # any git repo with `origin` set
fstack-brain doctor # all green?
fstack-brain sync # should print a digest (probably empty if you're new)Then restart Claude Code (close and reopen — hooks load at session start), open it in the same repo, and type:
/sync
You should see Claude run fstack-brain sync automatically and print the team digest. If other team members are currently working, you'll see them.
After ./setup finishes, fstack is installed globally on your machine — hooks fire in any git repo you open Claude Code in. But each project repo also needs a small one-time bootstrap so Claude Code agents in that repo know fstack is available and which skills to route through.
Inside any project where you want fstack visible:
cd ~/code/your-project
fstack-initWhat it does (idempotent — re-running is safe):
- Detects the canonical repo URL (origin remote)
- Appends a
## fstacksection toCLAUDE.md(or creates the file) with skill-routing guidance keyed to this repo - Creates
docs/decisions/with a README (where/decidewrites ADR files) - Prints the suggested
git add/git commitcommand — it does not auto-commit
Once committed and pushed, anyone cloning the repo afterwards gets the fstack section automatically. They only need the global ./setup step on their machine.
Read README.md for the philosophy and skill inventory.
The 6 commands you'll use most:
| Command | When |
|---|---|
/sync |
Auto-fires at session start. Run manually for a fresh team digest. |
/intent |
Refine the auto-drafted intent for your current task. |
/decide <topic> |
Log a non-obvious choice so the team doesn't relitigate. |
/handoff <note> |
Leave a richer note than the auto-handoff before stepping away. |
/resolve |
When git push shows a merge conflict — fstack uses both branches' intents to propose the merge. |
/office-hours <topic> |
YC-partner brainstorming with your codebase already loaded. |
The other ~20 skills (/review, /qa, /ship, /codex, /cso, /freeze, etc.) you invoke when the moment calls for them. Don't pre-memorize.
After setup, you'll have:
~/.bun/bin/bun # Bun runtime
~/.local/bin/fstack-brain # compiled brain CLI (symlink)
~/.fstack/config.yaml # your config (mode 600)
~/.claude/skills/fstack/ # cloned fstack repo
~/.claude/skills/<skill-name>/ # symlinks from setup
~/.claude/settings.json # hooks + env.PATH
You should never need to edit settings.json or config.yaml directly. If you do, run cd ~/.claude/skills/fstack && bun hooks/install.ts afterwards to make sure hooks are still wired correctly.
When the team agrees to pull in upstream changes:
cd ~/.claude/skills/fstack
git pull
./setup # re-runs build, refreshes symlinks, re-installs hooks./setup is idempotent — re-running won't break anything. It'll skip existing config and only rebuild what changed.
cd ~/.claude/skills/fstack
bun hooks/install.ts --uninstall # remove hooks from settings.json
rm -rf ~/.fstack ~/.local/bin/fstack-brain
rm -rf ~/.claude/skills/fstack
# also remove the symlinks setup created at ~/.claude/skills/<skill-name>/
find ~/.claude/skills -maxdepth 1 -type l -deleteThat's it. No system files modified.
Bun installed but the shell rc isn't sourced. Run:
source ~/.bashrc # or ~/.zshrcOr open a new terminal.
~/.local/bin isn't on your PATH. The installer should have added it; if not:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrcThe team's Supabase project hasn't exposed the fstack schema. Tell the team owner: "go to Supabase → Project Settings → API → Exposed schemas, add fstack."
The schema is exposed but the anon role lacks privileges. Tell the team owner to run the GRANT block from brain/schema.sql (the section commented POSTGREST GRANTS).
Skills aren't symlinked into ~/.claude/skills/. Re-run ./setup and restart Claude Code.
Hooks were installed before ~/.local/bin/fstack-brain was created, OR your Claude Code subshell PATH doesn't include ~/.local/bin. Re-run:
cd ~/.claude/skills/fstack
bun hooks/install.ts # reinstalls with absolute pathsThen restart Claude Code.
You may be on an old build. fstack-brain falls back to any remote (or local:<path> if none). Update:
cd ~/.claude/skills/fstack
git pull
./setup- Check the team owner is on the same fstack version:
cd ~/.claude/skills/fstack && git log --oneline | head -3. Compare with theirs. - Run
fstack-brain doctorand paste the output to the team owner. - Look at recent changes:
UPSTREAM_SYNCS.mdtracks what was pulled from upstream gstack and when.
- Never share the brain anon key in any group chat, doc, or commit. It's the team's shared secret. DM only.
- Never edit
~/.fstack/config.yamlto changeauto_upgradeortelemetry. They're pinned for a reason. - Never
git merge upstream-gstack/mainfrom inside the fstack repo. Cherry-pick only. SeeUPSTREAM_SYNCS.md. - Never disable hooks individually. If something's wrong, run
bun hooks/install.ts --uninstall, fix it, thenbun hooks/install.tsagain. Don't hand-edit~/.claude/settings.json.
That's setup. Now go run /sync from inside Claude Code and start working.