AI Slop Code RIsk Monitor

fathah/hermes-desktop

Desktop Companion for Hermes Agent

5.9 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for fathah/hermes-desktop, a TypeScript project with 14,391 GitHub stars. SynthScan examined 212,579 lines of code across 911 source files, recording 606 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 5.9 (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.

5.9
Adjusted Signal
5.9
Raw Pattern Score
100%
Time Factor
2026-10-11
Last Push
14.4K
Stars
TypeScript
Language
212.6K
Lines of Code
911
Files
606
Pattern Hits
2026-10-12
Scan Date
0.07
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 8.3/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 8.3/100 · LOW

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

Agent Over-Engineering Ratio 16.9/100 · LOW

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

PR Review Velocity Impact 26.6/100 · MEDIUM

Which changes need focused human review? 606 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 66MEDIUM 189LOW 351

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 606 distinct pattern matches across 13 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.

Decorative Section Separators167 hits · 500 pts
SeverityFileLineSnippetContext
MEDIUMtests/installer-utils.test.ts38// ─── readLogs (test the logic, not the import) ─────────COMMENT
MEDIUMtests/installer-utils.test.ts71// ─── MCP server YAML parsing ───────────────────────────COMMENT
MEDIUMtests/installer-utils.test.ts164// ─── Memory provider discovery logic ────────────────────COMMENT
MEDIUMtests/installer-utils.test.ts237// ─── OAuth credential discovery ─────────────────COMMENT
MEDIUMtests/installer-utils.test.ts313// ─── OpenClaw detector ─────────────────────────────────COMMENT
MEDIUMtests/installer-utils.test.ts368// ─── Backward compatibility checks ─────────────────────COMMENT
MEDIUMtests/buildUserContent.test.ts63// ── helpers ──────────────────────────────────────────────COMMENT
MEDIUMtests/buildUserContent.test.ts112// ── tests ────────────────────────────────────────────────COMMENT
MEDIUMtests/constants.test.ts16// ─── PROVIDERS ──────────────────────────────────────────COMMENT
MEDIUMtests/constants.test.ts91// ─── GATEWAY_PLATFORMS ──────────────────────────────────COMMENT
MEDIUMtests/constants.test.ts148// ─── GATEWAY_SECTIONS ───────────────────────────────────COMMENT
MEDIUMtests/constants.test.ts188// ─── SETTINGS_SECTIONS ──────────────────────────────────COMMENT
MEDIUMtests/constants.test.ts224// ─── Static constants ───────────────────────────────────COMMENT
MEDIUMtests/constants.test.ts254// ─── providerRouteForEnvKey ─────────────────────────────COMMENT
MEDIUMtests/sse-parser.test.ts8// ─── parseSseBlock ──────────────────────────────────────COMMENT
MEDIUMtests/sse-parser.test.ts45// ─── processCustomEvent ─────────────────────────────────COMMENT
MEDIUMtests/sse-parser.test.ts163// ─── processSseData ─────────────────────────────────────COMMENT
MEDIUMtests/ipc-handlers.test.ts62// ─── New feature handlers registered ────────────────────COMMENT
MEDIUMtests/ipc-handlers.test.ts91// ─── Legacy handlers still present ──────────────────────COMMENT
MEDIUMtests/validation.test.ts266 // ── Nous Portal (issue #367) ─────────────────────────────────COMMENT
MEDIUMtests/validation.test.ts266 // ── Nous Portal (issue #367) ─────────────────────────────────COMMENT
MEDIUMtests/preload-api-surface.test.ts66// ─── New APIs exist ─────────────────────────────────────COMMENT
MEDIUMtests/preload-api-surface.test.ts166// ─── Legacy APIs still present ──────────────────────────COMMENT
MEDIUMtests/preload-api-surface.test.ts269// ─── IPC channel consistency ────────────────────────────COMMENT
MEDIUMscripts/verify-369-wsl-drift.js36 // ── A. Run audit, look for drift issues ─────────────────────COMMENT
MEDIUMscripts/verify-369-wsl-drift.js61 // ── B. Auto-fix the first autoFixable drift ────────────────COMMENT
MEDIUMscripts/verify-369-wsl-drift.js86 // ── C. Confirm Windows-side .env now has the value ──────────COMMENT
MEDIUMscripts/verify-369-wsl-drift.js97 // ── D. Re-run audit — the same drift should be gone ────────COMMENT
MEDIUMsrc/renderer/src/constants.ts1// ── Shared Types ────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/constants.ts35// ── Providers ───────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/constants.ts661// ── Theme ───────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/constants.ts710// ── Font ────────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/constants.ts740// ── Settings API Key Sections ───────────────────────────COMMENT
MEDIUMsrc/renderer/src/constants.ts1016// ── Gateway Sections ────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/constants.ts1352// ── Install ─────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/attachmentUtils.test.ts19// ── helpers ──────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/attachmentUtils.test.ts49// ── processFiles ─────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/attachmentUtils.test.ts202// ── filesFromClipboard ───────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/attachmentUtils.ts63// ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/attachmentUtils.ts65// ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/ModelPicker.test.tsx100 // ── initial render ──────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/ModelPicker.test.tsx114 // ── open / close ────────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/ModelPicker.test.tsx162 // ── model list rendering ────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/ModelPicker.test.tsx210 // ── model selection ─────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/ModelPicker.test.tsx232 // ── search / filtering ──────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/ModelPicker.test.tsx290 // ── provider rail ───────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/ModelPicker.test.tsx306 // ── configure providers/models footer ───────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/ModelPicker.test.tsx324 // ── edge cases ──────────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/MessageList.tsx129 // ── Scroll-driven expansion (infinite history) ────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/mediaUtils.test.ts26 // ── Explicit MEDIA: tokens ─────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/mediaUtils.test.ts65 // ── Whole-line bare paths ──────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/mediaUtils.test.ts95 // ── Inline bare paths (mid-sentence) ───────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/mediaUtils.test.ts239 // ── False-positive guards ──────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Chat/mediaUtils.test.ts362 // ── Misc ───────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Office/office3d/trips.ts37// ── Tuning ─────────────────────────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Office/office3d/layout.ts61// ── Partition between work area (west) and rest room (east) ────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Office/office3d/layout.ts89// ── Desks (work area, west of the partition) ───────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Office/office3d/layout.ts98// ── CEO executive desk ─────────────────────────────────────────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Office/office3d/layout.ts113// ── CEO glass corner office (south-west of the work area) ──────────────────COMMENT
MEDIUMsrc/renderer/src/screens/Office/office3d/layout.ts291// ── Rest room (east of the partition) ──────────────────────────────────────COMMENT
107 more matches not shown…
Cross-Language Confusion (JS/TS)65 hits · 360 pts
SeverityFileLineSnippetContext
HIGHtests/hermes-agent-compat-profiles.test.ts61 print(json.dumps({CODE
HIGHscripts/repro-session-proliferation.js48print(json.dumps({"total": total, "rows": rows}))CODE
HIGHscripts/repro-long-conversation.js42print(json.dumps({"total": total, "rows": rows}))CODE
HIGHscripts/repro-gateway-restart-midchat.js43print(json.dumps({"rows": rows}))CODE
HIGHscripts/repro-gateway-restart-v2.js32print(json.dumps({"rows": rows}))CODE
HIGH⚡src/main/ssh-docker.ts170 return FalseCODE
HIGH⚡src/main/ssh-docker.ts177 return TrueCODE
HIGH⚡src/main/ssh-docker.ts178 return FalseCODE
HIGHsrc/main/ssh-docker.ts139elif os.path.exists(home):CODE
HIGHsrc/main/ssh-docker.ts214print(json.dumps({CODE
HIGHsrc/main/ssh-docker.ts313 print(json.dumps({"ok": False, "error": msg}))CODE
HIGHsrc/main/ssh-docker.ts354print(json.dumps({"ok": True, "dataHome": data_home, "execUser": exec_user, "cliPath": cli_path}))CODE
HIGHsrc/main/ssh-docker.ts392 print(json.dumps({"ok": False, "error": msg, "warnings": warnings}))CODE
HIGHsrc/main/ssh-docker.ts423elif os.path.isdir(home):CODE
HIGHsrc/main/ssh-docker.ts428elif os.path.exists(home):CODE
HIGHsrc/main/ssh-docker.ts485print(json.dumps({"ok": True, "version": version.stdout.strip(), "warnings": warnings}))CODE
HIGH⚡src/main/ssh-remote.ts490 print(json.dumps({"totalSessions": 0, "totalMessages": 0}))CODE
HIGH⚡src/main/ssh-remote.ts496 print(json.dumps({"totalSessions": s, "totalMessages": m}))CODE
HIGH⚡src/main/ssh-remote.ts498 print(json.dumps({"totalSessions": 0, "totalMessages": 0}))CODE
HIGH⚡src/main/ssh-remote.ts1597 print(json.dumps({"data_url": None})); sys.exit(0)CODE
HIGH⚡src/main/ssh-remote.ts1602 print(json.dumps({"data_url": None})); sys.exit(0)CODE
HIGH⚡src/main/ssh-remote.ts1605 print(json.dumps({"data_url": None})); sys.exit(0)CODE
HIGH⚡src/main/ssh-remote.ts1609 print(json.dumps({"data_url": None})); sys.exit(0)CODE
HIGH⚡src/main/ssh-remote.ts1610 print(json.dumps({"data_url": "data:%s;base64,%s" % (mime, base64.b64encode(data).decode("ascii"))}))CODE
HIGH⚡src/main/ssh-remote.ts1612 print(json.dumps({"data_url": None}))CODE
HIGH⚡src/main/ssh-remote.ts1710 print(json.dumps(result))CODE
HIGH⚡src/main/ssh-remote.ts1712 print("[]")CODE
HIGH⚡src/main/ssh-remote.ts1889 if not os.path.exists(pid_file): return FalseCODE
HIGH⚡src/main/ssh-remote.ts1900 return TrueCODE
HIGH⚡src/main/ssh-remote.ts1902 return FalseCODE
HIGH⚡src/main/ssh-remote.ts2285 return NoneCODE
HIGH⚡src/main/ssh-remote.ts2291 return NoneCODE
HIGH⚡src/main/ssh-remote.ts2299 return NoneCODE
HIGH⚡src/main/ssh-remote.ts2638 print(response.status)CODE
HIGH⚡src/main/ssh-remote.ts2640 print(0)CODE
HIGHsrc/main/ssh-remote.ts182elif raw.startswith("$HOME/"):CODE
HIGHsrc/main/ssh-remote.ts192print(json.dumps(rows))CODE
HIGHsrc/main/ssh-remote.ts297print(json.dumps(skills))CODE
HIGHsrc/main/ssh-remote.ts1024 return FalseCODE
HIGHsrc/main/ssh-remote.ts1044print(json.dumps(result))CODE
HIGHsrc/main/ssh-remote.ts1393 print("[]"); sys.exit(0)CODE
HIGHsrc/main/ssh-remote.ts1409print(json.dumps(result))CODE
HIGHsrc/main/ssh-remote.ts1441 print("[]"); sys.exit(0)CODE
HIGHsrc/main/ssh-remote.ts1545print(json.dumps(items))CODE
HIGHsrc/main/ssh-remote.ts1687 print("[]"); sys.exit(0)CODE
HIGHsrc/main/ssh-remote.ts1929print(json.dumps(profiles))CODE
HIGHsrc/main/ssh-remote.ts2366 print(current)CODE
HIGHsrc/main/ssh-remote.ts2370 print(port)CODE
HIGHsrc/main/ssh-remote.ts2564print(sock.getsockname()[1])CODE
HIGHsrc/main/ssh-remote.ts3419print(json.dumps(result))CODE
HIGHsrc/main/ssh-env-update.ts46 elif sys.platform.startswith("linux"):CODE
HIGHsrc/main/ssh-env-update.ts68 elif operation not in ("ensure-dashboard", "ensure-api"):CODE
HIGHsrc/main/ssh-env-update.ts112 elif operation == "ensure-dashboard":CODE
HIGHsrc/main/ssh-env-update.ts130 elif key not in seen:CODE
HIGH⚡src/main/ssh-env-update.ts160 print(json.dumps(update_env(json.load(sys.stdin))))CODE
HIGH⚡src/main/ssh-env-update.ts162 print("Could not safely update remote credentials: " + str(error), file=sys.stderr)CODE
HIGH⚡src/main/hermes-agent-compat.ts145 return NoneCODE
HIGH⚡src/main/hermes-agent-compat.ts149 return NoneCODE
HIGH⚡src/main/hermes-agent-compat.ts195 return NoneCODE
HIGH⚡src/main/hermes-agent-compat.ts202 return NoneCODE
5 more matches not shown…
Hyper-Verbose Identifiers272 hits · 267 pts
SeverityFileLineSnippetContext
LOWAGENTS.md71def test_rejects_expired_tokens():CODE
LOWAGENTS.md75def test_handles_missing_password():CODE
LOWCLAUDE.md71def test_rejects_expired_tokens():CODE
LOWCLAUDE.md75def test_handles_missing_password():CODE
LOWtests/connection-config-security.test.ts10async function loadConnectionConfigModule(): Promise<CODE
LOWtests/remote-history.test.ts30function extractLocalRecoveryFunction(): string {CODE
LOWtests/remote-history.test.ts32 "async function sendMessageViaBestApiWithLocalRecovery(",CODE
LOWtests/remote-history.test.ts148 "async function sendMessageViaBestApiWithLocalRecovery(",CODE
LOWtests/ipc-handlers.test.ts29function extractPreloadInvokeChannels(src: string): string[] {CODE
LOWtests/hermes-agent-compat.test.ts35function normalizeWithInjectedPython(values: string[]): string[] {CODE
LOWtests/hermes-agent-compat.test.ts43 const start = patched.indexOf("def _hermes_one_normalize_url_path(path):");CODE
LOW⚡tests/hermes-agent-compat.test.ts147 "def _hermes_one_model_library_path(profile=None)",CODE
LOW⚡tests/hermes-agent-compat.test.ts150 "def _hermes_one_current_model_row(profile=None)",CODE
LOW⚡tests/hermes-agent-compat.test.ts156 "def hermes_one_get_model_library(profile: Optional[str] = None)",CODE
LOW⚡tests/hermes-agent-compat.test.ts165 "def hermes_one_add_model_library_row(body: Dict[str, Any], profile: Optional[str] = None)",CODE
LOW⚡tests/hermes-agent-compat.test.ts168 "def hermes_one_update_model_library_row(model_id: str, body: Dict[str, Any], profile: Optional[str] = None)",CODE
LOW⚡tests/hermes-agent-compat.test.ts171 "def hermes_one_delete_model_library_row(model_id: str, profile: Optional[str] = None)",CODE
LOWtests/hermes-agent-compat.test.ts265def hermes_one_get_model_library():CODE
LOW.agents/skills/lat-md/SKILL.md141def test_rejects_expired_tokens():CODE
LOW.claude/skills/lat-md/SKILL.md141def test_rejects_expired_tokens():CODE
LOWscripts/drive-live-regression-suite.js77function assertNoDuplicateRenderedImages(state, label) {CODE
LOWsrc/renderer/src/App.tsx206 function handleDismissVerifyWarning(): void {CODE
LOWsrc/renderer/src/utils/analytics.ts48function getOrCreateAnonymousId(): string {CODE
LOWsrc/renderer/src/screens/Settings/ConfigHealth.tsx45function publishConfigHealthReport(report: Report): void {CODE
LOWsrc/renderer/src/screens/Chat/mediaUtils.ts201function markdownDestinationRanges(content: string): Array<[number, number]> {CODE
LOWsrc/renderer/src/screens/Chat/chatNotifications.ts2export function shouldPlayCompletionSound(CODE
LOWsrc/renderer/src/screens/Chat/dashboardEventAdapter.ts29export function dashboardApprovalRequestId(CODE
LOWsrc/renderer/src/screens/Chat/dashboardEventAdapter.ts230function toolEventFromGatewayEvent(event: DashboardStreamEvent): ChatToolEvent {CODE
LOWsrc/renderer/src/screens/Chat/dashboardEventAdapter.ts606function hasReasoningSinceLastUser(CODE
LOWsrc/renderer/src/screens/Chat/dashboardEventAdapter.ts619function addCompletionReasoningFallback(CODE
LOWsrc/renderer/src/screens/Chat/dashboardEventAdapter.ts651function completeAssistantWithFinalText(CODE
LOWsrc/renderer/src/screens/Chat/dashboardEventAdapter.ts700export function applyDashboardStreamEvent(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts149function normalizeBubbleContentForMatch(s: string): string {CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts159function buildDbAssistantSplitSequences(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts248function isSyntheticLiveToolMessage(m: ChatMessage): boolean {CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts262function consumeCanonicalToolMatch(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts282function mergeDbMetadataIntoStreamed(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts338function compactOrphanDuplicateUserRuns(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts398function anchorUnmatchedUsersBeforeConsumedTurnRows(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts468function hasUniqueCurrentUserContent(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts506function findNextOutputAnchorIndex(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts522function hasEquivalentAssistantError(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts552export function preserveLocalAssistantErrors(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts639function firstDbIndexMatchingActiveTurnOutput(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts660function findPreviousLocalErrorIndex(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts910function dropLossyStreamedReasoning(CODE
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts958function repositionInteractiveCards(CODE
LOWsrc/renderer/src/screens/Chat/dashboardGatewayClient.ts48export function normalizeDashboardNotification(CODE
LOWsrc/renderer/src/screens/Chat/liveToolEvents.ts7function toolProgressToNameAndPreview(progress: string): {CODE
LOWsrc/renderer/src/screens/Chat/liveToolEvents.ts28export function liveToolEventFromProgress(progress: string): ChatToolEvent {CODE
LOWsrc/renderer/src/screens/Chat/liveToolEvents.ts91function findLatestRunningSyntheticToolIndex(CODE
LOWsrc/renderer/src/screens/Chat/liveToolEvents.ts110function findLatestRunningSyntheticToolByNameIndex(CODE
LOWsrc/renderer/src/screens/Chat/liveToolEvents.ts167function upsertToolResultAfterCall(CODE
LOW…enderer/src/screens/Chat/slash/virtualSlashCommands.ts31export function createSlashCommandVirtualLayout(CODE
LOW…enderer/src/screens/Chat/slash/virtualSlashCommands.ts73export function getVisibleSlashCommandRows(CODE
LOW…er/src/screens/Chat/hooks/useDashboardChatTransport.ts164export function dashboardChatEnabledFromEnv(CODE
LOW…er/src/screens/Chat/hooks/useDashboardChatTransport.ts170export function dashboardChatEnabledForConnection(CODE
LOW⚡…er/src/screens/Chat/hooks/useDashboardChatTransport.ts185export function dashboardShouldPersistLocalOverlays(CODE
LOW⚡…er/src/screens/Chat/hooks/useDashboardChatTransport.ts191export function isDashboardSessionNotFoundError(err: unknown): boolean {CODE
LOW⚡…er/src/screens/Chat/hooks/useDashboardChatTransport.ts196export function isDashboardSlashWorkerExitError(err: unknown): boolean {CODE
212 more matches not shown…
Modern AI Meta-Vocabulary20 hits · 48 pts
SeverityFileLineSnippetContext
MEDIUMAGENTS.md36- **Section ids**: `lat.md/path/to/file#Heading#SubHeading` — full form uses project-root-relative path (e.g. `lat.md/teCODE
MEDIUMCLAUDE.md36- **Section ids**: `lat.md/path/to/file#Heading#SubHeading` — full form uses project-root-relative path (e.g. `lat.md/teCODE
MEDIUMlat.md/provider-setup.md176[[src/renderer/src/components/ProviderKeysSection.tsx#ProviderModelsManager]] renders below the key field in the config CODE
MEDIUMlat.md/model-context.md1# Model context windowCOMMENT
MEDIUMlat.md/model-context.md21For local connections, [[src/main/model-discovery.ts#getModelContextWindow]] consults [[src/main/config.ts#getModelConteCODE
MEDIUMtests/hermes-agent-compat-profiles.test.ts7 // @lat: [[model-context#Model context window#Dashboard default profile isolation]]COMMENT
MEDIUM.agents/skills/lat-md/SKILL.md64Examples: `lat.md/tests/search#RAG Replay Tests`, `cli#init`, `parser#Wiki Links`.CODE
MEDIUM.agents/skills/hermes-agent/SKILL.md20 - 5.2 [Tool Orchestration (model_tools.py)](#52-tool-orchestration-model_toolspy)CODE
MEDIUM.agents/skills/hermes-agent/SKILL.md164├── model_tools.py # Tool orchestration, _discover_tools(), handle_function_call()CODE
MEDIUM.agents/skills/hermes-agent/SKILL.md1262├── autonomous-ai-agents/ # Multi-agent orchestrationCODE
MEDIUM.claude/skills/lat-md/SKILL.md64Examples: `lat.md/tests/search#RAG Replay Tests`, `cli#init`, `parser#Wiki Links`.CODE
MEDIUM.claude/skills/hermes-agent/SKILL.md20 - 5.2 [Tool Orchestration (model_tools.py)](#52-tool-orchestration-model_toolspy)CODE
MEDIUM.claude/skills/hermes-agent/SKILL.md164├── model_tools.py # Tool orchestration, _discover_tools(), handle_function_call()CODE
MEDIUM.claude/skills/hermes-agent/SKILL.md1262├── autonomous-ai-agents/ # Multi-agent orchestrationCODE
MEDIUMsrc/renderer/src/screens/Chat/MessageList.tsx278 // rows — reasoning and tool rows would triple the number in agenticCOMMENT
MEDIUMsrc/main/agent-config-providers.test.ts120 // The agent's config scaffold writes `providers: {}` (inline empty dict).COMMENT
MEDIUMsrc/main/model-discovery.ts624// @lat: [[model-context#Model context window#Gauge resolution order]]COMMENT
MEDIUMsrc/main/config.ts1268// @lat: [[model-context#Model context window#Storage and propagation]]COMMENT
MEDIUMsrc/main/model-context.ts11// @lat: [[model-context#Model context window#Gauge resolution order]]COMMENT
MEDIUMsrc/main/agent-config-providers.ts219 // The agent's config scaffold writes an inline empty dict (`providers: {}`),COMMENT
Over-Commented Block47 hits · 42 pts
SeverityFileLineSnippetContext
LOWtests/install-gate-providers.test.ts101 });COMMENT
LOWtests/ssh-remote-paths.test.ts1import { describe, expect, it } from "vitest";COMMENT
LOWtests/config-value-paths.test.ts1import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";COMMENT
LOW.agents/skills/typescript-expert/SKILL.md201COMMENT
LOW…ills/typescript-expert/references/tsconfig-strict.json41 "baseUrl": ".",COMMENT
LOWsrc/renderer/src/constants.ts361 // "Local / Others" — this chip covers both local servers and any remoteCOMMENT
LOWsrc/renderer/src/constants.ts521 group: "remote",COMMENT
LOWsrc/renderer/src/screens/Chat/attachmentUtils.ts61}COMMENT
LOWsrc/renderer/src/screens/Chat/attachmentUtils.ts181 const probeCtx = probeCanvas.getContext("2d");COMMENT
LOWsrc/renderer/src/screens/Chat/attachmentUtils.ts221 // Phase 1 — lossy formats: step quality down from 0.85 to 0.5COMMENT
LOWsrc/renderer/src/screens/Chat/dashboardEventAdapter.ts521 if (normStreamed.includes(normFinal)) return streamedContent;COMMENT
LOWsrc/renderer/src/screens/Chat/sessionHistory.ts801 // `onChatError`). Preserve those tail-of-stream additions so theCOMMENT
LOWsrc/renderer/src/screens/Chat/contextWindows.ts21 // Mythos-class named models (claude-fable-5, …) — 1M context. Must comeCOMMENT
LOWsrc/renderer/src/screens/Office/RepInteractionPanel.tsx181 // the panel can stay mounted while the tab is hidden and the user changes theCOMMENT
LOWsrc/renderer/src/screens/Office/RepInteractionPanel.tsx241 // The panel stays mounted while the Office selection changes (e.g. clickingCOMMENT
LOWsrc/renderer/src/screens/Office/office3d/layout.ts101// grid which fills the rows to the north, with surrounding decorCOMMENT
LOWsrc/renderer/src/screens/Office/office3d/Office3D.tsx241COMMENT
LOW…/renderer/src/screens/Office/office3d/core/cityPlan.ts21// ── Office entrance (south wall doorway) ──────────────────────────────────COMMENT
LOWsrc/renderer/src/screens/Providers/Providers.tsx241 // blurring the API key input lost their typed key — config.yamlCOMMENT
LOWsrc/renderer/src/screens/Providers/Providers.tsx301 // typing in the Model field still feels responsive.COMMENT
LOWsrc/main/remote-skills.ts1import { getApiUrl, getRemoteAuthHeader } from "./hermes";COMMENT
LOWsrc/main/validation.ts61// Nous Portal used to live here but was moved out because it supportsCOMMENT
LOWsrc/main/profiles.ts381 },COMMENT
LOWsrc/main/ssh-docker.ts21// remote file read/write (config, .env, sessions, logs, profiles) seesCOMMENT
LOWsrc/main/yaml-path.ts1// Tiny indentation-aware YAML reader that resolves a dotted key path againstCOMMENT
LOWsrc/main/config-health.ts521 }COMMENT
LOWsrc/main/ssh-remote.ts1081//COMMENT
LOWsrc/main/ssh-remote.ts2401 key: string;COMMENT
LOWsrc/main/ssh-remote.ts2481// remote and tunnels to it for the model library, session list, and the chatCOMMENT
LOWsrc/main/ssh-remote.ts3281 messageCount: s.messageCount,COMMENT
LOWsrc/main/ssh-remote.ts3301//COMMENT
LOWsrc/main/default-models.ts61 // qwen/qwen3-32b, qwen/qwen3-8b, Qwen/Qwen3-Coder, qwen/qwen3-coder-next,COMMENT
LOWsrc/main/installer.ts41// Resolve the Hermes data directory. Precedence:COMMENT
LOWsrc/main/installer.ts181// On Windows, use `pythonw.exe` (the GUI-subsystem interpreter that ships inCOMMENT
LOWsrc/main/hermes.ts1481 messages,COMMENT
LOWsrc/main/hermes.ts1501 const headers = getJsonApiHeaders(profile, bodyBuf, conn);COMMENT
LOWsrc/main/hermes.ts2801 //COMMENT
LOWsrc/main/hermes.ts3481 // `API_SERVER_KEY=`, and config.yaml `api_server.token:` (each per-profileCOMMENT
LOWsrc/main/gpu-fallback.ts21function shouldHonorPersistedGpuFlag(): boolean {COMMENT
LOWsrc/main/models.ts321 try {COMMENT
LOWsrc/main/config.ts1281 // custom/compatible endpoints). `undefined` leaves the key untouchedCOMMENT
LOWsrc/main/config.ts1301 content = upsertBlockChild(content, "model", "default", model);COMMENT
LOWsrc/main/config.ts1761// platforms to start from env vars in .env; it doesn't look at a fictionalCOMMENT
LOWsrc/main/secrets/securityInvariants.test.ts101 // INV-3: list() and get() AGREE on membership. If a key is enumerated byCOMMENT
LOWsrc/main/secrets/index.ts201 const provider = getSecretsProvider(profile);COMMENT
LOWsrc/main/secrets/commandProvider.ts81 // env-shaped line falls through to the bare-value branch, because a bareCOMMENT
LOWsrc/main/secrets/getSpawnFloor.test.ts1import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";COMMENT
Excessive Try-Catch Wrapping24 hits · 20 pts
SeverityFileLineSnippetContext
LOW…ents/skills/typescript-expert/scripts/ts_diagnostic.py18 except Exception as e:CODE
MEDIUMsrc/main/ssh-docker.ts119def run(args, timeout=8):CODE
LOW⚡src/main/ssh-docker.ts165 except Exception:CODE
LOWsrc/main/ssh-docker.ts124 except Exception:CODE
LOWsrc/main/ssh-docker.ts143 except Exception:CODE
LOWsrc/main/ssh-docker.ts404 except Exception:CODE
LOWsrc/main/ssh-docker.ts446 except Exception:CODE
LOWsrc/main/ssh-docker.ts479 except Exception as exc:CODE
LOW⚡src/main/ssh-remote.ts1611except Exception:CODE
LOW⚡src/main/ssh-remote.ts1711except Exception as e:CODE
LOW⚡src/main/ssh-remote.ts1897 except Exception:CODE
LOW⚡src/main/ssh-remote.ts2639except Exception:CODE
LOWsrc/main/ssh-remote.ts390 except Exception:CODE
LOWsrc/main/ssh-remote.ts1019 except Exception:CODE
LOWsrc/main/ssh-remote.ts1455 except Exception:CODE
LOWsrc/main/ssh-remote.ts1481 except Exception:CODE
LOWsrc/main/ssh-remote.ts1498 except Exception:CODE
LOWsrc/main/ssh-remote.ts1512 except Exception:CODE
LOW⚡src/main/ssh-env-update.ts161except Exception as error:CODE
LOW⚡src/main/hermes-agent-compat.ts194 except Exception:CODE
LOW⚡src/main/hermes-agent-compat.ts201 except Exception:CODE
LOWsrc/main/hermes-agent-compat.ts165 except Exception:CODE
LOWsrc/main/hermes-agent-compat.ts556except Exception:CODE
LOWsrc/main/hermes-agent-compat.ts657except Exception:CODE
Magic Placeholder Names1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHtests/ssh-env-update.test.ts345 it.each(["", "short", "changeme", "API_SERVER_KEY", "your-api-key"])(CODE
Verbosity Indicators2 hits · 3 pts
SeverityFileLineSnippetContext
LOWsrc/main/claw3d.ts706 // Step 1: Clone (or pull if already cloned)COMMENT
LOWsrc/main/claw3d.ts775 // Step 2: npm installCOMMENT
Structural Annotation Overuse2 hits · 3 pts
SeverityFileLineSnippetContext
LOWsrc/main/claw3d.ts706 // Step 1: Clone (or pull if already cloned)COMMENT
LOWsrc/main/claw3d.ts775 // Step 2: npm installCOMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMsrc/main/gpu-fallback.ts37// because the GPU process still attempts to initialize. The robust fix is toCOMMENT
Unused Imports2 hits · 2 pts
SeverityFileLineSnippetContext
LOW…ents/skills/typescript-expert/scripts/ts_diagnostic.py8CODE
LOW…ents/skills/typescript-expert/scripts/ts_diagnostic.py9CODE
Fake / Example Data2 hits · 2 pts
SeverityFileLineSnippetContext
LOWscripts/probe-selectors.js21 const placeholder = el.getAttribute("placeholder");CODE
LOWscripts/repro-edit-model-emptykey.js61 placeholder: el.getAttribute("placeholder"),CODE
Deep Nesting1 hit · 1 pts
SeverityFileLineSnippetContext
LOW…ents/skills/typescript-expert/scripts/ts_diagnostic.py74CODE