Start Here / Validate Your Build
/| 01 / Your Build

Is your build right?

Capstone test, repo sanity, file map, fix table. Most students hit at least one of the 19 known issues — that's normal.

"Even if you just hang on to the first block, you're already winning."

— Sara, main room ~46 min

1. Capstone test.

Did your morning brief actually deploy and run? Pick the path that matches what you built.

4D 4D path: morning brief deployed to Vercel

If you completed the 4D path, your deliverable is a personalized morning brief deployed to Vercel that pulls from Google Calendar, Gmail, and Drive on a schedule. Run through this checklist:

  • Local npm run dev renders the brief at localhost:3000
  • Vercel preview URL responds with your brief
  • Google OAuth completes against your account
  • The brief includes today's calendar events, top unread Gmail threads, and at least one Drive file referenced from the calendar
  • verify.sh from the repo root passes its 4 checks

The full 4D quickstart lives in the student repo at blueprints/morning-brief/QUICKSTART-4D.md.

8D 8D path: extensions wired on top of 4D

8D students are layering extensions on the 4D scaffold. Confirm at least one of:

  • Extension A: scheduled cron firing the brief on a daily timer
  • Extension B: Slack relay posting the brief to a channel
  • Extension C: Telegram bot returning the brief on demand
  • Extension D: multi-source aggregation (RSS + Notion + Linear)
  • Extension E: fleet coordination (the morning brief calls a peer agent for a sub-task)

Full 8D extension menu: blueprints/morning-brief/EXTENSIONS-8D.md.

N/A "I haven't shipped anything yet"

This is normal. Of cohort 1, only one student had a confirmed live Vercel morning brief by the close of Sunday. Most 4D students were still wiring connectors at the wrap. Partial is normal.

Pick up where you stopped. Open the repo. Open Claude. Tell it: "I left off at <step> on Sunday. Walk me through what I need to do next." Your CLAUDE.md should have enough state for it to know your context.

2. Repo + GitHub sanity check.

Four common breakage modes for the repo itself. Run through these before debugging anything else.

2.1 Are you connected to updates?

From the repo root, run:

git remote -v

You should see origin pointing at github.com/aibuild-lab/agent-native-os. If it points at a repo under your own GitHub username, you cloned your fork — that's fine, but you'll need to add an upstream remote to pull AIBL updates.

Pull weekly: git pull origin main

2.2 Run verify.sh from the repo root

The repo ships with a verify.sh script that checks the four most common setup issues: Node version, Claude CLI install, repo location, and CLAUDE.md presence.

bash verify.sh

If anything fails, the script tells you exactly what's wrong. Don't guess — copy the output into Claude and ask "fix this for me."

2.3 "Ask Claude to inspect" prompt

From the repo root, with Claude Code open:

Walk through this repo from the root. Tell me what's broken, what's stale, and what I should fix first. Reference verify.sh and CLAUDE.md if you find them.

This catches drift that the verify script can't, like CLAUDE.md pointing at a file that no longer exists or a stale API key in .env.

2.4 What NOT to commit

Never commit:

  • .env or .env.local — should be in .gitignore already
  • Anything starting with OPENAI_, ANTHROPIC_, GOOGLE_, SUPABASE_ in plain text
  • Token strings copied from a setup wizard
  • The node_modules/ directory

Before any push: git diff --staged | grep -iE "key|token|secret" — if anything matches, abort and clean.

3. What lives where.

The six-layer file map. Kills the spaghetti-structure anxiety almost everyone hits in week 2.

"I had no problems working with Claude to keep setting things up, but I'm afraid I'm creating spaghetti structure for how that's all stored and used going forward."

— a cohort 1 student

Wade's framing (read first)

You can think of this GitHub repo almost like a different way to look at your local machine. The folders on disk and the folders in GitHub are the same thing — GitHub just remembers history.

L1 Global — settings that apply to every Claude session ~/.claude/

Lives in ~/.claude/. Holds your master CLAUDE.md, agent definitions, MCP server config, and slash commands that apply to every project. Don't put project-specific stuff here.

L2 Workshop repo — the curriculum + scaffolds ~/Documents/agent-native-os/

The student repo. Curriculum, blueprints, guides, lexicon, troubleshooting. Pull AIBL updates here. For day-to-day workshop use, open this local folder and run Claude from it. If you want to remix the curriculum itself, fork the repo and edit your fork.

