You are not building a finished app. You are building a story that holds together + evidence + one screen to show. Nothing to install — you just paste prompts into the Codex app chat.
Tomorrow you are graded not on “what did you build” but on “what did you find out”.
The demo is not the star of the show. It is evidence.
Beautiful screens, but “who will use it? Still figuring that out…”
An ugly mockup, but “I asked 2 people and one of them showed me I was wrong”
Business models are not part of this course’s curriculum. You will not be graded on BM theory.
What we grade instead — how precisely you narrowed the problem / how much you touched reality / whether you say out loud what you could not do. So what you are learning today is not startup methodology. It is how to use AI to raise the quality of your judgment. And that is exactly our course.
As the cost of building falls toward zero, all the value moves to the ability to choose what to build.
Do not misread this. “Build small” means Minimum, not Mediocre. Cut down to 1 screen, but that 1 screen has to hold up — empty states and errors included. A demo full of bugs is not tight scope. It is just badly built.
One-sentence hypothesis
who · when · because of what · losing what
2 pieces of evidence
records of asking real people
One demo path
3 clicks · 90 seconds
5-slot script
the skeleton of tomorrow’s talk
These four are everything. The urge to build a fifth is today’s biggest risk.
| Time | What happens | What must be in your hands at the end |
|---|---|---|
| 09:30 | Kickoff · install check (show of hands, 5 min) | — |
| 10:05 | Block A — Interrogate the Problem (65 min) | one-sentence hypothesis + risky assumption + 2 real names to contact |
| 11:10 | Block B — Cut Scope + Send Questions (40 min) | 1 feature · questions actually sent |
| 11:50 | Lunch — when replies come in | check replies |
| 12:50 | Block C — One Demo Path (40 min) | 90-second path + fake list |
| 13:30 | Lecture — the danger of auto-fix | — |
| 13:50 | Block D — Design the Talk + rehearsal (40 min) | 5-slot script · 2 rehearsals |
| 14:30 | Open rehearsal + briefing for tomorrow | — |
Forbidden
Allowed
The morning’s two hours succeed or fail on how much you deleted.
We use the Codex desktop app. Today’s default is pasting prompts.
Paste the §prompt pack (P1–P8) straight into the app chat.
Zero install, zero setup. Works 100% of the time.
Install gstack and call it with $office-hours.
May not show up in the app
There is a known unresolved issue where the Codex app fails to list personal skills (openai/codex #28505). Even after a clean install, typing $ may give you “No skills or apps found”.
So today, pasting the prompt is the default. The output is exactly the same — because a gstack command is, under the hood, a Markdown prompt.
MIT-licensed open source, released by Garry Tan (Y Combinator CEO). It does not give the AI abilities — it puts roles on it. A rulebook. The official docs are written for Claude Code.
“The browser is the hard part — everything else is Markdown.”
ARCHITECTURE.md
In other words, one command = one Markdown file. Install it and the prompt sits right there in .agents/skills/, in plain sight. That is why “copy and paste” is equivalent to the real thing. That is the whole basis for today’s default track.
Open exactly two files. That’s it.
ETHOS.md — what this tool believes. A 10-minute readSKILL.md — the moment you go “wait, that’s it?” is the whole point. It is just a Markdown promptThe flashy automation will pull your eyes, but what we are stealing is ① and ③.
There are 50+ skills, but the structure is simple. One role attaches at each step of building a product.
| Stage | Skill | When | Why it helps | Today |
|---|---|---|---|---|
| Think | office-hours | before writing code | Tells you in 10 minutes that you mistook a solution for a problem | ✅ A |
| Plan | plan-ceo-review | right before you build | Left alone, AI always adds scope. The mode forces the cut | ✅ B |
| Build | design-html | when you have nothing to show | One presentable screen in 40 minutes, no backend | ✅ C |
| Review | review | right before commit | Traces beyond the diff — defects humans are structurally unable to catch | ✅ C |
| Test | qa | before anyone else sees it | Looks at what other people experience, not “what I think” | ✅ C |
| Safety | careful freeze | before dangerous commands | Blocks on Claude. On Codex, advisory only | FYI |
Not used today, but worth knowing — spec (intent → document) · investigate (never fix without a cause) · cso (security) · ship (release gate) · retro (retrospective). Bolt them onto a personal project after the semester — they pay off.
gstack is the only thing you install. Install other skill packs alongside it and the names collide — your $ list runs past 30 entries and you can no longer tell which one to pick.
Paste that paragraph exactly as it is — do not shorten it, do not reword it. When it finishes, quit and reopen the Codex app, type $office, and check that Office Hours shows up. If it doesn’t install, no problem — paste the prompts instead; grading is unaffected. Just tell your instructor “it didn’t work” and move on.
| What you need | Mac | Windows |
|---|---|---|
| Shell | Terminal — already there | Install Git Bash separately git-scm.com/download/win |
| Node.js | Not needed | Required — nodejs.org |
| bun | curl -fsSL https://bun.sh/install | bash | In PowerShellpowershell -c "irm bun.sh/install.ps1|iex" |
| Running the install | Terminal, as-is | In a Git Bash window (not PowerShell) |
npm install -g bunWindows takes longer — there is more to prepare. Set aside generous time on Mon/Tue, or just go with pasting the prompts. Whether you use the tool is worth exactly 0 points in today’s grading.
You must include --host codex (the default is claude). If it takes more than 5 minutes, stop and switch to the prompt track. Nothing to be embarrassed about — the result is the same.
$, not a slash
The gstack docs write /office-hours, but that is Claude Code notation. On Codex it is $ — type just $ in the chat and the list appears.
Skills install under short names → $office-hours. Typing as little as $offi filters the list. The similar-looking Gstack Openclaw Office Hours is for a different agent — do not pick it. If nothing shows up, paste the prompt; the result is the same.
| Feature | What the docs say | What actually happens on Codex |
|---|---|---|
| Multiple-choice questions | Buttons appear | They don’t. Questions arrive as prose; you answer in your next message |
/careful /freeze | Blocks dangerous commands | No hooks. Advisory text only — nothing gets blocked |
| Second opinion | /codex | not used today |
| Parallel expert review | Runs | Removed |
| Invoking a skill | /name | $name or auto-detected |
| In the app (GUI) | — | Personal skills may not appear in the list |
The second row is today’s most important one. On Codex, the safety rails block nothing. The only thing standing between you and rm -rf · git reset --hard is committing often.
| Block | Default (everyone) | Optional (installed and recognized) |
|---|---|---|
| A Interrogate the Problem | Paste P1 | $office-hours |
| B Cut Scope | Paste P3 | $plan-ceo-review |
| C Mockup | Paste P5 | $design-html |
| C Code check | Paste P6 | $review |
| C Screen check | P7 — hand it to your neighbor to click through | $qa |
| C Cross review | Swap code with your neighbor | not used today |
The left column alone gets you through today, complete. The repo holds 50+ commands; today you use 6.
“AI models recommend. Users decide. This is the one rule that overrides all others.”
gstack ETHOS.md
“The AI told me to” is not a justification. If you insist on calling it your CTO — fine, then you are the CEO. And the CEO’s job is to reject.
30 min solo → 20 min in pairs → 15 min whole class. The goal: a one-sentence hypothesis + 1 risky assumption.
| Question | The point | Answers that fail |
|---|---|---|
| Q1 Is the demand real | Would anyone truly be stuck if this vanished | “My friends said they’d love it” · “80% in my survey said…” |
| Q2 How do they cope now | How are they getting by today | “There’s nothing out there — that’s the opportunity” |
| Q3 Who exactly is that person | One person, not a category | “university students” · “students in the hostels” — You can’t email a category |
| Q4 The narrowest version | The smallest version someone would pay for this week | “Once we build the whole platform…” |
| Q5 Observation | Have you watched without helping | “I ran a survey” — Surveys lie |
| Q6 Three years out | More necessary then, or less | “The market grows 20% a year” — a growth rate is not a vision |
“Push on each one until the answer is specific, evidence-based, and uncomfortable. Comfort means the founder hasn’t gone deep enough.”
If you are getting uncomfortable, you are on the right track. Q5 cannot be satisfied today — there is no time. Admitting “we couldn’t do it” is itself part of tomorrow’s honesty score.
If this sentence contains a product name, it is wrong. The solution does not appear yet.
If your hypothesis collapses, at which point does it collapse?
e.g. “People want on-the-spot matching” — or maybe they simply prefer eating alone / “They will open an app” — or maybe the class WhatsApp group they already have is enough
| # | Name | Relationship | How you will reach them |
|---|---|---|---|
| 1 | |||
| 2 |
If these rows are empty, you cannot move on to Block B. Can’t fill them? Switch to one of the starter topics below.
① Campus cafeteria & free periods
eating alone in the cafeteria, endless queues, what’s on the menu
② Secondhand resale
on-campus resale deals, buyers who never show up
③ Club & association dues
collecting club dues in cash and transfers, keeping the ledger straight
④ Tutoring & study groups
finding tutoring gigs, matching, scheduling, people dropping out
⑤ Cooking on a student budget
splitting groceries, expiry dates, group buying
⑥ Gym & fitness
waiting for gym equipment, workout partners, tracking progress
If you pick one, pick only a topic where you can reach an actually affected person this afternoon.
20 min cutting → 10 min writing questions → 10 min actually sending them. Block B is not done until you hit send.
1
core feature
2
screens, max
3
clicks and it works
40
minutes to build
If it cannot be built in 40 minutes, it is not what you are building today. Cutting scope is skill, not surrender.
Run /plan-ceo-review (SCOPE REDUCTION) or prompt P3, then write down what got cut, here. This is the raw material for slot 4 of tomorrow’s talk.
| Feature you cut | Why you cut it |
|---|---|
| ① | My hunch |
| ② | Friends complaining |
| ③ | Answers I asked for ← today’s target (2 of them) |
| ④ | Observation |
| ⑤ | Usage logs |
④ and ⑤ are impossible in a single day. Saying “we only got as far as ③” scores higher than pretending you reached ⑤.
Ask about past behavior, not future intent.
The 2 people you contact today will almost certainly be people you know. That is not the problem. Pretending otherwise is.
Loses points: “We validated with 2 users” (both are your roommates)
Earns points: “Both are friends of mine, so there is bias. Here is how I discounted their answers because of it.”
| # | Who | Friend? | What they actually did (in the past tense) | Where it differed from my assumption |
|---|---|---|---|---|
| 1 | ||||
| 2 | ||||
| 3 |
If the last column is empty, you didn’t listen to that interview. You just went to get your own opinion confirmed.
Lunch (11:50–12:50) is when the replies come in. It is fine to watch your phone while you eat. The moment an answer lands, fill in the last column of the evidence log. If nothing comes, send to 1 more person at the start of the afternoon.
Two routes. Same destination — the 3 clicks you will show in 90 seconds tomorrow.
Check it with $review → confirm the click path → keep only the one path you will show and hide the rest
Use $design-html or prompt P5 to make one static screen + fake data. 40 minutes is plenty
“Nothing yet” is not the embarrassing route. If anything, the people who already built something suffer more — they can’t bring themselves to cut screens.
Empty
nothing there yet
Loading
still waiting
Results
working normally
Error
when it fails
No lorem ipsum. Fill it with real sentences — real content runs longer and messier than lorem, so a layout that survives lorem breaks on the real thing.
The signals
The alternative
Slop is not an aesthetics problem — it is a trust problem. The moment your screen reads as “an AI made this”, nobody hears your content.
/review CatchesWhat actually gets caught in student projects is #3 and #5. #5 is a defect humans are structurally unable to catch — it never shows up in the diff.
/review auto-fixes some findings. That list includes N+1 query fixes and added LLM output validation — both changes that can alter behavior. $qa fixes things and commits them too.
Rule: read every auto-fix commit line by line with git show. Saying tomorrow “the AI fixed this part and I didn’t check it” beats presenting without knowing.
Get caught hiding it in Q&A and that talk is over. Say it first and it becomes your honesty score.
| Step | Screen / action | The one sentence you will say |
|---|---|---|
| Start | ||
| Click 1 | ||
| Click 2 | ||
| Result |
You must be able to show it in under 90 seconds, without speaking. If it needs an explanation halfway through, that is not a path — it is an excuse. Practice it 3 times and delete any click that fails.
| Slot | Time | Content | ✍️ My script (one line each) |
|---|---|---|---|
| 1 | 0:00–0:45 | The problem + 1 quote | |
| 2 | 0:45–1:30 | How the hypothesis changed — then → now | |
| 3 | 1:30–3:00 | Demo — 3 clicks | |
| 4 | 3:00–4:00 | What we got wrong | |
| 5 | 4:00–5:00 | The next test |
Slot 4 decides what these two days were. Empty, and it is an investor pitch; filled, and it is a validation report. You get a 7-minute slot, but script for 5 minutes — the spare 2 minutes are for when the demo stutters.
Take those five out of 5 minutes and 3 minutes remain. Those 3 minutes are the real content.
Asking 2 people cannot verify a hypothesis. All you can do is attempt to falsify it.
Wrong: “We validated the user need”
Accurate: “1 of the 2 gave us a falsifying signal, so we changed the hypothesis like this”
A question that stumps you is not something to hide — it is material for slot 5. Know it in advance and Q&A stops being scary.
Presenting “this turned out to be wrong” tomorrow costs you nothing. Finding that out in one day is an achievement.
What costs you is inventing results you don’t have.
| Time | What happens | |
|---|---|---|
| 09:30 | Opening · speaking order drawn by lot · peer feedback cards handed out | |
| 09:50 | Session A — 8 students (15 min each: 7 talk + 5 Q&A + 3 changeover) | |
| 11:50 | Lunch | |
| 12:50 | Morning-patterns briefing (3 min) | — |
| 12:53 | Session B — 6 students | |
| 14:23 | Peer feedback delivered · best comments | |
| 14:40 | Closing — how to doubt your tools |
When the timer sounds at 7 minutes, you stop — even mid-sentence. Order is drawn in the morning.
| Criterion | Points | Full marks | Zero |
|---|---|---|---|
| Problem clarity | 20 | Pinned down to a single person | “Students find it inconvenient” |
| Evidence of real contact | 25 | 2 contacts + past behavior + friend ratio disclosed | 0 contacts, or intent only |
| Hypothesis updates | 20 | Says what changed | Only “it went as expected” |
| Demo fit | 20 | Serves the hypothesis check | A feature tour |
| Honesty | 15 | States the limits first | Something hidden surfaces in Q&A |
Polish and BM-theory correctness carry zero points.
Of each 5-minute Q&A, students ask at least 2 of the questions. Write a question into box ③ of your peer feedback card as well.
| ① The strongest single line | Copy it down word for word |
|---|---|
| ② The weakest link | The leap from problem → solution, or evidence → conclusion |
| ③ 1 question you want to ask | Even if you couldn’t ask it in Q&A |
Cards are collected anonymously and handed straight to the presenter. We don’t put scores on them because relationships contaminate grading.
How to use it: delete the first line (/command) and paste the rest straight into the Codex app chat. If gstack is installed and recognized, you may swap the first line for $office-hours and friends instead.
| Symptom | Cause | Fix |
|---|---|---|
Typed $ and nothing shows up | Known app issue (openai/codex #28505) | Just paste the prompt pack. Same result. Do not waste time on it |
| Can’t find the command | Called it with a slash (/) or typed the whole name by hand | Type up to $off and pick from the list. Even $ alone opens the list |
| “Skipped loading skill(s)…” | Stale skill description | cd ~/gstack && git pull && ./setup --host codex |
| Looks like it installed for Claude | Missing --host codex | Re-run the same command with --host codex |
| No choice buttons appear | Normal — Codex has none | Questions come as prose. Answer in your next message |
| Install still failing after 5 minutes | — | Give up and go to the prompt pack. The result is the same |
| Bun error | Bun not installed | Check bun --version → bun.sh |
| The AI starts writing code without asking anything | You didn’t give it the prompt | Paste P1, or use $office-hours |
| Fixed one thing, something else broke | Piled-up auto-fixes | Roll back to the last commit and go one change at a time. Committing often is the only line of defense |
| The screen looks “AI-made” | AI slop | Refill it with real content and draw the empty/error states first |
| No replies coming in | — | Send to 1 more person. Still nothing? Put “we reached out but got no reply” in the talk — that is information too |
| Resource | Notes |
|---|---|
How to Make Claude Code Your AI Engineering Teamyoutube.com/watch?v=wkv2ifxPpF8 | Y Combinator · Garry Tan himself. 30 min. The canonical one |
Harness Engineering — putting Claude Code and Codex properly to work with gstackyoutube.com/watch?v=PeRUUFHvKq0 | Bloom AI · in Korean |
github.com/garrytan/gstack | The primary source. Start with ETHOS.md — it takes 10 minutes |
| The 5-day, 130p deep-dive guide | Everything cut from these two days — TDD, deployment, security audits, and how to criticize your tools |
※ A high view count does not mean accuracy. The primary source is always the repository.