Skip to content

Commit 18220c1

Browse files
sanskarbasnetclaude
andcommitted
feat: /office-hours --deep mode for design-options brainstorm
The wedge-mode /office-hours optimizes for the smallest version that ships tomorrow. That's the wrong muscle when the user has already decided to build a feature and wants the BEST shape it can take given the existing codebase. --deep adds a second mode to /office-hours that: - Shares Steps 1-3 (codebase scan + brain pull) with wedge mode - Generates 2-3 concretely contrasted design shapes grounded in the scan - Produces a comparison table (LoC, reversibility, fits-existing-patterns) - Forces a ship-next-week vs best-version split as the anti-fantasy guardrail - Optionally writes docs/designs/<slug>.md (only on explicit user confirm) /spec is wired to read docs/designs/<slug>.md when present and treat the picked design as decided — spec implements it, spec doesn't re-debate it. Slot in the chain: /office-hours -> "should we build this? smallest wedge?" /office-hours --deep -> "we're building it. best shape for this codebase?" /spec -> "lock the contract" /pursue -> "build against the spec" Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent e2b434f commit 18220c1

2 files changed

Lines changed: 154 additions & 16 deletions

File tree

office-hours/SKILL.md

Lines changed: 118 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,19 @@ preamble-tier: 4
44
version: 1.0.0
55
description: |
66
YC-partner brainstorming on a NEW feature/area, with the codebase already
7-
loaded into your context. Scans relevant files, pulls related decisions,
8-
then runs six forcing questions before any code is written. The brownfield
9-
/office-hours — works on existing codebases, not just greenfield. (fstack)
7+
loaded into your context. Two modes:
8+
• Default (wedge mode) — six forcing questions, recommend the smallest
9+
version that ships tomorrow. For "should we even build this?"
10+
• --deep — generate 2-3 design shapes for an already-decided feature,
11+
argue tradeoffs, force a maximalist-vs-pragmatic split. For "given
12+
we're building it, what's the best version that fits this codebase?"
13+
Both modes scan relevant files and pull related decisions before
14+
speaking. The brownfield /office-hours — works on existing codebases,
15+
not just greenfield. (fstack)
1016
allowed-tools:
1117
- Bash
1218
- Read
19+
- Write
1320
- Grep
1421
- Glob
1522
- AskUserQuestion
@@ -19,6 +26,9 @@ triggers:
1926
- brainstorm a new feature
2027
- help me think through
2128
- i want to add
29+
- design options for
30+
- what's the best version of
31+
- deep brainstorm
2232
---
2333

2434
## Persona
@@ -34,10 +44,25 @@ codebase**. You know what exists. You don't propose duplicates. You propose
3444

3545
## Procedure
3646

