freshcrate
Home > MCP Servers > skylos

skylos

Open-source Python, TypeScript, and Go SAST with dead code detection. Finds secrets, exploitable flows, and AI regressions. VS Code extension, GitHub Action, and MCP server for AI agents.

Description

Open-source Python, TypeScript, and Go SAST with dead code detection. Finds secrets, exploitable flows, and AI regressions. VS Code extension, GitHub Action, and MCP server for AI agents.

README

Skylos - Dead code, security, and AI defense for Python, TypeScript, and Go

Skylos: Open-Source Python SAST, Dead Code Detection, and AI Code Security

Find unused code, hardcoded secrets, exploitable flows, and AI-generated security regressions in Python, TypeScript, and Go. Run locally or gate pull requests in CI/CD.

License: Apache 2.0 CI/CD Readycodecov PyPI - Python Version PyPI version Downloads/month Downloads total VS Code Marketplace GitHub stars GitHub forks SkylosDiscordπŸ“– Website Β· Documentation Β· Blog Β· GitHub Action Β· VS Code Extension Β· MCP Server

English | δΈ­ζ–‡


What is Skylos?

Skylos is an open-source static analysis tool and PR gate for Python, TypeScript, and Go. It helps teams detect dead code, hardcoded secrets, exploitable flows, and AI-generated security regressions before they land in main.

If you use Vulture for dead code, Bandit for security checks, or Semgrep/CodeQL for CI enforcement, Skylos combines those workflows with framework-aware dead code detection and diff-aware regression detection for AI-assisted refactors.

The core use case is straightforward: run it locally, add it to CI, and gate pull requests on real findings with GitHub annotations and review comments. Advanced features like AI defense, remediation agents, VS Code, MCP, and cloud upload are available, but you do not need any of them to get value from Skylos.

Best for

  • Python teams that want dead code detection with fewer false positives than Vulture
  • Repositories using Cursor, Copilot, Claude Code, or other AI coding assistants
  • CI/CD pull request gates with GitHub annotations and review comments
  • Python LLM applications that need OWASP LLM Top 10 checks

Available as

  • CLI for local scans and CI/CD workflows
  • GitHub Action for pull request gating and annotations
  • VS Code extension for in-editor findings and AI-assisted fixes
  • MCP server for AI agents and coding assistants

Start here

Goal Command What you get
Scan a repo skylos . -a Dead code, risky flows, secrets, and code quality findings
Gate pull requests skylos cicd init A GitHub Actions workflow with a quality gate and inline annotations
Audit an LLM app skylos defend . Optional AI defense checks for Python LLM integrations

Why teams adopt it

  1. Better dead code signal on real frameworks: Skylos understands FastAPI, Django, Flask, pytest, Next.js, React, and more, so dynamic code produces less noise.
  2. Diff-aware AI regression detection: Skylos can catch removed auth decorators, CSRF, rate limiting, validation, logging, and other controls that disappear during AI-assisted refactors.
  3. One workflow instead of three tools: Dead code, security scanning, and PR gating live in the same CLI and CI flow.
  4. Local-first by default: You can keep scans on your machine and add optional AI or cloud features later if you need them.
  5. Self-explaining output: Every table prints a legend explaining what each column and number means β€” no manual required.

Why Skylos over Vulture for Python dead code detection?

Skylos Vulture
Recall 98.1% (51/52) 84.6% (44/52)
False Positives 220 644
Framework-aware (FastAPI, Django, pytest) Yes No
Security scanning (secrets, SQLi, SSRF) Yes No
AI-powered analysis Yes No
CI/CD quality gates Yes No
TypeScript + Go support Yes No

Benchmarked on 9 popular Python repos (350k+ combined stars) + TypeScript (consola). Every finding manually verified. Full case study β†’

πŸš€ New to Skylos? Start with CI/CD Integration

# Generate a GitHub Actions workflow in 30 seconds
skylos cicd init

# Commit and push to activate
git add .github/workflows/skylos.yml && git push

What you get:

  • Automatic dead code detection on every PR
  • Security vulnerability scanning (SQLi, secrets, dangerous patterns)
  • Quality gate that fails builds on critical issues
  • Inline PR review comments with file:line links
  • GitHub Annotations visible in the "Files Changed" tab