L3 Your project — what you ship ~/Documents/<your-project>/

Your morning-brief deploy lives here, or any new project you start. Has its own CLAUDE.md, its own .env, its own git origin pointing at your fork.

L4 Secrets — never in repos 1Password / .env

API keys live in 1Password (preferred) or .env files (gitignored). The op:// URI pattern lets op run inject them without ever writing them to disk in plain text.

L5 Knowledge base — your second brain Obsidian vault / Cairns

Optional but recommended. Your notes, decisions, meeting transcripts. Claude can read this when you point at it. Cairns is the structure we use; the lexicon has the full term breakdown.

L6 Deployment — where it runs in production Vercel / Supabase

Vercel hosts the morning brief. Supabase hosts any database you wire in. Both have their own dashboard URLs — bookmark them.

4. Known issues & fixes.

The 19 issues cohort 1 hit. Each entry: symptom, root cause, fix. Click to expand. Numbering matches the HQ known-issues.md.

GitHub & repo access
#1 Repo 404, no invite, can't fork private

Symptoms (verbatim): "When I click on the repo, it gives me a 404 error." / "I've forked and made private." / "no invite yet, so my GitHub username is gh246810."

Cause: Pre-Sunday the repo was private; some students still hit the old 404. GitHub does not let you change a fork's visibility from public to private after the fact (real GitHub policy, not your machine). Some usernames did not get added to the org invite list before class.

Fix:

  • Repo is now public at github.com/aibuild-lab/agent-native-os. Refresh; the 404 should be gone.
  • Want a private copy? Don't "fork then make private." Clone the public repo, create a brand-new private repo, git remote set-url origin <your-private-url>, then push.
  • Invite missing: make sure you submitted your username through onboarding, then check the email address attached to GitHub.
#2 Empty cairns folders / "is the fork supposed to look like this?"

Cause: The starter Cairns vault at templates/obsidian-cairns-starter/cairns/ is intentionally mostly empty. L1 has stub files, L2/L3 have only .gitkeep placeholders. That is the correct state of a starter vault. The full populated Cairns vault lives in Tyler's private repo.

Fix: Nothing. Empty cairns is correct for Sunday. You fill them in as you build. See guides/cairns/00-the-cairns-pattern.md. If your fork shows missing files (not just empty folders), pull the latest from upstream.

#16 Origin pointing at the public source after a private rewire

