AI Slop Code Risk Monitor

huginn/huginn

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

Create agents that monitor and act on your behalf. Your agents are standing by!

2.0 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for huginn/huginn, a Ruby project with 50,231 GitHub stars. SynthScan examined 64,425 lines of code across 586 source files, recording 95 pattern matches distributed across 9 syntactic categories. The legacy adjusted pattern signal is 2.0 (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.0
Adjusted Signal
2.0
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
50.2K
Stars
Ruby
Language
64.4K
Lines of Code
586
Files
95
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 7.3/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 2.6/100 · LOW

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

Agent Over-Engineering Ratio 1.6/100 · LOW

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

PR Review Velocity Impact 9.1/100 · LOW

Which changes need focused human review? 95 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 9LOW 84

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 95 distinct pattern matches across 9 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 Block40 hits · 40 pts
SeverityFileLineSnippetContext
LOWapp/controllers/web_requests_controller.rb1# This controller is designed to allow your Agents to receive cross-site Webhooks (POSTs), or to output data streams.COMMENT
LOWapp/assets/config/manifest.js1//= link_tree ../imagesCOMMENT
LOWapp/assets/javascripts/application.js1//= require jquery2COMMENT
LOWapp/concerns/liquid_interpolatable.rb21 errors.add(:options, "has an error with Liquid templating: #{e.message}")COMMENT
LOWapp/concerns/liquid_interpolatable.rb41 endCOMMENT
LOWapp/concerns/liquid_interpolatable.rb301 # It can be used as a JSONPath replacement for Agents that only support Liquid:COMMENT
LOWapp/concerns/liquid_interpolatable.rb361 "t" => "\t",COMMENT
LOWapp/concerns/liquid_interpolatable.rb441 # variable `match` is set for each iteration, which can be used asCOMMENT
LOWconfig/environments/production.rb41COMMENT
LOWconfig/environments/production.rb121COMMENT
LOWconfig/environments/production.rb141 # these configuration options.COMMENT
LOWconfig/initializers/application_controller_renderer.rb1# Be sure to restart your server when you modify this file.COMMENT
LOWconfig/initializers/backtrace_silencers.rb1# Be sure to restart your server when you modify this file.COMMENT
LOWconfig/initializers/mime_types.rb1# Be sure to restart your server when you modify this file.COMMENT
LOWconfig/initializers/wrap_parameters.rb1# Be sure to restart your server when you modify this file.COMMENT
LOWconfig/initializers/devise.rb21 # ==> ORM configurationCOMMENT
LOWconfig/initializers/devise.rb41 # The same considerations mentioned for authentication_keys also apply to request_keys.COMMENT
LOWconfig/initializers/devise.rb61 # It can be set to an array that will enable http authentication only for theCOMMENT
LOWconfig/initializers/devise.rb81 # may want to disable generating routes to Devise's sessions controller byCOMMENT
LOWconfig/initializers/devise.rb101COMMENT
LOWconfig/initializers/devise.rb161 # The time you want to timeout the user session without activity. After thisCOMMENT
LOWconfig/initializers/devise.rb181 # Number of authentication tries before locking an account if lock_strategyCOMMENT
LOWconfig/initializers/devise.rb201 # ==> Configuration for :encryptableCOMMENT
LOWconfig/initializers/devise.rb221 # Set this configuration to false if you want /users/sign_out to sign outCOMMENT
LOWconfig/initializers/devise.rb321 # endCOMMENT
LOWconfig/initializers/permissions_policy.rb1# Define an application-wide HTTP permissions policy. For furtherCOMMENT
LOWconfig/initializers/content_security_policy.rb1# Be sure to restart your server when you modify this file.COMMENT
LOWconfig/initializers/content_security_policy.rb21COMMENT
LOWconfig/initializers/inflections.rb1# Be sure to restart your server when you modify this file.COMMENT
LOWspec/spec_helper.rb1# This file was generated by the `rails generate rspec:install` command. Conventionally, allCOMMENT
LOWspec/spec_helper.rb21 # This option will default to `true` in RSpec 4. It makes the `description`COMMENT
LOWspec/spec_helper.rb41 # have no way to turn it off -- the option exists only for backwardsCOMMENT
LOWspec/spec_helper.rb61COMMENT
LOWspec/spec_helper.rb81COMMENT
LOWspec/rails_helper.rb41 # instead of true.COMMENT
LOWspec/support/fake_mqtt_server.rb1#!/usr/bin/env rubyCOMMENT
LOWpublic/robots.txt1# See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt fileCOMMENT
LOWlib/jsonpath_safety.rb1# Adapted from jsonpath 1.1.5's Dig and Parser under the MIT License:COMMENT
LOWlib/capistrano/sync.rb1require 'yaml'COMMENT
LOWdb/migrate/20120728210244_devise_create_users.rb21COMMENT
Hyper-Verbose Identifiers20 hits · 22 pts
SeverityFileLineSnippetContext
LOWapp/importers/scenario_import.rb247 def translate_keep_events_for(old_value)CODE
LOW⚡app/models/agents/attribute_difference_agent.rb90 def calculate_integer_difference(new_value)CODE
LOW⚡app/models/agents/attribute_difference_agent.rb96 def calculate_decimal_difference(new_value, dec_pre)CODE
LOW⚡app/models/agents/attribute_difference_agent.rb102 def calculate_percentage_change(new_value, dec_pre)CODE
LOWapp/controllers/application_controller.rb36 def filtered_agent_return_link(options = {})CODE
LOWapp/controllers/omniauth_callbacks_controller.rb21 def reauthorization_service_for(provider)CODE
LOWapp/controllers/web_requests_controller.rb79 def normalize_redirect_target(target)CODE
LOWapp/helpers/agent_helper.rb9 def agent_filter_service_label(service)CODE
LOWapp/helpers/agent_helper.rb68 def agent_dry_run_with_event_mode(agent)CODE
LOWapp/helpers/jobs_helper.rb13 def relative_distance_of_time_in_words(time)CODE
LOWapp/helpers/application_helper.rb128 def user_omniauth_authorize_path(provider)CODE
LOWapp/concerns/file_handling.rb70 def file_pointer_signature_payload(pointer)CODE
LOWapp/concerns/json_serialized_field.rb107 def configure_json_serialized_field(field)CODE
LOWapp/concerns/markdown_class_attributes.rb5 def markdown_class_attributes(*attributes)CODE
LOWspec/models/agents/s3_agent_spec.rb231 def expect_file_pointer_event(file, event_type = nil)CODE
LOWspec/models/agents/ftpsite_agent_spec.rb278 def expect_file_pointer_event(event, payload)CODE
LOWlib/utils.rb74 def escape_uri_unsafe_characters(string)CODE
LOW…0525150140_migrate_agents_to_service_authentication.rb14 def twitter_oauth_token_secret(agent)CODE
LOW…29000000_retire_coffeescript_from_javascript_agents.rb41 def each_legacy_coffeescript_agent(&)CODE
LOW…29000000_retire_coffeescript_from_javascript_agents.rb54 def credential_referenced_by_code(code)CODE
Fake / Example Data17 hits · 22 pts
SeverityFileLineSnippetContext
LOW⚡app/models/agents/website_agent.rb82 "title": "Lorem ipsum 1",CODE
LOW⚡app/models/agents/website_agent.rb87 "title": "Lorem ipsum 2",CODE
LOW⚡app/models/agents/website_agent.rb92 "title": "Lorem ipsum 3",CODE
LOW⚡app/models/agents/website_agent.rb113 "title": "Lorem ipsum 1",CODE
LOW⚡app/models/agents/website_agent.rb117 "title": "Lorem ipsum 2",CODE
LOW⚡app/models/agents/website_agent.rb121 "title": "Lorem ipsum 3",CODE
LOW⚡spec/features/admin_users_spec.rb33 fill_in 'Email', with: 'test@test.com'CODE
LOW⚡spec/features/admin_users_spec.rb39 expect(page).to have_text('test@test.com')CODE
LOW⚡spec/features/admin_users_spec.rb44 fill_in 'Email', with: 'test@test.com'CODE
LOWspec/models/agents/event_formatting_agent_spec.rb39 :text => "Some Lorem Ipsum",CODE
LOWspec/models/agents/event_formatting_agent_spec.rb54 :text => "Some Lorem Ipsum 2",CODE
LOWspec/models/agents/event_formatting_agent_spec.rb81 expect(Event.last.payload[:message]).to eq("Received Some Lorem Ipsum from somevalue .")CODE
LOWspec/models/agents/rss_agent_spec.rb338 "John Doe"CODE
LOWspec/models/agents/rss_agent_spec.rb403 "authors" => ["Jane Doe"],CODE
LOWspec/models/agents/rss_agent_spec.rb429 "authors" => ["Jane Doe"],CODE
LOWspec/models/agents/rss_agent_spec.rb454 "authors" => ["John Doe"],CODE
LOWdb/seeds/seeder.rb12 user = User.find_or_initialize_by(:email => ENV['SEED_EMAIL'].presence || "admin@example.com")CODE
Self-Referential Comments7 hits · 20 pts
SeverityFileLineSnippetContext
MEDIUMapp/concerns/liquid_interpolatable.rb32 # # Create a new scope to define variables in:COMMENT
MEDIUMconfig/initializers/wrap_parameters.rb3# This file contains settings for ActionController::ParamsWrapper whichCOMMENT
MEDIUMconfig/initializers/permissions_policy.rb1# Define an application-wide HTTP permissions policy. For furtherCOMMENT
MEDIUMconfig/initializers/content_security_policy.rb3# Define an application-wide content security policyCOMMENT
MEDIUMspec/support/fake_mqtt_server.rb34 # Create a new fake MQTT serverCOMMENT
MEDIUMspec/data_fixtures/jira.json1{"expand":"schema,names","startAt":0,"maxResults":50,"total":50,"issues":[{"expand":"editmeta,renderedFields,transitionsCODE
MEDIUMdoc/deployment/backup/example_backup.rb1# This file contains an example template for using the Backup gem for backing up your Huginn installation to S3.COMMENT
Magic Placeholder Names2 hits · 12 pts
SeverityFileLineSnippetContext
HIGHapp/models/agents/aftership_agent.rb25 * `api_key` - YOUR_API_KEY.COMMENT
HIGHapp/models/agents/aftership_agent.rb90 'api_key' => 'YOUR_API_KEY',CODE
Slop Phrases3 hits · 8 pts
SeverityFileLineSnippetContext
LOWapp/models/agents/webhook_agent.rb36 * `recaptcha_secret` - Setting this to a reCAPTCHA "secret" key makes your agent verify incoming requests with rCOMMENT
MEDIUMbin/decrypt_backup.rb3# If you're using the backup gem, described on the Huginn wiki and at doc/deployment/backup, then you can use thisCOMMENT
MEDIUMspec/spec_helper.rb48# with RSpec, but feel free to customize to your heart's content.COMMENT
Example Usage Blocks2 hits · 3 pts
SeverityFileLineSnippetContext
LOWapp/concerns/liquid_interpolatable.rb320 # Example usage:COMMENT
LOWapp/concerns/liquid_interpolatable.rb458 # Example usage:COMMENT
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOWconfig/application.rb62 # Set LOCALE to use another locale provided by a translation gem.COMMENT
LOWconfig/environments/production.rb83 # Set this to true and configure the email server for immediate delivery to raise delivery errors.COMMENT
AI Slop Vocabulary2 hits · 2 pts
SeverityFileLineSnippetContext
LOWapp/models/agents/website_agent.rb65 You can also use [XPath functions](https://www.w3.org/TR/xpath/#section-String-Functions) like `normalize-space` tCODE
LOWlib/utils.rb127 # Output JSON that is ready for inclusion into HTML. If you simply use to_json on an object, theCOMMENT