A fraud detection and financial crime investigation tool that traces suspicious money flows, detects linked money networks (rings), scores account risk, and manages case timelines with human approval gates for account freezing and reporting.
Ringlight demonstrates solid tool design with complete JSON schemas, clear descriptions, and proper parameter constraints. All 7 tools have explicit definitions with type-safe inputs and enum/pattern validation. Descriptions are domain-specific and actionable (avg ~140 chars). However, output schemas are not documented, LLMs cannot predict response structure. Parameter descriptions lack dependency hints (e.g., dollariseExposure requires detectRing to run first). Error handling is minimal; handlers throw generic errors without recovery guidance. Tool names are clear but lack action verbs (traceFlow, expandAccount are descriptive but not verb_noun pattern). No tool annotations (readOnlyHint/destructiveHint) despite freezeAccounts being IRREVERSIBLE.
Assemble the flagged origin, layering bursts, circular returns, and cash-out attempts into a timestamped case record.
Find accounts that pass money around a closed loop, then verify the circular movement before identifying a suspicious linked network.
Total each relevant transfer exactly once, compare it with the local baseline, and isolate unsettled outgoing money that can still be stopped.
Reveal the incoming and outgoing neighbors of one account so the visible money map can be investigated one step at a time.
Freeze the exact detected account set and stop its pending outgoing transfers in local state. The call pauses for a person to approve the scope before anything changes.
Calculate reproducible account risk from recent outgoing value, pass-through behavior, transfer speed, number of destinations, and circular money movement.
Output schemas not documented. Handlers return structured objects (ring, exposure, timeline) but LLMs cannot predict response fields, forcing trial-and-error parsing.
freezeAccounts is IRREVERSIBLE but lacks confirmation/dry-run pattern. No approval step before state mutation despite 'pauses for a person to approve' claim in description.
Tool names lack action verbs. 'traceFlow', 'expandAccount', 'detectRing' are descriptive but not verb_noun pattern (should be trace_flow, expand_account, detect_ring or similar).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Follow one suspicious transfer through the current local dataset. Return the accounts and money movements found within a bounded number of steps.
Parameter descriptions lack dependency hints. dollariseExposure requires detectRing to run first (throws 'Detect the requested ring before calculating exposure'), but this prerequisite is not documented in the parameter description.
Error handling is minimal. Handlers throw generic Error() with messages but do not categorize errors as retryable/user-fixable/fatal or provide recovery guidance.