A pixel desktop pet that watches Claude Code, Codex, Cursor & other AI coding agents — so you don't have to.
This report presents the forensic synthetic code analysis of rullerzhou-afk/clawd-on-desk, a JavaScript project with 5,358 GitHub stars. SynthScan v2.0 examined 237,847 lines of code across 663 source files, recording 1271 pattern matches distributed across 15 syntactic categories. The overall adjusted score of 7.2 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1271 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/server-hook-management.test.js | 182 | function healthyClaudeSettingsWithThirdPartyHook() { | CODE |
| LOW | test/server-hook-management.test.js | 834 | function makeServerWithLiveAutoStart(initialValue) { | CODE |
| LOW | test/state-agent-icons.test.js | 34 | function shouldCheckRuntimeIconEntry(entry) { | CODE |
| LOW | test/dashboard.test.js | 12 | function loadDashboardWithElectron(fakeElectron) { | CODE |
| LOW | test/updater.test.js | 56 | function makeLatestReleaseResponse(release) { | CODE |
| LOW | test/updater.test.js | 71 | function makePendingReleaseResponse(queue) { | CODE |
| LOW | test/focus-mac-extras.test.js | 18 | function setupHermeticSupersetHome({ withDb = true } = {}) { | CODE |
| LOW | test/copilot-hook.test.js | 32 | function makeFakeCopilotHomeWithSession(rootName, sessionId, contents) { | CODE |
| LOW | test/permission-hotkey-focus.test.js | 107 | async function assertHotkeyLeavesFocusUntouchedOnCaptureFailure({ accelerator, expectedBehavior }) { | CODE |
| LOW | test/settings-effect-router-notify-autoclose.test.js | 8 | function createFakeSettingsController() { | CODE |
| LOW | test/readme-contributors.test.js | 89 | function extractContributorSection(markdown, filename) { | CODE |
| LOW | test/permission-codex-response.test.js | 9 | function loadPermissionWithElectron(fakeElectron = null) { | CODE |
| LOW | test/permission-codex-response.test.js | 32 | function createCodexDecisionHarness() { | CODE |
| LOW | test/copilot-install.test.js | 40 | function makeTempHomeWithoutCopilot() { | CODE |
| LOW | test/permission-notify-autoclose.test.js | 13 | function loadPermissionWithElectron(fakeElectron) { | CODE |
| LOW | test/settings-effect-router.test.js | 8 | function createFakeSettingsController(initialSnapshot = {}) { | CODE |
| LOW⚡ | test/settings-renderer-browser-env.test.js | 4023 | assert.ok(agentsSource.includes("function syncAgentSwitchDisabledState(")); | CODE |
| LOW⚡ | test/settings-renderer-browser-env.test.js | 4031 | assert.ok(agentOrderSource.includes("function sortAgentMetadataForSettings(")); | CODE |
| LOW⚡ | test/settings-renderer-browser-env.test.js | 4036 | assert.ok(agentsSource.includes("function categorizeAgentsForSections(")); | CODE |
| LOW | test/settings-renderer-browser-env.test.js | 352 | function loadGeneralLanguageRowForTest({ | CODE |
| LOW | test/settings-renderer-browser-env.test.js | 621 | function createKeyboardEventForTest(key) { | CODE |
| LOW | test/settings-renderer-browser-env.test.js | 950 | function loadTelegramApprovalTabForTest({ | CODE |
| LOW | test/settings-renderer-browser-env.test.js | 1108 | function loadAnimOverridesTabForTest({ | CODE |
| LOW | test/settings-renderer-browser-env.test.js | 1223 | function createAnimOverridesRuntime(card, overrides = {}) { | CODE |
| LOW | test/settings-renderer-browser-env.test.js | 3030 | assert.ok(generalSource.includes("function buildSessionHudOptionsList(")); | CODE |
| LOW | test/settings-renderer-browser-env.test.js | 3189 | assert.ok(coreSource.includes("function clearTransientStateForChanges(changes)")); | CODE |
| LOW | test/settings-renderer-browser-env.test.js | 3977 | assert.ok(coreSource.includes("function measureCollapsibleBodyHeight(")); | CODE |
| LOW | test/renderer-low-power.test.js | 247 | assert.ok(source.includes("function getLowPowerAnimationBoundaryDelayMs(root)")); | CODE |
| LOW | test/renderer-low-power.test.js | 284 | assert.ok(source.includes("function shouldSuppressPassiveTrackingForLowPower()")); | CODE |
| LOW | test/renderer-low-power.test.js | 306 | assert.ok(source.includes("function setCurrentScriptedSvgLowPowerPaused(paused)")); | CODE |
| LOW | test/renderer-low-power.test.js | 649 | assert.ok(source.includes("function resolveLowPowerStaticImageOverride(state, file)")); | CODE |
| LOW | test/update-bubble-autoclose.test.js | 47 | function loadUpdateBubbleWithElectron(fakeElectron) { | CODE |
| LOW | test/doctor-agent-integrations.test.js | 67 | function suspiciousShrinkGuardServer() { | CODE |
| LOW | test/claude-settings-watcher.test.js | 359 | function richHealthySettingsObject() { | CODE |
| LOW | test/helpers/load-shared-process-with-mock.js | 8 | function loadSharedProcessWithMock({ execFileSyncMock, env, platform }) { | CODE |
| LOW | docs/plans/plan-issue-244-low-power-idle.md | 165 | function shouldSuppressPassiveTrackingForLowPower() { | CODE |
| LOW | hooks/reasonix-install.js | 90 | function isDesiredReasonixHookEntry(entry, desiredCommand) { | CODE |
| LOW | hooks/reasonix-install.js | 99 | function normalizeReasonixHookEntries(entries, desiredCommand) { | CODE |
| LOW | hooks/server-config.js | 227 | function getPermissionProbeTimeoutMs(options = {}) { | CODE |
| LOW | hooks/server-config.js | 413 | function postPermissionToRunningServer(body, options, callback) { | CODE |
| LOW | hooks/server-config.js | 485 | function getManagedNodeCandidatesSync(homeDir, options = {}) { | CODE |
| LOW | hooks/server-config.js | 527 | async function getManagedNodeCandidatesAsync(homeDir, options = {}) { | CODE |
| LOW | hooks/server-config.js | 589 | function extractAbsolutePathFromShellOutput(raw) { | CODE |
| LOW | hooks/server-config.js | 611 | function normalizeWindowsPathForMatch(value) { | CODE |
| LOW | hooks/server-config.js | 630 | function validateWindowsNodeCandidate(value) { | CODE |
| LOW | hooks/server-config.js | 646 | function getWindowsCommonNodePaths(options = {}) { | CODE |
| LOW | hooks/server-config.js | 672 | function resolveWindowsNodeBinSync(options = {}) { | CODE |
| LOW | hooks/server-config.js | 713 | async function resolveWindowsNodeBinAsync(options = {}) { | CODE |
| LOW | hooks/kiro-install.js | 167 | function generateClawdTemplateFromBuiltin(options = {}) { | CODE |
| LOW | hooks/kiro-install.js | 216 | function syncClawdAgentFromBuiltin(filePath, options = {}) { | CODE |
| LOW | hooks/codex-install-utils.js | 71 | function buildCodexHookPosixInteropCommand(nodeBin, hookScript) { | CODE |
| LOW | hooks/codex-install-utils.js | 366 | function extractExistingWindowsNodeBin(settings, marker) { | CODE |
| LOW | hooks/codex-install-utils.js | 449 | function registerCodexCommandHooks(options = {}) { | CODE |
| LOW | hooks/codex-install-utils.js | 595 | function unregisterCodexCommandHooks(options = {}) { | CODE |
| LOW | hooks/cleanup-integrations.js | 91 | function resolveCopilotHomeForCleanup(homeDir, env, options = {}) { | CODE |
| LOW | hooks/cleanup-integrations.js | 101 | function buildCleanupOptionsForHome(homeDirInput, options = {}) { | CODE |
| LOW | hooks/cleanup-integrations.js | 217 | function unregisterAntigravityIntegration(options = {}) { | CODE |
| LOW | hooks/cleanup-integrations.js | 229 | function unregisterClaudeIntegration(options = {}) { | CODE |
| LOW | hooks/json-utils.js | 17 | async function readTextFileStripBomAsync(filePath, encoding = "utf-8") { | CODE |
| LOW | hooks/json-utils.js | 261 | function writeJsonAtomicWithBackup(filePath, data, options = {}) { | CODE |
| 876 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | test/state.test.js | 3608 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | test/state.test.js | 3617 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 15 | // ── Helpers ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/state.test.js | 133 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 135 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 285 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 287 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 361 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 363 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 491 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 493 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 657 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 659 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 837 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 839 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 2018 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 2020 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 3166 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 3168 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 3332 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 3334 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 3557 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 3559 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 3763 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 3767 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/win-foreground-terminal.test.js | 287 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/win-foreground-terminal.test.js | 293 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/updater.test.js | 1159 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/updater.test.js | 1166 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/copilot-hook.test.js | 383 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/copilot-hook.test.js | 385 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/permission-auto-approve.test.js | 189 | // ── Per-agent coverage ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/clawd-hook.test.js | 1045 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/clawd-hook.test.js | 1047 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/theme-override.test.js | 26 | // ── state.js gate tests ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/theme-override.test.js | 188 | // ── settings-actions: setThemeOverrideDisabled / resetThemeOverrides ────── | COMMENT |
| MEDIUM | test/telegram-sidecar-status-bridge.test.js | 12 | // ── Pure decision ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/telegram-sidecar-status-bridge.test.js | 53 | // ── Stateful bridge (fake timers + injected controller) ────────────────────── | COMMENT |
| MEDIUM | test/agents.test.js | 37 | // ── Required fields ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/agents.test.js | 50 | // ── Event mappings → valid states ─────────────────────────────────── | COMMENT |
| MEDIUM | test/agents.test.js | 84 | // ── processNames format ───────────────────────────────────────────── | COMMENT |
| MEDIUM | test/agents.test.js | 106 | // ── Capabilities shape ────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/agents.test.js | 120 | // ── Cross-agent: no duplicate IDs ─────────────────────────────────────── | COMMENT |
| MEDIUM | test/telegram-native-runner.test.js | 832 | // ── R1a sendNotification ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/telegram-native-runner.test.js | 946 | // ── R2 /status command ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/telegram-native-runner.test.js | 1098 | // ── R3 direct-send text intake ───────────────────────────────────────────── | COMMENT |
| MEDIUM | test/shared-process.test.js | 17 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/shared-process.test.js | 19 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/shared-process.test.js | 85 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/shared-process.test.js | 87 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/shared-process.test.js | 131 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/shared-process.test.js | 133 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/shared-process.test.js | 277 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/shared-process.test.js | 279 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/shared-process.test.js | 319 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/shared-process.test.js | 321 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/shared-process.test.js | 502 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/shared-process.test.js | 504 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/shared-process.test.js | 630 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/shared-process.test.js | 634 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| 32 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | test/settings-renderer-browser-env.test.js | 3462 | assert.strictEqual(harness.core.state.transientUiState.generalSwitches.has("soundMuted"), false); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 3498 | assert.strictEqual(harness.core.state.transientUiState.generalSwitches.has("soundMuted"), false); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 3515 | const manage = harness.core.state.mountedControls.generalSwitches.get("manageClaudeHooksAutomatically"); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 3516 | const autoStart = harness.core.state.mountedControls.generalSwitches.get("autoStartWithClaude"); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 3541 | let autoStart = harness.core.state.mountedControls.generalSwitches.get("autoStartWithClaude"); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 3553 | autoStart = harness.core.state.mountedControls.generalSwitches.get("autoStartWithClaude"); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 3564 | autoStart = harness.core.state.mountedControls.generalSwitches.get("autoStartWithClaude"); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 3595 | const notificationPolicy = harness.core.state.mountedControls.bubblePolicyControls.get("notificationBubbleAutoCloseS | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 3704 | const notificationPolicy = harness.core.state.mountedControls.bubblePolicyControls.get("notificationBubbleAutoCloseS | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 3759 | const notificationPolicy = harness.core.state.mountedControls.bubblePolicyControls.get("notificationBubbleAutoCloseS | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 3789 | const notificationPolicy = harness.core.state.mountedControls.bubblePolicyControls.get("notificationBubbleAutoCloseS | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 4092 | harness.core.runtime.agentInstallationHints.agents.map((agent) => agent.agentId), | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 4617 | const permissionsSwitch = [...harness.core.state.mountedControls.agentSwitches.values()] | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 4654 | const soundSwitch = [...harness.core.state.mountedControls.agentSwitches.values()] | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 4714 | const subagentSwitch = [...harness.core.state.mountedControls.agentSwitches.values()] | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 4771 | const subagentSwitch = [...harness.core.state.mountedControls.agentSwitches.values()] | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 4774 | const permissionsSwitch = [...harness.core.state.mountedControls.agentSwitches.values()] | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 5020 | harness.core.state.mountedControls.animMapSwitches.set("clawd:error", { | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 5064 | harness.core.state.mountedControls.animMapSwitches.set("clawd:error", { | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 5114 | harness.core.state.mountedControls.animMapSwitches.set("clawd:error", { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test-oneshot-gate.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tools/copilot-permission-capture/e2e-hook.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | tools/copilot-permission-capture/capture.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | test/bubble-kimi-cue.test.js | 101 | COMMENT | |
| LOW | test/permission-auto-approve.test.js | 1 | // Auto-pilot (autoApproveAllPermissions) chokepoint in showPermissionBubble. | COMMENT |
| LOW | test/permission-plan-feedback.test.js | 1 | // Tests for the ExitPlanMode "Tell Claude what to change" feedback path. | COMMENT |
| LOW | test/telegram-approval-settings.test.js | 261 | "55", | COMMENT |
| LOW | test/antigravity-install.test.js | 601 | const command = __test.buildAntigravityHookCommand( | COMMENT |
| LOW | test/antigravity-install.test.js | 661 | // #568: [Console]::In.ReadToEnd() blocks forever when the runner never | COMMENT |
| LOW | test/permission-autoclose-dismiss.test.js | 1 | // Autoclose dismiss-without-decision semantics. The autoclose timer fires | COMMENT |
| LOW | test/focus-ghostty-space.test.js | 1 | // test/focus-ghostty-space.test.js — Ghostty focus must not yank windows | COMMENT |
| LOW | test/fakes/migration-transitions.js | 1 | "use strict"; | COMMENT |
| LOW | test/fakes/telegram-server.js | 1 | "use strict"; | COMMENT |
| LOW | ci/wayland-smoke.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | agents/qoderwork.js | 1 | // QoderWork agent configuration | COMMENT |
| LOW | agents/codex-log-monitor.js | 1 | // Codex CLI JSONL log monitor | COMMENT |
| LOW | agents/qoder.js | 1 | // Qoder agent configuration | COMMENT |
| LOW | hooks/codex-install-utils.js | 61 | // POSIX-side `command` for a hooks.json shared with WSL through CODEX_HOME | COMMENT |
| LOW | hooks/claude-statusline.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | hooks/codewhale-hook.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | hooks/codewhale-install.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | hooks/qwen-code-hook.js | 21 | const QWEN_PERMISSION_HTTP_TIMEOUT_MS = 590000; | COMMENT |
| LOW | hooks/quota-bucket.js | 1 | "use strict"; | COMMENT |
| LOW | hooks/copilot-install.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | hooks/copilot-install.js | 41 | COMMENT | |
| LOW | hooks/copilot-install.js | 141 | // silently overwrite a user's deny coming from a different file | COMMENT |
| LOW | hooks/copilot-install.js | 321 | changed = true; | COMMENT |
| LOW | hooks/kimi-hook.js | 181 | COMMENT | |
| LOW | hooks/kimi-hook.js | 321 | COMMENT | |
| LOW | hooks/opencode-install.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | hooks/codex-remote-monitor.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | hooks/codex-remote-monitor.js | 201 | // restart from 0 and drop any buffered partial, otherwise we'd skip the whole | COMMENT |
| LOW | hooks/state-payload-size.js | 1 | "use strict"; | COMMENT |
| LOW | hooks/pid-cache.js | 1 | // hooks/pid-cache.js — Cross-process cache for the resolved process-tree | COMMENT |
| LOW | hooks/pid-cache.js | 21 | // Why no time-based read expiry: the earlier design (idle TTL + absolute cap) | COMMENT |
| LOW | hooks/pid-cache.js | 41 | // required from shared-process.js: PR2 (#634) will have shared-process.js | COMMENT |
| LOW | hooks/pid-cache.js | 161 | /* already gone / race with another SessionEnd — fine */ | COMMENT |
| LOW | hooks/pid-cache.js | 201 | const shapeOk = !!obj && typeof obj === "object" | COMMENT |
| LOW | hooks/clawd-hook.js | 481 | // Terminal. The tree is stable within a session, so snapshot once on | COMMENT |
| LOW | hooks/clawd-hook.js | 501 | const canCacheSession = isWin && pidCache.canCache(sessionId, cwd); | COMMENT |
| LOW | hooks/clawd-hook.js | 541 | } else if (!cacheOnlyNoFallback) { | COMMENT |
| LOW | hooks/antigravity-install.js | 161 | ].join(" "); | COMMENT |
| LOW | hooks/shared-process.js | 381 | // Reads stdin until EOF, parses JSON. EOF-driven with a safety-net timer. | COMMENT |
| LOW | hooks/antigravity-statusline.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | hooks/wsl-connectivity-probe.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | hooks/copilot-hook.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | hooks/copilot-hook.js | 21 | const path = require("path"); | COMMENT |
| LOW | hooks/copilot-hook.js | 101 | const trimmed = env.COPILOT_HOME.trim(); | COMMENT |
| LOW | hooks/copilot-hook.js | 221 | // capture showed it is always [] in current Copilot CLI. | COMMENT |
| LOW | hooks/copilot-hook.js | 321 | : "Denied by Clawd"; | COMMENT |
| LOW | hooks/copilot-hook.js | 401 | // 5. <repo>/.claude/settings.local.json (cross-tool inline) | COMMENT |
| LOW | scripts/remote-deploy.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .github/workflows/wayland-smoke.yml | 1 | # Headless-Wayland smoke test for the XWayland auto-relaunch (issue #441, PR #443). | COMMENT |
| LOW | src/server-route-state.js | 221 | // PermissionRequest. Same validator the hook runs before POSTing — | COMMENT |
| LOW | src/server-route-state.js | 281 | if (state.startsWith("mini-") && !svg) { | COMMENT |
| LOW | src/server-route-state.js | 301 | // (matters most once PR2/#634 makes the codex hook cache-only too). | COMMENT |
| LOW | src/preload-settings.js | 1 | "use strict"; | COMMENT |
| LOW | src/preload-settings.js | 161 | runChecks: () => ipcRenderer.invoke("doctor:run-checks"), | COMMENT |
| LOW | src/remote-ssh-quote.js | 1 | "use strict"; | COMMENT |
| LOW | src/win-foreground-terminal.js | 1 | "use strict"; | COMMENT |
| 80 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | test/hermes-plugin.test.js | 87 | print(json.dumps({"events": [item["event"] for item in posts]}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 108 | return None | CODE |
| HIGH | test/hermes-plugin.test.js | 136 | print(json.dumps([{"event": item["event"], "session_id": item["session_id"]} for item in posts])) | CODE |
| HIGH | test/hermes-plugin.test.js | 172 | print(json.dumps(posts, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 220 | print(json.dumps(posts[-1], sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 251 | print(json.dumps(posts[-1], sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 278 | return None | CODE |
| HIGH | test/hermes-plugin.test.js | 310 | print(json.dumps(cases, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 361 | print(json.dumps({"calls": calls, "meta": meta}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 411 | print(json.dumps({"calls": calls, "meta": meta}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 450 | return None | CODE |
| HIGH | test/hermes-plugin.test.js | 466 | print(json.dumps({ | CODE |
| HIGH | test/hermes-plugin.test.js | 523 | return False | CODE |
| HIGH | test/hermes-plugin.test.js | 547 | print(json.dumps({"result": result, "calls": calls, "cached_port": mod._cached_port}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 583 | return False | CODE |
| HIGH | test/hermes-plugin.test.js | 612 | print(json.dumps({ | CODE |
| HIGH | test/hermes-plugin.test.js | 649 | print(json.dumps({"result": result, "calls": calls, "logs": logs}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 679 | return False | CODE |
| HIGH | test/hermes-plugin.test.js | 695 | print(json.dumps({ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | test/state.test.js | 3609 | // Qwen Code 0.16.1 self-submit filter — qwen's agentic loop fires a synthetic | COMMENT |
| MEDIUM | docs/releases/release-v0.6.0.md | 6 | - **Theme ecosystem** — fully pluggable theme system replacing hardcoded constants. Themes now define state-to-asset map | CODE |
| MEDIUM | docs/releases/release-v0.9.0.md | 13 | - **Mobile companion — read-only PWA LAN preview (M1)** (#391, #412, #419) - A new read-only mobile companion serves a s | CODE |
| MEDIUM | hooks/qwen-code-hook.js | 30 | // agentic-loop tool-result feedback, NOT user input. It used to flash | COMMENT |
| MEDIUM⚡ | src/state.js | 317 | // 2000ms window covers the agentic loop with ~2x headroom while still letting | COMMENT |
| MEDIUM⚡ | src/state.js | 322 | // PostToolUseFailure (where the agentic loop may still self-submit), and | COMMENT |
| MEDIUM | src/state.js | 1519 | // Qwen Code 0.16.1 self-submit guard. qwen's agentic loop fires a synthetic | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | hooks/hermes-plugin/__init__.py | 178 | def _read_runtime_port() -> Optional[int]: | CODE |
| LOW⚡ | hooks/hermes-plugin/__init__.py | 500 | except Exception: | CODE |
| LOW⚡ | hooks/hermes-plugin/__init__.py | 514 | except Exception: | CODE |
| LOW⚡ | hooks/hermes-plugin/__init__.py | 517 | except Exception: | CODE |
| LOW⚡ | hooks/hermes-plugin/__init__.py | 633 | except Exception: | CODE |
| LOW⚡ | hooks/hermes-plugin/__init__.py | 643 | except Exception as exc: | CODE |
| LOW⚡ | hooks/hermes-plugin/__init__.py | 660 | except Exception as exc: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 173 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 184 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 236 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 253 | except Exception as exc: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 315 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 347 | except Exception as exc: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 380 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 397 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 445 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 473 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 713 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 967 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 996 | except Exception as exc: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 1080 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 1126 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/gemini-log-monitor.test.js | 128 | // Step 1: user message → thinking | COMMENT |
| LOW⚡ | test/gemini-log-monitor.test.js | 145 | // Step 2: 300ms — gemini text, no toolCalls (deferred idle starts) | COMMENT |
| LOW⚡ | test/gemini-log-monitor.test.js | 153 | // Step 3: 800ms — toolCalls arrive (within 2s defer) → cancel idle, emit attention | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 275 | // Step 1: user message | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 287 | // Step 2: gemini with tools → attention, turnHasTools=true | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 299 | // Step 3: follow-up text (no tools) → should be SKIPPED (turnHasTools=true) | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 323 | // Step 1: user message | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 335 | // Step 2: gemini with tools → attention, turnHasTools=true | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 347 | // Step 3: new user message → resets turnHasTools | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 360 | // Step 4: gemini text without tools → should NOT be skipped (new turn, turnHasTools reset) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/gemini-log-monitor.test.js | 128 | // Step 1: user message → thinking | COMMENT |
| LOW⚡ | test/gemini-log-monitor.test.js | 145 | // Step 2: 300ms — gemini text, no toolCalls (deferred idle starts) | COMMENT |
| LOW⚡ | test/gemini-log-monitor.test.js | 153 | // Step 3: 800ms — toolCalls arrive (within 2s defer) → cancel idle, emit attention | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 275 | // Step 1: user message | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 287 | // Step 2: gemini with tools → attention, turnHasTools=true | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 299 | // Step 3: follow-up text (no tools) → should be SKIPPED (turnHasTools=true) | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 323 | // Step 1: user message | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 335 | // Step 2: gemini with tools → attention, turnHasTools=true | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 347 | // Step 3: new user message → resets turnHasTools | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 360 | // Step 4: gemini text without tools → should NOT be skipped (new turn, turnHasTools reset) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/settings-icons.test.js | 58 | const placeholder = icons.getIcon("placeholder"); | CODE |
| LOW | test/settings-icons.test.js | 66 | assert.strictEqual(icons.getIcon("no-such-tab-xyz"), icons.getIcon("placeholder")); | CODE |
| LOW | src/settings-renderer.js | 58 | div.className = "placeholder"; | CODE |
| LOW | src/settings-renderer.js | 60 | `<div class="placeholder-icon">${getTabIcon("placeholder")}</div>` + | CODE |
| LOW | src/settings-tab-agents.js | 96 | empty.className = "placeholder"; | CODE |
| LOW | src/settings-tab-theme.js | 39 | empty.className = "placeholder"; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/bubble-format.test.js | 163 | // server is always second-to-last, tool is last — robust to extra prefixes. | COMMENT |
| MEDIUM | src/remote-ssh-deploy.js | 271 | // with .trim(), so it's robust to either, but no-newline avoids | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hooks/hermes-plugin/__init__.py | 206 | CODE | |
| LOW | hooks/hermes-plugin/__init__.py | 265 | CODE | |
| LOW | hooks/hermes-plugin/__init__.py | 559 | CODE | |
| LOW | hooks/hermes-plugin/__init__.py | 1040 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test-macos.sh | 95 | # Check if the state server received it | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/remote-deploy.sh | 5 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hooks/hermes-plugin/__init__.py | 8 | CODE |