No configuration needed - works out of the box with sensible defaults. See CI/CD section for customization.


Table of Contents

Quick Start

If you are evaluating Skylos, start with the core workflow below. The LLM and AI defense commands are optional.

Core Workflow

Objective Command Outcome
First scan skylos . Dead code findings with confidence scoring
Audit risk and quality skylos . -a Dead code, risky flows, secrets, quality, and SCA findings
Higher-confidence dead code skylos . --trace Cross-reference static findings with runtime activity
Review only changed lines skylos . --diff origin/main Focus findings on active work instead of legacy debt
Gate locally skylos --gate Fail on findings before code leaves your machine
Set up CI/CD skylos cicd init Generate a GitHub Actions workflow in 30 seconds
Gate in CI skylos cicd gate --input results.json Fail builds when issues cross your threshold

Optional Workflows

Objective Command Outcome
Detect Unused Pytest Fixtures skylos . --pytest-fixtures Find unused @pytest.fixture across tests + conftest
AI-Powered Analysis skylos agent scan . --model gpt-4.1 Fast static + LLM file review with dead-code verification available on demand
Dead Code Verification skylos agent verify . --model gpt-4.1 Dead-code-only second pass: static findings reviewed by the LLM
Security Audit skylos agent scan . --security Deep LLM security review with interactive file selection
Auto-Remediate skylos agent remediate . --auto-pr Scan, fix, test, and open a PR β€” end to end
Code Cleanup skylos agent remediate . --standards LLM-guided code quality cleanup against coding standards
PR Review skylos agent scan . --changed Analyze only git-changed files
PR Review (JSON) skylos agent scan . --changed --format json -o results.json LLM review with code-level fix suggestions
Local LLM skylos agent scan . --base-url http://localhost:11434/v1 --model codellama Use Ollama/LM Studio (no API key needed)
PR Review (CI) skylos cicd review -i results.json Post inline comments on PRs
AI Defense: Discover skylos discover . Map all LLM integrations in your codebase
AI Defense: Defend skylos defend . Check LLM integrations for missing guardrails
AI Defense: CI Gate skylos defend . --fail-on critical --min-score 70 Block PRs with critical AI defense gaps
Whitelist skylos whitelist 'handle_*' Suppress known dynamic patterns

Technical Debt Hotspots

Use skylos debt <path> to rank structural debt hotspots without collapsing everything into a single urgency number.

  • score is the project-level structural debt score.
  • priority is the hotspot triage score used for ordering fix candidates.
  • --changed limits the visible hotspot list to changed files, but keeps the structural debt score anchored to the whole project.
# Full project debt scan
skylos debt .

# Review only changed hotspots without distorting the project score
skylos debt . --changed

# Compare the current project against a saved debt baseline
skylos debt . --baseline

# Save a repo-level debt baseline
skylos debt . --save-baseline

Debt policy files such as skylos-debt.yaml are discovered from the scan target upward, and explicit CLI flags like --top override policy defaults.

Demo

Skylos demo

Backup (GitHub): #82

Key Capabilities

The core product is dead code detection, security scanning, and PR gating. The AI-focused features below are optional layers on top of that baseline workflow.

Security Scanning (SAST)

  • Taint Analysis: Traces untrusted input from API endpoints to databases to prevent SQL Injection and XSS.
  • Secrets Detection: Hunts down hardcoded API keys (AWS, Stripe, OpenAI) and private credentials before commit.
  • Vulnerability Checks: Flags dangerous patterns like eval(), unsafe pickle, and weak cryptography.

AI-Generated Code Guardrails

