# Expert Opinion

> Use when you want multi-expert parallel review of any artifact — code, documents, architecture plans, business proposals, agentic skills, or any URL. Detects your environment, discloses what it found, asks what to add, then proposes expert perspectives specific to the submitted artifact. Gates on confirmation. Runs each expert in a parallel subagent with streaming progress markers. Synthesizes findings into a prioritized audit document. Runs adversarial verification on critical/major findings. Supports follow-up conversation and remembers past audits for diff-aware re-audits. For skill artifacts (directories containing SKILL.md), uses a specialized skill-audit mode with structural pre-validation, maturity scorecard, and phased remediation plan.

- Skill: `baagad-ai/expert-opinion` (Agent Skill, multi-file: 8 files)
- Install (CLI): `npx skillmds@latest add baagad-ai/expert-opinion`
- Raw SKILL.md: https://api.skillmd.com/api/skills/baagad-ai/expert-opinion/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Security
- Author: baagad-ai (https://skillmd.com/u/baagad-ai)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/baagad-ai/expert-opinion

---


<essential_principles>
  <parallel_architecture>
    Expert research runs in parallel subagents — one subagent per confirmed role. Never
    run expert reviews sequentially. Parallel execution is the core performance guarantee
    of this skill. Do not collapse experts into a single pass.
  </parallel_architecture>

  <depth_bar>
    Every finding must be grounded in evidence — a direct quote, a file:line reference,
    or a concrete observation from the artifact. Surface-level observations without
    evidence are not acceptable. The depth bar is: would a senior practitioner in this
    domain consider this finding actionable and specific?
  </depth_bar>

  <evidence_enforcement>
    The orchestrator MUST reject expert reports where findings lack verifiable artifact
    references. A finding's evidence field must contain at least one of: an exact quote
    from the artifact, a file:line reference, or a specific structural observation.
    Paraphrased descriptions do not qualify. Reports with empty or paraphrase-only
    evidence are recorded in missing_sections with the annotation "<findings:evidence>"
    and the synthesis must flag them as lower-confidence in per_role_highlights.
  </evidence_enforcement>

  <security_first>
    Input sanitization and output redaction run before any subagent dispatch.
    Credential patterns in artifact content are replaced with [REDACTED: {type}]
    placeholders before the content reaches subagent task strings. Text-type inputs
    use only the first ~500 tokens for research query generation to prevent
    pre-boundary injection. The skill/platform boundary is respected: this skill does
    not reimplement RBAC, telemetry, MCP hosting, or session persistence that the host
    platform provides.
  </security_first>

  <confirmation_gate>
    The user MUST confirm the expert role list AND the adaptive plan before any research
    begins. This is not optional. Present the proposal, collect confirmation via
    ask_user_questions, and proceed only on "Confirm all". Do not skip the gate even if
    the roles seem obvious.
  </confirmation_gate>

  <no_web_search_in_intake>
    Role identification is pure in-context LLM inference from the artifact content.
    No web searches during intake role proposal. fetch_page is permitted only to read
    a submitted URL (the artifact itself) — never for supplementary research or role
    selection. Web research happens during the research phase, using pre-approved
    queries generated at intake.
  </no_web_search_in_intake>

  <environment_adaptive>
    The skill operates multi-platform (Claude Code, Cursor, Gemini CLI, OpenAI Codex,
    local). At intake, it DETECTS what models / API keys / MCPs are available using
    static checks (no API pings), DISCLOSES findings to the user dialogically, and ASKS
    what the user wants to add or change BEFORE proposing any plan. Capability gaps
    (e.g., no web search) are SURFACED with options (enable / proceed-without / abort),
    never silently degraded. The skill NEVER assumes a specific model family.
  </environment_adaptive>

  <knowledge_repo_freshness>
    The skill maintains a refreshable knowledge repo at references/knowledge-repo/
    (current model pricing, MCP catalog, OWASP baselines, skill spec, platform patterns).
    On every invocation, it checks meta.json for staleness. Files older than the
    threshold (default 14 days) trigger a freshness warning at intake. The user can
    refresh, proceed with stale data (flagged in output), or abort. The skill NEVER
    relies on training data for facts that change monthly.
  </knowledge_repo_freshness>

  <unified_pipeline_with_modes>
    One intake → one research → one synthesis → one verify → optional conversation.
    The pipeline is unified across all artifact types. A `mode` field (default "general",
    alternative "skill-audit") drives conditional behavior: role taxonomy source,
    pre-validation checks, output sections. Mode-specific logic lives ONLY in
    references/modes.md and named conditional blocks in workflow files. Never create
    parallel pipelines for new artifact types — add a mode instead.
  </unified_pipeline_with_modes>

  <skill_audit_specialization>
    When the artifact is a skill directory (contains SKILL.md), the unified pipeline
    runs in mode=skill-audit. This adds: structural pre-validation (6 checks per
    references/modes.md), specialized role taxonomy (references/skill-audit-roles.md),
    and output sections (<structural_health>, <maturity_scorecard>,
    <platform_dependencies>). Role selection uses the heuristics in
    references/skill-audit-roles.md, not general domain inference.
  </skill_audit_specialization>

  <streaming_ux>
    During parallel research, emit a per-expert completion marker as each subagent
    returns. Maintain a visible <per_role_highlights_preview> that grows as experts
    complete. Offer cancellation windows at each expert boundary. The user must never
    wait in a silent hole for 2-5 minutes wondering if the skill is working.
  </streaming_ux>

  <adversarial_verification>
    After synthesis template fill, run workflows/verify.md. For each critical + major
    finding (+ 10-20% sample of minor), a grounded verifier re-checks the finding
    against the artifact. Verifiers are NOT intrinsic self-critics — they must quote
    specific evidence or cite file:line. Verifier model is COMPOSED at runtime from
    environment + severity, with mandatory HITL gate showing the proposed mapping.
    Disputed findings are down-ranked one tier and tagged [DISPUTED]. Cost cap: 30%
    of research cost. If verification is disabled or unavailable, disclose in synthesis.
  </adversarial_verification>

  <conversation_and_memory>
    After synthesis delivery, enter conversation mode (workflows/conversation.md).
    User can ask follow-ups, draft fixes, challenge recommendations, compare findings.
    Conversation is bounded to 6 turns; older summarized. On exit, write a MemoryEntry
    to .expert-opinion/audits/{fingerprint}.json. Future audits of the same artifact
    offer diff comparison. Memory contains METADATA only — never artifact content.
  </conversation_and_memory>

  <synthesis_is_not_concatenation>
    The synthesis phase MUST perform a full pre-synthesis analysis pass (convergence scan,
    contradiction scan, severity aggregation with knowledge-repo calibration, open
    questions merge) before filling any template section. Filling template sections while
    simultaneously scanning produces incoherent output. Complete analysis first, hold
    results in working state, then do a single-pass template fill.
  </synthesis_is_not_concatenation>

  <platform_boundary>
    The skill distinguishes between skill-level gaps (the skill's own code/docs) and
    platform-level capabilities (provided by the host platform like Claude Code or GSD).
    Enterprise readiness assessments that penalize the skill for missing platform
    features must include a platform-adjustment note. Audit templates and scorecards
    include a "Platform Dependencies" dimension where appropriate.
  </platform_boundary>

  <methodological_disclosure>
    When the skill is run in self-audit mode (auditing itself), the synthesis document
    MUST include a disclosure note: "This audit was produced by the skill running in
    self-audit mode — the same patterns being evaluated were used to produce the
    evaluation." This transparency strengthens credibility and acknowledges the
    epistemic loop.
  </methodological_disclosure>
</essential_principles>

<intake>
  What would you like expert review of?

  **For general artifacts** (code, documents, architecture, proposals, URLs):
  Provide a file path, directory path, URL, or paste content directly.

  **For skill audits** (SKILL.md or skill directory):
  Provide the skill directory path (e.g. `./my-skill/` or `~/.claude/skills/my-skill/`)
  or the skill name (e.g. `expert-opinion`). The unified pipeline detects skill-audit
  mode automatically and runs structural pre-validation, specialized expert panel,
  maturity scorecard (1-5 across 6 dimensions including Platform Dependencies), and a
  phased remediation plan.
</intake>

<routing_decision>
  v2.0 uses a UNIFIED PIPELINE with mode flags. All inputs route to workflows/intake.md.
  Mode (general | skill-audit) is determined INSIDE intake.md Phase 2, not here.

  **Pre-routing check (optional, for skill-audit hints):**
  If the input is a directory path OR a bare word that looks like a skill name, intake.md
  Phase 2 will check for SKILL.md presence (in `./`, `~/.claude/skills/`, `~/.agents/skills/`)
  and set mode accordingly. No need to branch here.

  **Route (always):**
  → workflows/intake.md (Phase 1 detects input type; Phase 1.5 checks knowledge freshness;
    Phase 1.6 detects environment; Phase 1.7 dialogic disclosure; Phase 2 determines mode)

  **Special routes (user-initiated):**
  - User says "refresh knowledge" / "refresh the knowledge repo" → workflows/refresh-knowledge.md
  - User says "show past audits" / "audit history" → reads .expert-opinion/audits/index.json
  - User says "diff against last audit" → triggers diff-aware mode in intake.md Phase 1

  **Ambiguity:** If a path could be a skill directory or a general codebase, intake.md
  Phase 2 asks: "Is this a skill directory or a general codebase?" Then sets mode based
  on the answer.
</routing_decision>

