AI Slop Code Risk Monitor

openclaw/Peekaboo

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

Peekaboo is a macOS CLI & optional MCP server that enables AI agents to capture screenshots of applications, or the entire system, with optional visual question answering through local or remote AI models.

0.7 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for openclaw/Peekaboo, a Swift project with 5,420 GitHub stars. SynthScan examined 709,225 lines of code across 2417 source files, recording 404 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 0.7 (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.

0.7
Adjusted Signal
0.7
Raw Pattern Score
100%
Time Factor
2026-10-27
Last Push
5.4K
Stars
Swift
Language
709.2K
Lines of Code
2.4K
Files
404
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 2.6/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.2/100 · LOW

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

Agent Over-Engineering Ratio 0.5/100 · LOW

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

PR Review Velocity Impact 3.4/100 · LOW

Which changes need focused human review? 404 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 2HIGH 8MEDIUM 13LOW 381

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 404 distinct pattern matches across 15 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.

Over-Commented Block323 hits · 323 pts
SeverityFileLineSnippetContext
LOW…ts/PeekabooAutomationKitTests/AsyncAXTypingTests.swift201 fixture.selection = CFRange(location: alreadyDesired ? 2 : 0, length: 0)COMMENT
LOW…ts/PeekabooAutomationKitTests/AsyncAXTypingTests.swift301 #expect(!precomposed.utf16.elementsEqual(decomposed.utf16))COMMENT
LOW…ts/PeekabooAutomationKitTests/AsyncAXTypingTests.swift381COMMENT
LOW…ts/PeekabooAutomationKitTests/AsyncAXTypingTests.swift421COMMENT
LOW…ts/PeekabooAutomationKitTests/AsyncAXTypingTests.swift561 #expect(fixture.textWrites.isEmpty)COMMENT
LOW…tionKitTests/BoundedAXWindowIdentityScannerTests.swift21 #expect(probed == [0, 1])COMMENT
LOW…utomationKitTests/WindowRoutedPointerDriverTests.swift61 targetProcessIdentifier: receipt.identity.ownerProcessIdentifier,COMMENT
LOW…utomationKitTests/WindowRoutedPointerDriverTests.swift261COMMENT
LOW…oAutomationKitTests/TargetedTypeInputPolicyTests.swift41 #expect(fixture.actionCalls.count == (usesAccessibility ? payload.actionUnits : 0))COMMENT
LOW…AutomationKitTests/DialogFileExecutionOwnerTests.swift21COMMENT
LOW…AutomationKitTests/DialogFileExecutionOwnerTests.swift101 focus.records = [COMMENT
LOW…/PeekabooAutomationKitTests/AsyncAXMutationTests.swift81COMMENT
LOW…onKitTests/DockContextMenuSelectionDispatchTests.swift441 ApplicationProcessIdentity(processIdentifier: 456, processStartIdentity: generation)COMMENT
LOW…omationKitTests/ApplicationInventoryTimeoutTests.swift381 #expect(healthy.isHiddenKnown == true)COMMENT
LOW…tomationKitTests/ScreenCaptureKitOwnerLeaseTests.swift381 #expect(second == .alreadyOwnedByCurrentProcess(firstReceipt))COMMENT
LOW…mationKitTests/SnapshotTargetReceiptPlannerTests.swift41COMMENT
LOW…mationKitTests/SnapshotTargetReceiptPlannerTests.swift101 @TestCOMMENT
LOW…abooAutomationKitTests/UIInputPolicyDefaultTests.swift41 }COMMENT
LOW…ationKitTests/ClipboardPasteTransactionGateTests.swift521 #expect(clock.now - started >= .milliseconds(140))COMMENT
LOW…ationKitTests/DesktopMutationWatermarkStoreTests.swift421COMMENT
LOW…s/PeekabooAutomationKitTests/CaptureCadenceTests.swift241 requestedCadenceIntervals: 10),COMMENT
LOW…ekabooAutomationKitTests/DialogTextMetadataTests.swift21 let service = DialogService()COMMENT
LOW…omationKitTests/TypeServiceForegroundPolicyTests.swift61 text: "ab",COMMENT
LOW…omationKitTests/TypeServiceForegroundPolicyTests.swift341 try await fixture.service.type(COMMENT
LOW…omationKitTests/TypeServiceForegroundPolicyTests.swift441 snapshotId: fixture.snapshotID,COMMENT
LOW…AutomationKitTests/AutomationKitTestSupportTests.swift121 #expect(moved.subrole == original.subrole)COMMENT
LOW…KitTests/UIAutomationActionOutcomeProvidingTests.swift381 for result in [pidType, processType] {COMMENT
LOW…sts/ForegroundModifierClickExecutorTests+Routing.swift661 #expect(failure.outcome.state == .indeterminate)COMMENT
LOW…kabooAutomationKit/Extensions/NSArray+Extensions.swift1//COMMENT
LOW…s/PeekabooAutomationKit/Utilities/SpaceUtilities.swift1// Space (Virtual Desktop) Management UtilitiesCOMMENT
LOW…s/PeekabooAutomationKit/Utilities/SpaceUtilities.swift21//COMMENT
LOW…s/PeekabooAutomationKit/Utilities/SpaceUtilities.swift41// try await service.switchToSpace(spaceNumber: 2)COMMENT
LOW…s/PeekabooAutomationKit/Utilities/FocusUtilities.swift1// Window Focus Management UtilitiesCOMMENT
LOW…s/PeekabooAutomationKit/Utilities/FocusUtilities.swift21// 3. **Window Movement**: Bring windows to current SpaceCOMMENT
LOW…rvices/GameBridge/GameBridgeDetectionIntegration.swift1import CoreGraphicsCOMMENT
LOW…t/Services/GameBridge/GameBridgeDetectionService.swift1import CoreGraphicsCOMMENT
LOW…tomationKit/Services/Capture/SmartCaptureService.swift1//COMMENT
LOW…omationKit/Services/Capture/ScreenCapturePlanner.swift101 /// No displays were enumerated at all. Capture cannot proceed.COMMENT
LOW…rvices/Core/Protocols/ApplicationServiceProtocol.swift301 /// - appIdentifier: Application name or bundle IDCOMMENT
LOW…rvices/Core/Protocols/ApplicationServiceProtocol.swift661COMMENT
LOW…nKit/Services/Core/Protocols/MenuServiceProtocol.swift21 /// - Returns: Menu structure informationCOMMENT
LOW…nKit/Services/Core/Protocols/FileServiceProtocol.swift1import FoundationCOMMENT
LOW…vices/Core/Protocols/UIAutomationServiceProtocol.swift41public protocol UIAutomationServiceProtocol: Sendable {COMMENT
LOW…vices/Core/Protocols/UIAutomationServiceProtocol.swift61 /// - target: Optional target elementCOMMENT
LOW…vices/Core/Protocols/UIAutomationServiceProtocol.swift81 /// - holdDuration: How long to hold the keys in millisecondsCOMMENT
LOW…vices/Core/Protocols/UIAutomationServiceProtocol.swift101 /// - snapshotId: Snapshot ID for element resolutionCOMMENT
LOW…vices/Core/Protocols/UIAutomationServiceProtocol.swift121 /// Get information about the currently focused UI elementCOMMENT
LOW…/Services/Core/Protocols/SnapshotManagerProtocol.swift101 func createSnapshot(pendingAt observationStartedAt: Date) async throws -> StringCOMMENT
LOW…/Services/Core/Protocols/SnapshotManagerProtocol.swift121 /// Retrieve element detection results from a snapshotCOMMENT
LOW…/Services/Core/Protocols/SnapshotManagerProtocol.swift181COMMENT
LOW…/Services/Core/Protocols/SnapshotManagerProtocol.swift201 /// - Returns: Array of matching elementsCOMMENT
LOW…ests/PeekabooFoundationTests/RawPressPolicyTests.swift21 _ = try KeyboardChord(parsing: "super+c")COMMENT
LOW…FoundationTests/TypeActionReplacementPolicyTests.swift21 func `only one leading clear followed by text has a deterministic replacement value`() {COMMENT
LOW…ndationTests/DesktopActionOutcomeProjectionTests.swift41 #expect(object["route"] as? String == projection.route.rawValue)COMMENT
LOW…PeekabooTests/PeekabooServicesBrowserBridgeTests.swift41 arguments: ToolArguments(raw: ["action": "connect", "channel": "canary"]))COMMENT
LOW…PeekabooTests/PeekabooServicesBrowserBridgeTests.swift401 #expect(adapted.actionFailure == failure)COMMENT
LOW…ooTests/RemoteCaptureEnginePlanCacheRoutingTests.swift101 #expect(first.capture.metadata.diagnostics?.windowPlanCacheStatus == .miss)COMMENT
LOW…ooTests/PeekabooBridgeClientTransportSafetyTests.swift21 defer { try? FileManager.default.removeItem(at: root) }COMMENT
LOW…ests/PeekabooBridgeWindowEnumerationTimeoutTests.swift41 let result = try await remote.listWindows(target: .application("Fixture"))COMMENT
LOW…ekabooTests/AgentObservationProviderContextTests.swift61 } else {COMMENT
263 more matches not shown…
Cross-File Repetition6 hits · 30 pts
SeverityFileLineSnippetContext
HIGH…sts/PeekabooTests/PeekabooAIServiceProviderTests.swift0{ "aiproviders": { "providers": "openai/gpt-5.5" }, "customproviders": { "local-proxy": { "name": "local proxy", "type":STRING
HIGH…sts/PeekabooTests/PeekabooAgentServiceModelTests.swift0{ "aiproviders": { "providers": "openai/gpt-5.5" }, "customproviders": { "local-proxy": { "name": "local proxy", "type":STRING
HIGH…Tests/CoreCLITests/AgentCommandModelParsingTests.swift0{ "aiproviders": { "providers": "openai/gpt-5.5" }, "customproviders": { "local-proxy": { "name": "local proxy", "type":STRING
HIGH…sts/PeekabooTests/PeekabooAIServiceProviderTests.swift0{ "aiproviders": { "providers": "openai/gpt-5.6,anthropic/claude-opus-5" } }STRING
HIGH…sts/PeekabooTests/PeekabooAgentServiceModelTests.swift0{ "aiproviders": { "providers": "openai/gpt-5.6,anthropic/claude-opus-5" } }STRING
HIGH…kabooAgentRuntimeTests/AI/PeekabooAIServiceTests.swift0{ "aiproviders": { "providers": "openai/gpt-5.6,anthropic/claude-opus-5" } }STRING
Excessive Try-Catch Wrapping15 hits · 18 pts
SeverityFileLineSnippetContext
MEDIUM…mationKit/Sources/PeekabooAutomationKit/Core/README.md53 print("Error: \(error.localizedDescription)")CODE
LOWscripts/notary-api-submit.py184 except Exception:CODE
LOWscripts/notary-api-submit.py298 except Exception:CODE
LOWscripts/notary-api-submit.py326 except Exception:CODE
LOWscripts/notary-api-submit.py369 except Exception:CODE
MEDIUMscripts/notary-api-submit.py363def main():CODE
LOW.github/scripts/core-sigpipe-diagnostic.py165 except Exception:CODE
LOW.github/scripts/core-sigpipe-diagnostic.py207 except Exception:CODE
LOWApps/Playground/scripts/peekaboo-perf.sh167except Exception:CODE
LOWApps/Playground/scripts/peekaboo-perf.sh265except Exception:CODE
LOWApps/Playground/scripts/peekaboo-perf.sh286 except Exception:CODE
LOWApps/Playground/scripts/peekaboo-perf.sh335 except Exception:CODE
MEDIUMApps/Playground/scripts/peekaboo-perf.sh332def git_value(args):CODE
MEDIUM…Sources/PeekabooCLI/Commands/System/CleanCommand.swift112 print("Error: \(error.localizedDescription)", to: &stderrStream)STRING
MEDIUM…Sources/PeekabooCLI/Commands/System/CleanCommand.swift123 print("Error: \(error.localizedDescription)", to: &localStandardErrorStream)STRING
Hyper-Verbose Identifiers23 hits · 17 pts
SeverityFileLineSnippetContext
LOWscripts/test-swift-workspace.py89 def test_build_child_signal_retains_shell_exit_status(self):STRING
LOWscripts/test-swift-workspace.py98 def test_clean_setup_idempotence_and_remove_preserve_unrelated_settings(self):STRING
LOWscripts/test-swift-workspace.py115 def test_relocation_requires_explicit_setup(self):STRING
LOWscripts/test-swift-workspace.py126 def test_unowned_conflict_is_not_read_or_overwritten(self):STRING
LOWscripts/test-swift-workspace.py136 def test_owned_tampering_and_symlinks_fail_closed(self):STRING
LOWscripts/test-swift-workspace.py151 def test_symlinked_parent_and_hardlink_fail_closed(self):STRING
LOWscripts/test-swift-workspace.py162 def test_missing_wrong_uninitialized_or_aliased_submodule(self):STRING
LOWscripts/test-swift-workspace.py171 def test_release_source_gate_and_child_failure(self):STRING
LOWscripts/test-swift-workspace.py182 def test_effective_mapping_strict_arguments_and_post_build_integrity(self):STRING
LOW⚡scripts/test-swift-workspace.py196 def test_inherited_override_is_rejected_without_reading_it(self):STRING
LOW⚡scripts/test-swift-workspace.py203 def test_build_child_retains_callers_file_creation_permissions(self):STRING
LOW⚡scripts/test-swift-workspace.py210 def test_xcode_contexts_do_not_promote_commander_to_a_root_package(self):STRING
LOWscripts/test-swift-workspace.py298 def test_gitfile_live_source_with_strict_swiftpm_and_xcode(self):STRING
LOWscripts/test-notary-api-submit.py25 def test_aws_published_iam_vector(self):CODE
LOWscripts/test-notary-api-submit.py45 def test_jwt_with_throwaway_key(self):CODE
LOWscripts/test-notary-api-submit.py103 def test_deadline_and_no_credential_redirects(self):CODE
LOWscripts/test-notary-api-submit.py112 def test_jwt_regenerated_for_each_api_request(self):CODE
LOWscripts/test-notary-api-submit.py123 def test_request_retries_and_auth_failures(self):CODE
LOWscripts/test-notary-api-submit.py152 def test_connection_retries_are_bounded_and_deadline_limited(self):CODE
LOWscripts/test-notary-api-submit.py191 def test_slow_part_timeout_and_error_redaction(self):CODE
LOWscripts/test-notary-api-submit.py243 def test_multipart_etag_binds_completed_object(self):CODE
LOWscripts/test-notary-api-submit.py279 def test_fixture_override_boundary(self):CODE
LOWscripts/support/test-fixture-metadata.rb6def classify_fixture_metadata(names, size)CODE
Hallucination Indicators2 hits · 15 pts
SeverityFileLineSnippetContext
CRITICAL…es/PeekabooBridge/PeekabooBridgeClient+Transport.swift1237 bundle.receipt.payload.requestID.uuidString.lowercased() + ".json",STRING
CRITICAL…CLI/Tests/CoreCLITests/BridgeReceiptCommandTests.swift116 .appendingPathComponent(bundle.receipt.payload.requestID.uuidString.lowercased())CODE
Fake / Example Data12 hits · 12 pts
SeverityFileLineSnippetContext
LOW…t/Services/UI/UIAutomationService+ElementActions.swift389 element.attributes["placeholder"],CODE
LOW…tionKit/Services/UI/TypeService+TargetResolution.swift50 let placeholder = element.attributes["placeholder"]?.lowercased()CODE
LOW…kabooAutomationKit/Services/UI/ElementClassifier.swift148 attributes["placeholder"] = placeholderCODE
LOW…/PeekabooAutomationKit/Services/UI/ScrollService.swift500 element.attributes["placeholder"],CODE
LOW…ationKit/Services/UI/DetachedAXObservationWorker.swift608 attributes["placeholder"] = placeholderCODE
LOW…Tests/PeekabooTests/ElementDetectionServiceTests.swift530 #expect(attributes["placeholder"] == nil)COMMENT
LOW…abooAgentRuntime/MCP/Tools/DialogTool+Formatting.swift141 "placeholder": field.placeholder ?? "",CODE
LOW.agents/skills/crabbox/SKILL.md465../crabbox/bin/crabbox desktop paste --provider hetzner --id <cbx_id-or-slug> --text "user@example.com"CODE
LOWdocs/logging-profiles/README.md39- **Simple strings**: `"user@example.com"` remains visibleCODE
LOWdocs/providers/ollama.md68printf '%s\n' 'dummy-key' | peekaboo config provider add ollama-openai \CODE
LOW…eekabooCLI/Commands/Core/ConfigCommand+Providers.swift63 printf '%s\\n' 'dummy-key' | peekaboo config provider add local-ollama \\CODE
LOW…ces/PeekabooCLI/Commands/Interaction/TypeCommand.swift689 peekaboo type "user@example.com" --foregroundCODE
AI Slop Vocabulary4 hits · 11 pts
SeverityFileLineSnippetContext
MEDIUM…Kit/Services/Observation/ObservationTextDetector.swift106 return 0.0 // Definitely avoidCODE
MEDIUM…PeekabooAgentRuntimeTests/AgentSystemPromptTests.swift10 #expect(prompt.utf8.count * 2 < comprehensive.utf8.count)COMMENT
MEDIUMscripts/test-restart-peekaboo.sh1664 # Restore only this synthetic fixture directory so the harness can clean up even after a failed assertion.COMMENT
MEDIUMApps/Playground/scripts/peekaboo-perf.sh5# Local benchmarking harness for source checkouts. This is not telemetry and is not intendedCOMMENT
Deep Nesting7 hits · 7 pts
SeverityFileLineSnippetContext
LOWscripts/notary-api-submit.py165CODE
LOWscripts/notary-api-submit.py302CODE
LOWscripts/swift-runtime-exports.py234CODE
LOWscripts/swift-runtime-exports.py270CODE
LOWscripts/test-notary-api-submit.py123CODE
LOWscripts/test-notary-api-submit.py243CODE
LOW.github/scripts/core-sigpipe-diagnostic.py60CODE
Modern AI Meta-Vocabulary2 hits · 6 pts
SeverityFileLineSnippetContext
MEDIUMdocs/research/agentic.md44### PR #47 “enhancements” scaffoldingCOMMENT
MEDIUM…Tests/CoreCLITests/AgentCommandModelParsingTests.swift128 #expect(command.parseModelString("xai/grok-4.20-multi-agent-0309") == nil)COMMENT
Self-Referential Comments2 hits · 5 pts
SeverityFileLineSnippetContext
MEDIUM…n/Configuration/ConfigurationManager+Persistence.swift84 # This file contains sensitive API keys and should not be sharedCOMMENT
MEDIUM…/PeekabooAutomation/Configuration/CredentialFile.swift123 let header = "# Peekaboo credentials file\n# This file contains sensitive API keys and should not be shared\n\n"CODE
Magic Placeholder Names1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHhomebrew/peekaboo.rb25 export OPENAI_API_KEY="your-api-key"CODE
Empty Error Handlers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHscripts/swift-runtime-exports.py111except OSError:CODE
Verbosity Indicators2 hits · 4 pts
SeverityFileLineSnippetContext
LOW⚡…CLI/Tests/CoreCLITests/AnnotationCoordinateTests.swift55 // Step 1: Transform to window-relative (done in UIAutomationServiceEnhanced)COMMENT
LOW⚡…CLI/Tests/CoreCLITests/AnnotationCoordinateTests.swift64 // Step 2: Flip Y for drawing (done in SeeCommand annotation)COMMENT
Structural Annotation Overuse2 hits · 4 pts
SeverityFileLineSnippetContext
LOW⚡…CLI/Tests/CoreCLITests/AnnotationCoordinateTests.swift55 // Step 1: Transform to window-relative (done in UIAutomationServiceEnhanced)COMMENT
LOW⚡…CLI/Tests/CoreCLITests/AnnotationCoordinateTests.swift64 // Step 2: Flip Y for drawing (done in SeeCommand annotation)COMMENT
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWscripts/build-mac-debug.sh42# Check if workspace existsCOMMENT
LOWApps/Mac/run-tests.sh17# Check if we're in the right directoryCOMMENT