An agentic skills framework & software development methodology that works.
This report summarizes scanner evidence for obra/superpowers, a Shell project with 297,155 GitHub stars. SynthScan examined 47,089 lines of code across 219 source files, recording 155 pattern matches distributed across 14 syntactic categories. The legacy adjusted pattern signal is 5.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.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 129 finding(s).
Are imports declared and package/API names verified? 3 finding(s).
Are wrappers, guards, and repeated structures necessary? 62 finding(s).
Which changes need focused human review? 155 finding(s).
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.
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.
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.
The scanner identified 155 distinct pattern matches across 14 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.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …cs/plans/2025-11-22-opencode-support-implementation.md | 565 | # ============================================ | COMMENT |
| MEDIUM | docs/plans/2025-11-22-opencode-support-design.md | 92 | # ============================================ | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 31 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 33 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 89 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 91 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 140 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 142 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 169 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 171 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 212 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 214 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 322 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 324 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 361 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 363 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 386 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 388 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 422 | # ============================================================================= | COMMENT |
| MEDIUM | scripts/sync-to-codex-plugin.sh | 424 | # ============================================================================= | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …s/2025-11-28-skills-improvements-from-user-feedback.md | 452 | // Step 1: Open interface definition (PlatformAdapter) | COMMENT |
| LOW⚡ | …s/2025-11-28-skills-improvements-from-user-feedback.md | 453 | // Step 2: List methods defined there (close, initialize, etc.) | COMMENT |
| LOW⚡ | …s/2025-11-28-skills-improvements-from-user-feedback.md | 454 | // Step 3: Mock EXACTLY those methods | COMMENT |
| LOW | …uperpowers/plans/2026-03-23-codex-app-compatibility.md | 41 | ## Step 0: Check if Already in an Isolated Workspace | COMMENT |
| LOW | …uperpowers/plans/2026-03-23-codex-app-compatibility.md | 130 | Read `skills/finishing-a-development-branch/SKILL.md` in full. Identify the insertion point: after "**If tests pass:** C | CODE |
| LOW | …uperpowers/plans/2026-03-23-codex-app-compatibility.md | 209 | Find the "### Step 5: Cleanup Worktree" section in `skills/finishing-a-development-branch/SKILL.md` (line numbers will h | CODE |
| LOW | …uperpowers/plans/2026-03-23-codex-app-compatibility.md | 212 | ### Step 5: Cleanup Worktree | COMMENT |
| LOW | …uperpowers/plans/2026-03-23-codex-app-compatibility.md | 234 | ### Step 5: Cleanup Worktree | COMMENT |
| LOW | docs/superpowers/plans/2026-04-06-worktree-rototill.md | 157 | ## Step 1: Create Isolated Workspace | COMMENT |
| LOW | docs/superpowers/plans/2026-04-06-worktree-rototill.md | 229 | ## Step 0: Detect Existing Isolation | COMMENT |
| LOW | docs/superpowers/plans/2026-04-06-worktree-rototill.md | 260 | ## Step 1: Create Isolated Workspace | COMMENT |
| LOW | docs/superpowers/plans/2026-04-06-worktree-rototill.md | 326 | ## Step 3: Project Setup | COMMENT |
| LOW | docs/superpowers/plans/2026-04-06-worktree-rototill.md | 345 | ## Step 4: Verify Clean Baseline | COMMENT |
| LOW | docs/superpowers/plans/2026-04-06-worktree-rototill.md | 490 | ### Step 1: Verify Tests | COMMENT |
| LOW | docs/superpowers/plans/2026-04-06-worktree-rototill.md | 512 | ### Step 2: Detect Environment | COMMENT |
| LOW | docs/superpowers/plans/2026-04-06-worktree-rototill.md | 529 | ### Step 3: Determine Base Branch | COMMENT |
| LOW | docs/superpowers/plans/2026-04-06-worktree-rototill.md | 538 | ### Step 4: Present Options | COMMENT |
| LOW | docs/superpowers/plans/2026-04-06-worktree-rototill.md | 567 | ### Step 5: Execute Choice | COMMENT |
| LOW | docs/superpowers/plans/2026-04-06-worktree-rototill.md | 641 | ### Step 6: Cleanup Workspace | COMMENT |
| LOW | …perpowers/specs/2026-04-06-worktree-rototill-design.md | 57 | #### Step 0: Detect Existing Isolation | COMMENT |
| LOW | …perpowers/specs/2026-04-06-worktree-rototill-design.md | 159 | #### Step 1: Verify Tests (unchanged) | COMMENT |
| LOW | …perpowers/specs/2026-04-06-worktree-rototill-design.md | 180 | #### Step 2: Determine Base Branch (unchanged) | COMMENT |
| LOW | …perpowers/specs/2026-04-06-worktree-rototill-design.md | 182 | #### Step 3: Present Options | COMMENT |
| LOW | …perpowers/specs/2026-04-06-worktree-rototill-design.md | 197 | #### Step 4: Execute Choice | COMMENT |
| LOW | …perpowers/specs/2026-04-06-worktree-rototill-design.md | 227 | #### Step 5: Cleanup (updated) | COMMENT |
| LOW | skills/using-git-worktrees/SKILL.md | 16 | ## Step 0: Detect Existing Isolation | COMMENT |
| LOW | skills/using-git-worktrees/SKILL.md | 47 | ## Step 1: Create Isolated Workspace | COMMENT |
| LOW | skills/using-git-worktrees/SKILL.md | 102 | ## Step 2: Project Setup | COMMENT |
| LOW | skills/using-git-worktrees/SKILL.md | 121 | ## Step 3: Verify Clean Baseline | COMMENT |
| LOW | skills/finishing-a-development-branch/SKILL.md | 14 | ## Step 1: Verify Tests | COMMENT |
| LOW | skills/finishing-a-development-branch/SKILL.md | 28 | ## Step 2: Detect Environment | COMMENT |
| LOW | skills/finishing-a-development-branch/SKILL.md | 46 | ## Step 3: Determine Base Branch | COMMENT |
| LOW | skills/finishing-a-development-branch/SKILL.md | 53 | ## Step 4: Present Options | COMMENT |
| LOW | skills/finishing-a-development-branch/SKILL.md | 84 | ## Step 5: Execute Choice | COMMENT |
| LOW | skills/finishing-a-development-branch/SKILL.md | 159 | ## Step 6: Cleanup Workspace | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/brainstorm-server/branding.test.js | 77 | function createPackagedServerFixture(version) { | CODE |
| LOW | tests/brainstorm-server/branding.test.js | 157 | function assertBrandedFallbackText(html, version = PACKAGE_VERSION) { | CODE |
| LOW | tests/brainstorm-server/branding.test.js | 173 | function assertLogoKeepsTransparentBackground(html) { | CODE |
| LOW | tests/brainstorm-server/branding.test.js | 208 | function assertFramedLogoSupportsDarkTheme(html) { | CODE |
| LOW | tests/brainstorm-server/branding.test.js | 215 | function assertFramedScreenUsesBrandHeader(html) { | CODE |
| LOW | tests/brainstorm-server/branding.test.js | 227 | function assertHeaderAvoidsNarrowOverlap(html) { | CODE |
| LOW | tests/brainstorm-server/server.test.js | 93 | function assertStartedOnExpectedPort(out) { | CODE |
| LOW | tests/brainstorm-server/auth.test.js | 116 | function assertStartedOnExpectedPort(out) { | CODE |
| LOW | tests/hermes/test_plugin.py | 42 | def test_register_attaches_only_pre_llm_call_hook(self, mock_ctx): | CODE |
| LOW | tests/hermes/test_plugin.py | 47 | def test_register_registers_every_stock_skill_as_path(self, mock_ctx): | CODE |
| LOW | tests/hermes/test_plugin.py | 61 | def test_registered_skills_match_skill_directories(self, mock_ctx): | CODE |
| LOW⚡ | tests/hermes/test_plugin.py | 74 | def test_first_turn_returns_bootstrap_context(self, mock_ctx): | CODE |
| LOW⚡ | tests/hermes/test_plugin.py | 84 | def test_later_turns_return_none(self, mock_ctx): | CODE |
| LOW⚡ | tests/hermes/test_plugin.py | 90 | def test_hook_tolerates_future_kwargs(self, mock_ctx): | CODE |
| LOW⚡ | tests/hermes/test_plugin.py | 123 | def test_clone_layout_resolves_sibling_skills(self, tmp_path, mock_ctx): | CODE |
| LOW⚡ | tests/hermes/test_plugin.py | 130 | def test_flat_layout_resolves_nested_skills(self, tmp_path, mock_ctx): | CODE |
| LOW⚡ | tests/hermes/test_plugin.py | 137 | def test_missing_skills_raises_loudly(self, tmp_path, mock_ctx): | CODE |
| LOW | tests/hermes/test_plugin.py | 151 | def test_every_stock_skill_registers_a_description(self, mock_ctx): | CODE |
| LOW | tests/hermes/test_plugin.py | 158 | def test_descriptions_match_the_skill_frontmatter(self, mock_ctx): | CODE |
| LOW | tests/hermes/test_plugin.py | 176 | def test_frontmatter_value_parsing(self, block, expected): | CODE |
| LOW⚡ | tests/hermes/test_bootstrap.py | 35 | def test_no_frontmatter_returns_trimmed_content(self): | CODE |
| LOW⚡ | tests/hermes/test_bootstrap.py | 40 | def test_strips_surrounding_whitespace_from_body(self): | CODE |
| LOW⚡ | tests/hermes/test_bootstrap.py | 47 | def test_repo_layout_resolves(self): | CODE |
| LOW⚡ | tests/hermes/test_bootstrap.py | 64 | def test_contains_using_superpowers_body(self): | CODE |
| LOW⚡ | tests/hermes/test_bootstrap.py | 71 | def test_frontmatter_stripped(self): | CODE |
| LOW⚡ | tests/hermes/test_bootstrap.py | 75 | def test_tool_mapping_sourced_from_reference_file(self): | CODE |
| LOW | tests/hermes/test_bootstrap.py | 88 | def test_skill_view_guidance_present(self): | CODE |
| LOW | tests/hermes/test_bootstrap.py | 92 | def test_under_hermes_context_spill_limit(self): | CODE |
| LOW | …rs/plans/2026-06-09-sdd-task-scoped-review-dispatch.md | 555 | def scaffold_sdd_quality_defect_plan(workdir: Path) -> None: | STRING |
| LOW | …/superpowers/plans/2026-05-06-lift-drill-into-evals.md | 306 | def test_set_superpowers_root_default_when_unset(monkeypatch, tmp_path): | CODE |
| LOW | …/superpowers/plans/2026-05-06-lift-drill-into-evals.md | 317 | def test_set_superpowers_root_default_respects_existing(monkeypatch): | CODE |
| LOW | …/superpowers/plans/2026-05-06-lift-drill-into-evals.md | 358 | def _set_superpowers_root_default() -> None: | CODE |
| LOW | …/superpowers/plans/2026-05-06-lift-drill-into-evals.md | 511 | def test_codex_requires_superpowers_root(): | CODE |
| LOW | …/superpowers/plans/2026-05-06-lift-drill-into-evals.md | 516 | def test_codex_does_not_require_superpowers_root(): | CODE |
| LOW | …s/2026-06-11-visual-companion-final-hardening-fixup.md | 128 | function assertStartedOnExpectedPort(out) { | CODE |
| LOW | …s/2026-06-11-visual-companion-final-hardening-fixup.md | 795 | function assertStartedOnExpectedPort(out) { | CODE |
| LOW | …/superpowers/plans/2026-07-15-sdd-fix-loop-redesign.md | 1143 | export function scaffoldSddMidloopStructural(ctx: HelperContext): void { | CODE |
| LOW | …rs/plans/2026-06-10-visual-companion-auth-hardening.md | 465 | function isRegularFileInsideContentDir(filePath) { | CODE |
| LOW | .pi/extensions/superpowers.ts | 115 | function firstNonCompactionSummaryIndex(messages: unknown[]): number { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/claude-code/test-helpers.sh | 131 | # Create a temporary test project directory | COMMENT |
| MEDIUM | tests/claude-code/test-helpers.sh | 147 | # Create a simple plan file for testing | COMMENT |
| MEDIUM | …e-code/test-subagent-driven-development-integration.sh | 58 | # Create a simple implementation plan | COMMENT |
| MEDIUM | tests/explicit-skill-requests/run-test.sh | 44 | # Create a minimal project directory for the test | COMMENT |
| MEDIUM | tests/explicit-skill-requests/run-test.sh | 48 | # Create a dummy plan file for mid-conversation tests | COMMENT |
| MEDIUM | tests/explicit-skill-requests/run-haiku-test.sh | 33 | # Create a dummy plan file | COMMENT |
| MEDIUM | tests/explicit-skill-requests/run-multiturn-test.sh | 29 | # Create a dummy plan file | COMMENT |
| MEDIUM | tests/opencode/setup.sh | 54 | # Create a project directory for project-level skill tests | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …e-code/test-subagent-driven-development-integration.sh | 216 | # Test 2: Subagents were used (Agent / Task tool — name varies by harness version) | COMMENT |
| MEDIUM | tests/diagnosing-superpowers/test-skill-structure.sh | 109 | # --- removed harness recipes stay removed -------------------------------- | COMMENT |
| MEDIUM | tests/antigravity/test-antigravity-tools.sh | 8 | # harness-specific mappings" check. CI-safe: does not require `agy` installed. | COMMENT |
| MEDIUM⚡ | skills/brainstorming/scripts/start-server.sh | 153 | # Resolve the harness PID (grandparent of this script). | COMMENT |
| MEDIUM⚡ | skills/brainstorming/scripts/start-server.sh | 154 | # $PPID is the ephemeral shell the harness spawned to run us — it dies | COMMENT |
| MEDIUM⚡ | skills/brainstorming/scripts/start-server.sh | 155 | # when this script exits. The harness itself is $PPID's parent. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/claude-code/test-helpers.sh | 31 | # Check if output contains a pattern | COMMENT |
| LOW | tests/claude-code/test-helpers.sh | 52 | # Check if output does NOT contain a pattern | COMMENT |
| LOW | tests/claude-code/test-helpers.sh | 71 | # Check if output matches a count | COMMENT |
| LOW | tests/claude-code/test-helpers.sh | 94 | # Check if pattern A appears before pattern B | COMMENT |
| LOW | tests/claude-code/run-skill-tests.sh | 18 | # Check if Claude Code is available | COMMENT |
| LOW | tests/explicit-skill-requests/run-test.sh | 81 | # Check if skill was triggered (look for Skill tool invocation) | COMMENT |
| LOW | tests/explicit-skill-requests/run-test.sh | 97 | # Check if Claude took action BEFORE invoking the skill (the failure mode) | COMMENT |
| LOW | tests/explicit-skill-requests/run-test.sh | 105 | # Check if any non-Skill, non-system tools were invoked before the first Skill invocation | COMMENT |
| LOW | tests/explicit-skill-requests/run-multiturn-test.sh | 89 | # Check if skill was triggered in Turn 3 | COMMENT |
| LOW | tests/opencode/test-priority.sh | 92 | # Check if opencode is available for integration tests | COMMENT |
| LOW | tests/opencode/test-tools.sh | 19 | # Check if opencode is available | COMMENT |
| LOW | scripts/bump-version.sh | 138 | # Check if all versions match | COMMENT |
| LOW | scripts/bump-version.sh | 201 | # Check if this file is in the declared list | COMMENT |
| LOW | skills/systematic-debugging/find-polluter.sh | 53 | # Check if pollution appeared | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/devin/test-devin-plugin.sh | 8 | # or tool-mapping scaffold to test. What IS Devin-specific is the manifest. | COMMENT |
| MEDIUM | …superpowers/plans/2026-07-30-codex-efficiency-fixes.md | 94 | ### Task 2: T3 — codex-tools.md version-honest multi-agent rewrite | COMMENT |
| MEDIUM | …superpowers/plans/2026-07-30-codex-efficiency-fixes.md | 157 | ### Task 3: T2 — codex-tools.md event-driven waiting section | COMMENT |
| MEDIUM | …uperpowers/plans/2026-10-06-antigravity-marketplace.md | 529 | # runs the SessionStart hook for bootstrap, so there is no agy-specific scaffold | COMMENT |
| MEDIUM | …ills/using-superpowers/references/claude-code-tools.md | 9 | ## Cheaper orchestration for subagent-driven development | COMMENT |
| MEDIUM | skills/using-superpowers/references/codex-tools.md | 1 | ## Subagent dispatch requires multi-agent support | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | index.js | 1 | // Root entrypoint for OpenCode v2 directory-form plugin registration. | COMMENT |
| LOW | .opencode/plugins/superpowers.js | 141 | }; | COMMENT |
| LOW | tests/devin/test-devin-plugin.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tests/claude-code/test-worktree-native-preference.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …e-code/test-subagent-driven-development-integration.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | tests/brainstorm-server/windows-lifecycle.test.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | …uperpowers/plans/2026-10-06-antigravity-marketplace.md | 121 | ```bash | COMMENT |
| LOW | …erpowers/plans/2026-07-06-sdd-plan-scoped-workspace.md | 301 | # and the progress ledger. Print the plan directory's absolute path. | COMMENT |
| LOW | …erpowers/plans/2026-07-06-sdd-plan-scoped-workspace.md | 681 | # plan B (widget export). v3: every ledger claim survives content | COMMENT |
| LOW | …s/2026-07-06-sdd-plan-scoped-workspace-eval-results.md | 241 | COMMENT | |
| LOW | scripts/render-antigravity-logo.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/sync-to-codex-plugin.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/sync-to-codex-plugin.sh | 21 | # ./scripts/sync-to-codex-plugin.sh --bootstrap # create plugin dir if missing | COMMENT |
| LOW | …ystematic-debugging/condition-based-waiting-example.ts | 141 | // --------------- | COMMENT |
| LOW | skills/brainstorming/scripts/start-server.sh | 1 | #!/usr/bin/env bash | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/brainstorm-server/windows-lifecycle.test.sh | 15 | # Usage: | COMMENT |
| LOW | scripts/bump-version.sh | 6 | # Usage: | COMMENT |
| LOW | scripts/render-antigravity-logo.sh | 5 | # Usage: | COMMENT |
| LOW | scripts/sync-to-codex-plugin.sh | 15 | # Usage: | COMMENT |
| LOW | scripts/lint-shell.sh | 5 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/claude-code/analyze-token-usage.py | 67 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/claude-code/analyze-token-usage.py | 67 | except Exception: | CODE |
| MEDIUM | tests/claude-code/analyze-token-usage.py | 91 | print(f"Error: Session file not found: {main_session_file}") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …e-code/test-subagent-driven-development-integration.sh | 120 | git config user.email "test@test.com" | CODE |
| LOW | skills/brainstorming/visual-companion.md | 247 | <div class="placeholder">Placeholder area</div> | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/claude-code/analyze-token-usage.py | 12 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/hermes/test_bootstrap.py | 5 | CODE |