Skylos can also flag common AI-generated code mistakes. Every finding includes vibe_category and ai_likelihood (high/medium/low) metadata so you can filter them separately if you want.

  • Phantom Call Detection: Catches calls to security functions (sanitize_input, validate_token, check_permission, etc.) that are never defined or imported β€” AI hallucinates these constantly. hallucinated_reference, high
  • Phantom Decorator Detection: Catches security decorators (@require_auth, @rate_limit, @authenticate, etc.) that are never defined or imported. hallucinated_reference, high
  • Unfinished Generation: Detects functions with only pass, ..., or raise NotImplementedError β€” AI-generated stubs that silently do nothing in production. incomplete_generation, medium
  • Undefined Config: Flags os.getenv("ENABLE_X") referencing feature flags that are never defined anywhere in the project. ghost_config, medium
  • Stale Mock Detection: Catches mock.patch("app.email.send_email") where send_email no longer exists β€” AI renames functions but leaves tests pointing at the old name. stale_reference, medium
  • Security TODO Scanners: Flags # TODO: add auth placeholders that AI left behind and nobody finished.
  • Disabled Security Controls: Detects verify=False, @csrf_exempt, DEBUG=True, and ALLOWED_HOSTS=["*"].
  • Credential & Randomness Checks: Catches hardcoded passwords and random.choice() used for security-sensitive values like tokens and OTPs.

Prompt Injection and Content Scanning

These checks run under --danger and look for prompt injection patterns or obfuscated instructions in repository content.

  • Multi-File Prompt Injection Scanner: Scans Python, Markdown, YAML, JSON, TOML, and .env files for hidden instruction payloads β€” instruction overrides ("ignore previous instructions"), role hijacking ("you are now"), AI-targeted suppression ("do not flag", "skip security"), data exfiltration prompts, and AI-targeting phrases.
  • Text Canonicalization Engine: NFKC normalization, whitespace folding, and confusable replacement neutralize obfuscation before pattern matching.
  • Zero-Width & Invisible Unicode: Detects zero-width spaces, joiners, BOM, and bidi overrides (U+200B–U+202E) that hide payloads from human reviewers.
  • Base64 Obfuscation Detection: Automatically decodes base64-encoded strings and re-scans for injection content.
  • Homoglyph / Mixed-Script Detection: Flags Cyrillic and Greek characters mixed with Latin text (e.g., Cyrillic 'Π°' in password) that bypass visual review.
  • Location-Aware Severity: Findings in README files, HTML comments, and YAML prompt fields get elevated severity. Test files are automatically skipped.

Advanced: AI Defense for LLM Apps

Static analysis for AI application security that maps every LLM call in your Python codebase and checks for missing guardrails. Python only (TypeScript/Go support planned).

# Discover all LLM integrations
skylos discover .

# Check defenses and get a scored report
skylos defend .

# CI gate: fail on critical gaps, require 70% defense score
skylos defend . --fail-on critical --min-score 70

# JSON output for dashboards and pipelines
skylos defend . --json -o defense-report.json

# Filter by OWASP LLM Top 10 category
skylos defend . --owasp LLM01,LLM04

13 checks across defense and ops:

Check Severity OWASP What it detects
no-dangerous-sink Critical LLM02 LLM output flowing to eval/exec/subprocess
untrusted-input-to-prompt Critical LLM01 Raw user input in prompt with no processing
tool-scope Critical LLM04 Agent tools with dangerous system calls
tool-schema-present Critical LLM04 Agent tools without typed schemas
output-validation High LLM02 LLM output used without structured validation
prompt-delimiter High LLM01 User input in prompts without delimiters
rag-context-isolation High LLM01 RAG context injected without isolation
output-pii-filter High LLM06 No PII filtering on user-facing LLM output
model-pinned Medium LLM03 Model version not pinned (floating alias)
input-length-limit Low LLM01 No input length check before LLM call
logging-present Medium Ops No logging around LLM calls
cost-controls Medium Ops No max_tokens set on LLM calls
rate-limiting Medium Ops No rate limiting on LLM endpoints

Defense and ops scores are tracked separately β€” adding logging won't inflate your security score.

Custom policy via skylos-defend.yaml:

rules:
  model-pinned:
    severity: critical    # Upgrade severity
  input-length-limit:
    enabled: false        # Disable check
gate:
  min_score: 70
  fail_on: high

Supports OpenAI, Anthropic, Google Gemini, Cohere, Mistral, Ollama, Together AI, Groq, Fireworks, Replicate, LiteLLM, LangChain, LlamaIndex, CrewAI, and AutoGen.

