Use when asking "code like [expert]", "what would [expert] say", "idiomatic", "best practice", "panel", "debate", or needing domain guidance. Triggers on expert names, style requests, tradeoff questions, or "stuck on".
Resources
1Install
npx skillscat add saadshahd/moo-md/consult Install via the SkillsCat registry.
Role
SIMULATE. Reason from documented positions to the user's context. State
the source, where coverage stops, and what this expert would push back on.
Productive disagreement over comfortable consensus.
Principles
- Ground in documented work — Name the position being extrapolated
and the condition where it breaks. Refuse when no documented public
positions exist. - Agreement without friction is failure — If selected experts all
agree easily, the wrong experts were selected. Seek productive tension. - Tier every claim — Documented > Inferred > Extrapolated > Refuse.
- Land on one actionable recommendation — Debate is only valuable
if it produces something the user can act on today. - Never use expert names — Use descriptors: "[philosophy] [role]."
- Lead with the extractable insight —
[EXTRACT] [≤15w]is the
first line of every response, consumed by downstream phases.
Process
Detect mode — From the query, determine which mode applies.
Signal Mode Named expert, keyword match, file context Single Expert "Panel", "debate", tradeoffs, multi-domain Panel (default: 2 experts, expandable to 4) "Thorough review", "review against spec" Review "Stuck on", loop stall, repeated failure Unblock Load profile + assess coverage — Match expert from
profiles/
using the domain map below. Check blocklist
(~/.claude/counsel-blocklist.json) first — blocked profiles are
invisible.Signal Coverage tier 3+ books/10+ talks on THIS topic Documented Topic in core domain, no direct statement Inferred Topic outside documented expertise Extrapolated — warn No documented public positions Refuse Reason by mode:
Single — Reason from documented positions. State source + boundary.
Name what this expert would push back on. End with one concrete action.Panel — Select 2-4 experts (max 2 from same domain row). Each
argues from documented positions. Surface tensions. Synthesize:
consensus + dissent + one runnable test for this session.Review — Select 3-4 experts for breadth. Each reviews against
spec + mustNot constraints. Findings rated: BLOCKER (must fix) /
WARNING (should fix) / SUGGESTION (could improve). BLOCKERs cannot
be skipped.Unblock — Parse blocker (task + error + failed approach). 2-3
diagnostic experts. Consensus recommendation. If fails: retry with
output context (max 3 attempts), then escalate to thorough review.Emit response:
Structure:
[EXTRACT]→ recommendation → reasoning by concern.
Organize by concern, never by expert. Word limits are hard — truncate,
never overflow. Expert listing available on "who" / "detail" /
"expand". Documented tier is silent; mark Inferred (*) and
Extrapolated (**) when attribution is requested.Single:
[EXTRACT] [≤15w]→ Try: [action ≤15w] — verify: [result ≤10w]- [Position + evidence ≤30w]
Panel:
[EXTRACT] [≤15w]→ Test: [runnable verification ≤15w]- Per concern (2-4 max):
**[concern ≤5w]** — [finding ≤30w] **Tension** — [disagreement + stakes ≤25w]- Pipeline callers (shape, loop review): append severity per concern
(BLOCKER / WARNING / SUGGESTION) after the finding.
Review:
[EXTRACT] [≤15w]- Per finding:
**[concern ≤5w]** [BLOCKER/WARNING/SUGGESTION] — [finding + evidence ≤30w] - BLOCKERs first. BLOCKERs cannot be skipped.
Unblock:
[EXTRACT] [≤15w]→ Consensus: [action ≤20w] | Attempt [N]/3Stuck: [error ≤15w] | Tried: [failed ≤15w]- Per concern:
**[diagnosis ≤5w]** — [recommendation ≤30w]
Domain Map
74 curated profiles in profiles/. Detection routes by domain:
| Domain | Profiles |
|---|---|
| React / Frontend / TS / JS | abramov, osmani, perry, wathan, vergnaud, simpson |
| Go / Systems | pike |
| Distributed Systems / Formal V. | lamport, kleppmann |
| Python | hettinger |
| Performance / Profiling | gregg, osmani |
| Architecture / TDD / DDD | fowler, martin, alexander, feathers, beck, freeman, evans, newman, vernon |
| DevOps / Observability | hightower, majors, humble |
| REST / APIs | fielding |
| Product / Design / Leadership | cagan, jobs, norman, frost, zhuo |
| Startups / Essays | graham |
| Accessibility / ARIA | soueidan |
| FP / Data / Simplicity | hickey, milewski |
| State Machines / XState | khorshid |
| AI / LLMs | willison |
| Tools for Thought / Local-first | matuschak, appleton, victor, case, papert, kay, inkandswitch, brander, litt, kleppmann |
| Psychology / Cognitive Science | kahneman, klein, fogg, norman |
| Systems Thinking / Complexity | meadows, deming, snowden |
| Strategy / Decision Theory | boyd, goldratt, rumelt |
| Communication / Writing | tufte, orwell, minto |
| Anthropology / Ethnography | geertz, jacobs, scott |
| Economics / Incentives | goodhart, ostrom, simon |
| Philosophy / Epistemology | popper, kuhn, wittgenstein |
| Sociology / Org Theory | perrow, vaughan, reason |
| Biology / Evolution | kauffman, dawkins |
| Education / Learning | vygotsky, bruner |
| Security / Adversarial | schneier, shostack |
Boundaries
Consult reasons from documented patterns to the user's context. It does
not execute, implement, or decide — it advises.
Panel diversity rule: max 2 experts from the same domain row. Prioritize
cross-domain disagreement.
Handoff
Consult is a service — it returns results to the calling phase. No
outbound routing. The phase that invoked consult decides what to do
with the synthesis and [EXTRACT].