AI Slop Code RIsk Monitor

frankbria/ralph-claude-code

Autonomous AI development loop for Claude Code with intelligent exit detection

14.4 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for frankbria/ralph-claude-code, a Shell project with 9,677 GitHub stars. SynthScan examined 31,414 lines of code across 87 source files, recording 231 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 14.4 (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.

14.4
Adjusted Signal
14.4
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
9.7K
Stars
Shell
Language
31.4K
Lines of Code
87
Files
231
Pattern Hits
2026-10-12
Scan Date
0.02
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 26.8/100 · MEDIUM

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

Hallucinated Dependency & Supply Chain Risk 0.8/100 · LOW

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

Agent Over-Engineering Ratio 33.0/100 · MEDIUM

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

PR Review Velocity Impact 50.0/100 · MEDIUM

Which changes need focused human review? 231 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 2MEDIUM 97LOW 132

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 231 distinct pattern matches across 12 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 Separators80 hits · 240 pts
SeverityFileLineSnippetContext
MEDIUMralph_enable.sh36# =============================================================================COMMENT
MEDIUMralph_enable.sh38# =============================================================================COMMENT
MEDIUMralph_enable.sh53# =============================================================================COMMENT
MEDIUMralph_enable.sh55# =============================================================================COMMENT
MEDIUMralph_enable.sh113# =============================================================================COMMENT
MEDIUMralph_enable.sh115# =============================================================================COMMENT
MEDIUMralph_enable.sh185# =============================================================================COMMENT
MEDIUMralph_enable.sh187# =============================================================================COMMENT
MEDIUMralph_enable.sh266# =============================================================================COMMENT
MEDIUMralph_enable.sh268# =============================================================================COMMENT
MEDIUMralph_enable.sh349# =============================================================================COMMENT
MEDIUMralph_enable.sh351# =============================================================================COMMENT
MEDIUMralph_enable.sh403# =============================================================================COMMENT
MEDIUMralph_enable.sh405# =============================================================================COMMENT
MEDIUMralph_enable.sh477# =============================================================================COMMENT
MEDIUMralph_enable.sh479# =============================================================================COMMENT
MEDIUMralph_enable.sh552# =============================================================================COMMENT
MEDIUMralph_enable.sh554# =============================================================================COMMENT
MEDIUMralph_import.sh65# =============================================================================COMMENT
MEDIUMralph_import.sh67# =============================================================================COMMENT
MEDIUMralph_import.sh248# =============================================================================COMMENT
MEDIUMralph_import.sh250# =============================================================================COMMENT
MEDIUMralph_loop.sh1115# =============================================================================COMMENT
MEDIUMralph_loop.sh1117# =============================================================================COMMENT
MEDIUMralph_loop.sh1434# =============================================================================COMMENT
MEDIUMralph_loop.sh1436# =============================================================================COMMENT
MEDIUMralph_enable_ci.sh44# =============================================================================COMMENT
MEDIUMralph_enable_ci.sh46# =============================================================================COMMENT
MEDIUMralph_enable_ci.sh63# =============================================================================COMMENT
MEDIUMralph_enable_ci.sh65# =============================================================================COMMENT
MEDIUMralph_enable_ci.sh126# =============================================================================COMMENT
MEDIUMralph_enable_ci.sh128# =============================================================================COMMENT
MEDIUMralph_enable_ci.sh223# =============================================================================COMMENT
MEDIUMralph_enable_ci.sh225# =============================================================================COMMENT
MEDIUMralph_enable_ci.sh278# =============================================================================COMMENT
MEDIUMralph_enable_ci.sh280# =============================================================================COMMENT
MEDIUMtests/helpers/fixtures.bash389# =============================================================================COMMENT
MEDIUMtests/helpers/fixtures.bash391# =============================================================================COMMENT
MEDIUMlib/task_sources.sh6# =============================================================================COMMENT
MEDIUMlib/task_sources.sh8# =============================================================================COMMENT
MEDIUMlib/task_sources.sh141# =============================================================================COMMENT
MEDIUMlib/task_sources.sh143# =============================================================================COMMENT
MEDIUMlib/task_sources.sh291# =============================================================================COMMENT
MEDIUMlib/task_sources.sh293# =============================================================================COMMENT
MEDIUMlib/task_sources.sh400# =============================================================================COMMENT
MEDIUMlib/task_sources.sh402# =============================================================================COMMENT
MEDIUMlib/task_sources.sh514# =============================================================================COMMENT
MEDIUMlib/task_sources.sh516# =============================================================================COMMENT
MEDIUMlib/task_sources.sh595# =============================================================================COMMENT
MEDIUMlib/task_sources.sh597# =============================================================================COMMENT
MEDIUMlib/wizard_utils.sh14# =============================================================================COMMENT
MEDIUMlib/wizard_utils.sh16# =============================================================================COMMENT
MEDIUMlib/wizard_utils.sh161# =============================================================================COMMENT
MEDIUMlib/wizard_utils.sh163# =============================================================================COMMENT
MEDIUMlib/wizard_utils.sh369# =============================================================================COMMENT
MEDIUMlib/wizard_utils.sh371# =============================================================================COMMENT
MEDIUMlib/wizard_utils.sh462# =============================================================================COMMENT
MEDIUMlib/wizard_utils.sh464# =============================================================================COMMENT
MEDIUMlib/wizard_utils.sh495# =============================================================================COMMENT
MEDIUMlib/wizard_utils.sh497# =============================================================================COMMENT
20 more matches not shown…
Over-Commented Block72 hits · 68 pts
SeverityFileLineSnippetContext
LOWralph_queue.sh1#!/bin/bashCOMMENT
LOWmigrate_to_ralph_folder.sh1#!/bin/bashCOMMENT
LOWralph_enable.sh1#!/bin/bashCOMMENT
LOWralph_import.sh61COMMENT
LOWralph_import.sh101 if command -v jq &>/dev/null && jq empty "$output_file" 2>/dev/null; thenCOMMENT
LOWralph_import.sh121# PARSED_HAS_ERRORS - "true"/"false" indicating errorsCOMMENT
LOWralph_import.sh181}COMMENT
LOWralph_import.sh281}COMMENT
LOWralph_import.sh561COMMENT
LOWralph_import.sh661 if [[ "$match_count" -eq 0 ]]; thenCOMMENT
LOWralph_import.sh841# $1 (json_file) - File containing issue JSON from fetch_github_issueCOMMENT
LOWralph_import.sh1021COMMENT
LOWralph_loop.sh1#!/bin/bashCOMMENT
LOWralph_loop.sh281#COMMENT
LOWralph_loop.sh1341 local age_hours=$((age_seconds / 3600))COMMENT
LOWralph_loop.sh1841# wrap_claude_command_for_sandbox - Route CLAUDE_CMD_ARGS through the sandbox (Issues #74/#75)COMMENT
LOWralph_loop.sh1961 fiCOMMENT
LOWralph_enable_ci.sh1#!/bin/bashCOMMENT
LOWtools/inspect-allowed-tools.sh1#!/usr/bin/env bashCOMMENT
LOWtests/test_error_detection.sh1#!/bin/bashCOMMENT
LOWtests/test_stuck_loop_detection.sh1#!/bin/bashCOMMENT
LOWtests/e2e/helpers/e2e_helper.bash1#!/usr/bin/env bashCOMMENT
LOW.github/workflows/docker-publish.yml1# Publish the default ralph-sandbox image to GHCR (Issue #298)COMMENT
LOW.github/workflows/triage-incoming-issues.lock.yml1# gh-aw-metadata: {"schema_version":"v4","frontmatter_hash":"a52f9dd3f548b72d0f16ca928d98958867378af0afe8f9b540d1ea6725eCOMMENT
LOW.github/workflows/triage-incoming-issues.lock.yml21# Not all edits will cause changes to this file.COMMENT
LOW.github/workflows/triage-incoming-issues.lock.yml781 # - EditCOMMENT
LOW.github/workflows/triage-incoming-issues.lock.yml801 # - Write(/tmp/gh-aw/agent/*)COMMENT
LOW.github/workflows/triage-incoming-issues.lock.yml821 # - mcp__github__get_release_by_tagCOMMENT
LOW.github/workflows/triage-incoming-issues.lock.yml841 # - mcp__github__list_starred_repositoriesCOMMENT
LOW.github/workflows/triage-incoming-issues.lock.yml1321 run: npm install -g @anthropic-ai/claude-code@2.1.156COMMENT
LOWlib/task_sources.sh1#!/usr/bin/env bashCOMMENT
LOWlib/task_sources.sh21COMMENT
LOWlib/task_sources.sh141# =============================================================================COMMENT
LOWlib/task_sources.sh161COMMENT
LOWlib/task_sources.sh181# 0 - SuccessCOMMENT
LOWlib/task_sources.sh281# Newline-separated list of label namesCOMMENT
LOWlib/task_sources.sh361}COMMENT
LOWlib/task_sources.sh401# TASK NORMALIZATIONCOMMENT
LOWlib/task_sources.sh521# $1 (sources) - Space-separated list of sources: beads, github, prdCOMMENT
LOWlib/issue_analyzer.sh1#!/usr/bin/env bashCOMMENT
LOWlib/issue_analyzer.sh21# +15 Implementation guidance keywords (implement/architecture/steps/...)COMMENT
LOWlib/queue_manager.sh1#!/bin/bashCOMMENT
LOWlib/github_lifecycle.sh1#!/bin/bashCOMMENT
LOWlib/wizard_utils.sh21# $1 (prompt) - The question to askCOMMENT
LOWlib/wizard_utils.sh61 echo -e "${WIZARD_YELLOW}Please answer yes (y) or no (n)${WIZARD_NC}" >&2COMMENT
LOWlib/wizard_utils.sh101#COMMENT
LOWlib/wizard_utils.sh161# =============================================================================COMMENT
LOWlib/wizard_utils.sh221#COMMENT
LOWlib/sync.sh1#!/bin/bashCOMMENT
LOWlib/sync.sh21#COMMENT
LOWlib/response_analyzer.sh81# `Bash(mvn *)`. So `mvn clean compile 2>&1 | tail -40` is denied even whenCOMMENT
LOWlib/response_analyzer.sh101COMMENT
LOWlib/response_analyzer.sh141 return 0COMMENT
LOWlib/response_analyzer.sh301 # ---RALPH_STATUS---COMMENT
LOWlib/response_analyzer.sh741 fiCOMMENT
LOWlib/response_analyzer.sh1121# =============================================================================COMMENT
LOWlib/sandbox_docker.sh1#!/bin/bashCOMMENT
LOWlib/sandbox_docker.sh21# logged). Without an API key, the host's ~/.claude/.credentials.json isCOMMENT
LOWlib/sandbox_docker.sh201 rm -f "$tmp"COMMENT
LOWlib/enable_core.sh61# =============================================================================COMMENT
12 more matches not shown…
Redundant / Tautological Comments40 hits · 62 pts
SeverityFileLineSnippetContext
LOW⚡migrate_to_ralph_folder.sh41# Check if project is already migratedCOMMENT
LOW⚡migrate_to_ralph_folder.sh45 # Check if .ralph/ directory exists with key filesCOMMENT
LOW⚡migrate_to_ralph_folder.sh55# Check if project needs migration (has old-style structure)COMMENT
LOWmigrate_to_ralph_folder.sh284 # Check if already migratedCOMMENT
LOWmigrate_to_ralph_folder.sh290 # Check if needs migrationCOMMENT
LOWuninstall.sh38# Check if Ralph is installed by verifying commands or home directory existCOMMENT
LOWralph_import.sh89 # Check if file starts with { or [ (JSON indicators)COMMENT
LOWralph_import.sh138 # Check if jq is availableCOMMENT
LOWralph_loop.sh505# Check if tmux is availableCOMMENT
LOWralph_loop.sh892# Check if we can make another callCOMMENT
LOWralph_loop.sh1000# Check if we should gracefully exitCOMMENT
LOWralph_loop.sh1376 # Check if session has expiredCOMMENT
LOWralph_loop.sh1651 # Check if prompt file existsCOMMENT
LOWralph_loop.sh2360 # Check if commits were made (HEAD changed)COMMENT
LOWralph_loop.sh2722 # Check if this is a Ralph project directoryCOMMENT
LOWralph_loop.sh2727 # Check if this looks like a partial Ralph projectCOMMENT
LOWcreate_files.sh114# Check if we can make another callCOMMENT
LOWcreate_files.sh170# Check if we should gracefully exitCOMMENT
LOWcreate_files.sh267 # Check if prompt file existsCOMMENT
LOWlib/circuit_breaker.sh38 # Check if state file exists and is valid JSONCOMMENT
LOWlib/circuit_breaker.sh140# Check if circuit breaker allows executionCOMMENT
LOWlib/circuit_breaker.sh196 # Check if Claude reported files modified (may differ from git diff if already committed)COMMENT
LOWlib/circuit_breaker.sh217 # Check if Claude is asking questions (Issue #190 Bug 2)COMMENT
LOWlib/circuit_breaker.sh449# Check if loop should halt (used in main loop)COMMENT
LOWlib/task_sources.sh22 # Check if bd command existsCOMMENT
LOWlib/task_sources.sh49 # Check if beads is availableCOMMENT
LOWlib/task_sources.sh157 # Check if authenticatedCOMMENT
LOWlib/task_sources.sh162 # Check if in a git repo with GitHub remoteCOMMENT
LOWlib/task_sources.sh197 # Check if GitHub is availableCOMMENT
LOWlib/task_sources.sh388 # Check if ralph-import is available for full conversionCOMMENT
LOWlib/response_analyzer.sh189 # Check if file starts with { or [ (JSON indicators)COMMENT
LOWlib/response_analyzer.sh244 # Check if JSON is an array (Claude CLI array format)COMMENT
LOWlib/response_analyzer.sh660 # Check if commits were made (HEAD changed).COMMENT
LOWlib/response_analyzer.sh874 # Check if commits were made (HEAD changed).COMMENT
LOWlib/response_analyzer.sh1095 # Check if same errors appear in all recent outputsCOMMENT
LOWlib/response_analyzer.sh1210# Check if the stored session should be resumedCOMMENT
LOWlib/response_analyzer.sh1256 # Check if session is still valid (less than expiration time)COMMENT
LOWlib/enable_core.sh403 # Check if in git repoCOMMENT
LOWlib/enable_core.sh410 # Check if GitHubCOMMENT
LOWlib/timeout_utils.sh52# Check if a timeout command is available on this systemCOMMENT
Modern AI Meta-Vocabulary7 hits · 21 pts
SeverityFileLineSnippetContext
MEDIUM⚡CLAUDE.md44- **github_lifecycle.sh** — GitHub issue lifecycle management backing `ralph --github-issue` (Issue #73). `parse_issue_rCODE
MEDIUM⚡CLAUDE.md45- **sandbox_docker.sh** — Docker sandbox execution backing `ralph --sandbox docker` (Issue #74). Containerizes only the CODE
MEDIUM⚡CLAUDE.md46- **sandbox_e2b.sh** + **e2b_helper.py** — E2B cloud sandbox execution backing `ralph --sandbox e2b` (Issue #75). Same hCODE
MEDIUMlib/github_lifecycle.sh16# permission) is logged and returns non-zero, but the orchestration helpersCOMMENT
MEDIUMlib/github_lifecycle.sh343# --- orchestration (always returns 0: graceful degradation) -----------------COMMENT
MEDIUMlib/sandbox_docker.sh5# on the host. Ralph's orchestration (loop control, rate limiting, circuitCOMMENT
MEDIUMlib/sandbox_e2b.sh5# the host. Ralph's orchestration (loop control, rate limiting, circuitCOMMENT
Self-Referential Comments6 hits · 16 pts
SeverityFileLineSnippetContext
MEDIUMinstall.sh138 # Create the main ralph commandCOMMENT
MEDIUMralph_loop.sh141CREATE_PR="${CREATE_PR:-false}" # Create a PR on completionCODE
MEDIUMralph_loop.sh143DRAFT_PR="${DRAFT_PR:-false}" # Create the PR as a draftCODE
MEDIUMcreate_files.sh13# Create main scriptsCOMMENT
MEDIUMtests/e2e/helpers/e2e_helper.bash36# Create a complete temp Ralph project + mock claude CLI, and cd into it.COMMENT
MEDIUMlib/queue_manager.sh47# Create the queue file if absent (idempotent); recreate it if corrupt.COMMENT
Excessive Try-Catch Wrapping11 hits · 12 pts
SeverityFileLineSnippetContext
LOWlib/e2b_helper.py63 except Exception as exc:CODE
LOWlib/e2b_helper.py81 except Exception as exc:CODE
LOWlib/e2b_helper.py97 except Exception as exc:CODE
LOWlib/e2b_helper.py114 except Exception as exc:CODE
LOWlib/e2b_helper.py154 except Exception as exc:CODE
LOWlib/e2b_helper.py179 except Exception as exc:CODE
LOWlib/e2b_helper.py212 except Exception as exc:CODE
LOWlib/e2b_helper.py229 except Exception as exc:CODE
LOWlib/e2b_helper.py245 except Exception as exc:CODE
LOWlib/e2b_helper.py255 except Exception as exc:CODE
MEDIUMlib/e2b_helper.py60def _connect(sandbox_id):CODE
AI Slop Vocabulary3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMtests/e2e/helpers/e2e_helper.bash4# Unlike unit/integration tests (which source functions), this harness runsCOMMENT
MEDIUMtests/e2e/helpers/e2e_helper.bash25# (Linux: `timeout`; macOS: `gtimeout` from Homebrew coreutils). The harnessCOMMENT
MEDIUM.github/workflows/test.yml127 # Run all unit tests under kcov for comprehensive coverageCOMMENT
Structural Annotation Overuse6 hits · 9 pts
SeverityFileLineSnippetContext
LOWdocs/user-guide/01-quick-start.md11## Step 1: Create Your ProjectCOMMENT
LOWdocs/user-guide/01-quick-start.md22## Step 2: Enable RalphCOMMENT
LOWdocs/user-guide/01-quick-start.md65## Step 3: Customize Your RequirementsCOMMENT
LOWdocs/user-guide/01-quick-start.md89## Step 4: Define Your TasksCOMMENT
LOWdocs/user-guide/01-quick-start.md113## Step 5: Start RalphCOMMENT
LOWdocs/user-guide/01-quick-start.md139## Step 6: Review the ResultsCOMMENT
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHREADME.md493GitHub issues vary widely in detail. During import, Ralph scores the issue 0–100 for implementation readiness (acceptancCODE
Cross-Language Confusion1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHlib/e2b_helper.py226 sandbox.commands.run("touch %s && rm -f %s %s %s" % (CODE
Example Usage Blocks3 hits · 4 pts
SeverityFileLineSnippetContext
LOWralph_enable.sh6# Usage:COMMENT
LOWralph_enable_ci.sh6# Usage:COMMENT
LOWtools/inspect-allowed-tools.sh11# Usage:COMMENT
Slop Phrases1 hit · 1 pts
SeverityFileLineSnippetContext
LOWinstall.sh355 echo "⚠️ Don't forget to add $INSTALL_DIR to your PATH (see above)"CODE