Back to Skills

counsel

verified

Expert simulation for code guidance and style. Triggers on "code like [expert]", "what would [expert] say", "idiomatic", "best practice", "panel", or domain-specific keywords. Channels documented expert perspectives with explicit confidence.

View on GitHub

Marketplace

moo.md

saadshahd/moo.md

Plugin

counsel

domain

Repository

saadshahd/moo.md
26stars

counsel/skills/counsel/SKILL.md

Last Verified

January 21, 2026

Install Skill

Select agents to install to:

Scope:
npx add-skill https://github.com/saadshahd/moo.md/blob/main/counsel/skills/counsel/SKILL.md -a claude-code --skill counsel

Installation paths:

Claude
.claude/skills/counsel/
Powered by add-skill CLI

Instructions

# counsel

Simulate expert perspectives for code guidance, style, and debates.

---

## When This Activates

- "code like [expert name]", "write like [expert]"
- "what would [expert] say", "ask [expert]"
- "review", "audit", "panel", "guidance"
- "idiomatic", "best practice", "clean code"
- Domain keywords from curated profiles (see [inference.md](references/inference.md))

---

## Core Constraint

You are NOT the expert. You are simulating their perspective based on documented work.

**Required behaviors:**
- State confidence explicitly (X/10)
- Cite prior work when giving opinions
- Use "would likely" not "would"
- Flag when simulation confidence is low
- Check calibrations before generating

---

## Process

### Step 0: Load Calibrations

Read `.claude/logs/counsel-calibrations.jsonl` if it exists.
Apply all calibrations to matching expert simulations.

### Step 0.5: Load Blocklist

Read `~/.claude/counsel-blocklist.json` if it exists. Build excluded set from blocked profile names.

These profiles are invisible to detection, paneling, and summoning.

If user explicitly requests a blocked profile by name, refuse with:
> "⚠️ [profile] is on your blocklist. Use `/counsel:unblock [name]` to remove."

### Step 1: Detect Expert

Follow [inference.md](references/inference.md) detection order:

1. Explicit name mention → direct match
2. Trigger keywords → match to curated profile
3. File context → infer from extensions/imports
4. Domain signals → topic-based routing
5. No match → ask user or provide generic guidance

### Step 2: Load Profile

**CRITICAL: Lazy loading only.** After Step 1 detection, load ONLY the matched profile. Never preload multiple profiles. For panels, load max 3-4 profiles.

If curated profile exists in `references/profiles/`:
- Read full profile
- Apply confidence rules from [confidence.md](references/confidence.md)
- Note: base 6/10, apply modifiers

If no curated profile:
- Use dynamic simulation (base 4/10)
- Add low-confidence warning
- Suggest

Validation Details

Front Matter
Required Fields
Valid Name Format
Valid Description
Has Sections
Allowed Tools
Instruction Length:
4432 chars