Socratic
Question yourself till you're left with only answers.
A curated bank of 697 questions a senior engineer asks before and during a build, split by domain. The default mode is self-interrogation, not interviewing the user. Read the codebase, apply engineering defaults, reason through the relevant questions, and ask the user only for decisions nobody but they can make.
Two modes
Mode A — Self-interrogation (default). Ask and answer the relevant questions internally, then show the resulting contract once.
Mode B — Interactive interview (opt-in). Ask the user one yes/no question at a time. Enter this mode only when the user asks to be interviewed, walked through the decisions, or questioned one at a time.
If unsure, use Mode A. Silence is not a request to be interviewed.
Mode A — Self-interrogation
1. Build the working domain set dynamically
For every build, include Requirements and Testing. Then inspect both the request and the existing project for domain signals:
| Signal in the request or project |
Domain file |
| UI, page, component, dashboard, form, frontend |
01-frontend.md |
| service, endpoint, job, queue, backend, business logic |
02-backend.md |
| database, schema, storage, persistence, migration, cache |
03-data.md |
| API, SDK, webhook, connector, integration, OAuth |
04-api.md |
| authentication, accounts, payments, secrets, external input, public exposure |
05-security.md |
| deployment, CI/CD, containers, cloud, scaling |
06-infra.md |
| production, unattended work, cron, monitoring |
08-observability.md |
| AI, LLM, agent, prompt, model, RAG, tool use |
09-ai-llm.md |
| mobile, iOS, Android, offline, PWA |
10-mobile.md |
| human-facing workflow, onboarding, errors, CLI |
11-product-ux.md |
| scale, latency, traffic, token or cloud spend |
12-cost-performance.md |
| personal or regulated data, health, finance, minors, licensing |
13-compliance.md |
| maintained, long-lived, or team-owned work |
14-team-maintenance.md |
Do not stop at the first match. A connector, for example, normally pulls in API, Security, and Testing. If answering one domain reveals another dependency, add that domain and continue until a complete pass reveals no new domains.
2. Load the smallest sufficient base question depth
Keep the user-facing behavior unchanged while controlling context use:
- Core (default): For routine, prototype, internal, or moderately scoped work, read the matching files under
questions/core/. Always include questions/core/00-requirements.md and questions/core/07-testing.md.
- Full: For production systems, external users, public APIs, authentication, money, PII, regulated data, autonomous tools, costly or irreversible actions, or an explicit deep/full/audit request, read the matching complete files directly under
questions/. Always include the complete Requirements and Testing files.
- Escalation: If a core answer exposes a serious security, reliability, compliance, scale, or operational risk, replace that core domain with its complete file before building.
Treat $socratic lite or $socratic quick as an explicit Core request. Treat $socratic deep, $socratic full, and $socratic audit as explicit Full requests. Never load all fifteen complete files unless the system genuinely spans all fifteen domains.
Questions consume context even when asked silently. Optimize for material risks resolved, not the number of questions processed.
3. Add specialized knowledge packs only when they sharpen the task
Base domain files stay primary. Packs are optional overlays, not replacements.
- Use a pack when the task clearly maps to a specialized body of tradeoffs, failure modes, or heuristics that the generic domain files do not capture well enough. First consult
packs/registry.md after selecting the base domains.
- Load
packs/<pack>/core.md after the base domain files. A pack may also provide full.md; load it only when the core pack proves insufficient for the decision at hand. Most packs ship core only.
- Prefer zero to two packs per task. Too many packs recreates the same token problem the Core/Full split was added to solve.
- Treat pack content as compact decision support: question, default answer pattern, tradeoffs, anti-patterns, escalation triggers, and verification checks.
- Select a pack by the capability it adds, not by recognising a book title. Its source material is provenance, not the routing rule.
- For pack structure or naming guidance, read
references/knowledge-pack-architecture.md.
Examples:
- Use
packs/software-design/core.md when reviewing complexity, module boundaries, interface design, or accidental generality.
- Use
packs/domain-modeling/core.md when carving a system into boundaries, naming concepts, or deciding what must stay consistent together.
- Use
packs/data-systems/core.md when reviewing durable state, consistency, queues, retries, migrations, or failure recovery.
- Use
packs/operations/core.md when the work must survive production — timeouts, retries, load shedding, rollback, or alerting.
- Use
packs/threat-modeling/core.md when mapping trust boundaries, attacker paths, abuse cases, mitigations, or security verification.
- Use
packs/ai-engineering/core.md when building an LLM product, RAG system, model evaluation, or tool-enabled workflow.
- Use
packs/agent-design/core.md when building an agent or subagent, splitting work across agents, setting tool permissions, or deciding how agent output gets verified.
- Use
packs/legacy-change/core.md when modifying code that already works, has no tests, or is being replaced incrementally.
- Use
packs/testing-design/core.md when deciding what to test, what to mock, or why a suite is brittle or untrusted.
- Use
packs/product-discovery/core.md when the value of the thing itself is unproven — before the engineering packs, not alongside them.
New packs follow the same overlay pattern. Consult packs/registry.md for pairings and for choosing between adjacent packs.
3b. Check whether a target grade is active
A grade is different from a pack: it does not add topic depth, it sets the target the whole run is aiming for and changes what "done" means. Load one when the user names a target explicitly — "make this production ready", "MVP is fine", "get this to production grade", $socratic mvp, $socratic production — or when the request states it ("this needs to survive real traffic", "just a prototype for now").
Consult grades/registry.md, load the matching grade file, and follow the domains and packs it marks mandatory in addition to whatever the dynamic scan already selected. When a grade is active, its gate — not step 5's generic sufficiency check — decides when the run stops. No grade named means no change: proceed as below.
Grades are cumulative: enterprise supersedes production supersedes mvp. Resolve the entire chain down to mvp, not only the items listed in the named grade's own file — each file states what it supersedes and does not repeat those items in different words, so there is exactly one definition of each check to satisfy, not several that could disagree.
4. Self-answer the selected material questions
Resolve each selected question in this order:
- Read first. Use the codebase, configuration, documentation, prior conversation, and repository conventions.
- Apply the engineering default. When evidence does not decide an engineering choice, take a defensible default and record consequential assumptions.
- Escalate only authority decisions. Ask the user only about business priorities, budget, vendor choice, target market, legal risk tolerance, or irreversible decisions that materially change the result.
Do this silently. The user should see the resulting decisions, not the raw question bank.
5. Run a sufficiency check and stop deliberately
Socratic is not an instruction to exhaust a questionnaire. Its purpose is to reduce material uncertainty until the agent has a solid, evidence-backed basis to act.
If a grade is active, skip this step's five conditions and use the grade's gate instead — stop when every gate item is resolved, mitigated with a stated reason, or marked not applicable, not when this section's conditions happen to be met. The rest of this step applies only when no grade was named.
After each domain or decision cluster, stop expanding the review when all of the following are true:
- The requested outcome, scope, and consequential assumptions are clear.
- Every material risk has a mitigation, a verification step, an explicit acceptance by the appropriate authority, or a clearly stated escalation.
- No unresolved contradiction changes the implementation plan.
- The next plausible question would not materially change the design, risk, cost, authority decision, or verification plan.
- The plan has a proportionate way to falsify its riskiest assumptions.
If any condition fails, add the smallest relevant domain, deeper question depth, or pack. Do not continue merely to use more questions, and do not stop merely because a token budget is low. Stop because the remaining uncertainty is immaterial to the current task.
6. Emit the output contract once
Before implementation, emit:
Domains considered: <each selected domain and why>
Self-answered highlights: <5-10 decisions that shaped the design>
Assumed (flag if wrong): <consequential defaults>
Open questions for you: <ideally 0-3 authority decisions>
Top risks: <material risks from the selected domains>
Plan: <what will be built>
Batch any genuinely blocking open questions. Do not turn the interrogation into the deliverable.
7. Build and verify
Build after blocking decisions are resolved. Apply the Verification guidance from every loaded domain and pack, including anything added during the review. Report what passed, failed, or could not be verified without external access.
Interactive mode
When the user explicitly requests an interview:
- Build the same dynamic domain set and choose Core or Full using the same rules.
- Ask one material decision at a time with a recommended default.
- On a correction, absorb it and continue. If the user says to stop or proceed, self-answer the remainder and build.
- Keep the interaction proportional: 0-2 questions for a one-off, 3-6 for a prototype, 8-15 for production, and 15-25 for money, PII, health, or regulated systems.
- Emit the same output contract before building.
Preset domain combinations
Use these as a sanity check, not a fixed router:
| Building |
Expected domains |
| CRUD web app |
00, 01, 02, 03, 05, 07 |
| Public API or SDK |
00, 02, 04, 05, 08, 12, 07 |
| Connectors or integrations |
00, 04, 05, 07, plus each connector's dependencies |
| AI agent or chatbot |
00, 09, 05, 12, 08, 11, 07 |
| RAG pipeline |
00, 09, 03, 12, 13, 07 |
| Data pipeline or ETL |
00, 03, 06, 08, 13, 07 |
| Mobile app |
00, 10, 01, 05, 11, 07 |
| Infrastructure change |
00, 06, 08, 12, 14, 07 |
| Payments feature |
00, 02, 03, 05, 13, 07 |
| One-off script |
00, 07 |
Guardrails
- Do not ask what project inspection can answer.
- Do not expose the full question bank to the user by default.
- Do not escalate engineering decisions merely to avoid responsibility.
- Do not keep interviewing after the user asks to proceed.
- Do not claim verification without evidence.
- Do not present legal conclusions; identify matters requiring counsel.
- Do not depend on vendor-specific planning modes, memory systems, tool names, or subagent APIs.
1---2name: socratic3description: This skill should be used when the user asks to "build", "design", "scaffold", "architect", or "plan" any system, feature, service, app, agent, pipeline, connector, or tool — especially when the request is short, vague, or underspecified. It should also be used when the user asks to "review this architecture", "what am I missing", "ask me the right questions", "poke holes in this", or requests a design review before implementation. The skill interrogates the design silently across the relevant engineering domains (requirements, frontend, backend, data, API, security, infra, testing, observability, AI/LLM, mobile, product, cost, compliance, maintenance), resolves what the codebase and engineering defaults can answer, and surfaces only the decisions that require the user's authority.4---5
6
7# Socratic
8
9Question yourself till you're left with only answers.
10
11A curated bank of 697 questions a senior engineer asks before and during a build, split by domain. **The default mode is self-interrogation, not interviewing the user.** Read the codebase, apply engineering defaults, reason through the relevant questions, and ask the user only for decisions nobody but they can make.
12
13## Two modes
14
15**Mode A — Self-interrogation (default).** Ask and answer the relevant questions internally, then show the resulting contract once.
16
17**Mode B — Interactive interview (opt-in).** Ask the user one yes/no question at a time. Enter this mode only when the user asks to be interviewed, walked through the decisions, or questioned one at a time.
18
19If unsure, use Mode A. Silence is not a request to be interviewed.
20
21## Mode A — Self-interrogation
22
23### 1. Build the working domain set dynamically
24
25For every build, include Requirements and Testing. Then inspect both the request and the existing project for domain signals:
26
27| Signal in the request or project | Domain file |
28|---|---|
29| UI, page, component, dashboard, form, frontend | `01-frontend.md` |
30| service, endpoint, job, queue, backend, business logic | `02-backend.md` |
31| database, schema, storage, persistence, migration, cache | `03-data.md` |
32| API, SDK, webhook, connector, integration, OAuth | `04-api.md` |
33| authentication, accounts, payments, secrets, external input, public exposure | `05-security.md` |
34| deployment, CI/CD, containers, cloud, scaling | `06-infra.md` |
35| production, unattended work, cron, monitoring | `08-observability.md` |
36| AI, LLM, agent, prompt, model, RAG, tool use | `09-ai-llm.md` |
37| mobile, iOS, Android, offline, PWA | `10-mobile.md` |
38| human-facing workflow, onboarding, errors, CLI | `11-product-ux.md` |
39| scale, latency, traffic, token or cloud spend | `12-cost-performance.md` |
40| personal or regulated data, health, finance, minors, licensing | `13-compliance.md` |
41| maintained, long-lived, or team-owned work | `14-team-maintenance.md` |
42
43Do not stop at the first match. A connector, for example, normally pulls in API, Security, and Testing. If answering one domain reveals another dependency, add that domain and continue until a complete pass reveals no new domains.
44
45### 2. Load the smallest sufficient base question depth
46
47Keep the user-facing behavior unchanged while controlling context use:
48
49- **Core (default):** For routine, prototype, internal, or moderately scoped work, read the matching files under `questions/core/`. Always include `questions/core/00-requirements.md` and `questions/core/07-testing.md`.
50- **Full:** For production systems, external users, public APIs, authentication, money, PII, regulated data, autonomous tools, costly or irreversible actions, or an explicit deep/full/audit request, read the matching complete files directly under `questions/`. Always include the complete Requirements and Testing files.
51- **Escalation:** If a core answer exposes a serious security, reliability, compliance, scale, or operational risk, replace that core domain with its complete file before building.
52
53Treat `$socratic lite` or `$socratic quick` as an explicit Core request. Treat `$socratic deep`, `$socratic full`, and `$socratic audit` as explicit Full requests. Never load all fifteen complete files unless the system genuinely spans all fifteen domains.
54
55Questions consume context even when asked silently. Optimize for material risks resolved, not the number of questions processed.
56
57### 3. Add specialized knowledge packs only when they sharpen the task
58
59Base domain files stay primary. Packs are optional overlays, not replacements.
60
61- Use a pack when the task clearly maps to a specialized body of tradeoffs, failure modes, or heuristics that the generic domain files do not capture well enough. First consult `packs/registry.md` after selecting the base domains.
62- Load `packs/<pack>/core.md` after the base domain files. A pack may also provide `full.md`; load it only when the core pack proves insufficient for the decision at hand. Most packs ship core only.
63- Prefer zero to two packs per task. Too many packs recreates the same token problem the Core/Full split was added to solve.
64- Treat pack content as compact decision support: question, default answer pattern, tradeoffs, anti-patterns, escalation triggers, and verification checks.
65- Select a pack by the capability it adds, not by recognising a book title. Its source material is provenance, not the routing rule.
66- For pack structure or naming guidance, read `references/knowledge-pack-architecture.md`.
67
68Examples:
69
70- Use `packs/software-design/core.md` when reviewing complexity, module boundaries, interface design, or accidental generality.
71- Use `packs/domain-modeling/core.md` when carving a system into boundaries, naming concepts, or deciding what must stay consistent together.
72- Use `packs/data-systems/core.md` when reviewing durable state, consistency, queues, retries, migrations, or failure recovery.
73- Use `packs/operations/core.md` when the work must survive production — timeouts, retries, load shedding, rollback, or alerting.
74- Use `packs/threat-modeling/core.md` when mapping trust boundaries, attacker paths, abuse cases, mitigations, or security verification.
75- Use `packs/ai-engineering/core.md` when building an LLM product, RAG system, model evaluation, or tool-enabled workflow.
76- Use `packs/agent-design/core.md` when building an agent or subagent, splitting work across agents, setting tool permissions, or deciding how agent output gets verified.
77- Use `packs/legacy-change/core.md` when modifying code that already works, has no tests, or is being replaced incrementally.
78- Use `packs/testing-design/core.md` when deciding what to test, what to mock, or why a suite is brittle or untrusted.
79- Use `packs/product-discovery/core.md` when the value of the thing itself is unproven — before the engineering packs, not alongside them.
80
81New packs follow the same overlay pattern. Consult `packs/registry.md` for pairings and for choosing between adjacent packs.
82
83### 3b. Check whether a target grade is active
84
85A grade is different from a pack: it does not add topic depth, it sets the target the whole run is aiming for and changes what "done" means. Load one when the user names a target explicitly — "make this production ready", "MVP is fine", "get this to production grade", `$socratic mvp`, `$socratic production` — or when the request states it ("this needs to survive real traffic", "just a prototype for now").
86
87Consult `grades/registry.md`, load the matching grade file, and follow the domains and packs it marks mandatory in addition to whatever the dynamic scan already selected. When a grade is active, its gate — not step 5's generic sufficiency check — decides when the run stops. No grade named means no change: proceed as below.
88
89Grades are cumulative: `enterprise` supersedes `production` supersedes `mvp`. Resolve the entire chain down to `mvp`, not only the items listed in the named grade's own file — each file states what it supersedes and does not repeat those items in different words, so there is exactly one definition of each check to satisfy, not several that could disagree.
90
91### 4. Self-answer the selected material questions
92
93Resolve each selected question in this order:
94
951. **Read first.** Use the codebase, configuration, documentation, prior conversation, and repository conventions.
962. **Apply the engineering default.** When evidence does not decide an engineering choice, take a defensible default and record consequential assumptions.
973. **Escalate only authority decisions.** Ask the user only about business priorities, budget, vendor choice, target market, legal risk tolerance, or irreversible decisions that materially change the result.
98
99Do this silently. The user should see the resulting decisions, not the raw question bank.
100
101### 5. Run a sufficiency check and stop deliberately
102
103Socratic is not an instruction to exhaust a questionnaire. Its purpose is to reduce material uncertainty until the agent has a solid, evidence-backed basis to act.
104
105**If a grade is active, skip this step's five conditions and use the grade's gate instead** — stop when every gate item is resolved, mitigated with a stated reason, or marked not applicable, not when this section's conditions happen to be met. The rest of this step applies only when no grade was named.
106
107After each domain or decision cluster, stop expanding the review when all of the following are true:
108
1091. The requested outcome, scope, and consequential assumptions are clear.
1102. Every material risk has a mitigation, a verification step, an explicit acceptance by the appropriate authority, or a clearly stated escalation.
1113. No unresolved contradiction changes the implementation plan.
1124. The next plausible question would not materially change the design, risk, cost, authority decision, or verification plan.
1135. The plan has a proportionate way to falsify its riskiest assumptions.
114
115If any condition fails, add the smallest relevant domain, deeper question depth, or pack. Do not continue merely to use more questions, and do not stop merely because a token budget is low. Stop because the remaining uncertainty is immaterial to the current task.
116
117### 6. Emit the output contract once
118
119Before implementation, emit:
120
121```text
122Domains considered: <each selected domain and why>
123Self-answered highlights: <5-10 decisions that shaped the design>
124Assumed (flag if wrong): <consequential defaults>
125Open questions for you: <ideally 0-3 authority decisions>
126Top risks: <material risks from the selected domains>
127Plan: <what will be built>
128```
129
130Batch any genuinely blocking open questions. Do not turn the interrogation into the deliverable.
131
132### 7. Build and verify
133
134Build after blocking decisions are resolved. Apply the Verification guidance from every loaded domain and pack, including anything added during the review. Report what passed, failed, or could not be verified without external access.
135
136## Interactive mode
137
138When the user explicitly requests an interview:
139
1401. Build the same dynamic domain set and choose Core or Full using the same rules.
1412. Ask one material decision at a time with a recommended default.
1423. On a correction, absorb it and continue. If the user says to stop or proceed, self-answer the remainder and build.
1434. Keep the interaction proportional: 0-2 questions for a one-off, 3-6 for a prototype, 8-15 for production, and 15-25 for money, PII, health, or regulated systems.
1445. Emit the same output contract before building.
145
146## Preset domain combinations
147
148Use these as a sanity check, not a fixed router:
149
150| Building | Expected domains |
151|---|---|
152| CRUD web app | 00, 01, 02, 03, 05, 07 |
153| Public API or SDK | 00, 02, 04, 05, 08, 12, 07 |
154| Connectors or integrations | 00, 04, 05, 07, plus each connector's dependencies |
155| AI agent or chatbot | 00, 09, 05, 12, 08, 11, 07 |
156| RAG pipeline | 00, 09, 03, 12, 13, 07 |
157| Data pipeline or ETL | 00, 03, 06, 08, 13, 07 |
158| Mobile app | 00, 10, 01, 05, 11, 07 |
159| Infrastructure change | 00, 06, 08, 12, 14, 07 |
160| Payments feature | 00, 02, 03, 05, 13, 07 |
161| One-off script | 00, 07 |
162
163## Guardrails
164
165- Do not ask what project inspection can answer.
166- Do not expose the full question bank to the user by default.
167- Do not escalate engineering decisions merely to avoid responsibility.
168- Do not keep interviewing after the user asks to proceed.
169- Do not claim verification without evidence.
170- Do not present legal conclusions; identify matters requiring counsel.
171- Do not depend on vendor-specific planning modes, memory systems, tool names, or subagent APIs.