37-
### 1. Capture topic
38-
The user runs `/office-hours <topic>`. Topic might be vague ("add OAuth")
39-
or specific ("add OAuth to the contractor settings page using Google +
40-
GitHub providers"). Either way, parse the topic.
47+
### 1. Capture topic and mode
48+
49+
The user runs one of:
50+
51+
```
52+
/office-hours <topic> # wedge mode (default)
53+
/office-hours --deep <topic> # deep mode — design-options
54+
```
55+
56+
Parse the topic. Detect `--deep` (anywhere in the args) and set the mode.
57+
Topic might be vague ("add OAuth") or specific ("add OAuth to the
58+
contractor settings page using Google + GitHub providers"). Either way,
59+
remember the topic and the mode — Steps 2-3 are identical for both modes;
60+
Steps 4-5 branch.
61+
62+
**When to pick which mode** (if the user looks confused):
63+
- Wedge mode = "Should we build this? What's the smallest version?"
64+
- Deep mode = "We've decided to build it. What's the BEST shape it could
65+
take given our codebase?"
4166

4267
### 2. Codebase scan (do this BEFORE asking questions)
4368

@@ -68,12 +93,14 @@ fstack-brain sync # other agents may already be doing this
6893
If another agent has an active intent on this exact topic, STOP and tell
6994
the user — propose coordination instead of brainstorming a duplicate.
7095

71-
### 4. Six forcing questions
96+
### 4. Mode-specific brainstorm
97+
98+
Branch on the mode set in Step 1.
7299

73-
Now run the questions. Each question MUST reference something concrete from
74-
the codebase scan or from a past decision. Generic questions are not allowed.
100+
#### 4a. Wedge mode (default) — six forcing questions
75101

76-
The six questions, with examples of how to make them concrete:
102+
Each question MUST reference something concrete from the codebase scan or
103+
from a past decision. Generic questions are not allowed.
77104

78105
1. **Who is this for, exactly?** Be brutal. Not "users" — *which* users.
79106
2. **Why this and not extending what exists?** Cite the actual existing
@@ -89,11 +116,42 @@ The six questions, with examples of how to make them concrete:
89116
6. **What's the narrowest wedge that ships tomorrow?** Quantify in lines
90117
of code if possible. ~30 lines? 1 file change? 2 hours?
91118

92-
### 5. Recommendation
119+
#### 4b. Deep mode (`--deep`) — design-options generation
93120

94-
End with one explicit RECOMMENDATION. Not a hedge. A choice.
121+
Skip the wedge questions. The user has already decided to build this.
122+
Your job is to surface 2-3 *concretely contrasted* design shapes and
123+
argue which one belongs in this codebase.
124+
125+
Generate **2-3 design shapes** (not more — three is the cap). Each shape
126+
must be grounded in the scan, not in greenfield fantasy. For each design,
127+
you MUST produce:
128+
129+
- **Name + one-line gist** (e.g. "Extend `useSession()` with a provider
130+
registry — no new route")
131+
- **Concrete touch list** — files/abstractions from the scan it would
132+
modify. Cite paths. No hand-waving.
133+
- **What it gets right** that the other designs don't (one sentence)
134+
- **What it costs** — rough lines-of-code, irreversibility, blast radius
135+
- **Future-cost** — "if we pick this, we can't easily do X later"
136+
137+
After the three designs, produce a **comparison table**:
138+
139+
| Design | LoC | Reversibility | Fits existing patterns | Best for |
140+
|---|---|---|---|---|
141+
| A | ~50 | high | yes | shipping fast, low blast |
142+
| B | ~200 | medium | partial | balanced |
143+
| C | ~600 | low | adds new pattern | the 10-star path |
144+
145+
Then a **single recommendation** — pick one design, name it, one
146+
sentence on why.
147+
148+
### 5. Closing — recommendation + handoff
95149

96-
Format:
150+
Branch on the mode again.
151+
152+
#### 5a. Wedge mode
153+
154+
End with one explicit RECOMMENDATION. Not a hedge. A choice.
97155

98156
```
99157
RECOMMENDATION: <one short sentence>.
@@ -103,6 +161,38 @@ Then surface what fstack should do next:
103161
• Or /decide <key tradeoff that just got made>?
104162
```
105163

164+
#### 5b. Deep mode
165+
166+
After the comparison table and recommendation, force a
167+
**maximalist-vs-pragmatic split** — the guardrail that keeps deep mode
168+
grounded:
169+
170+
```
171+
SHIP-NEXT-WEEK VERSION: <one sentence — the smallest cut of the
172+
recommended design that delivers value>
173+
BEST-VERSION VERSION: <one sentence — the recommended design at full
174+
scope, including the 10-star polish>
175+
```
176+
177+
Then ask the user:
178+
179+
> Which one should /spec lock in — ship-next-week or best-version?
180+
> Or: want me to write this exploration to `docs/designs/<slug>.md`
181+
> first? (I won't write a doc unless you say yes.)
182+
183+
**Do NOT write the doc unless the user explicitly confirms.** Most deep
184+
sessions end with "let me think about this" — writing a doc every time
185+
creates clutter. Only write on explicit go-ahead.
186+
187+
If the user says "save it" / "write the doc" / "yes", write to
188+
`docs/designs/<slug>.md` with sections: Context, Designs Considered (the
189+
three you generated), Comparison, Recommendation, Ship-next-week vs
190+
Best-version, Open Questions. Slug from the topic (kebab-case).
191+
192+
After deep mode closes, the natural next step is `/spec <topic>`
193+
which will read this exploration (if saved) plus the active intent and
194+
lock the contract.
195+
106196
## What this skill must NOT do
107197

108198
- Must not ask the user to "describe their codebase" or "scan their repo." You
@@ -111,8 +201,20 @@ Then surface what fstack should do next:
111201
you explicitly call out the duplication and explain the new value.
112202
- Must not give six generic questions that could apply to any startup. Every
113203
question references the scan or a past decision.
204+
- **Deep mode only:** must not generate more than 3 designs. Two or three
205+
contrasted designs beat five mushy ones. If you can't tell two designs
206+
apart cleanly, collapse them into one.
207+
- **Deep mode only:** must not write `docs/designs/<slug>.md` without
208+
explicit user confirmation. Default is no doc.
209+
- **Deep mode only:** must not skip the ship-next-week vs best-version
210+
split. That split is the anti-fantasy guardrail.
114211

115212
## Output
116213

117-
A conversational response, not a structured form. Keep it tight — under 600
118-
words. The user is here to think, not to read a treatise.
214+
A conversational response, not a structured form.
215+
216+
- **Wedge mode:** keep it tight — under 600 words. The user is here to
217+
think, not to read a treatise.
218+
- **Deep mode:** under 800 words. The extra budget covers the comparison
219+
table and three designs, not extra prose. Anything longer than 800
220+
belongs in a saved design doc, not the response.

spec/SKILL.md

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,46 @@ fstack-brain decide search --query "<keywords from intent title>"
5656
If no active intent → propose the user run `/office-hours` or `/intent`
5757
first. Do NOT spec a feature with no intent — the intent IS the seed.
5858

59+
#### 1a. Look for a deep-mode design doc
60+
61+
`/office-hours --deep` may have written a design exploration to
62+
`docs/designs/<slug>.md` before /spec runs. Check for it:
63+
64+
```bash
65+
ls docs/designs/ 2>/dev/null
66+
```
67+
68+
If a design doc exists whose slug matches the intent title (kebab-case
69+
fuzzy match), READ IT in full. The doc contains:
70+
- The 2-3 designs that were considered
71+
- The recommended design
72+
- A ship-next-week vs best-version split
73+
- Open questions
74+
75+
When this doc is present, the spec's job changes:
76+
- The spec implements the design the user picked (ship-next-week or
77+
best-version — ask if not stated). It is NOT a re-debate.
78+
- The spec's "Goal" section cites the design doc by path.
79+
- The spec's "Out of scope" section quotes the rejected designs and the
80+
designs-not-picked column from the deep-mode comparison table — so
81+
the user (and /pursue) can see what was already considered and
82+
consciously deferred.
83+
- The spec's "Open Questions" can pull directly from the design doc's
84+
open-questions section.
85+
86+
If no design doc exists, proceed normally — /spec works fine without one.
87+
5988
### Step 2 — codebase scan (boil-the-lake)
6089

6190
Heuristic, capped at ~10 files. Same pattern as /office-hours:
6291
- Keyword grep on the intent title
6392
- Read top hits' structure
6493
- Note existing abstractions you'd extend vs duplicate
6594

95+
If a deep-mode design doc was loaded in 1a, this scan can be lighter —
96+
the design doc already cited the relevant abstractions. Use the scan to
97+
verify, not to re-discover.
98+
6699
### Step 3 — draft the spec sections
67100

68101
Produce a markdown doc with these 7 sections, in this order:
@@ -156,6 +189,9 @@ Next step:
156189
Empty matrix = /pursue has no completion signal.
157190
- Must NOT duplicate /office-hours. /office-hours is brainstorming (should
158191
we?). /spec is execution contract (how exactly).
192+
- Must NOT re-debate a design that `/office-hours --deep` already settled.
193+
If `docs/designs/<slug>.md` exists for this intent, treat the picked
194+
design as decided. Spec implements it; spec doesn't second-guess it.
159195
- Must NOT ask more than 3-4 confirmation questions. If you need more,
160196
the upstream brainstorm wasn't deep enough — say so and propose
161197
/office-hours instead of belaboring spec.

0 commit comments

Comments
 (0)