Here is a full cycle on a real task: adding dark mode to a site. This is what working with fstack actually looks like.
You start at the front door:
You /fstack I want to add dark mode to my site
Agent This is a new feature with no plan yet, so I’ll start with /align to make sure I understand what you want.
The agent reads the relevant parts of the codebase, then asks its questions. All of them at once, five at most:
Agent Three questions before I start: 1) Should dark mode follow the OS setting or a manual toggle? 2) Does it need to persist across visits? 3) Any pages excluded?
You Manual toggle in the header. Yes, persist it. Applies everywhere.
Agent Summary: manual toggle in the header, persisted in localStorage, applies everywhere. Main constraint: no flash of wrong theme on load. Success: toggle works and survives refresh. Confirm?
You confirm. The agent stops — /align never starts planning on its own. You invoke /plan and it writes a plan file:
# PLAN.md
## What we're doing
Add a dark mode toggle to the site header. The preference
persists in localStorage and applies on every page without
a flash of the wrong theme on load.
## Steps
1. Add a blocking inline script that reads the stored theme
and sets a class on <html> before first paint.
2. Add the toggle button to the header.
3. Wire the toggle to switch the class and save the choice.
4. Add dark values for the existing CSS custom properties.
## What we're NOT doing
- No theme customization beyond light/dark
- No per-page theme overrides
- No settings page — just the header toggle
## How we'll know it works
- Toggle the switch, refresh, theme persists.
- Hard-reload on a dark-mode profile: no light flash.
Notice the “What we’re NOT doing” section. It is mandatory and can never be empty. Naming the tempting extras is how they stay out of the diff.
You approve the plan and say build. The agent takes one step at a time, and pauses when a step involves a real choice:
Agent Step 2 done: added the toggle component to the header and verified it renders. Step 3 needs a choice: store the preference in localStorage or a cookie? localStorage is simpler and this doesn’t need server-side rendering of the theme. Recommend localStorage — ok?
When all steps are done, /check reviews the work. Three questions, with evidence, and a one-line verdict:
Agent Does it work? Ran the test suite — 42 passed, 0 failed. Loaded the page, toggled dark mode, refreshed — theme persisted.
Does it match the plan? All 4 steps done. Nothing extra built. Blast radius: header component and global CSS — both look fine.
Is it simple? The ThemeProvider wrapper has one caller. Consider /simplify to drop it.
Ready to ship
That simplicity flag is worth a detour. You run /simplify, it proposes deletions, you approve two of them. Then /ship runs the tests, shows you a one-paragraph summary, and — after you confirm — commits, pushes, and opens the PR.
One last thing. The theme-flash fix was non-obvious, so you run /learn:
## 2026-07-11 — Theme flash on load
The theme must be set in a blocking inline script, not in React.
Anything set after hydration flashes the wrong theme.
Three lines in LEARNED.md. The next session starts smarter.