Detect semantic-level bugs by analyzing whether code behavior matches its intended purpose inferred from function/variable names, comments, docstrings, and documentation. Use when users need to: (1) Find logic errors where implementation contradicts stated intent, (2) Identify off-by-one errors and boundary mismatches, (3) Detect inverted logic or wrong operators, (4) Catch missing edge case handling, (5) Verify code matches its documentation. Highlights mismatches between intent and implementation across multiple programming languages.
npx skills add https://github.com/ArabelaTso/Skills-4-SE --skill semantic-bug-detector
Detect bugs where code behavior doesn't match its intended purpose.
This skill analyzes code to find semantic bugs—errors where the implementation contradicts the intent expressed through names, comments, and documentation. Unlike syntax errors or type errors, semantic bugs are logically valid code that does the wrong thing.
Provide code with any of:
The skill will:
Gather intent signals from multiple sources:
Names: is_even, get_last_n_elements, calculate_average
Comments: // Returns first n elements, # Check if x is positive
Docstrings:
"""Calculate the average of a list of numbers.
Returns the sum divided by the count."""
Examine actual code behavior:
Control flow: Conditions, loops, branches
Operations: Arithmetic, logical, comparison operators
Boundaries: Array indices, range limits
Edge cases: Empty input, null values, zero divisors
Check for common mismatches:
Off-by-one errors: Using n+1 when should use n
Inverted logic: Returning opposite boolean value
Wrong operator: Using * when should use /
Boundary errors: Inclusive when should be exclusive
Missing checks: Not handling empty/null input
For each bug found, provide:
Code:
def get_last_n_elements(arr, n):
"""Returns the last n elements from the array."""
return arr[-n-1:]
Analysis:
arr[-n-1:] returns n+1 elementsReport:
BUG: Off-by-one error in get_last_n_elements
Location: Line 3, return statement
Intent: Return the last n elements (from name and docstring)
Actual: Returns the last n+1 elements
Bug Type: Off-by-one error
Severity: High
Explanation:
The slice arr[-n-1:] starts at index -(n+1), which includes
one extra element. Should use arr[-n:] to get exactly n elements.
Fix:
return arr[-n:]
Code:
def is_even(x):
"""Check if x is even."""
return x % 2 == 1
Analysis:
x % 2 == 1 returns True for odd numbersReport:
BUG: Inverted logic in is_even
Location: Line 3, return statement
Intent: Return True when x is even (from name and docstring)
Actual: Returns True when x is odd
Bug Type: Inverted boolean logic
Severity: High
Explanation:
x % 2 == 1 is True for odd numbers, not even numbers.
The condition is inverted from the stated intent.
Fix:
return x % 2 == 0
Code:
def in_range(x, start, end):
"""Check if x is in range [start, end)."""
return start <= x <= end
Analysis:
start <= x <= end includes endReport:
BUG: Boundary mismatch in in_range
Location: Line 3, return statement
Intent: Check if x in [start, end) - half-open interval (from docstring)
Actual: Checks if x in [start, end] - closed interval
Bug Type: Boundary error (inclusive vs exclusive)
Severity: Medium
Explanation:
The notation [start, end) means start is included but end is excluded.
The condition start <= x <= end includes end, violating the spec.
Fix:
return start <= x < end
Code:
def calculate_average(numbers):
"""Calculate the average of a list of numbers."""
return sum(numbers) * len(numbers)
Analysis:
Report:
BUG: Wrong operator in calculate_average
Location: Line 3, return statement
Intent: Calculate average (sum / count) from name and docstring
Actual: Calculates sum * count
Bug Type: Wrong arithmetic operator
Severity: High
Explanation:
Average is calculated by dividing sum by count, not multiplying.
Using * instead of / produces incorrect result.
Fix:
return sum(numbers) / len(numbers)
Code:
def find_max(numbers):
"""Find the maximum number in the list."""
max_val = numbers[0]
for num in numbers[1:]:
if num > max_val:
max_val = num
return max_val
Analysis:
Report:
BUG: Missing edge case handling in find_max
Location: Line 3, accessing numbers[0]
Intent: Find maximum number in list (from name and docstring)
Actual: Crashes with IndexError when list is empty
Bug Type: Missing edge case (empty input)
Severity: High
Explanation:
The function assumes the list is non-empty by accessing numbers[0]
without checking. This causes a crash on empty input.
Fix:
if not numbers:
raise ValueError("Cannot find max of empty list")
max_val = numbers[0]
...
Indicators: "first n", "last n", "range", "iterate"
Bugs: Using n+1 instead of n, <= instead of <
See: bug_patterns.md
Indicators: "is_", "has_", "can_", boolean predicates
Bugs: Returning opposite value, wrong comparison
See: bug_patterns.md
Indicators: "[a, b]", "[a, b)", range specifications
Bugs: Inclusive when should be exclusive
See: bug_patterns.md
Indicators: "sum", "product", "average", "ratio"
Bugs: Using * instead of /, or instead of and
See: bug_patterns.md
Indicators: "process", "find", "calculate"
Bugs: Not handling empty/null input, division by zero
See: bug_patterns.md
Example: is_even should return True for even numbers
Example: Comment says "first n elements" but code returns n+1
Example: Doc says "[start, end)" but code uses <= for end
Example: calculate_average should use / not *
Example: Function processing list should handle empty list
The skill works across languages by focusing on semantic patterns:
Python: Docstrings, naming conventions, type hints
JavaScript/TypeScript: JSDoc, naming, type annotations
Java: Javadoc, naming conventions, method signatures
C/C++: Doxygen comments, naming, function signatures
Go: Doc comments, naming conventions
Rust: Doc comments, naming, type system
Language-specific syntax is handled, but detection focuses on universal semantic patterns.
For each bug, provide:
BUG: <Bug type> in <function/location>
Location: <File:line or function name>
Intent: <What code should do based on names/docs>
Actual: <What code actually does>
Bug Type: <Category of semantic error>
Severity: <High/Medium/Low>
Explanation:
<Detailed explanation of the mismatch>
Fix:
<Suggested code correction>
Detailed bug pattern catalog:
Load this reference when:
Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).
Automatically creates user-facing changelogs from git commits by analyzing commit history, categorizing changes, and transforming technical commits into clear, customer-friendly release notes. Turns hours of manual changelog writing into minutes of automated generation.
Use when implementation is complete, all tests pass, and you need to decide how to integrate the work - guides completion of development work by presenting structured options for merge, PR, or cleanup
Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).
React Native and Expo best practices for building performant mobile apps. Use when building React Native components, optimizing list performance, implementing animations, or working with native modules. Triggers on tasks involving React Native, Expo, mobile performance, or native platform APIs.
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.
Next.js best practices - file conventions, RSC boundaries, data patterns, async APIs, metadata, error handling, route handlers, image/font optimization, bundling
Use when starting feature work that needs isolation from current workspace or before executing implementation plans - creates isolated git worktrees with smart directory selection and safety verification
Take arabelatso/semantic-bug-detector from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.