Dead Code Detection & Cleanup

  • Find Unused Code: Identifies unreachable functions, orphan classes, and unused imports with confidence scoring.
  • Smart Tracing: Distinguishes between truly dead code and dynamic frameworks (Flask/Django routes, Pytest fixtures).
  • Safe Pruning: Uses LibCST to safely remove dead code without breaking syntax.

Advanced: Agents, Reviews, and Remediation

  • Context-aware audits: Combines static analysis speed with LLM reasoning to validate findings and filter noise.
  • Remediation workflow: skylos agent remediate can scan, generate fixes, run tests, and optionally open a PR.
  • Local model support: Supports Ollama and other OpenAI-compatible local endpoints if you want code to stay on your machine.

CI/CD and PR Gating

  • 30-Second Workflow Setup: skylos cicd init generates GitHub Actions workflows with sensible defaults.
  • Diff-Aware Enforcement: Gate only the lines that changed, fail on severity thresholds, and keep legacy debt manageable with baselines.
  • PR-Native Feedback: GitHub annotations, inline review comments, and optional dashboard upload keep findings where teams already work.
  • Corpus Guard: Require the Corpus Guard workflow on PRs to catch dead-code precision regressions against curated framework and language fixtures.

Safe Cleanup and Workflow Controls

  • CST-safe removals: Uses LibCST to remove selected imports or functions (handles multiline imports, aliases, decorators, async etc..)
  • Logic Awareness: Deep integration for Python frameworks (Django, Flask, FastAPI) and TypeScript (Tree-sitter) to identify active routes and dependencies.
  • Granular Filtering: Skip lines tagged with # pragma: no skylos, # pragma: no cover, or # noqa

Operational Governance & Runtime

  • Coverage Integration: Auto-detects .skylos-trace files to verify dead code with runtime data
  • Quality Gates: Enforces hard thresholds for complexity, nesting, and security risk via pyproject.toml to block non-compliant PRs
  • Interactive CLI: Manually verify and remove/comment-out findings through an inquirer-based terminal interface
  • Security-Audit Mode: Leverages an independent reasoning loop to identify security vulnerabilities

Pytest Hygiene

  • Unused Fixture Detection: Finds unused @pytest.fixture definitions in test_*.py and conftest.py
  • Cross-file Resolution: Tracks fixtures used across modules, not just within the same file

Multi-Language Support

Language Parser Dead Code Security Quality
Python AST βœ… βœ… βœ…
TypeScript/TSX Tree-sitter βœ… βœ… βœ…
Java Tree-sitter βœ… βœ… βœ…
Go Standalone binary βœ… - -

Languages are auto-detected by file extension. Mixed-language repos work out of the box. No Node.js or JDK required β€” all parsers are built-in via Tree-sitter.

TypeScript Rules

Rule ID What It Catches
Dead Code
Functions - Unused functions, arrow functions, and overloads
Classes - Unused classes, interfaces, enums, and type aliases
Imports - Unused named, default, and namespace imports
Methods - Unused methods (lifecycle methods excluded)
Security
eval() SKY-D201 eval() usage
Dynamic exec SKY-D202 exec(), new Function(), setTimeout with string
XSS SKY-D226 innerHTML, outerHTML, document.write(), dangerouslySetInnerHTML
SQL injection SKY-D211 Template literal / f-string in SQL query
Command injection SKY-D212 child_process.exec(), os.system()
SSRF SKY-D216 fetch()/axios with variable URL
Open redirect SKY-D230 res.redirect() with variable argument
Weak hash SKY-D207/D208 MD5 / SHA1 usage
Prototype pollution SKY-D510 __proto__ access
Dynamic require SKY-D245 require() with variable argument
JWT bypass SKY-D246 jwt.decode() without verification
CORS wildcard SKY-D247 cors({ origin: '*' })
Internal URL SKY-D248 Hardcoded localhost/127.0.0.1 URLs
Insecure random SKY-D250 Math.random() for security-sensitive ops
Sensitive logs SKY-D251 Passwords/tokens passed to console.log()
Insecure cookie SKY-D252 Missing httpOnly/secure flags
Timing attack SKY-D253 ===/== comparison of secrets
Storage tokens SKY-D270 Sensitive data in localStorage/sessionStorage
Error disclosure SKY-D271 error.stack/.sql sent in HTTP response
Secrets SKY-S101 Hardcoded API keys + high-entropy strings
Quality
Complexity SKY-Q301 Cyclomatic complexity exceeds threshold
Nesting depth SKY-Q302 Too many nested levels
Function length SKY-C304 Function exceeds line limit
Too many params SKY-C303 Function has too many parameters
Duplicate condition SKY-Q305 Identical condition in if-else-if chain
Await in loop SKY-Q402 await inside for/while loop
Unreachable code SKY-UC002 Code after return/throw/break/continue

