AI Slop Code RIsk Monitor

musistudio/claude-code-router

One local control plane for every AI agent: route across models, fuse new capabilities, orchestrate tools, and stay fully in control.

9.7 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for musistudio/claude-code-router, a TypeScript project with 37,619 GitHub stars. SynthScan examined 243,114 lines of code across 512 source files, recording 2537 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 9.7 (Moderate pattern signal); it is not an authorship estimate.

Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.

9.7
Adjusted Signal
9.7
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
37.6K
Stars
TypeScript
Language
243.1K
Lines of Code
512
Files
2.5K
Pattern Hits
2026-10-12
Scan Date
0.00
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 38.5/100 · MEDIUM

Can maintainers explain intent, assumptions, and trade-offs? 2537 finding(s).

Hallucinated Dependency & Supply Chain Risk 0.0/100 · LOW

Are imports declared and package/API names verified? 0 finding(s).

Agent Over-Engineering Ratio 37.6/100 · MEDIUM

Are wrappers, guards, and repeated structures necessary? 2504 finding(s).

PR Review Velocity Impact 40.8/100 · MEDIUM

Which changes need focused human review? 2537 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.

Severity Breakdown

Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.

CRITICAL 0HIGH 1MEDIUM 2LOW 2534

Directory Score Breakdown

This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.

Pattern Findings

