AI Slop Code Risk Monitor

openclaw/acpx

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

Headless CLI client for stateful Agent Client Protocol (ACP) sessions

2.3 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for openclaw/acpx, a TypeScript project with 3,408 GitHub stars. SynthScan examined 184,393 lines of code across 585 source files, recording 417 pattern matches distributed across 4 syntactic categories. The legacy adjusted pattern signal is 2.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.

2.3
Adjusted Signal
2.3
Raw Pattern Score
100%
Time Factor
2026-11-01
Last Push
3.4K
Stars
TypeScript
Language
184.4K
Lines of Code
585
Files
417
Pattern Hits
2026-10-31
Scan Date
0.00
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 11.0/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.0/100 · LOW

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

Agent Over-Engineering Ratio 10.6/100 · LOW

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

PR Review Velocity Impact 10.9/100 · LOW

Which changes need focused human review? 417 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 0MEDIUM 5LOW 412

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 417 distinct pattern matches across 4 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 Identifiers410 hits · 414 pts
SeverityFileLineSnippetContext
LOWtest/flows.test.ts2967async function writeFlowStartupModelAgent(home: string): Promise<string> {CODE
LOWtest/terminal.test.ts404function createManagerWithOutputCeiling(raw: string | undefined): TerminalManager {CODE
LOWtest/runtime-offline-controls.test.ts30async function controlAfterCancelledFirstPrompt(control: Control): Promise<void> {CODE
LOWtest/runtime-manager.test.ts5224function createModelsClientFactory(options: {CODE
LOWtest/queue-test-helpers.ts121export function createSingleRequestServer(CODE
LOWtest/replay-viewer-graph-geometry.test.ts290function assertRoutesAvoidInteriors(CODE
LOWtest/replay-viewer-close.test.ts37function controlledLifecycleConfig(): string {CODE
LOWtest/jsonrpc-test-helpers.ts23export function extractAgentMessageChunkText(message: Record<string, unknown>): string | undefined {CODE
LOWtest/replay-viewer-loader.test.ts972async function withLiveReadRecoveryLoader(CODE
LOWtest/replay-viewer-lossless.test.ts356async function repeatedCheckpointProgression(root: string, runId: string) {CODE
LOWtest/replay-viewer-lossless.test.ts401async function incompleteCaptureControls() {CODE
LOWtest/mock-agent.ts57function readQueueLifecycleControl(filePath: string): QueueLifecycleControl {CODE
LOWtest/mock-agent.ts63function assertQueueLifecycleControl(value: unknown): asserts value is QueueLifecycleControl {CODE
LOWtest/mock-agent.ts289function parsePositiveIntegerOption(args: string[], index: number, flag: string): number {CODE
LOWtest/mock-agent.ts709function buildMockSessionInventory(cwd: string): SessionInfo[] {CODE
LOWtest/output.test.ts988function renderDirectedSuppression(frames: DirectedSuppressionFrame[]): unknown[] {CODE
LOWtest/auth-env.test.ts6function buildSyntheticAuthEnvironment(CODE
LOWtest/conformance-process-cleanup.test.ts36async function writeRetirementFailurePreload(root: string, nonce: string): Promise<string> {CODE
LOWtest/client.test.ts3100function delegatedOperationRequest(CODE
LOWtest/client.test.ts3132function pendingPermissionQuestion() {CODE
LOWtest/terminal-taskkill.test.ts69async function installWindowsHangingTaskkill(bin: string): Promise<void> {CODE
LOWtest/integration.test.ts5814async function configuredHarnessInvocation(CODE
LOWtest/integration.test.ts6627async function assertNoNewSleepProcesses(CODE
LOWtest/replay-viewer-live-sync.test.ts1025async function writeLiveSessionRunBundle(CODE
LOWtest/replay-viewer-live-sync.test.ts1236async function selectedReadRecoveryFixture() {CODE
LOWtest/flows-failed-capture.test.ts709function assertCapturedPromptReply(CODE
LOWtest/flows-failed-capture.test.ts735async function assertPublishedDiagnostic(bundle: Bundle, prompt: string, marker: string) {CODE
LOWtest/replay-viewer-view-model.test.ts1418function assertMergeEdgeGeometryAgreement(graph: MergeEdgeGraph, layout: MergeEdgeLayout | null) {CODE
LOWtest/cli.test.ts40function readPackageVersionForTest(): string {CODE
LOWtest/session-export-import.test.ts720async function importArchiveSavedUnderCommand(CODE
LOWreferences/openclaw-acp-client.ts68function resolveToolKindForPermission(CODE
LOWreferences/openclaw-acp-client.ts116function resolveToolNameForPermission(params: RequestPermissionRequest): string | undefined {CODE
LOWexamples/flows/pr-triage/review-text.js1export function selectLocalCodexReviewText(stdout, stderr) {CODE
LOWexamples/flows/pr-triage/pr-triage.flow.ts807function promptReproduceBugAndTestFix(pr, outputs) {CODE
LOWexamples/flows/pr-triage/pr-triage.flow.ts836function promptTestFeatureDirectly(pr, outputs) {CODE
LOWexamples/flows/pr-triage/pr-triage.flow.ts866function promptJudgeInitialConflicts(pr, outputs) {CODE
LOWexamples/flows/pr-triage/pr-triage.flow.ts891function promptResolveInitialConflicts(pr, outputs) {CODE
LOWexamples/flows/pr-triage/pr-triage.flow.ts943function promptDoSuperficialRefactor(pr) {CODE
LOWexamples/flows/pr-triage/pr-triage.flow.ts1033function promptJudgeFinalConflicts(pr, outputs) {CODE
LOWexamples/flows/pr-triage/pr-triage.flow.ts1057function promptResolveFinalConflicts(pr, outputs) {CODE
LOWexamples/flows/pr-triage/pr-triage.flow.ts1107function promptCommentAndEscalateReadyForLanding(pr, outputs, steps) {CODE
LOWexamples/flows/pr-triage/pr-triage.flow.ts1132function promptCommentAndEscalateNeedsJudgment(pr, outputs, steps) {CODE
LOWexamples/flows/pr-triage/pr-triage.flow.ts1266function normalizeGitHubReviewComment(comment) {CODE
LOWexamples/flows/pr-triage/pr-triage.flow.ts1279function normalizeGitHubIssueComment(comment) {CODE
LOWexamples/flows/replay-viewer/server/live-source.ts12export function createFilesystemRunSource(runsDir: string = defaultRunsDir()): ViewerRunSource {CODE
LOW…flows/replay-viewer/server/filesystem-bundle-reader.ts5export function createFilesystemBundleReader(CODE
LOWexamples/flows/replay-viewer/server/live-sync.ts77export function createReplayLiveSyncServer(options: ReplayLiveSyncOptions): ReplayLiveSyncServer {CODE
LOWexamples/flows/replay-viewer/server/live-sync.ts460function reportSubscribedRunReadError(CODE
LOWexamples/flows/replay-viewer/server/live-sync.ts488function isRecoverableRunReadError(error: unknown): boolean {CODE
LOWexamples/flows/replay-viewer/server/viewer-server.ts254export async function requestViewerServerShutdown(baseUrl: string): Promise<boolean> {CODE
LOW…ows/replay-viewer/src/hooks/use-playback-controller.ts223export function resolveSelectedStepIndexAfterBundleUpdate(CODE
LOWexamples/flows/replay-viewer/src/lib/bundle-reader.ts13export function createRecentRunBundleReader(run: RunBundleSummary): BundleReader {CODE
LOW…amples/flows/replay-viewer/src/lib/view-model-graph.ts472function isSettledTerminalSelection(CODE
LOW…amples/flows/replay-viewer/src/lib/view-model-graph.ts506function createNodePositionResolver(CODE
LOW…amples/flows/replay-viewer/src/lib/view-model-graph.ts540function deriveFallbackNodePosition(CODE
LOW…amples/flows/replay-viewer/src/lib/view-model-graph.ts955function sortRankByNeighborBarycenter(CODE
LOW…amples/flows/replay-viewer/src/lib/view-model-graph.ts975function computeNeighborBarycenter(CODE
LOWexamples/flows/replay-viewer/src/lib/run-projection.ts103function hasUnrecordedCurrentAttempt(bundle: LoadedRunBundle): boolean {CODE
LOWexamples/flows/replay-viewer/src/lib/run-url.ts22export function readRequestedRunIdFromWindow(): string | null {CODE
LOWexamples/flows/replay-viewer/src/lib/run-url.ts38function readRequestedRunIdFromPath(pathname: string): string | null {CODE
350 more matches not shown…
Modern AI Meta-Vocabulary5 hits · 13 pts
SeverityFileLineSnippetContext
MEDIUMagents/Claude.md54and [ACPX filesystem guardrails](../docs/permissions.md#working-directory-and-filesystem-guardrails).CODE
MEDIUMdocs/custom-agents.md84an OS sandbox. See [Permissions](permissions.md#working-directory-and-filesystem-guardrails) for theCODE
MEDIUMdocs/permissions.md167## Working directory and filesystem guardrailsCOMMENT
MEDIUMskills/acpx/SKILL.md192### Compare (multi-agent one-shot)COMMENT
MEDIUMskills/acpx/SKILL.md533## Flows (multi-agent workflows)COMMENT
Over-Commented Block1 hit · 1 pts
SeverityFileLineSnippetContext
LOWtest/queue-owner-lifecycle.test.ts1121COMMENT
Fake / Example Data1 hit · 1 pts
SeverityFileLineSnippetContext
LOW.agents/skills/crabbox/SKILL.md256history. No safe injection path? Report live auth blocked. No fake-key upgrade toCODE