AI Slop Code RIsk Monitor

pixel-agents-hq/pixel-agents

Pixel office.

11.9 Moderate pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for pixel-agents-hq/pixel-agents, a TypeScript project with 9,643 GitHub stars. SynthScan examined 74,914 lines of code across 286 source files, recording 344 pattern matches distributed across 4 syntactic categories. The legacy adjusted pattern signal is 11.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.

11.9
Adjusted Signal
11.9
Raw Pattern Score
100%
Time Factor
2026-10-09
Last Push
9.6K
Stars
TypeScript
Language
74.9K
Lines of Code
286
Files
344
Pattern Hits
2026-10-12
Scan Date
0.00
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 4.6/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.0/100 · LOW

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

Agent Over-Engineering Ratio 44.0/100 · MEDIUM

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

PR Review Velocity Impact 45.0/100 · MEDIUM

Which changes need focused human review? 344 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 276LOW 68

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

Decorative Section Separators275 hits · 820 pts
SeverityFileLineSnippetContext
MEDIUMcore/asyncapi.yaml76 # ── Top-level discriminated unions ────────────────────────────COMMENT
MEDIUMcore/asyncapi.yaml149 # ── Server message variants ────────────────────────────────────COMMENT
MEDIUMcore/asyncapi.yaml789 # ── Client message variants ────────────────────────────────────COMMENT
MEDIUMcore/asyncapi.yaml1067 # ── Supporting schemas ─────────────────────────────────────────COMMENT
MEDIUMcore/src/schemas.ts12// ── Agent State ──────────────────────────────────────────────COMMENT
MEDIUMcore/src/schemas.ts49// ── Layout ───────────────────────────────────────────────────COMMENT
MEDIUMcore/src/schemas.ts93// ── Sprites & Assets ─────────────────────────────────────────COMMENT
MEDIUMcore/src/schemas.ts125// ── Hook Events ──────────────────────────────────────────────COMMENT
MEDIUMcore/src/schemas.ts137// ── Disposable ───────────────────────────────────────────────COMMENT
MEDIUM⚡core/src/constants.ts9// ── Hook API ─────────────────────────────────────────────────COMMENT
MEDIUM⚡core/src/constants.ts16// ── Display ──────────────────────────────────────────────────COMMENT
MEDIUM⚡core/src/constants.ts21// ── Transport ────────────────────────────────────────────────COMMENT
MEDIUMcore/src/adapter.ts16 // ── Per-adapter persisted state (agents + seats) ────────────────────COMMENT
MEDIUMcore/src/adapter.ts24 // ── User-level settings (shared file, namespaced per adapter) ─────COMMENT
MEDIUMcore/src/provider.ts12// ── Normalized Events (all provider types produce these) ──────COMMENT
MEDIUMcore/src/provider.ts65// ── Hook-based Provider (CLIs with hooks APIs) ────────────────COMMENT
MEDIUMcore/src/assets/loader.ts21// ── Helpers ──────────────────────────────────────────────────────────────────COMMENT
MEDIUMcore/src/assets/loader.ts35// ── Decoders ─────────────────────────────────────────────────────────────────COMMENT
MEDIUMcore/src/assets/constants.ts8// ── PNG / Asset Parsing ─────────────────────────────────────COMMENT
MEDIUMcore/src/assets/constants.ts21// ── Pet Sprite Dimensions (96×96 spritesheet) ──────────────COMMENT
MEDIUMcore/src/assets/constants.ts32// ── Carpet auto-tile parsing ────────────────────────────────COMMENT
MEDIUMcore/src/assets/pngDecoder.ts35// ── Sprite decoding ──────────────────────────────────────────COMMENT
MEDIUMcore/src/assets/manifestUtils.ts8// ── Manifest types ──────────────────────────────────────────COMMENT
MEDIUMcore/src/assets/build.ts16// ── Furniture catalog ─────────────────────────────────────────────────────────COMMENT
MEDIUMcore/src/assets/build.ts100// ── Asset index ───────────────────────────────────────────────────────────────COMMENT
MEDIUMserver/__tests__/configPersistence.test.ts39 // ── parseAreaMappings ────────────────────────────────────────COMMENT
MEDIUMserver/__tests__/configPersistence.test.ts97 // ── per-provider hooks consent + preference ──────────────────COMMENT
MEDIUMserver/__tests__/configPersistence.test.ts220 // ── readConfig / writeConfig round-trip ──────────────────────COMMENT
MEDIUMserver/__tests__/backgroundAgents.test.ts238 // ── Unnamed spawn = Sub-agent (shadow-watched) ──────────────────────COMMENT
MEDIUMserver/__tests__/backgroundAgents.test.ts435 // ── Foreground spawns (open Agent tool, no async result) ───────────COMMENT
MEDIUMserver/__tests__/backgroundAgents.test.ts494 // ── Named spawn = Teammate ──────────────────────────────────────────COMMENT
MEDIUMserver/__tests__/backgroundAgents.test.ts609 // ── Shared gate ─────────────────────────────────────────────────────COMMENT
MEDIUMserver/__tests__/consentFlow.test.ts97 // ── hooksConsentRequest: who is asked, and on what terms ─────COMMENT
MEDIUMserver/__tests__/consentFlow.test.ts167 // ── hooksConsentResponse: what each answer writes ────────────COMMENT
MEDIUMserver/__tests__/claudeHookInstaller.test.ts463 // ── W1: the write path throws instead of logging ──────────────COMMENT
MEDIUMserver/__tests__/claudeHookInstaller.test.ts756 // ── W3: exact-suffix hook identity ────────────────────────────COMMENT
MEDIUMserver/__tests__/claudeHookInstaller.test.ts914 // ── W4: event-scope reduction + stale-install migration ───────COMMENT
MEDIUMserver/__tests__/hookEventHandler.test.ts73 // ── PermissionRequest ───────────────────────────────────────COMMENT
MEDIUMserver/__tests__/hookEventHandler.test.ts122 // ── Notification ────────────────────────────────────────────COMMENT
MEDIUMserver/__tests__/hookEventHandler.test.ts160 // ── Stop ────────────────────────────────────────────────────COMMENT
MEDIUMserver/__tests__/hookEventHandler.test.ts208 // ── hookDelivered ───────────────────────────────────────────COMMENT
MEDIUMserver/__tests__/hookEventHandler.test.ts223 // ── Buffering ───────────────────────────────────────────────COMMENT
MEDIUMserver/__tests__/hookEventHandler.test.ts293 // ── Auto-discovery ──────────────────────────────────────────COMMENT
MEDIUMserver/__tests__/hookEventHandler.test.ts307 // ── Dispose ─────────────────────────────────────────────────COMMENT
MEDIUMserver/__tests__/hookEventHandler.test.ts315 // ── SessionStart ────────────────────────────────────────────COMMENT
MEDIUMserver/__tests__/hookEventHandler.test.ts384 // ── SessionEnd ──────────────────────────────────────────────COMMENT
MEDIUMserver/__tests__/hookEventHandler.test.ts466 // ── PreToolUse / PostToolUse ─────────────────────────────────COMMENT
MEDIUMserver/__tests__/hookEventHandler.test.ts541 // ── Pending external session confirmation ────────────────────COMMENT
MEDIUMserver/__tests__/hookEventHandler.test.ts585 // ── Resume ──────────────────────────────────────────────────COMMENT
MEDIUMserver/__tests__/hookEventHandler.test.ts687 // ── Provider-agnostic (optional transcript_path) ────────────COMMENT
MEDIUMserver/__tests__/hookEventHandler.test.ts766 // ── Basic subagent regression (Agent Teams feature OFF) ─────────────COMMENT
MEDIUMserver/__tests__/fileStateAdapter.test.ts109 // ── Per-namespace state file (agents + seats) ───────────────COMMENT
MEDIUMserver/__tests__/clientMessageHandler.test.ts90 // ── saveAreaMappings ─────────────────────────────────────────COMMENT
MEDIUMserver/__tests__/clientMessageHandler.test.ts135 // ── setShowAreas ─────────────────────────────────────────────COMMENT
MEDIUMserver/__tests__/clientMessageHandler.test.ts182 // ── setHooksEnabled: preference vs reality ───────────────────COMMENT
MEDIUMserver/__tests__/clientMessageHandler.test.ts294 // ── handleWebviewReady ordering ──────────────────────────────COMMENT
MEDIUMserver/__tests__/fileWatcherDismissal.test.ts106 // ── dismissedJsonlFiles: user-close cooldown ───────────────────────COMMENT
MEDIUMserver/__tests__/fileWatcherDismissal.test.ts139 // ── clearDismissedFiles: permanent block ───────────────────────────COMMENT
MEDIUMserver/__tests__/fileWatcherDismissal.test.ts177 // ── seededMtimes: mtime-change detection ───────────────────────────COMMENT
MEDIUMserver/__tests__/fileWatcherDismissal.test.ts222 // ── pendingClearFiles: two-tick delay for /clear content ───────────COMMENT
215 more matches not shown…
Hyper-Verbose Identifiers47 hits · 48 pts
SeverityFileLineSnippetContext
LOWserver/src/fileWatcher.ts574export function setTeammateRemovalCallback(cb: (teammateAgentId: number) => void): void {CODE
LOWserver/src/fileWatcher.ts584export function setTeammateRegisterCallback(CODE
LOWserver/src/fileWatcher.ts827export function scanForBackgroundAgentFiles(CODE
LOWserver/src/fileWatcher.ts964export function scanTeamConfigsForRemovals(agents: AgentStateStore): number[] {CODE
LOWserver/src/fileWatcher.ts1059export function adoptExternalSessionFromHook(CODE
LOWserver/src/fileWatcher.ts1251export function startExternalSessionScanning(CODE
LOWserver/src/fileWatcher.ts1563export function startStaleExternalAgentCheck(CODE
LOWserver/src/teamUtils.ts49export function hasPromotedBackgroundAgent(CODE
LOWserver/src/assetLoader.ts522export async function loadExternalCharacterSprites(CODE
LOWserver/src/assetLoader.ts584export function sendCharacterSpritesToWebview(CODE
LOW⚡server/src/transcriptParser.ts52export function setBackgroundAgentDetectedCallback(cb: (leadAgentId: number) => void): void {CODE
LOW⚡server/src/transcriptParser.ts61export function setBackgroundAgentCompletedCallback(CODE
LOW⚡server/src/transcriptParser.ts71export function notifyBackgroundAgentCompleted(leadAgentId: number, toolUseId: string): void {CODE
LOWserver/src/providers/hook/claude/claudeHookInstaller.ts67export function settingsNonArrayEventMessage(event: string): string {CODE
LOWserver/src/providers/hook/claude/claudeHookInstaller.ts207export function settingsUnusableBackupMessage(backupPath: string): string {CODE
LOWwebview-ui/src/office/layout/layoutSerializer.ts27export function layoutToFurnitureInstances(furniture: PlacedFurniture[]): FurnitureInstance[] {CODE
LOWwebview-ui/src/office/sprites/carpetTiles.ts238function getDualColorizedCarpetSprite(CODE
LOWwebview-ui/src/office/engine/renderer.ts94export function isGhostHeadlessAgentsEnabled(): boolean {CODE
LOWwebview-ui/src/components/introBubbleGeometry.ts52export function computeIntroBubbleGeometry(frame: IntroBubbleFrame): IntroBubbleGeometry {CODE
LOWscripts/asset-manager.html1914function updateGroupMembershipDisplay(asset) {CODE
LOW⚡scripts/jsonl-viewer.html1085function openDetailForCurrentSession(jumpToRecord) {CODE
LOWe2e/global-setup.ts91function patchProductJsonForWindows(vscodePath: string): void {CODE
LOWe2e/tests/claude/hooks-off/matrix.spec.ts44async function expectExternalAgentAdoption(frame: Frame): Promise<void> {CODE
LOWe2e/tests/claude/hooks-off/carpet.spec.ts273function firstDefaultFurnitureType(): string {CODE
LOWe2e/helpers/intro.ts17export async function advanceIntroToConsentStep(dialog: Locator): Promise<void> {CODE
LOWe2e/helpers/webview.ts535export async function configureHookServerTestSettings(frame: WebviewSurface): Promise<void> {CODE
LOWe2e/helpers/lifecycle.ts16export function withNamedInlineTeammateSession(CODE
LOWe2e/helpers/lifecycle.ts31export function withInlineTeammateSessions(CODE
LOWe2e/helpers/lifecycle.ts42export function withInlineTeammateSession(CODE
LOWe2e/helpers/team.ts51export function buildAssistantToolUseRecord(CODE
LOWe2e/helpers/team.ts59export function buildAssistantToolUseBatchRecord(CODE
LOWe2e/helpers/team.ts88export function buildUserToolResultRecord(CODE
LOWe2e/helpers/team.ts95export function buildUserToolResultBatchRecord(CODE
LOWe2e/helpers/team.ts117export function buildTeammateSpawnResultRecord(CODE
LOWe2e/helpers/team.ts136export function buildAsyncAgentLaunchResultRecord(toolUseId: string): Record<string, unknown> {CODE
LOWe2e/helpers/team.ts145export function buildBackgroundAgentDoneRecord(toolUseId: string): Record<string, unknown> {CODE
LOWe2e/helpers/team.ts159export function buildAssistantUsageRecord(cacheReadTokens: number): Record<string, unknown> {CODE
LOWe2e/helpers/external-monitor.ts15export function getExternalNarrationLogPath(tmpHome: string): string {CODE
LOWe2e/helpers/mock-claude.ts280export async function arrangeNextClaudeInvocation(CODE
LOWe2e/helpers/mock-claude.ts327export async function killTrackedExternalProcesses(): Promise<void> {CODE
LOWe2e/helpers/mock-claude.ts340export async function spawnExternalClaudeScenario(options: {CODE
LOWe2e/helpers/hooks.ts222export function notificationPermissionPrompt(sessionId: string): HookEventPayload {CODE
LOWe2e/helpers/internal-agent.ts59export async function spawnInternalAgentAndWait(CODE
LOWe2e/helpers/internal-agent.ts108export async function spawnInternalAgentAndWaitForInvocation(CODE
LOWe2e/helpers/office.ts71export async function expectOverlayVisibleWithTexts(CODE
LOWe2e/helpers/office.ts79export async function expectOverlayVisibleForAgent(CODE
LOWe2e/helpers/office.ts221export async function expectTeammateSeatedNextToLead(CODE
Over-Commented Block21 hits · 20 pts
SeverityFileLineSnippetContext
LOW.gitleaks.toml1# Gitleaks configurationCOMMENT
LOWserver/__tests__/claudeHookInstaller.test.ts421 expect(fs.existsSync(backupPath)).toBe(true);COMMENT
LOWserver/src/fileWatcher.ts1181 //COMMENT
LOWserver/src/cli.ts241 currentConfig = { port: config.port, token: config.token };COMMENT
LOWserver/src/providers/hook/claude/claudeHookInstaller.ts241 // verify below pins: if the file gained user content after our read, theCOMMENT
LOWserver/src/providers/hook/claude/claudeHookInstaller.ts621 throw new Error(SETTINGS_HOOKS_NOT_OBJECT_MESSAGE);COMMENT
LOWwebview-ui/src/office/engine/existingAgents.ts1// webview-ui/src/office/engine/existingAgents.tsCOMMENT
LOWscripts/asset-manager.html61 .add-mode-bar { padding: 5px 10px; background: #1a3a1a; border-bottom: 1px solid #2a5a2a; display: flex; gap: 10px; COMMENT
LOWe2e/playwright.config.ts41 },COMMENT
LOWe2e/tests/claude/hooks-off/lifecycle.spec.ts121 // but the user immediately types /resume (or aborts and runs claude --resume)COMMENT
LOWe2e/tests/claude/hooks-off/lifecycle.spec.ts781 //COMMENT
LOWe2e/tests/claude/hooks-off/lifecycle.spec.ts861 });COMMENT
LOWe2e/tests/claude/hooks-on/consent.spec.ts361 await finishIntro(dialog);COMMENT
LOWe2e/tests/claude/hooks-on/basic.spec.ts101 narrator.check('the agent shows a 9% context gauge; the subtask has none');COMMENT
LOWe2e/tests/claude/hooks-on/lifecycle.spec.ts1101 });COMMENT
LOWe2e/tests/claude/hooks-on/lifecycle.spec.ts1361 { timeout: 5_000 },COMMENT
LOWe2e/tests/claude/hooks-on/lifecycle.spec.ts1561 await expectOverlayVisible(frame, 'Reading foo.ts');COMMENT
LOWe2e/tests/claude/hooks-on/lifecycle.spec.ts1601 await closeBottomPanel(window);COMMENT
LOWe2e/helpers/launch.ts81 // Pre-seed user-level config/layout under the isolated HOME, BEFORE VS CodeCOMMENT
LOWe2e/helpers/launch.ts141COMMENT
LOWe2e/helpers/launch.ts221 fs.chmodSync(mockClaudeBinaryPath, 0o755);COMMENT
Modern AI Meta-Vocabulary1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMCHANGELOG.md33- **Context gauge on every agent** ([#351](https://github.com/pixel-agents-hq/pixel-agents/pull/351)) — Shows each agentCODE