Symptom (cohort 1 student in Hunter's 2D room): "It's telling me my origin was pointing at the public source, but it should be to my private repo, and I have no clue."

Cause: When you cloned the public repo and then created your own private repo to push to, origin still pointed at the upstream public URL. Pushing in this state risks publishing your CLAUDE.md or in-progress work.

Fix (Hunter's two-option recipe):

Option A (recommended): rename remotes.

cd ~/Documents/agent-native-os
git remote rename origin upstream
git remote add origin <your-private-repo-url>
git remote -v   # confirm origin = private, upstream = public
git push -u origin main

Option B: rewire in place.

git remote set-url origin <your-private-repo-url>
git remote -v
git push -u origin main

Option A is safer; you keep a named pointer at the public repo for future pulls.

#17 Setup prompt only cloned 4 of 6 repos

Symptom (cohort 1 student in Wade's afternoon room): "Why would I not have the other two?"

Cause (Wade): "Because when you do that first setup prompt, Tyler probably only had the first four that we're working on today. So you have to download the other two."

Setup prompt cloned: agent-native-os, research-papers-cairns, tool-docs-cairns, youtube-cairns-vault. Not auto-cloned: workshop-installer, skills-guard.

Fix:

cd ~/Documents
gh repo clone aibuild-lab/workshop-installer
gh repo clone aibuild-lab/skills-guard

You only need them if you are extending the workshop installer or studying the skills-guard scanner. Most students don't need either today.

1Password & credentials
#3 1Password CLI: not on Family Plan, Touch ID friction, Windows Hello loop

Symptoms (verbatim): "for signing up with 1password, can I do Individual or I need to do the Business?" / "I did get 1password setup, but I'm hitting Windows Hello for EVERY secret retrieved." / "The 1Password piece took me longer to implement than everything else combined."

Cause: 1Password moved the developer-tools tier (CLI / SSH / dev integration) out of the Family plan. It is now Teams or Business only. On Windows, the 1Password Windows Hello integration prompts every secret retrieval by default.

Fix:

  • Plan tier. If 1Password CLI access blocks you, use Infisical or a gitignored .env with chmod 600 for local practice.
  • macOS Touch ID. Settings → Developer → "Use the system authentication service" + increase timeout.
  • Windows Hello loop. Known limitation. Run 1Password CLI inside WSL2 instead of native Windows, or fall back to Infisical or .env.
Connectors & tools
#4 Gmail OAuth connects the wrong Google account

Symptoms (verbatim): "Gmail/Calendar OAuth bug." / "I'm not able to draft emails. But I can see Slack and Obsidian (2 out of 3 ain't bad I guess)."

Cause (Hunter): When you authorize Gmail in Claude Desktop, OAuth uses whichever Google account is currently logged into your default browser, not the one you typed in Claude. Work account active in browser + trying to connect personal Gmail = OAuth lands on the wrong account.

Fix:

  1. Open default browser. Sign out of every Google account except the one you want.
  2. In Claude Desktop, disconnect existing Gmail connector.
  3. Re-run connector setup. OAuth now lands in the right account.
  4. Alternative: separate browser profile or incognito window with only the target account signed in.
#8 Firecrawl / Exa / Perplexity: which one when?

Symptoms (verbatim): "for Firecrawl should I paste my API key into Claude or should I choose the endpoints, SDK?" / "what's the difference between Exa and Perplexity?" / "CC desktop cannot find Firecrawl."

Cause: Three different research/scraping tools, each best at a different thing. Claude Desktop only connects some natively.

ToolBest forHow to wire
ExaSemantic web searchOptional API key in Infisical, .env, or 1Password; called from your slash command
PerplexityConversational research with citationsAPI key; substitutable for Exa for many tasks
FirecrawlScraping a known URL into clean markdownOptional API key; not in Claude Desktop's connector list

If Claude Desktop "cannot find Firecrawl" in connectors, that is correct. Firecrawl is API-only.

#9 Telegram: bot does not respond / getUpdates returns empty

Symptom: Created a bot via BotFather, hit getUpdates, got {"ok":true,"result":[]}.

Cause: Telegram bots cannot start a conversation. You have to message your bot first before getUpdates returns a chat id.

Fix: Open your bot in Telegram (BotFather gave you a t.me/your_bot link). Send any message (hi works). Re-hit getUpdates; chat id is in result[0].message.chat.id.

Vercel & Supabase
#5 Supabase URL: extra /rest/v1 breaks the connection

Symptoms (verbatim): "I am getting a Vercel error that SUPABASE_URL references secret supabase_url which does not exist." / "I need to update my Supabase URL to remove the /Rest/V1."

Cause: When you paste the Supabase URL out of the dashboard, the value sometimes carries /rest/v1 on the end (visible in the API Docs section). The Supabase JS client wants the base URL only.

Fix: Your SUPABASE_URL should look like https://xyzabc.supabase.co, not https://xyzabc.supabase.co/rest/v1. Trim the suffix. Re-deploy.

#6 Vercel "secret does not exist" (legacy Secrets vs dashboard env)

Symptom (cohort 1 student fix-write-up): "The env: and build.env: blocks reference legacy Vercel Secrets (@supabase_url, etc.) that don't exist. Vercel resolves these before dashboard Environment Variables, so deploys fail."

Cause: The morning brief scaffold's vercel.json was using the older Vercel Secrets pattern. Vercel deprecated it; @-prefixed references resolve before dashboard values, so deploy fails even when the dashboard values are correct.

Fix: Delete the env: and build.env: blocks from vercel.json. Vercel will pick up the dashboard environment variables directly. Redeploy. The blueprint scaffold has been updated; if your fork still has the old pattern, sync upstream.

#7 YouTube blocks repeated Claude Code requests

Symptom: "I keep getting shut down by YT every time CC tries to run."

Cause: YouTube rate-limits and bot-detects requests from the same IP at high frequency without an authenticated session.

Fix:

  1. Slow down: insert sleep/backoff. Pull max 5-10 videos per run.
  2. Use yt-dlp with --cookies-from-browser chrome so requests look authenticated.
  3. Move the YouTube pipeline off morning-brief and onto a separate nightly job.

YouTube as a 4D source is brittle. Treat it as 8D and skip for now if you're still on 4D.

Slash commands & setup
#10 /personalize says "command does not exist"

Symptom (verbatim): "Claude tells me neither personalize nor personalize exists. and asks 'What were you hoping it would do?'"

Cause (Claude's self-diagnosis): "The /personalize command isn't registering because the file is in configs/commands/ but Claude Code looks for custom slash commands in .claude/commands/."

Fix:

cp configs/commands/personalize.md ~/.claude/commands/personalize.md
# Then quit Claude Code (Cmd+Q) and reopen. Custom commands only load on startup.

Same fix applies to any other command in configs/commands/: cp to ~/.claude/commands/ (global) or .claude/commands/ (project-local), then restart.

#14 Claude Desktop and terminal use different PATHs

Symptom (Wade, pre-session room): Setup prompt that worked in the terminal does not work in Claude Desktop, or vice versa.

Cause (Wade's framing): "The desktop app uses a different command than the terminal. And sometimes when people are setting this up [it] was for the terminal. And like since most more often than not, like you want it for both really."

Fix: Wade revised the installer to write to both paths. If you used a pre-Sunday installer and only one surface works, re-run the latest setup prompt. Still resolving in only one? Run which claude from the working surface and copy that path into your shell profile for the other surface.

#15 "Do I run this in the terminal or in Claude Code?"

Symptom (cohort 1 student in Hunter's 2D room): "I put this CD slash GitHub agent in the terminal. And then am I supposed to be doing that?"

Cause: The setup prompt mixed shell commands (terminal) with Claude Code instructions (paste into Claude). Students could not tell which was which.

Fix (Hunter, live): "You don't need to do this in the terminal. You can just tell it to run those things, just be like 'great, run it.'"

Rule of thumb:

  • Says "open Claude Code" or "paste this into Claude" → goes inside Claude Code.
  • Says "run", "cd", "git", or starts with $ → goes in the terminal first, then launch claude from there.
  • Unsure? Paste the whole step into Claude Code: "should I run this in terminal first or do you handle it?"
Folders & permissions
#18 "I cannot find my repo folder in Finder"

Symptom (two cohort 1 students in Wade's afternoon room): "There's a super level that you don't see in that file structure… you have to ask for it."

Cause: macOS hides home-directory hidden folders in Finder by default, including the path Claude Desktop suggests as project root.

Fix (peer-to-peer in the room): In Finder, hit Cmd + Shift + G (Go to Folder) and type the path explicitly: ~/Documents/agent-native-os. If you intentionally cloned into a different parent folder, use that exact path instead.

Alternative: enable hidden files in Finder with Cmd + Shift + . (period). Toggle them back off the same way.

#19 Claude Desktop asks for Drive / music permissions you didn't request

Symptom (cohort 1 student in Wade's afternoon room): "It started asking me from Claude to connect to my Google Drive files and my music files and things that he had not asked me for before."

Cause (Wade's diagnosis): "When you ask it a question, it's asking for permission because really there's nothing in [the folder you selected] except everything else."

You selected your user home folder as Claude Desktop's project root, not the agent-native-os subfolder. Claude then sees Drive, Music, Documents, etc. all as "in scope."

Fix:

  1. In Claude Desktop, click the folder name in the top bar.
  2. Select Choose another folder.
  3. Navigate to ~/Documents/agent-native-os (or wherever you cloned).
  4. Click that exact folder, not its parent.

Already granted Drive/Music access by accident? Revoke in macOS System Settings → Privacy & Security → Files & Folders → Claude.

Other
#11 Recording / transcript: where is it?

Fix: See Recording & transcript map. Maven hosts the canonical recording (Sara dropped the URL in the channel Sunday evening). The portal also has the 12-segment Fathom timestamp index for the main room and Wade rooms.

#12 heads-up Onboarding form "are you really in?" confusion

Heads-up: A cohort 1 student submitted the legal acceptance form Saturday, returned Sunday morning, and saw a duplicate-detection prompt that read as a hard block. If you re-visited the form and got an ambiguous response, you are still in. Fix is on the post-workshop product backlog (clearer success state + email + Slack DM confirmation).

#13 windows Windows installer 2 known bugs

Heads-up: a couple of installer bugs surfaced on fresh Windows VM tests. If you hit a stall during install, post in #agent-native-os with the error and tag Wade.

Still stuck after working through this page? Post in #agent-native-os with a screenshot, the prompt you ran, and what Claude said. The team triages.

← Back to portal