Validates practitioner credentials and license status against the NPI registry. Cross-references specialties, credentials, and practice addresses against official records. Returns Verified / Partially Verified / Unverified / Flagged per practitioner with mismatch details and source URLs. Triggers: "verify these doctors", "check provider credentials", "validate licenses", "verify NPI numbers", "cross-check credentials against NPI", "compliance audit on providers", "are these practitioners still licensed", "validate my provider list". Accepts CSV, Google Sheet URL, or pasted data. Do NOT use for extracting providers from practice URLs — use healthcare-providers-extract instead. Do NOT use for filling data gaps — use healthcare-providers-enrich instead. Do NOT use for discovering practices — use market-finder or local-places instead. Do NOT use for general extraction — use nimble-web-expert instead.
Validate practitioner credentials against the NPI registry and authoritative sources, powered by Nimble's web data APIs.
User request: $ARGUMENTS
Before running any commands, read references/nimble-playbook.md for Claude Code
constraints (no shell state, no &/wait, sub-agent permissions, communication style).
Sibling handoff check: Before running full preflight, check if
healthcare-providers-extract or healthcare-providers-enrich ran earlier in this
session by following the Sibling Handoff pattern from references/nimble-playbook.md.
If same-day output exists, skip CLI check and profile load, and reuse WSA Layer 1/3
inventory. Only re-run Layer 2 if the verification focus changed.
Otherwise, run full preflight from references/nimble-playbook.md (5 simultaneous
Bash calls: date calc, today, CLI check, profile load, index.md load).
Also simultaneously — run WSA discovery and setup:
mkdir -p ~/.nimble/memory/{reports,healthcare-providers-verify/checkpoints}ls ~/.nimble/memory/healthcare-providers-verify/checkpoints/ 2>/dev/nullreferences/wsa-reference.md. Layer 2 (session-specific) runs after Step 1 when
you know the user's specialty and verification focus.Classify discovered agents into verification categories and validate with
nimble agent get per references/wsa-reference.md.
From the preflight results:
references/profile-and-onboarding.md, stopreferences/nimble-playbook.md:
last_runs.healthcare-providers-verify is today, check
for existing report at ~/.nimble/memory/reports/healthcare-providers-verify-*[today].md.
If found, ask: "Already ran today. Run again for fresh data?"Chained-from-sibling shortcut: Check for same-day extract or enrich output:
ls ~/.nimble/memory/reports/healthcare-providers-extract-*$(date +%Y-%m-%d).md 2>/dev/null
ls ~/.nimble/memory/reports/healthcare-providers-enrich-*$(date +%Y-%m-%d).md 2>/dev/null
If a same-day report exists, parse the {slug} and load the provider data
(providers.json or enriched.json). This gives you names, credentials, specialties,
and locations — skip parsing and go directly to Step 2.
Parse $ARGUMENTS for input type using the Input Parsing Pattern from
references/nimble-playbook.md. Key routing:
If input is clear, confirm and ask one shaping question (plain text, not AskUserQuestion):
"Found N practitioners to verify. Quick questions:
- What should I verify? (credentials, specialty, active status, practice address — or all)
- Healthcare vertical? (ophthalmology, dental, dermatology, general, or other)"
If input is ambiguous, use AskUserQuestion (counts as 1 of max 2 prompts):
What practitioner data should I verify?
- Paste provider data directly (name + credentials + location, one per line)
- Provide a CSV file path or Google Sheet URL
- Or describe what you have (e.g., "a list of 50 ophthalmologists I need to verify against the NPI registry")
Skip questions the user already answered in their initial message.
Parse the input into structured records. For each practitioner, identify:
Minimum required fields: Name + at least one of (credentials, state, specialty). If a practitioner has only a name with no other identifiers, flag it: "Cannot verify [name] — need at least a state, credential, or specialty to search."
Build a verification plan summary:
"Analyzing N practitioners for verification:
- Names: N/N present
- Credentials claimed: N/N
- Specialty claimed: N/N
- State/location: N/N
Starting NPI verification..."
Run Layer 2 WSA discovery now that you know the specialty:
nimble agent list --limit 50 --search "[specialty]"
nimble agent list --limit 50 --search "[registry-user-mentioned]"
See references/wsa-reference.md for session-specific discovery.
Prefer the NPPES API — it returns structured JSON in one call instead of search + extract (two calls). Build the query URL from the practitioner's fields:
nimble extract --url "https://npiregistry.cms.hhs.gov/api/?version=2.1&first_name=[First]&last_name=[Last]&state=[ST]&limit=5" --format markdown
Add &taxonomy_description=[Specialty] if the specialty is known and specific
enough. The API returns NPI number, status, credentials, taxonomy codes, addresses,
and enumeration dates — everything needed for verification in a single call.
Fallback to web search if the NPPES API returns zero results or errors:
nimble search --query "[Name] [Credential] [State] NPI registry" --max-results 5 --search-depth lite
Then extract the top result from an NPI source (see source priority below).
Source priority (enforce in sub-agent prompts):
npiregistry.cms.hhs.gov/api/) — preferred, structured JSONnpidb.org/doctors/ — clean structured data, good fallbacknppes.cms.hhs.gov (provider-view pages) — official CMS sourceTell sub-agents: "Only extract from NPPES API, npidb.org, or nppes.cms.hhs.gov. Ignore other NPI aggregator sites."
Search budget per provider: Max 3 search queries + 1 extraction per practitioner. If no NPI match after 3 attempts, mark as Unverified and move on. Tell sub-agents: "Do not run more than 4 nimble commands per provider. Mark as Unverified if no match by then."
For 10+ practitioners, use sub-agents (see Sub-Agent Strategy below).
Key fields from NPI records — see references/npi-verification-patterns.md
for the full list: NPI number, status, credentials, taxonomy/specialty,
enumeration date, last updated, practice address.
Checkpoint enforcement: After each sub-agent returns its batch results, the main context MUST write the checkpoint before spawning the next step or presenting