Compliance Watch Skills
This page documents the RRC oil & gas vertical — the watch skills survey the five installed RRC packs. The mechanisms (packs, skills, routers, HITL rules) are domain-neutral.
There is no longer a dedicated “Compliance Monitor” agent. Its conversational role — surveying regulatory posture across an operator’s portfolio and pointing the user at what needs attention — is covered by three read-only watch skills plus the Compliance Dashboard. A user reaches the watch skills in a general-mode conversation through the compliance and field_events routers.
How it is reached
| Skill key | Router | Covers |
|---|---|---|
compliance_watch | compliance | Portfolio-wide compliance posture — which entities are compliant, action-needed, or overdue across domains |
filings_watch | compliance | Filing-queue status — what is drafted, in review, or submitted |
events_watch | field_events | The event feed (the Events page) |
These are read-only surveillance skills. When a user actually needs to prepare a filing, the conversation loads the filing skills instead (rrc_rule37 / rrc_rule32), whose own HITL rules gate submission. The watch skills never mutate — they detect, summarize, and hand off.
Historical note: the retired compliance-monitor-agent (agent type compliance_monitor) has no
agent_definitions row — permanently, by design. The agent_type enum value remains valid only
for historical snapshots and replay. A monitor-typed /execute request degrades to core tools.
The dashboard does the heavy lifting
The persistent, non-conversational compliance view is the entity × compliance matrix on the Compliance Dashboard (rows = entities, columns = compliance domains, color-coded status cells). It is backed by the compliance_status materialized cache and recomputed on schedule or on-demand — not by an agent conversation. The domain axis is registry-driven (GET /compliance/domains), so installing a pack adds a column with zero frontend edits.
Compliance status values
Each entity-domain pair is classified into one of five statuses that populate the matrix:
| Status | Color | Meaning |
|---|---|---|
compliant | Green | No action needed, all requirements met |
action_needed | Amber | Upcoming deadlines or minor issues requiring attention |
overdue | Red | Missed deadlines, active violations, or exceedances |
not_applicable | Grey | This compliance domain does not apply to this entity |
in_review | Blue | Filing is in progress or under HITL review |
How assessment actually runs
Compliance status is computed by the config-driven assessors (R41_CONFIG_ASSESSORS, ON by default since 2026-07-12) from each pack’s assessment recipe — a five-verb DSL with thresholds resolved from rule_versions and pack-declared Cypher. The legacy imperative RRC assessors in compliance/engine.py remain only as a parity oracle / fallback. Graph reads use the KG service’s parameterized {template_id, params} contract; a graph-query failure surfaces as status: partial / 503 — never a fabricated all-compliant matrix.
The watch skills and the dashboard detect and summarize; they never take autonomous remediation action. Preparing exceptions or updating filings is always initiated by a human and gated by the filing skills’ own mandatory HITL checkpoints.
Source Files
| File | Purpose |
|---|---|
services/agent-config-service/src/agent_config/seed_watch_skills.py | Seeds compliance_watch / filings_watch / events_watch |
services/agent-config-service/src/agent_config/routers_seed.py | compliance and field_events routers |
services/orchestration-engine/src/orchestration/compliance/config_assessor.py | Config-driven assessors (five-verb DSL) |
services/orchestration-engine/src/orchestration/compliance/engine.py | Legacy imperative assessors (parity oracle) |
services/compliance-monitor/ | Deadline / rule-change tracking service (port 8006) |