The scanner identified 2537 distinct pattern matches across 6 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Hyper-Verbose Identifiers2504 hits · 2291 pts
SeverityFileLineSnippetContext
LOWextension/chrome/popup.js125async function readLocalStorageForDomains(domains, cookies) {CODE
LOWextension/chrome/popup.js137async function readLocalStorageForOrigin(origin) {CODE
LOWextension/chrome/popup.js209function localStorageOriginsForDomains(domains, cookies) {CODE
LOWextension/chrome/popup.js231function allowedLocalStorageOrigin(actualOrigin, requestedOrigin) {CODE
LOWextension/chrome/background.js83async function readLocalStorageForDomains(domains, cookies) {CODE
LOWextension/chrome/background.js95async function readLocalStorageForOrigin(origin) {CODE
LOWextension/chrome/background.js167function localStorageOriginsForDomains(domains, cookies) {CODE
LOWextension/chrome/background.js246function allowedLocalStorageOrigin(actualOrigin, requestedOrigin) {CODE
LOWtests/e2e/electron-cdp.spec.ts367function createLegacyApiKeyDatabase(file: string): void {CODE
LOWtests/e2e/provider-edit.spec.ts267async function prepareProviderRegressionPage(page: Page, withReferences = false): Promise<void> {CODE
LOWdocs/src/configuration-docs.ts34export function configurationSlugFromPath(filePath: string): string {CODE
LOW…rc/components/interactive/fixtures-agent-analysis.json7094 "preview": "935:type ProviderPresetComboboxOption = {\n942:function ProviderPresetCombobox({\n948: optionCODE
LOW…rc/components/interactive/fixtures-agent-analysis.json7282 "preview": "1296\t option: ProviderPresetComboboxOption,\n1297\t query: string\n1298\t): boolean {\n1299CODE
LOW…rc/components/interactive/fixtures-agent-analysis.json7326 "preview": "1705\tfunction ProviderFormStepHeader({\n1706\t description,\n1707\t index,\n1708\t title\nCODE
LOW…rc/components/interactive/fixtures-agent-analysis.json7526 "preview": "1583:export type ProviderSetupStepId = \"provider\" | \"credentials\" | \"models\" | \"verify\CODE
LOW…rc/components/interactive/fixtures-agent-analysis.json7714 "preview": "1851\tfunction ProviderApiKeyInput({\n1852\t onChange,\n1853\t resetProbe,\n1854\t value\n1CODE
LOW…rc/components/interactive/fixtures-agent-analysis.json7902 "preview": "1780\t return (\n1781\t <div className={cn(\"rounded-md border border-border bg-muted/20 pCODE
LOW…rc/components/interactive/fixtures-agent-analysis.json7946 "preview": "1889\tfunction ProviderCredentialModeTabs({\n1890\t onChange,\n1891\t value\n1892\t}: {\n189CODE
LOW…rc/components/interactive/fixtures-agent-analysis.json8190 "preview": "/Volumes/Data/Products/claude-code-router/packages/ui/src/pages/home/App.tsx:1397: }, [activeCODE
LOWpackages/ui/test/integration/providers.test.ts1644function providerInstallLinkPayload(link) {CODE
LOW⚡packages/ui/src/pages/home/App.tsx2150 function openInstallExtensionDialog() {CODE
LOW⚡packages/ui/src/pages/home/App.tsx2156 function updateExtensionInstallDraft(patch: Partial<ExtensionInstallDraft>) {CODE
LOW⚡packages/ui/src/pages/home/App.tsx2161 async function chooseLocalExtensionDirectory() {CODE
LOW⚡packages/ui/src/pages/home/App.tsx2338 function updateClaudeDesignRoutingDraft(patch: Partial<ClaudeDesignRoutingDraft>) {CODE
LOW⚡packages/ui/src/pages/home/App.tsx2342 function addClaudeDesignRoutingRule() {CODE
LOW⚡packages/ui/src/pages/home/App.tsx2349 function updateClaudeDesignRoutingRule(index: number, patch: Partial<ClaudeDesignRoutingRuleDraft>) {CODE
LOW⚡packages/ui/src/pages/home/App.tsx2356 function removeClaudeDesignRoutingRule(index: number) {CODE
LOW⚡packages/ui/src/pages/home/App.tsx2363 function submitClaudeDesignRoutingDraft() {CODE
LOW⚡packages/ui/src/pages/home/App.tsx2389 function updateCursorProxyRoutingDraft(patch: Partial<ClaudeDesignRoutingDraft>) {CODE
LOW⚡packages/ui/src/pages/home/App.tsx2393 function addCursorProxyRoutingRule() {CODE
LOW⚡packages/ui/src/pages/home/App.tsx2400 function updateCursorProxyRoutingRule(index: number, patch: Partial<ClaudeDesignRoutingRuleDraft>) {CODE
LOW⚡packages/ui/src/pages/home/App.tsx2407 function removeCursorProxyRoutingRule(index: number) {CODE
LOW⚡packages/ui/src/pages/home/App.tsx2414 function submitCursorProxyRoutingDraft() {CODE
LOWpackages/ui/src/pages/home/App.tsx66function isLocalCodexProviderDraft(draft: AddProviderDraft): boolean {CODE
LOWpackages/ui/src/pages/home/App.tsx73function localCodexProviderDraftProbeKey(draft: AddProviderDraft): string {CODE
LOWpackages/ui/src/pages/home/App.tsx89function materializeProviderPluginTemplates(CODE
LOWpackages/ui/src/pages/home/App.tsx111function replaceProviderPluginPlaceholders(value: unknown, replacements: Record<string, string>): unknown {CODE
LOWpackages/ui/src/pages/home/App.tsx150async function loadProviderAccountSnapshots(forceRefresh = false): Promise<ProviderAccountSnapshot[]> {CODE
LOWpackages/ui/src/pages/home/App.tsx157function providerRefreshModelsInputKey(CODE
LOWpackages/ui/src/pages/home/App.tsx178function canInstallExtensionCandidate(candidate: PluginInstallCandidate): boolean {CODE
LOWpackages/ui/src/pages/home/App.tsx560 async function refreshProviderAccountsNow() {CODE
LOWpackages/ui/src/pages/home/App.tsx1889 async function confirmProviderDeepLinkImport() {CODE
LOWpackages/ui/src/pages/home/App.tsx1950 function updateProviderModelDescription(providerIndex: number, model: string, description: string) {CODE
LOWpackages/ui/src/pages/home/App.tsx1987 function openEditRoutingRuleDialog(index: number) {CODE
LOWpackages/ui/src/pages/home/App.tsx2062 function openAddVirtualModelDialog() {CODE
LOWpackages/ui/src/pages/home/App.tsx2069 function openEditVirtualModelDialog(index: number) {CODE
LOWpackages/ui/src/pages/home/App.tsx2198 function submitExtensionInstallDraft() {CODE
LOWpackages/ui/src/pages/home/App.tsx2210 function installExtensionCandidate(candidate: PluginInstallCandidate) {CODE
LOWpackages/ui/src/pages/home/App.tsx2302 function updatePluginSettingsDraft(patch: Partial<PluginSettingsDraft>) {CODE
LOWpackages/ui/src/pages/home/App.tsx2307 function submitPluginSettingsDraft() {CODE
LOWpackages/ui/src/pages/home/App.tsx2529 function changeTrayBalanceProgress(config: TrayBalanceProgressConfig) {CODE
LOWpackages/ui/src/pages/home/App.tsx2564 function changeObservabilityConfig(patch: Partial<AppConfig["observability"]>) {CODE
LOWpackages/ui/src/pages/home/App.tsx2606 function openBotSettingsWithAddDialog() {CODE
LOWpackages/ui/src/pages/home/App.tsx2617 function openGeneralSettingsDialog() {CODE
LOWpackages/ui/src/pages/home/App.tsx2678 async function refreshProxyNetworkCaptures() {CODE
LOWpackages/ui/src/pages/home/App.tsx2755 async function clearProxyNetworkCaptures() {CODE
LOWpackages/ui/src/pages/home/App.tsx2763 async function setProxyNetworkCaptureEnabled(enabled: boolean) {CODE
LOWpackages/ui/src/pages/home/App.tsx2993 async function refreshProfileRuntimeStatus(): Promise<void> {CODE
LOWpackages/ui/src/pages/home/App.tsx3006 function removeProfileRuntimeEntry(profileId: string, surface: ProfileOpenSurface) {CODE
LOWpackages/ui/src/pages/home/App.tsx3632function removeProfileBotReference(profile: ProfileConfig): ProfileConfig {CODE
2444 more matches not shown…
Structural Annotation Overuse28 hits · 58 pts
SeverityFileLineSnippetContext
LOW⚡docs/src/content/docs/en/agentclaw/feishu.md22## Step 1: Create an enterprise self-built appCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/feishu.md32## Step 2: Copy the App ID and App SecretCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/feishu.md42## Step 3: Enable the bot capabilityCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/feishu.md51## Step 4: Request message permissionsCOMMENT
LOWdocs/src/content/docs/en/agentclaw/feishu.md63## Step 5: Configure event subscriptionsCOMMENT
LOWdocs/src/content/docs/en/agentclaw/feishu.md70## Step 6: Publish or install the appCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/wecom.md24## Step 1: Get the Corp IDCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/wecom.md32## Step 2: Create a self-built appCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/wecom.md42## Step 3: Copy the Agent ID and SecretCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/slack.md21## Step 1: Create the Slack appCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/slack.md30## Step 2: Turn on Socket ModeCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/slack.md39## Step 3: Add bot scopes and installCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/slack.md49## Step 4: Invite the bot into a channelCOMMENT
LOWdocs/src/content/docs/en/agentclaw/dingtalk.md24## Step 1: Create a DingTalk appCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/dingtalk.md35## Step 2: Copy the App Key and App SecretCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/dingtalk.md44## Step 3: Enable the bot capabilityCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/dingtalk.md53## Step 4: Publish the app and join a chatCOMMENT
LOWdocs/src/content/docs/en/agentclaw/telegram.md20## Step 1: Create the bot with BotFatherCOMMENT
LOWdocs/src/content/docs/en/agentclaw/telegram.md32## Step 2: Set up group support (optional)COMMENT
LOW⚡docs/src/content/docs/en/agentclaw/discord.md24## Step 1: Create the Discord app and botCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/discord.md34## Step 2: Enable the required intentsCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/discord.md41## Step 3: Copy the Bot TokenCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/discord.md50## Step 4: Invite the bot into a serverCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/discord.md59## Step 5: Copy optional fields (if needed)COMMENT
LOWdocs/src/content/docs/en/agentclaw/line.md23## Step 1: Create a Messaging API channelCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/line.md35## Step 2: Copy the Channel SecretCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/line.md41## Step 3: Issue a Channel Access TokenCOMMENT
LOW⚡docs/src/content/docs/en/agentclaw/line.md50## Step 4: Open the chat entryCOMMENT
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHpackages/core/src/profiles/service.ts2054 "# Generated by Claude Code Router for this Kimi CLI profile.",CODE
AI Slop Vocabulary2 hits · 4 pts
SeverityFileLineSnippetContext
MEDIUMpackage-lock.json7857 "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz",CODE
MEDIUMdocs/package-lock.json6021 "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz",CODE
Redundant / Tautological Comments1 hit · 1 pts
SeverityFileLineSnippetContext
LOW…rc/components/interactive/fixtures-agent-analysis.json19764 "preview": "{\n \"command\": \"export PATH=\\\"/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:$PATH\\\"\\ncCODE
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOWpackages/core/src/web/management-server.ts178async function handleRequest(request: IncomingMessage, response: ServerResponse, security: WebManagementSecurityContext)CODE