Framework-aware: Next.js convention exports (page.tsx, layout.tsx, route.ts, middleware.ts), config exports (getServerSideProps, generateMetadata, revalidate), React patterns (memo, forwardRef), and exported custom hooks (use*) are automatically excluded from dead code reports.

TypeScript dead code detection tracks: callbacks, type annotations, generics, decorators, inheritance (extends), object shorthand, spread, re-exports, and typeof references. Benchmarked at 95% recall with 0 false positives on alive code.

Installation

Basic Installation

## from pypi
pip install skylos

## with LLM-powered features (agent verify, agent remediate, etc.)
pip install skylos[llm]

## with Rust-accelerated analysis (up to 63x faster)
pip install skylos[fast]

## both
pip install skylos[llm,fast]

## or from source
git clone https://github.com/duriantaco/skylos.git
cd skylos

pip install .

skylos[fast] installs an optional Rust backend that accelerates clone detection (63x), file discovery (5x), coupling analysis, and cycle detection. Same results, just faster. Pure Python works fine without it β€” the Rust module is auto-detected at runtime.

skylos[llm] installs litellm for LLM-powered features (skylos agent verify, skylos agent remediate, --llm). Core static analysis works without it.

🎯 What's Next?

After installation, we recommend:

  1. Set up CI/CD (30 seconds):

    skylos cicd init
    git add .github/workflows/skylos.yml && git push

    This will automatically scan every PR for dead code and security issues.

  2. Run your first scan:

    skylos .                              # Dead code only
    skylos . --danger --secrets           # Include security checks
  3. Keep scans focused on active work:

    skylos . --diff origin/main
  4. Try advanced workflows only if you need them:

    skylos agent review . --model gpt-4.1
    skylos defend .

See all commands in the Quick Start table


Skylos vs. Vulture Benchmark

We benchmarked Skylos against Vulture on 9 of the most popular Python repositories on GitHub β€” 350k+ combined stars, covering HTTP clients, web frameworks, CLI tools, data validation, terminal UIs, and progress bars. Every single finding was manually verified against the source code. No automated labelling, no cherry-picking.

Why These 9 Repos?

We deliberately chose projects that stress-test dead code detection in different ways:

Repository Stars What It Tests
psf/requests 53k __init__.py re-exports, Sphinx conf, pytest classes
pallets/click 17k IO protocol methods (io.RawIOBase subclasses), nonlocal closures
encode/starlette 10k ASGI interface params, polymorphic dispatch, public API methods
Textualize/rich 51k __rich_console__ protocol, sentinel vars via f_locals, metaclasses
encode/httpx 14k Transport/auth protocol methods, zero dead code (pure FP test)
pallets/flask 69k Jinja2 template globals, Werkzeug protocol methods, extension hooks
pydantic/pydantic 23k Mypy plugin hooks, hypothesis @resolves, __getattr__ config
fastapi/fastapi 82k 100+ OpenAPI spec model fields, Starlette base class overrides
tqdm/tqdm 30k Keras/Dask callbacks, Rich column rendering, pandas monkey-patching

No repo was excluded for having unfavorable results. We include repos where Vulture beats Skylos (click, starlette, tqdm).

Results

Repository Dead Items Skylos TP Skylos FP Vulture TP Vulture FP
psf/requests 6 6 35 6 58
pallets/click 7 7 8 6 6
encode/starlette 1 1 4 1 2
Textualize/rich 13 13 14 10 8
encode/httpx 0 0 6 0 59
pallets/flask 7 7 12 6 260
pydantic/pydantic 11 11 93 10 112
fastapi/fastapi 6 6 30 4 102
tqdm/tqdm 1 0 18 1 37
Total 52 51 220 44 644
Metric Skylos Vulture
Recall 98.1% (51/52) 84.6% (44/52)
False Positives 220 644
Dead items found 51 44

