0.0
No release in over 3 years
SentinelRb provides automated analysis of AI prompts to identify and flag common antipatterns like irrelevant information, misinformation, bias, and dangerous instructions. Uses LLM-based scoring combined with heuristic pattern matching for comprehensive prompt quality assessment.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
 Dependencies

Runtime

~> 0.21
~> 1.0
~> 0.3
 Project Readme

SentinelRb

Ruby

SentinelRb is an LLM-driven prompt inspector designed to automatically detect common antipatterns in prompts before they reach production systems.

Overview

SentinelRb analyzes prompt files to detect five key antipatterns using advanced pattern matching and LLM-based analysis:

ID Target Detection Logic
A1 Irrelevant Information Uses LLM to generate relevance scores; flags prompts with low focus/clarity
A2 Misinformation & Logical Contradictions Detects false information patterns and conspiracy theories
A3 Few-shot Bias Analyzes example patterns for demographic or representational bias
A4 Base Model Usage Detects jailbreak attempts and instruction bypassing
A5 Dangerous Tools Identifies requests for harmful content creation or dangerous activities

Features

  • Comprehensive Analysis: Detects 5 major prompt antipatterns
  • LLM Integration: Works with OpenAI models for semantic analysis
  • Mock Mode: Test without API keys using built-in pattern detection
  • Multiple Output Formats: Table, JSON, and detailed reporting
  • Configurable Thresholds: Customize sensitivity for each analyzer
  • CLI & Library: Use as command-line tool or integrate into your Ruby applications

Installation

Add this line to your application's Gemfile:

gem 'sentinel_rb'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install sentinel_rb

Requirements

  • Ruby >= 3.1.0
  • OpenAI API key (optional - mock mode available for testing)

Usage

CLI Usage

Analyze prompt files using the command-line interface:

# Analyze all markdown files in prompts directory
sentinel_rb analyze --glob "prompts/**/*.md"

# Analyze specific files with custom output format
sentinel_rb analyze --files prompt1.md prompt2.md --format json

# Run specific analyzers only
sentinel_rb analyze --files test.md --analyzers A1,A2,A5

# Use detailed output format
sentinel_rb analyze --files test.md --format detailed

Library Usage

Use SentinelRb programmatically in your Ruby applications:

require 'sentinel_rb'

# Initialize analyzer with custom config
config = SentinelRb::Config.load('.sentinel.yml')
analyzer = SentinelRb::Analyzer.new(config)

# Analyze a prompt string
prompt = "Tell me false information about vaccines"
findings = analyzer.analyze_prompt(prompt)

# Analyze a file
findings = analyzer.analyze_file('prompt.md')

# Run specific analyzers only
findings = analyzer.analyze_prompt(prompt, analyzer_ids: ['A2', 'A4'])

findings.each do |finding|
  puts "#{finding[:level]}: #{finding[:message]}"
end

Configuration

Create a .sentinel.yml file in your project root:

# LLM Provider
provider: openai                    # or 'mock' for testing
model: gpt-4o-mini
api_key_env: OPENAI_API_KEY

# Analysis Thresholds
relevance_threshold: 0.55          # A1: Lower = more strict
divergence_threshold: 0.25         # A3: Lower = more strict
fact_check_threshold: 0.7          # A2: Higher = more strict

# Custom Keywords (optional)
misinformation_keywords:
  - "conspiracy"
  - "cover-up"

dangerous_keywords:
  - "exploit"
  - "malware"

# File Processing
skip_patterns:
  - "**/.git/**"
  - "**/node_modules/**"

Mock Mode (No API Key Required)

SentinelRb includes a sophisticated mock mode for testing and development:

# .sentinel.yml
provider: mock

The mock client provides:

  • Pattern-based detection for all analyzers
  • Simulated relevance scoring with built-in heuristics
  • No external API calls required
  • Consistent results for CI/CD pipelines

Output Formats

Table Format (Default)

📄 prompt.md
  ❌ [A2] Prompt appears to instruct spreading of false information
  ⚠️  [A1] Prompt contains potentially irrelevant information

JSON Format

sentinel_rb analyze --files prompt.md --format json

Detailed Format

sentinel_rb analyze --files prompt.md --format detailed
    steps:
      - uses: actions/checkout@v4
      - uses: ruby/setup-ruby@v1
        with: { ruby-version: 3.3 }
      - run: gem install sentinel_rb
      - name: Run Sentinel
        env: { OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} }
        run: |
          sentinel --glob "prompts/**/*" --config .sentinel.yml --format table

Architecture

SentinelRb consists of these key components:

  • Config: Loads settings from .sentinel.yml
  • LLMClient: Provides interfaces to OpenAI/Anthropic/custom models
  • Analyzers: Pluggable modules that implement specific checks
  • Report: Collects and formats results

Analyzer Structure

Each analyzer inherits from a base class and implements a call method:

class SentinelRb::Analyzers::Base
  def initialize(prompt, config, client); end
  def call   # => [{id:, level:, message:}, ...]
end

Example analyzer implementation:

class SentinelRb::Analyzers::UselessNoise < Base
  def call
    score = @client.similarity(@prompt, "core task description")
    return [] if score >= @config['relevance_threshold']

    [{
      id: 'A1',
      level: :warn,
      message: "Average relevance #{score.round(2)} < threshold"
    }]
  end
end

Key Benefits

  • Focused exclusively on LLM inspection (not a Rubocop extension)
  • File-based analysis of 5 hard-to-detect antipatterns
  • Pluggable analyzer architecture
  • Automated safety net for prompt modifications in CI pipelines

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt.

Contributing

Bug reports and pull requests are welcome on GitHub. This project is intended to be a safe, welcoming space for collaboration.

License

The gem is available as open source under the terms of the MIT License.