feat: RC front-office optimization + AMD/subagent fixes#11
Conversation
Adds 10 project-level skills under .claude/skills/ for common Exult Healthcare front-office workflows, split across AdvancedMD (5) and RingCentral (5). Each SKILL.md covers: purpose, inputs, prerequisites, API-first workflow with UI fallback, per-request approval gates, verify, rollback, common pitfalls, and references to local AMD API doc cache + memory. PHI/PCI-sensitive skills (add-patient, reschedule, cancel, records, payment) require explicit per-request Gautam approval before any write and never log full PHI/card data. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adds 10 new project-level skills covering insurance verification + add, patient check-in, document upload, patient messaging, refunds, SMS reminders, IVR updates, temporary call forwarding, and a composite daily KPI report. Updates INDEX.md and preserves batch 1 conventions (API-first + UI fallback, per-request approval gates for PHI/financial writes, PHI redaction rules). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…nd AMD XMLRPC Adds three local stdio MCP servers under packages/exult-mcp/ to fill gaps in Claude Desktop coverage of Exult Healthcare operational services: - ringcentral-admin: RC Platform API with the Remote Admin JWT — extensions, call queues, IVR, detailed/paginated call log, voicemails, transcripts (fills the gap Keragon RC MCP leaves around admin/pagination/voicemail). - microsoft365-admin: Graph client_credentials (Exult Agent Service app) for tenant-wide directory, any-mailbox mail/calendar, groups, SharePoint (claude_ai_Microsoft_365 is Gautam's personal delegated OAuth — doesn't cover tenant admin). - advancedmd-xmlrpc: ARC022825 service-account XMLRPC for getUpdatedPatients, getUpdatedVisits, getVisitInfoByDate, getEhrUpdatedNotes, getAppointmentHistory, plus a raw_xmlrpc_request escape hatch. Complements Keragon AMD (which can't reach the service-account-only getUpdated family). All tools are READ-ONLY. Writes deliberately excluded — AMD writes require Gautam's per-operation approval and Keragon already covers the write APIs. Each server live-smoke-tested against its real API during build: - RC returned account 2761864020 / Confirmed - M365 returned tenant Exult Healthcare / 707a7153-... - AMD XMLRPC login + getfieldsets probe returned 3310 bytes of table XML Full build log at .pi/services/mcp_setup/build_log.md including MBP config discovery gap (MBP offline 8h, ssh unreachable), coverage gap analysis, and the claude.ai remote MCP hosting note (only M365 is hostable; RC and AMD are local-only due to PHI + session-auth). Claude Desktop config at ~/Library/Application Support/Claude/ was updated out-of-tree and is NOT part of this commit. Credential JSON files remain uncommitted in .config/exult/. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…rvice configs - Dashboard deployments (daily + historical) on Vercel - Daily operations tracker with AMD/RC/M365 data extraction - RC front-office queue optimization (ext 55) - IVR tree cleanup and renaming - Outlook email channel for agent - Monitor scripts for subagent management - Service provisioning audit trail Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Updates planner/reviewer/scout/worker subagent definitions to use gpt-5.5. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
TEMP appname caused 'api-app class creation error' on data calls. ABS-AVMD is the registered appname for Exult office 161112. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
There was a problem hiding this comment.
🤖 Gemini Code Review
Review of front-office optimization, dashboards, subagents update to gpt-5.5, and bug fixes.
Issues found:
- [blocking] The temporary prompt file for background subagents is immediately deleted, causing a race condition where the detached child process fails to read its system prompt.
- [suggestion] The historical dashboard middleware excludes
/data/from authentication. Consider protecting it if the aggregated JSON files should also be private.
Workflow Suggestions
- 💡 Consider splitting large data dumps and dashboards into a separate PR to simplify review of core agent/MCP logic.
| // Clean up temp files | ||
| if (tmpPromptPath) { | ||
| try { | ||
| fs.unlinkSync(tmpPromptPath); |
There was a problem hiding this comment.
[blocking] tmpPromptPath is deleted immediately after spawning the background agent. Because the child process runs detached, it will likely fail to read the file before it is unlinked. You should either skip deleting it here (letting the OS temp directory clean it up) or pass the prompt without relying on a temporary file.
| } | ||
|
|
||
| export const config = { | ||
| matcher: ["/((?!_next/static|_next/image|favicon.ico|data/).*)"], |
There was a problem hiding this comment.
[suggestion] The matcher config excludes data/, meaning the underlying JSON files in /public/data/ are publicly accessible without authentication. Consider including them in the matcher if you want to restrict access to the raw aggregate data as well.
Review: 1 blocking issue, otherwise LGTMBlocker: invalid model identifier
|
# Conflicts: # .gitignore # package-lock.json # package.json # packages/exult-mcp/advancedmd-xmlrpc/server.py # packages/gbharg-auto-review/src/github.ts # packages/gbharg-auto-review/src/runner.ts
Summary
Test plan