Skylos finds 7 more dead items than Vulture with 3x fewer false positives.

Why Skylos Produces Fewer False Positives

Vulture uses flat name matching β€” if the bare name X appears anywhere as a string or identifier, all definitions named X are considered used. This works well for simple cases but drowns in noise on framework-heavy codebases:

  • Flask (260 Vulture FP): Vulture flags every Jinja2 template global, Werkzeug protocol method, and Flask extension hook. Skylos recognizes Flask/Werkzeug patterns.
  • Pydantic (112 Vulture FP): Vulture flags all config class annotations, TYPE_CHECKING imports, and mypy plugin hooks. Skylos understands Pydantic model fields and __getattr__ dynamic access.
  • FastAPI (102 Vulture FP): Vulture flags 100+ OpenAPI spec model fields (Pydantic BaseModel attributes like maxLength, exclusiveMinimum). Skylos recognizes these as schema definitions.
  • httpx (59 Vulture FP): Vulture flags every transport and auth protocol method. Skylos suppresses interface implementations.

Where Skylos Still Loses (Honestly)

  • click (8 vs 6 FP): IO protocol methods (readable, readinto) on io.RawIOBase subclasses β€” called by Python's IO stack, not by direct call sites.
  • starlette (4 vs 2 FP): Instance method calls across files (obj.method()) not resolved back to class definitions.
  • tqdm (18 vs 37 FP, 0 vs 1 TP): Skylos misses 1 dead function in __init__.py because it suppresses __init__.py definitions as potential re-exports.

Reproduce any benchmark: cd real_life_examples/{repo} && python3 ../benchmark_{repo}.py

Full methodology and per-repo breakdowns in the skylos-demo repository.

Skylos vs. Knip (TypeScript)

We also benchmarked Skylos against Knip on a real-world TypeScript library:

unjs/consola (7k stars, 21 files, ~2,050 LOC)
Dead items 4 (entire orphaned src/utils/format.ts module)
Metric Skylos Knip
Recall 100% (4/4) 100% (4/4)
Precision 36.4% 7.5%
F1 Score 53.3% 14.0%
Speed 6.83s 11.08s

Both tools find all dead code. Skylos has ~5x better precision β€” Knip incorrectly flags package entry points as dead files (its package.json exports point to dist/ not src/) and reports public API re-exports as unused.

Reproduce: cd real_life_examples/consola && python3 ../benchmark_consola.py


Projects Using Skylos

If you use Skylos in a public repository, open an issue and add it here. This list is based on self-submissions, so it will stay small until more teams opt in publicly.

Analyzed with SkylosSkylos Uses Skylos on itself for dead code, security, and CI gating Your project here Add yours

Add your project β†’


How It Works

Skylos builds a reference graph of your entire codebase - who defines what, who calls what, across all files.

Parse all files -> Build definition map -> Track references -> Find orphans (zero refs = dead)

High Precision & Confidence Scoring

Static analysis often struggles with Python's dynamic nature (e.g., getattr, pytest.fixture). Skylos minimizes false positives through:

  1. Confidence Scoring: Grades findings (High/Medium/Low) so you only see what matters.
  2. Hybrid Verification: Uses LLM reasoning to double-check static findings before reporting.
  3. Runtime Tracing: Optional --trace mode validates "dead" code against actual runtime execution.
Confidence Meaning Action
100 Definitely unused Safe to delete
60 Probably unused (default threshold) Review first
40 Maybe unused (framework helpers) Likely false positive
20 Possibly unused (decorated/routes) Almost certainly used
0 Show everything Debug mode
skylos . -c 60  # Default: high-confidence findings only
skylos . -c 30  # Include framework helpers  
skylos . -c 0  # Everything

Framework Detection

When Skylos sees Flask, Django, FastAPI, Next.js, or React imports, it adjusts scoring automatically:

