Detectors require sufficient captured session history before they can produce eligible evaluations. A finding list that remains empty does not mean collection is broken — it may mean the org does not yet have enough history for a given detector to fire.
How anomaly detection works
Each detector runs once per completed daily window, per organization. For each subject it evaluates (a member, a session, or an operation), the detector produces one of:
When a finding fires repeatedly, it updates the same open finding record rather than creating duplicates. Administrators can acknowledge, resolve, or dismiss each finding through the Signals tab.
Detector summary
AD-001 — Usage baseline deviation
What it checks: Whether a member’s completed session or token volume on a given day is materially above their own recent history. How it is calculated: RCLM looks at the previous 14 completed UTC days for that member, requires at least 7 active baseline days, and builds a guarded exponentially weighted baseline. A finding requires all three of the following to align:- A strong statistical deviation (z-score above threshold)
- A meaningful ratio above the member’s own baseline
- An absolute increase floor (5 sessions or 100k tokens, depending on the variant)
AD-002 — New technology fingerprint
What it checks: Whether a session contains a first-seen combination of dependencies, imports, manifests, tools, providers, or project activity for that member, compared against their prior 90-day history. How it is calculated: RCLM builds a fingerprint from each session’s file extensions, package manifests, conservatively parsed dependencies and imports, command families, tools, models, providers, agent clients, and project roots. A single new item is not enough — the detector requires a meaningful combination, such as:- A first-seen package ecosystem together with a related first-seen dependency.
- A new project root combined with a new command family.
AD-003 — Runaway or looping session
What it checks: Whether a session shows signs of being stuck — through repeated identical failures, failed build or test loops, abnormal tool-call volume, or abnormal duration. How it is calculated: The detector applies deterministic sub-signals:
Severity escalates by rule:
- Warning — one sub-signal crossed.
- High — two independent sub-signals, or a sustained failed build/test loop.
- Token volume alone never produces a critical result.
AD-004 — Sensitive file access
What it checks: Whether sessions in the window read, wrote, or referenced.env-class files, credential files, or private-key files — including cases where the AI agent wrote a script or temporary file that reads or modifies those files.
How it is calculated: RCLM scans three distinct surfaces per session:
Surface 1 — Direct tool access
Each tool call’s file paths are checked against sensitive-file patterns:.env,.env.*,*.env,.envrc*.pem,*_rsa,*id_rsa,*.p12*credentials*.json,*service-account*.json
primary_file_path and file_paths[] on native read and write tool calls. RCLM also records whether hook DLP was active (was_redacted), so evidence distinguishes covered accesses from DLP gaps.
Surface 2 — Shell command access
File paths extracted from shell commands (the same extraction used by the P2 Groundhog Files signal):cat .env.production,head .envrc,tail .env.localsed -n 'p' dev.env,rg "SECRET" .env
Surface 3 — Code and script mentions
The agent writes a Python, Bash, or other script that opens, loads, or references a sensitive file — including temporary scripts written to disk and immediately executed. Examples:load_dotenv() calls, source .env-style shell expressions, and similar constructs. A mention in agent-written code is recorded as a distinct access type (code_mention) separate from a direct tool read or shell command.
This surface matters because hook DLP operates on tool inputs and outputs at the boundary. A model that writes a script referencing an env file as a string does not pass the secret through a hook — the script itself becomes the exfiltration vector when it is later executed. AD-004 surfaces this so the admin can decide whether that script was actually run and whether the execution context had DLP coverage.
Severity tiers:
- Warning — one or more sessions with a sensitive file read or
code_mention. - High — at least one session wrote to a sensitive file path, or the code mention involves a write operation (
open(".env", "w"), overwriting viadotenv_values). - Critical — multiple sessions have env-file activity and at least one had no DLP coverage, indicating a gap where secrets or the script referencing them may have reached an external model provider.
read, write, shell_read, code_mention), matched file pattern categories, DLP coverage count per session, and session IDs.
Evidence never includes: Actual file paths, file contents, secret values, script source code, or redacted placeholder text.
Interpretation guardrail: Accessing or referencing env files is a normal part of debugging and configuration work. A code_mention finding means the agent wrote code that references a sensitive file — not that the secret was extracted. Whether secrets were exposed depends on whether the script was executed and whether hook DLP covered the execution context.
Typical next steps:
- Check the access type in evidence. A
code_mentionwarrants a different response than a directreadwithwas_redacted: false. - For
code_mention, open the linked session and review the script the agent wrote. Determine whether it was executed and whether that execution happened within a DLP-covered hook boundary. - For direct reads or shell reads with a DLP gap (
was_redacted: false), determine whether secrets were transmitted to an external provider. - If the session used Gemini, Antigravity, or a capture-only integration — clients that do not support pre-execution input redirection — treat any sensitive file activity as a potential gap regardless of
was_redacted.
Hook DLP default behavior:
rclm-hooks-install enables DLP on fresh installs. Users who opted out with --no-dlp or installed before the default changed may have sessions with no DLP coverage. AD-004 Critical findings are the primary signal for this gap.AD-005 — Proxy operation volume spike
What it checks: Whether a canonical proxy operation’s daily session volume is materially above the organization’s own recent daily history for that operation. How it is calculated: RCLM groups proxy sessions by their canonical operation title. For the latest completed day, it compares that operation’s session count against its own active-day history (up to 90 days, requiring at least 7 active baseline days). A finding requires all three of:- A strong statistical deviation (z-score above threshold)
- A meaningful ratio above the operation’s own baseline
- An absolute increase floor (5 sessions)
AD-006 — New proxy operation
What it checks: Whether a canonical proxy operation title appears for the first time in the organization’s recent proxy session history. How it is calculated: RCLM compares the canonical operation titles seen in the latest completed day against the preceding 90 days of labeled proxy activity. At least 10 prior labeled proxy sessions are required before a title is treated as genuinely new. A new hash mapped to an existing canonical title is not treated as a new operation. Severity: Warning. Evidence includes: The canonical operation title, first-seen date, and linked session IDs. Evidence never includes: Request bodies, prompt content, or credentials. Interpretation guardrail: A first-seen operation title is not inherently unsafe. New integrations, API migrations, and approved workflow changes all produce this finding. Typical next steps: Verify that the new operation belongs to an approved integration or workflow. If the title is unrecognized, inspect the linked proxy sessions to identify the caller before deciding whether to escalate.Evidence design
All detectors follow the same evidence boundary: findings store compact, allowlisted metadata — identifiers, normalized hashes, counts, categories, statistics, and thresholds. They never store raw prompts, tool inputs, tool results, file contents, secrets, complete shell commands, or personal absolute paths. This means anomaly detection does not create a second sensitive-data problem while providing enough structured information to investigate each finding.Finding lifecycle
Each open finding has a single lifecycle record per detector, subject, and anomaly target. Repeated detections update the last-seen time and occurrence count rather than creating duplicate entries.
Resolved and dismissed findings are closed. Missing data or a detector error cannot silently resolve an open finding.