AI Slop Code Risk Monitor

rohitg00/agentmemory

SlopCodeMonitor badge for rohitg00/agentmemory Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

#1 Persistent memory for AI coding agents based on real-world benchmarks

1.3 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for rohitg00/agentmemory, a TypeScript project with 30,047 GitHub stars. SynthScan examined 247,938 lines of code across 919 source files, recording 225 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 1.3 (Low 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.

1.3
Adjusted Signal
1.3
Raw Pattern Score
100%
Time Factor
2026-10-29
Last Push
30.0K
Stars
TypeScript
Language
247.9K
Lines of Code
919
Files
225
Pattern Hits
2026-10-31
Scan Date
0.01
HC Hit Rate

Risk Review · Payload v1

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

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 4.2/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.6/100 · LOW

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

Agent Over-Engineering Ratio 4.0/100 · LOW

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

PR Review Velocity Impact 6.5/100 · LOW

Which changes need focused human review? 225 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 7HIGH 4MEDIUM 14LOW 200

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 225 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.

Hyper-Verbose Identifiers160 hits · 161 pts
SeverityFileLineSnippetContext
LOWbenchmark/quality-eval.ts430async function evalBuiltinMemoryTruncated(CODE
LOW⚡test/hermes-provider-contracts.py147 def test_url_delimiters_fail_closed_without_rejecting_encoded_paths(self):CODE
LOW⚡test/hermes-provider-contracts.py157 def test_plaintext_guard_uses_same_numeric_loopback_boundary(self):CODE
LOW⚡test/hermes-provider-contracts.py165 def test_authentication_offline_and_invalid_responses_are_distinguishable(self):CODE
LOW⚡test/hermes-provider-contracts.py266 def test_external_evolution_conflict_never_deletes_or_creates_a_competing_record(self):CODE
LOW⚡test/hermes-provider-contracts.py276 def test_foreign_identity_response_does_not_establish_mirror_ownership(self):CODE
LOW⚡test/hermes-provider-contracts.py282 def test_same_returned_id_is_never_deleted(self):CODE
LOW⚡test/hermes-provider-contracts.py351 def test_invalid_tool_arguments_never_reach_network(self):CODE
LOW⚡test/hermes-provider-contracts.py358 def test_search_failure_does_not_become_empty_success(self):CODE
LOW⚡test/hermes-provider-contracts.py366 def test_switch_orders_end_start_turn_and_end_uses_new_session(self):CODE
LOW⚡test/hermes-provider-contracts.py375 def test_native_session_start_shape_is_tracked_and_closed(self):CODE
LOW⚡test/hermes-provider-contracts.py400 def test_precompress_returns_bounded_context_without_mutating_transcript(self):CODE
LOW⚡test/hermes-provider-contracts.py409 def test_native_replace_is_mirrored_and_remove_never_guesses_shared_record_ids(self):CODE
LOW⚡test/hermes-provider-contracts.py416 def test_sync_waits_for_wire_completion_and_shutdown_waits_for_inflight_write(self):CODE
LOWtest/hermes-provider-contracts.py47 def test_missing_scoped_accessor_never_falls_back_to_environment_or_files(self):CODE
LOWtest/hermes-provider-contracts.py57 def test_provider_never_reads_credential_files(self):CODE
LOWtest/hermes-provider-contracts.py110 def test_config_precedence_and_no_saved_credential_on_url_override(self):CODE
LOWtest/hermes-provider-contracts.py123 def test_config_respects_initialize_home_and_does_not_save_secrets(self):CODE
LOWtest/hermes-provider-contracts.py135 def test_malformed_config_falls_back_and_invalid_explicit_url_is_unavailable(self):CODE
LOWtest/hermes-provider-contracts.py180 def test_endpoint_change_does_not_receive_a_different_endpoints_credentials(self):CODE
LOWtest/hermes-provider-contracts.py199 def test_credentials_rotate_for_the_same_endpoint(self):CODE
LOWtest/hermes-provider-contracts.py212 def test_routed_scope_never_falls_back_to_process_secrets_or_unscoped_profile(self):CODE
LOWtest/hermes-provider-contracts.py222 def test_replacement_evolves_only_exact_owned_previous_content(self):CODE
LOWtest/hermes-provider-contracts.py241 def test_mirror_ownership_survives_restart_and_failed_evolve_keeps_old_mapping(self):CODE
LOWtest/hermes-provider-contracts.py295 def test_redirects_refuse_to_forward_credentials(self):CODE
LOWtest/hermes-provider-contracts.py301 def test_native_save_preserves_metadata_and_search_preserves_result_identity(self):CODE
LOWtest/hermes-provider-contracts.py314 def test_prefetch_expands_scoped_compact_hits_and_keeps_beyond_title_evidence(self):CODE
LOWtest/hermes-provider-contracts.py335 def test_prefetch_cache_is_scoped_one_shot_and_invalidated_by_writes(self):CODE
LOWtest/hermes-provider-contracts.py388 def test_failed_end_remains_retryable_and_same_session_rewind_does_not_restart(self):CODE
LOWtest/hermes-provider-contracts.py438 def test_shutdown_is_bounded_and_late_writes_are_rejected(self):CODE
LOWtest/hermes-provider-contracts.py458 def test_same_workspace_and_session_are_isolated_by_profile_and_survive_restart(self):CODE
LOWtest/hermes-provider-contracts.py480 def test_concurrent_profiles_keep_endpoints_credentials_and_identity_bound(self):CODE
LOWtest/hermes-provider-contracts.py512 def test_cross_profile_provider_and_cache_fail_closed_even_with_same_endpoint(self):CODE
LOWtest/hermes-provider-contracts.py531 def test_cache_refuses_endpoint_or_identity_changes(self):CODE
LOWtest/hermes-provider-contracts.py542 def test_gateway_authors_are_context_local_and_delayed_writes_keep_their_author(self):CODE
LOWtest/hermes-provider-contracts.py566 def test_gateway_missing_author_never_reuses_primary_identity(self):CODE
LOWtest/hermes-provider-contracts.py576 def test_nonprimary_contexts_do_not_capture_or_modify_remote_state(self):CODE
LOWtest/hermes-provider-contracts.py587 def test_static_prompt_never_reads_cross_profile_project_context(self):CODE
LOWtest/hermes-provider-contracts.py593 def test_empty_session_ids_are_rejected_and_empty_switch_preserves_binding(self):CODE
LOWtest/hermes-provider-contracts.py606 def test_explicit_identity_is_deliberate_and_tool_overrides_are_validated(self):CODE
LOWtest/hermes-provider-contracts.py621 def test_native_scoped_credentials_rotate_without_reading_process_values(self):CODE
LOWtest/hermes-provider-contracts.py637 def test_host_workspace_and_explicit_project_determine_scope(self):CODE
LOWtest/hermes-plugin.test.ts48function readAgentMemoryProviderHookMethods(): string[] {CODE
LOWtest/cli-engine-startup.test.ts24 expect(source).toContain("function printCapturedStartupStderr()");CODE
LOWtest/cli-engine-startup.test.ts113 expect(source).toContain("function printCapturedStartupStderr()");CODE
LOWtest/index-persistence.test.ts66async function writeLegacyVectorSnapshot(CODE
LOWtest/cli-lifecycle-safety.test.ts64function runNativeRemoveWithWorkerFailure() {CODE
LOW⚡integrations/hermes/__init__.py124def _uses_plaintext_bearer_auth(base: str, secret: str = "") -> bool:CODE
LOW⚡integrations/hermes/__init__.py131def _plaintext_bearer_auth_message(base: str) -> str:CODE
LOW⚡integrations/hermes/__init__.py135def _warn_plaintext_bearer_auth(message: str) -> None:CODE
LOW⚡integrations/hermes/__init__.py139def _check_plaintext_bearer_guard(CODE
LOWintegrations/hermes/__init__.py155def _reset_plaintext_bearer_guard_for_tests() -> None:CODE
LOWscripts/skills/rest-endpoints.ts36export function collectRestEndpointsInDirectory(directory: string): { path: string; method: string }[] {CODE
LOWsrc/cli.ts708async function startWorkerForEngineState(background = false): Promise<void> {CODE
LOWsrc/cli.ts813function configuredEngineMayStartWorker(): boolean {CODE
LOWsrc/cli.ts827async function assertRuntimePortOwnership(): Promise<void> {CODE
LOWsrc/cli.ts1080function printCapturedStartupStderr(): void {CODE
LOWsrc/cli.ts1431async function waitForPersistedNativeEngine(): Promise<boolean> {CODE
LOWsrc/cli.ts1509async function reconcilePersistedComposeEngine(): Promise<boolean> {CODE
LOWsrc/cli.ts2998async function stopNativeEngineForRemoval(): Promise<NativeRemovalStopResult> {CODE
100 more matches not shown…
Hallucination Indicators7 hits · 70 pts
SeverityFileLineSnippetContext
CRITICALtest/compression-recovery.test.ts109 expect(r.sdk.trigger.mock.calls.some(([input]) => input.function_id === "stream::send")).toBe(false);CODE
CRITICALtest/compression-recovery.test.ts169 await vi.waitFor(() => expect(r.sdk.trigger.mock.calls.some(([input]) => input.function_id === "mem::compress")).toBCODE
CRITICALtest/compression-recovery.test.ts201 await vi.waitFor(() => expect(r.sdk.trigger.mock.calls.some(([input]) => input.function_id === "mem::compress")).toBCODE
CRITICALtest/compression-recovery.test.ts218 await vi.waitFor(() => expect(r.sdk.trigger.mock.calls.filter(([input]) => input.function_id === "mem::compress")).tCODE
CRITICALtest/compression-recovery.test.ts248 await vi.waitFor(() => expect(r.sdk.trigger.mock.calls.some(([input]) => input.function_id === "mem::compress")).toBCODE
CRITICALtest/compression-recovery.test.ts315 expect(r.sdk.trigger.mock.calls.some(([input]) => input.function_id === "stream::send")).toBe(false);CODE
CRITICALtest/recall-layer.test.ts152 expect(f.sdk.trigger.mock.calls.some(([call]) => call.function_id === "mem::lesson-recall")).toBe(false);CODE
Empty Error Handlers4 hits · 20 pts
SeverityFileLineSnippetContext
HIGHtest/hermes-live-model.py290except (OSError, ValueError, subprocess.CalledProcessError):CODE
HIGHtest/hermes-native-e2e.py384except (OSError, ValueError, subprocess.CalledProcessError):CODE
HIGHintegrations/hermes/__init__.py46except Exception:CODE
HIGHintegrations/hermes/__init__.py281except ImportError:CODE
Over-Commented Block20 hits · 20 pts
SeverityFileLineSnippetContext
LOWtest/snapshot-config.test.ts1import { describe, it, expect, beforeEach, afterEach } from "vitest";COMMENT
LOWtest/fetch-timeout.test.ts481 // We don't actually wait 60s — the provider stores timeoutMs atCOMMENT
LOWscripts/backfill-imported-sessions.sh1#!/usr/bin/env bashCOMMENT
LOWsrc/cli.ts561 } catch {COMMENT
LOWsrc/triggers/events.ts81 // Crystals + lessons consolidation. The stop lifecycle is the singleCOMMENT
LOWsrc/providers/_openai-shared.ts1// Shared transport helpers for the OpenAI-compatible LLM + embeddingCOMMENT
LOWsrc/cli/doctor-diagnostics.ts1// Doctor v2 diagnostic catalog.COMMENT
LOWsrc/cli/splash.ts1// Terminal-width-aware splash banner for the agentmemory CLI.COMMENT
LOWsrc/cli/preferences.ts1// JSON-backed CLI preferences.COMMENT
LOWsrc/cli/preferences.ts41 // The first onboarding sets this to true so the second invocationCOMMENT
LOWsrc/cli/onboarding.ts1// First-run interactive onboarding flow.COMMENT
LOWsrc/cli/remove-plan.ts1// `agentmemory remove` — destruction plan.COMMENT
LOWsrc/viewer/server.ts41COMMENT
LOWsrc/hooks/antigravity-bridge.ts1#!/usr/bin/env nodeCOMMENT
LOWsrc/hooks/cursor/workspace.ts301 return { name: canonicalProject(gitRootFromPath(targetPath)), fromGitRoot: true };COMMENT
LOWsrc/hooks/cursor/workspace.ts401//COMMENT
LOWsrc/hooks/cursor/workspace.ts441 if (++scanned > TRANSCRIPT_MATCH_LIMIT) break;COMMENT
LOWsrc/functions/remember.ts81 ? data.agentId.trim().slice(0, 128)COMMENT
LOWsrc/functions/search.ts181// inside the 5s debounce window would lose deletes and resurrectCOMMENT
LOWsrc/functions/export-import.ts41import { VERSION } from "../version.js";COMMENT
Decorative Section Separators6 hits · 18 pts
SeverityFileLineSnippetContext
MEDIUMtest/fetch-timeout.test.ts29// ─────────────────────────────────────────────────────────────COMMENT
MEDIUMtest/fetch-timeout.test.ts31// ─────────────────────────────────────────────────────────────COMMENT
MEDIUMtest/fetch-timeout.test.ts77// ─────────────────────────────────────────────────────────────COMMENT
MEDIUMtest/fetch-timeout.test.ts83// ─────────────────────────────────────────────────────────────COMMENT
MEDIUMtest/fetch-timeout.test.ts317// ─────────────────────────────────────────────────────────────COMMENT
MEDIUMtest/fetch-timeout.test.ts321// ─────────────────────────────────────────────────────────────COMMENT
Modern AI Meta-Vocabulary6 hits · 18 pts
SeverityFileLineSnippetContext
MEDIUM⚡website/lib/generated-changelog.json50 "body": "Stability + ecosystem wave. Three install-broken bugs (`npm install` ERESOLVE, non-OpenAI base URLs, brokenCODE
MEDIUM⚡website/lib/generated-changelog.json55 "body": "Quality + integration wave. Headline: native OpenCode plugin with full Claude Code hook parity ([#237](httpCODE
MEDIUMdocs/recipes/pairings.md40## [Understand Anything](https://github.com/Lum1104/Understand-Anything) — multi-agent code-graph pipeline + dashboardCOMMENT
MEDIUMREADMEs/README.he-IL.md1076### זיכרון multi-agent (`AGENT_ID` + `AGENTMEMORY_AGENT_SCOPE`)COMMENT
MEDIUMREADMEs/README.fr-FR.md1082### Mémoire multi-agent (`AGENT_ID` + `AGENTMEMORY_AGENT_SCOPE`)COMMENT
MEDIUMREADMEs/README.ro-RO.md1069### Memorie multi-agent (`AGENT_ID` + `AGENTMEMORY_AGENT_SCOPE`)COMMENT
Fake / Example Data9 hits · 9 pts
SeverityFileLineSnippetContext
LOWbenchmark/capture-costs.ts971 OPENAI_API_KEY: "bench-fake-key",CODE
LOWtest/viewer-host.test.ts230 process.env.VIEWER_ALLOWED_HOSTS = "placeholder";CODE
LOWtest/viewer-host.test.ts277 process.env.VIEWER_ALLOWED_HOSTS = "placeholder";CODE
LOWtest/schema.test.ts50 jaccardSimilarity('the quick brown fox', 'lorem ipsum dolor sit'),CODE
LOWtest/temporal-graph.test.ts78 <entity type="organization" name="Acme Corp">CODE
LOWtest/temporal-graph.test.ts83 <relationship type="works_at" source="Alice" target="Acme Corp" weight="0.9" valid_from="2024-01-01" valid_to="curreCODE
LOWtest/temporal-graph.test.ts146 name: "Acme Corp",CODE
LOWtest/temporal-graph.test.ts170 <entity type="organization" name="Acme Corp">CODE
LOWtest/temporal-graph.test.ts174 <relationship type="works_at" source="Alice" target="Acme Corp" weight="0.95" valid_from="2025-01-01" valid_to="currCODE
Deep Nesting5 hits · 5 pts
SeverityFileLineSnippetContext
LOWtest/hermes-live-model.py56CODE
LOWtest/hermes-live-model.py116CODE
LOWtest/hermes-native-e2e.py170CODE
LOWtest/hermes-native-e2e.py271CODE
LOWintegrations/hermes/__init__.py598CODE
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUM⚡website/lib/generated-changelog.json50 "body": "Stability + ecosystem wave. Three install-broken bugs (`npm install` ERESOLVE, non-OpenAI base URLs, brokenCODE
Excessive Try-Catch Wrapping3 hits · 2 pts
SeverityFileLineSnippetContext
LOWtest/hermes-live-model.py127 except Exception:CODE
LOWtest/hermes-native-e2e.py283 except Exception:STRING
LOWintegrations/hermes/__init__.py46 except Exception:CODE
Unused Imports2 hits · 2 pts
SeverityFileLineSnippetContext
LOWtest/hermes-live-model.py4CODE
LOWintegrations/hermes/__init__.py9CODE
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMtest/summarize.test.ts426 }) + "\n```\nLet me know if you need anything else.";CODE
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWscripts/backfill-imported-sessions.sh17# Usage:COMMENT