Pattern Handling
@app.route, @router.get Entry point β†’ marked as used
app.add_url_rule(...), app.add_api_route(...), app.add_route(...), app.register_listener(...), app.register_middleware(...) Imperative route or lifecycle registration β†’ marked as used
@pytest.fixture Treated as a pytest entrypoint, but can be reported as unused if never referenced
@pytest.hookimpl, @hookimpl Plugin hook implementation β†’ marked as used
@celery.task Entry point β†’ marked as used
getattr(mod, "func") Tracks dynamic reference
getattr(mod, f"handle_{x}") Tracks pattern handle_*
Next.js page.tsx, layout.tsx, route.ts Default/named exports β†’ marked as used
Next.js getServerSideProps, generateMetadata Config exports β†’ marked as used
React.memo(), forwardRef() Wrapped components β†’ marked as used
Exported use* hooks Custom hooks β†’ marked as used

Test File Exclusion

Tests call code in weird ways that look like dead code. By default, Skylos excludes:

Detected By Examples
Path /tests/, /test/, *_test.py
Imports pytest, unittest, mock
Decorators @pytest.fixture, @patch
# These are auto-excluded (confidence set to 0)
/project/tests/test_user.py
/project/test/helper.py  

# These are analyzed normally
/project/user.py
/project/test_data.py  # Doesn't end with _test.py

Want test files included? Use --include-folder tests.

Philosophy

When ambiguous, we'd rather miss dead code than flag live code as dead.

Framework endpoints are called externally (HTTP, signals). Name resolution handles aliases. When things get unclear, we err on the side of caution.

Release History
VersionChangesUrgencyDate
v4.4.0## [4.4.0](https://github.com/duriantaco/skylos/compare/v4.3.2...v4.4.0) (2026-04-16) ### Features * **cli:** add suite command for the full local bundle ([#209](https://github.com/duriantaco/skylos/issues/209)) ([1989905](https://github.com/duriantaco/skylos/commit/198990555adbebc1bda52fecf306a639a31616cf)) * **py:** add repo-aware vibe reference detection ([#208](https://github.com/duriantaco/skylos/issues/208)) ([797b1ab](https://github.com/duriantaco/skylos/commit/797b1ab83f25cfe0f2a282ebHigh4/16/2026
v4.3.2## What's Changed * fix(ts): resolve workspace exports and local imports maps by @duriantaco in https://github.com/duriantaco/skylos/pull/181 * chore(deps): bump cryptography from 46.0.6 to 46.0.7 by @dependabot[bot] in https://github.com/duriantaco/skylos/pull/183 * refactor(core): reduce gatekeeper debt without changing behavior by @duriantaco in https://github.com/duriantaco/skylos/pull/184 * refactor(core): reduce fixgen debt without changing behavior by @duriantaco in https://github.com/durHigh4/10/2026
v4.3.1## [4.3.1](https://github.com/duriantaco/skylos/compare/v4.3.0...v4.3.1) (2026-04-08) ### Bug Fixes * **upload:** support large scan uploads via artifact transport ([#179](https://github.com/duriantaco/skylos/issues/179)) ([7f1641f](https://github.com/duriantaco/skylos/commit/7f1641f5fdda4970e310ad96836618b6dba96124))High4/8/2026

Dependencies & License Audit

Loading dependencies...

Similar Packages

argus-mcpπŸ” Enhance code quality with Argus MCP, an AI-driven code review server using a Zero-Trust model for safe and efficient development.main@2026-04-21
Anthropic-Cybersecurity-Skills754 structured cybersecurity skills for AI agents Β· Mapped to 5 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND & NIST AI RMF Β· agentskills.io standard Β· Works with Claude Code, GitHub Copv1.2.0
claude-api-cost-optimizationπŸ’° Optimize your Claude API usage to save 50-90% on costs with batching techniques and efficient request management.main@2026-04-21
spoon-awesome-skillπŸš€ Explore high-quality skills for SpoonOS, Web3, AI productivity, and enterprise tooling with 57+ curated Python scripts across multiple challenge tracks.master@2026-04-21
zotero-mcp-liteπŸš€ Run a high-performance MCP server for Zotero, enabling customizable workflows without cloud dependency or API keys.main@2026-04-21