{
  "markdown": "[![MCP Toplist](https://mcptoplist.com/badge/io.github.duriantaco%2Fskylos.svg)](https://mcptoplist.com/server/io.github.duriantaco%2Fskylos)\n\n<div align=\"center\">\n    <img src=\"assets/DOG_1.png\" alt=\"Skylos\" width=\"260\">\n    <h1>Skylos</h1>\n    <h3>Open-source, local-first checks for dead code, security issues, secrets, quality regressions, and AI-code mistakes before merge.</h3>\n</div>\n\n![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)\n[![codecov](https://codecov.io/gh/duriantaco/skylos/branch/main/graph/badge.svg)](https://codecov.io/gh/duriantaco/skylos)\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/skylos)\n[![PyPI version](https://img.shields.io/pypi/v/skylos)](https://pypi.org/project/skylos/)\n![VS Code Marketplace](https://img.shields.io/visual-studio-marketplace/v/oha.skylos-vscode-extension)\n[![Astronomer Trust](https://img.shields.io/badge/Astronomer%20Trust-A-brightgreen?style=flat&logo=github&logoColor=white)](#star-authenticity-audit)\n[![Discord](https://img.shields.io/badge/Discord-Join-5865F2?style=flat&logo=discord&logoColor=white)](https://discord.gg/Ftn9t9tErf)\n\n[Website](https://skylos.dev) |\n[Docs](https://docs.skylos.dev) |\n[Repo Map](https://duriantaco.github.io/skylos/repo-map/) |\n[Quick Start](https://docs.skylos.dev/quick-start) |\n[GitHub Action](./action.yml) |\n[VS Code Extension](./editors/vscode/README.md) |\n[Real-World Results](./REAL_WORLD_RESULTS.md) |\n[Benchmarks](./BENCHMARK.md) |\n[Roadmap](./ROADMAP.md) |\n[Contributing](./CONTRIBUTING.md)\n\n**English** | [Deutsch](./docs/i18n/README.de.md) | [简体中文](./docs/i18n/README.zh-CN.md) | [Translations](./docs/i18n/README.md)\n\n## What Is Skylos?\n\nSkylos is an open-source static analysis CLI for Python, TypeScript,\nJavaScript, Java, Go, Kotlin, PHP, Rust, Dart, C#, Shell, and deployment config. It\nruns locally by default and can also be used as a CI/CD PR gate.\n\nUse Skylos when you want one command to check a repo or pull request for:\n\n- dead code and unused files\n- security flaws and dangerous data flows\n- secrets and dependency CVEs\n- CI/CD and edge-device deployment misconfigurations\n- quality regressions such as complexity, duplicate branches, and deep nesting\n- common AI-generated code mistakes, including missing guards, fake helpers,\n  invented package APIs, and impossible dependency versions\n- LLM app risks such as unsafe tool use and missing output validation\n\n## Start In 60 Seconds\n\n```bash\npip install skylos\nskylos .\n```\n\nThe default scan focuses on dead code. Add security, secrets, quality,\ndependency, and AI-defect checks with `-a`:\n\n```bash\nskylos . -a\n```\n\nRun only evidence-backed AI defect checks with:\n\n```bash\nskylos . --ai-defects\n```\n\nVerify a changed file or range before an agent hands it to review:\n\n```bash\nskylos verify . --file src/app.py --range 40:75 --project-context\n```\n\n`skylos verify` schema version 2 returns `pass`, `fail`, or `incomplete`.\n`incomplete` means a requested proof could not be established, such as a\nthird-party TS/JS import, computed namespace member, unsupported language-local\nAPI check, or parser surface that Skylos could not prove; it exits `2` unless\n`--no-fail` is set. The `coverage` object lists detected languages, expected\nchecks, language support, missing checks, completed/skipped checks, checked\nreferences, and deterministic skip reasons.\n\nDeterministic local/workspace API verification currently covers Python,\nTypeScript/JavaScript, Go, and Java without executing target code. PHP, Rust,\nDart, C#, Kotlin, and Shell retain their existing static-analysis coverage,\nbut their local API proof is reported as unsupported and therefore incomplete.\nSee [AI Code Verification Coverage](./docs/ai-code-verification.md).\n\nCreate a local AI hallucination contract for repo-specific generated-code\ntruth. `skylos verify` auto-discovers `.skylos/ai-contract.yml`:\n\n```bash\nskylos contract init\nskylos contract inspect\nskylos verify .\n```\n\nTest a running agent against deterministic response and tool-use scenarios:\n\n```bash\nskylos agent init\nskylos agent test --allow-contract-endpoint\n```\n\nCreate a project config with thresholds, ignores, template hooks, and vibe\ndictionary extensions:\n\n```bash\nskylos init\n```\n\nCreate a starter local rule pack:\n\n```bash\nskylos rules init\nskylos rules validate .skylos/rules/local.yml\nskylos rules list --json\nskylos rules list cross --json\nskylos rules list --packs --json\nskylos cache stats\n```\n\nGenerate a GitHub Actions PR gate:\n\n```bash\nskylos cicd init\ngit add .github/workflows/skylos.yml\ngit commit -m \"Add Skylos CI gate\"\ngit push\n```\n\nNeed more commands? Read the [CLI Reference](https://docs.skylos.dev/cli-reference).\n\n## Common Workflows\n\n| Goal | Command | What You Get | More Detail |\n|:---|:---|:---|:---|\n| First dead-code scan | `skylos .` | Finds unused functions, classes, imports, files, and framework entrypoint mistakes | [Dead code docs](https://docs.skylos.dev/dead-code-detection) |\n| Deterministic cleanup preview | `skylos clean . --dry-run --types import,function --confidence 80` | Shows safe import/function removals before writing; add `--apply` to edit files | [Dead code docs](https://docs.skylos.dev/dead-code-detection) |\n| Security and quality audit | `skylos . -a` | Adds dangerous flow, secrets, dependency, config, quality, and AI-defect checks | [Security docs](https://docs.skylos.dev/security-analysis) |\n| Optional Python linting | `pip install \"skylos[lint]\" && skylos lint .` | Runs Ruff with its native configuration, output, fixes, and exit codes through the Skylos CLI | [Python linting](./docs/python-linting.md) |\n| PR gate | `skylos cicd init` | Generates a GitHub Actions workflow with annotations and failure thresholds | [CI/CD guide](https://docs.skylos.dev/ci-cd) |\n| Readable terminal report | `skylos . --format pretty` | Groups findings by file with severity badges, snippets, and copyable `file:line` locations | [CLI output modes](./docs/cli-output.md) |\n| Single-rule review | `skylos . --select SKY-L012 --format concise` | Enables the matching analyzer family and reports only that exact rule with its full message | [CLI output modes](./docs/cli-output.md) |\n| Selectable terminal triage | `skylos . --tui` | Opens a keyboard-driven category list, finding list, and detail pane | [CLI output modes](./docs/cli-output.md) |\n| IDE/test-script output | `skylos --format concise src/test.py` | Prints untruncated `file:line  RULE_ID  message` findings and exits non-zero when findings exist | [CLI Reference](https://docs.skylos.dev/cli-reference) |\n| In-loop AI-code verification | `skylos verify . --file src/app.py --range 40:75` | Returns narrow JSON for hallucinated helpers, unfinished code, stale references, disabled controls, and API/dependency hallucinations | [AI features](https://docs.skylos.dev/ai-features) |\n| AI hallucination contracts | `skylos contract init && skylos verify .` | Auto-discovers `.skylos/ai-contract.yml` and verifies generated code against repo-specific symbols, dependencies, APIs, route guards, and test requirements | [AI Hallucination Contracts](./docs/ai-hallucination-contracts.md) |\n| Changed-lines review | `skylos . -a --diff origin/main` | Keeps findings focused on active work instead of legacy debt | [Quality gate docs](https://docs.skylos.dev/quality-gate) |\n| Incumbent scanner comparison | `skylos compare . --against incumbent.sarif [--upload]` | Runs Skylos beside the current scanner and produces a revision-aware scorecard: active overlap, raw unique findings by category, and eligible findings inside evidence-backed unused symbols—without replacing the current gate. `--upload` preserves a project-bound Cloud receipt. | [Scanner comparison](./docs/scanner-comparison.md) |\n| Kubernetes exposure proof | `skylos . --select SKY-DEP001,SKY-DEP002,SKY-DEP003 --format concise` | Checks an explicitly external, explicitly plain-HTTP Ingress chain inside one rendered multi-document bundle; route checks compare exact framework wiring with the workload's declared source file and required guards | [Deployment exposure rules](./dictionary.md#kubernetes-deployment-exposure-sky-dep) |\n| GPU release gate | `skylos . --select SKY-GPU000,SKY-GPU001,SKY-GPU002,SKY-GPU003 --gate --format concise` | Blocks incomplete contracts, incompatible CUDA driver floors, uncovered SASS/PTX targets, and non-portable packaged TensorRT engines against `.skylos/gpu-targets.yml` | [GPU target contract](./dictionary.md#gpu-release-compatibility-sky-gpu) |\n| Runtime-assisted dead-code check | `skylos . --trace` | Uses runtime traces to reduce dynamic-code false positives | [Smart tracing](https://docs.skylos.dev/smart-tracing) |\n| Local rule pack | `skylos rules init` | Scaffolds YAML rules for project-specific security and quality checks | [Custom rules](https://docs.skylos.dev/custom-rules) |\n| Security agent quick scan | `skylos agent security-quick .` | One-shot LLM security audit; compatibility alias for `skylos agent scan . --security` | [AI features](https://docs.skylos.dev/ai-features) |\n| Security agent deep scan | `skylos agent security-deep .` | Three-stage security workflow with threat-model context, static threat traces, discovery/validation, and remediation handoff | [AI features](https://docs.skylos.dev/ai-features) |\n| AI-assisted review | `skylos agent scan .` | Static analysis plus optional LLM review and fix suggestions | [AI features](https://docs.skylos.dev/ai-features) |\n| Agent harness replay | `skylos agent replay .skylos/runs/<run-id>` | Validates and summarizes saved agent verification phases, tool calls, decisions, and budgets | [Agent harness artifacts](#agent-harness-artifacts) |\n| Runtime agent behavior test | `skylos agent init && skylos agent test --allow-contract-endpoint` | Checks final responses, tool selection, explicit refusals, and source IDs against a versioned contract | [Agent Behavior Testing](./docs/agent-behavior-testing.md) |\n| Verification-backed remediation | `skylos agent scan . --fix` | Re-scans fixed security findings and records proof-test metadata for supported fixes | [AI features](https://docs.skylos.dev/ai-features) |\n| MCP agent verification | `verify_change` MCP tool | Lets Claude, Cursor, and other MCP clients verify an edited file/range with the same schema as `skylos verify` | [MCP server](https://docs.skylos.dev/mcp-server) |\n| LLM integration inventory | `skylos discover .` | Maps every LLM call, agent tool, prompt site, and input source in the codebase | [Agent verification](./docs/agent-verification.md) |\n| Pre-deployment agent verification | `skylos defend . --format md -o evidence.md` | Verifies agent guardrails, scores OWASP LLM/Agentic coverage, and emits an attested evidence report | [Agent verification](./docs/agent-verification.md) |\n| Agent verification CI gate | `skylos defend . --fail-on critical` | Blocks deploys with unguarded LLM integrations; SARIF for code scanning via `--format sarif` | [Agent verification](./docs/agent-verification.md) |\n| MCP agent pre-flight | `verify_agent` MCP tool | Lets coding agents statically verify the agents they build — scores, failed checks, attestation digest | [MCP server](https://docs.skylos.dev/mcp-server) |\n| Technical debt triage | `skylos debt .` | Ranks hotspots and debt trends | [Technical debt](https://docs.skylos.dev/technical-debt) |\n\n## What Skylos Catches\n\n| Category | Examples | Why It Matters |\n|:---|:---|:---|\n| Dead code | unused functions, classes, imports, package entrypoints, route handlers | reduces maintenance cost without breaking dynamic frameworks |\n| Security flaws | SQL injection, XSS, SSRF, path traversal, command injection, unsafe deserialization | catches exploitable flows before code reaches main |\n| Secrets | API keys, tokens, private credentials, high-entropy strings | prevents credentials from leaking through commits and PRs |\n| CI/CD workflows | GitHub Actions and GitLab CI dangerous triggers, unpinned actions/includes, broad tokens, OIDC misuse, cache poisoning, mutable images | reduces CI/CD supply-chain risk before release jobs run |\n| Edge deployment config | Docker Compose privileged device access, host networking, systemd root services, broad capabilities, missing sandboxing | catches repo-controlled settings that turn app bugs into device compromise |\n| Kubernetes deployment exposure | Explicitly external Ingress paths reaching a sensitive FastAPI/Flask route without its deployment-required guard, Flask `--debug`, or an application server using `--reload` | reports only when the resources are in one rendered bundle and every deployment edge resolves unambiguously |\n| GPU release compatibility | CUDA image/driver mismatches, missing compute architectures, non-portable packaged TensorRT engines | blocks releases that build successfully but fail on the declared GPU fleet |\n| Quality regressions | complexity, deep nesting, duplicate branches, long functions, inconsistent returns | keeps AI-assisted refactors from adding brittle code |\n| AI code mistakes | phantom security calls, missing decorators, unfinished stubs, disabled controls, real packages called with invented APIs, impossible npm/Go versions | catches common hallucinated or incomplete code paths before they reach review |\n| LLM app risks | unsafe tool use, prompt injection exposure, missing output validation, missing rate limits | helps teams ship AI features with guardrails |\n\nSee the full [Rules Reference](https://docs.skylos.dev/rules-reference).\n\n## Verify AI Agents Before They Ship\n\nRuntime guardrails are the WAF; Skylos is the SAST. `skylos discover`\ninventories every LLM integration in a codebase (provider SDKs, agent\nframeworks including the OpenAI Agents SDK, Claude Agent SDK, and Google ADK,\nMCP servers and their tools, direct HTTP calls to LLM APIs or\nOpenAI-compatible gateways, plus agent tools, prompt sites, and input\nsources), and `skylos defend` verifies the guardrails around them —\ndeterministically, locally, with no model in the loop — then gates CI and\nemits auditor-ready evidence.\n\n```bash\nskylos discover .                               # inventory LLM integrations and agent tools\nskylos defend .                                 # score guardrails (13 weighted checks)\nskylos defend . --format md -o evidence.md      # auditor evidence report + attestation\nskylos defend . --format sarif -o defend.sarif  # GitHub code scanning upload\nskylos defend . --fail-on critical              # CI gate: exit 1 on critical gaps\nskylos defend . --owasp-framework agentic       # report against OWASP Agentic ASI Top 10\n```\n\nPer integration it verifies: dangerous output sinks (eval/exec/subprocess),\nagent tool scope and typed schemas, prompt-injection exposure (delimiters,\nuntrusted input paths, RAG context isolation), output validation, PII\nfiltering, and model pinning — plus ops checks (logging, cost controls, rate\nlimiting) scored separately so they never inflate the security score.\n\n- **OWASP mapping:** LLM Top 10 (2024/2025) and Agentic ASI Top 10 (2026).\n- **Evidence report (`--format md`):** integration inventory, per-check\n  results, OWASP coverage, regulatory framework evidence (EU AI Act, NIST AI\n  RMF, ISO/IEC 42001 — \"evidence toward\" mappings, never compliance claims),\n  and a remediation appendix.\n- **Attestation:** JSON/md/SARIF reports carry a reproducible SHA-256 digest\n  over file contents, policy, plugin set, integration inventory, scores, and\n  full check evidence — re-run on the same tree with the same flags and Skylos\n  version, and the digest must match.\n- **CI-native:** `skylos cicd init --defend` generates the workflow step, the\n  `skylos-defend` pre-commit hook gates locally, and `$GITHUB_STEP_SUMMARY`\n  gets a score summary automatically in Actions.\n- **Policy as code:** `skylos-defend.yaml` pins gate thresholds and severity\n  overrides (`--policy`).\n- **Agent-native:** the `verify_agent` MCP tool lets coding agents verify the\n  agents they build — deterministic verification, not AI checking AI.\n\nStatic pre-deployment verification complements runtime controls (gateways,\npolicy engines, human approval flows); it does not replace them. Full guide:\n[docs/agent-verification.md](./docs/agent-verification.md).\n\n## Test Running Agent Behavior\n\nSkylos separates generated-code truth, static agent guardrails, and observed\nruntime behavior:\n\n| Command | Verification question |\n|:---|:---|\n| `skylos verify` | Did the agent generate valid, non-hallucinated code? |\n| `skylos defend` | Does the agent implementation contain the required guardrails? |\n| `skylos agent test` | Did the running agent behave according to its contract? |\n\nCreate `.skylos/agent-test.yml`, then test a live OpenAI-compatible endpoint:\n\n```bash\nskylos agent init\nskylos agent test --allow-contract-endpoint\n```\n\nOr evaluate captured evidence without a network call:\n\n```bash\nskylos agent test --observations agent-observations.json\nskylos agent test --observations agent-observations.json \\\n  --format json --output agent-results.json\n```\n\nVersion 1 deterministically checks exact response substrings, required,\nallowed, and forbidden tool calls, tool arguments and sequence, maximum call\ncount, explicit refusals, and explicit source IDs. Missing typed evidence is\n`incomplete`, never `pass`; exit codes are `0` pass, `1` violation, and `2`\nincomplete/invalid. Tool selection and final-answer source-ID checks are separate\none-turn scenarios: Skylos records local replayable evidence but never executes\ntools returned by the target agent. Offline observations are marked as\nunverified fixtures rather than runtime proof.\n\nFor an authenticated remote endpoint, keep the destination and secret choice\nin the trusted CLI invocation:\n\n```bash\nskylos agent test --endpoint https://agent.example.com/v1/chat/completions \\\n  --allow-remote --auth-env MY_AGENT_API_KEY\n```\n\nFull guide: [docs/agent-behavior-testing.md](./docs/agent-behavior-testing.md).\n\n## How Skylos Fits\n\nSkylos is not a replacement for every specialized scanner. It is a local-first\nrepo and PR checker that puts several common review checks behind one CLI.\n\n- **Framework-aware dead code detection:** FastAPI, Django, Flask, pytest,\n  SQLAlchemy, Next.js, React, package entrypoints, and common plugin patterns.\n- **PR-focused output:** diff scanning, CI thresholds, GitHub annotations, and\n  baselines for existing findings.\n- **Local-first operation:** core static analysis does not require cloud upload\n  or LLM calls.\n- **AI-assisted change review:** checks for removed validation, auth, logging,\n  CSRF, rate limiting, timeouts, real-package API hallucinations, and other\n  guardrails in generated or edited code.\n- **Agent-loop verification:** `skylos verify` and MCP `verify_change` return\n  versioned JSON for only AI-code trust findings, so coding agents can\n  self-correct before a human sees the change.\n- **Evidence-backed AI defects:** `--ai-defects` and full scans put strict\n  AI-code failure checks under `ai_defects`, including phantom references, fake\n  package APIs, nonexistent packages, impossible dependency versions, and\n  weakened test assertions.\n  The category/tag is `ai_defect`; several rules intentionally keep historical\n  `SKY-L` or `SKY-D` IDs for suppression and baseline compatibility, while new\n  AI-defect-only checks use `SKY-A`.\n- **Verification-backed remediation:** security fixes are checked by re-running\n  analysis, and supported findings can include targeted regression-test proof\n  metadata.\n- **Project-specific rules:** add local YAML rules and extend prompt, credential,\n  sensitive-file, and timeout dictionaries from config.\n- **One command surface:** dead code, security, secrets, dependency, quality,\n  technical debt, agent review, and pre-deployment agent verification commands\n  share the same CLI.\n\n## Agent Harness Artifacts\n\n`skylos agent verify .` and `skylos agent test` record replayable artifacts\nunder `.skylos/runs/<run-id>` and print the run directory in table output. JSON\noutput includes the same harness summary under the `harness` key.\n\nUse `skylos agent replay .skylos/runs/<run-id>` to validate and inspect a saved\nrun without making LLM calls. Add `--format json` when another agent or CI job\nneeds machine-readable status. A valid replay exits `0`; an invalid or corrupt\nartifact set exits `1` with issue codes. Replay output includes\n`schema_version` so CI and agents can detect artifact-contract changes.\nReplay checks internal consistency and corruption; artifacts are not signed and\nare not proof against an actor that can rewrite the entire run directory.\n\nEach run directory contains:\n\n- `events.jsonl`: chronological run, phase, and tool-call events.\n- `state.json`: full observable state, including phases, tool calls, decisions,\n  and budget usage.\n- `summary.json`: compact status, counts, budget, and artifact paths.\n- `behavior-results.json`: normalized runtime assertions, provenance, coverage,\n  and a digest-bound evidence report for `skylos agent test` runs.\n\nThe current harness state is observable and replay-validated. It is not yet a\nresume mechanism for continuing interrupted verification runs.\n\n## Install Options\n\n```bash\n# Core static analysis\npip install skylos\n\n# LLM-powered agent workflows\npip install \"skylos[llm]\"\n\n# Ruff Python linting through `skylos lint`\npip install \"skylos[lint]\"\n\n# All published optional extras\npip install \"skylos[all]\"\n```\n\nContainer image:\n\n```bash\ndocker pull ghcr.io/duriantaco/skylos:latest\ndocker run --rm -v \"$PWD\":/work -w /work ghcr.io/duriantaco/skylos:latest . --json --no-provenance\n```\n\nThe unqualified image uses Python 3.14. Runtime-specific tags are also\npublished for Python 3.11 through 3.14, so container scans can match a local or\nCI parser exactly:\n\n```bash\ndocker run --rm -v \"$PWD\":/work -w /work ghcr.io/duriantaco/skylos:latest-python3.13 . --json --no-provenance\n```\n\nIf a Python file cannot be parsed, Skylos reports `analysis_errors`, omits the\ngrade, and exits with code 2 instead of treating the skipped file as clean.\n\nSee [Installation](https://docs.skylos.dev/installation) for source installs,\ncontainer usage, and optional dependencies.\n\n## Configure Templates And Vibe Checks\n\nRun `skylos init` to add these sections to `pyproject.toml`:\n\n```toml\n[tool.skylos]\nexclude = [\"node_modules\", \"dist\"]\n\n[tool.skylos.templates]\n# security = \".skylos/templates/security.md\"\n# quality = \".skylos/templates/quality.md\"\n# security_audit = \".skylos/templates/security_audit.md\"\n# review = \".skylos/templates/review.md\"\n\n[tool.skylos.vibe]\nextra_phantom_names = [\"verify_enterprise_auth\"]\nextra_phantom_decorators = [\"tenant_admin_required\"]\nextra_credential_names = [\"tenant_signing_secret\"]\nextra_network_timeout_calls = [\"vendor_sdk.fetch\"]\n\n[tool.skylos.dead_code]\nentrypoints = []\n\n[[tool.skylos.dead_code.entrypoints]]\ntype = \"method\"\nname = [\"create\", \"pre_hook\", \"post_hook\"]\nparent = { name = \"Main\", base_classes = [\"Application\"] }\npath = \"src/**\"\nreason = \"project framework lifecycle hook\"\n\n[tool.skylos.contribution]\ncollect_local_signals = false\ncontribute_public_corpus = false\nstructural_signatures_only = true\ninclude_source = false\n```\n\nTemplate files extend Skylos' built-in prompts; they do not replace the\nJSON-only output contract or untrusted-code safety rules. Vibe dictionary\nextensions let teams teach Skylos about local fake-auth helpers, project\ncredential names, sensitive files, and network calls that must set timeouts.\nDead-code entrypoints let teams mark proprietary framework classes, lifecycle\nmethods, and decorator-registered functions as live using precise rules for\ntype, name, path, decorators, base classes, and parent classes.\nRules must include a symbol selector such as `name`, `decorators`,\n`base_classes`, or `parent`; `path` and `module` only narrow the match.\nContribution signals are off by default; when enabled, Skylos records local\nstructural accept/dismiss/learn events under `.skylos/contribution/` without raw\nsource.\n\nBy default Skylos discovers `[tool.skylos]` in `pyproject.toml` by walking up\nfrom the scan path. To use a dedicated TOML config, pass `--config-file PATH`\nor set `SKYLOS_CONFIG_FILE`; standalone files may use either `[tool.skylos]`\nor top-level `[skylos]`. Synced Skylos Cloud policy keeps its protected\nprecedence over repository-controlled config. The top-level\n`[tool.skylos].exclude` list applies to the main scan and commands such as\n`skylos debt` and `skylos clean`; pass `--exclude` for command-local additions\nor `--include-folder` to override an excluded folder.\n\n## Language Support\n\n| Language | Dead Code | Security | Quality | Local API Proof (`verify`) | Notes |\n|:---|:---:|:---:|:---:|:---:|:---|\n| Python | Yes | Yes | Yes | Supported | strongest coverage; framework-aware static analysis and optional tracing |\n| TypeScript / JavaScript | Yes | Yes | Yes | Supported | Tree-sitter parsing, package graph reachability, framework conventions |\n| Java | Yes | Yes | Yes | Supported | Tree-sitter parsing, structured security-flow analysis, conservative static-member proof |\n| Go | Yes | Partial | Partial | Supported | native engine status remains separate from deterministic workspace API proof |\n| PHP | Yes | Yes | Partial | Unsupported | PHP parser coverage plus taint-style security sinks and sources |\n| Rust | Yes | Yes | Partial | Unsupported | Rust parser coverage plus security sink/source checks |\n| Dart | Yes | Yes | Partial | Unsupported | Dart parser coverage plus selected security sinks and sources |\n| C# | Yes | Yes | Partial | Unsupported | C# symbol coverage plus selected ASP.NET, process, SQL, HTTP, and file sinks |\n| Kotlin | Yes | Partial | Partial | Unsupported | Kotlin symbol extraction with conservative static-analysis coverage |\n| Shell | No | Yes | Partial | Unsupported | shell-script security checks for command injection, SSRF, and path traversal |\n\nTypeScript and JavaScript dead code analysis recognizes `package.json` entry\nfields, including `bin`. For targets under `dist/` or `out/`, it checks the\nmatching `src/` location first, then the package root, before the declared\noutput. This also covers `dist/bin/palee.js` mapping to `bin/palee.ts` and\n`dist/src/index.js` mapping to `src/index.ts`. If both source locations exist,\nthe `src/` mapping keeps priority; unrelated files are not treated as entries.\n\nVue single file components (`.vue`) are skipped by source analysis, including\nwhen passed explicitly. Skylos does not yet parse their `<script>` or\n`<script setup>` blocks; separate JavaScript, TypeScript and backend source\nfiles are still analyzed. Existing browser script and event references in\ntemplates are unaffected.\n\nGo dead-code and security checks require the native `skylos-go` engine. If\nSkylos discovers Go files but cannot run that engine, the report is marked\nincomplete, no grade or clean result is produced, and the CLI exits with status\n`2`. Run `skylos doctor` to verify engine availability and configure\n`SKYLOS_GO_BIN` when using a separately built engine. The official GitHub\nAction builds the matching native engine automatically.\n\nSee [Rules Reference](https://docs.skylos.dev/rules-reference) for rule families\nand scanner scope.\n\n## Config And Deployment Support\n\n| Surface | Files | Security Scope |\n|:---|:---|:---|\n| GitHub Actions | `.github/workflows/*.yml`, `.github/workflows/*.yaml`, `action.yml`, `action.yaml` | dangerous triggers, token permissions, unpinned actions, template injection, secrets, OIDC, cache, and artifact policy |\n| GitLab CI | `.gitlab-ci.yml` | mutable images, unpinned includes, literal secrets, untrusted eval, Docker-in-Docker, OIDC, cache, timeout, and runner-tag policy |\n| Dockerfile | `Dockerfile`, `Dockerfile.*`, `*.dockerfile` | dangerous `RUN` commands, remote `ADD` without checksum, and literal build `ARG` / `ENV` secrets |\n| Edge Docker Compose | `compose*.yml`, `compose*.yaml`, `docker-compose*.yml`, `docker-compose*.yaml` | privileged containers, broad host device/control mounts, GPU/device runtime, and host networking |\n| Edge systemd | `*.service` | root edge services, mutable `ExecStart` paths, missing sandboxing, broad capabilities, and broad device access |\n| Rendered Kubernetes exposure | one multi-document `*.yml` or `*.yaml` bundle plus a contracted Python source file | opt-in proof from an Ingress annotated `skylos.dev/network-scope: external` (or `public`) and `skylos.dev/backend-protocol: http` through its Service and workload; `SKY-DEP001` checks direct top-level FastAPI/Flask routes against `skylos.dev/source-file` and `skylos.dev/required-guards`, `SKY-DEP002` catches an effective Flask debugger, and `SKY-DEP003` catches effective reload mode |\n| GPU release contract | `.skylos/gpu-targets.yml`, Dockerfiles, CMake/CUDA build files, TensorRT source | static target-fleet checks for driver, compute-architecture, and serialized-engine compatibility; no hardware probing |\n\n## Benchmark Snapshot\n\nSkylos has checked-in regression benchmarks for dead code, security, quality,\nand agent review. These are strict regression gates, not broad proof that any\ntool is universally state of the art.\n\n| Suite | Current Skylos Result | Baseline |\n|:---|:---|:---|\n| Dead code regression | 16 cases, TP=36 FP=0 FN=0 TN=59, score 100.0 | Ruff score 62.67; Vulture not installed in latest local rerun |\n| Security regression | 56 cases, TP=35 FP=0 FN=0 TN=23, score 100.0 | Bandit score 47.14 on Python-applicable cases |\n| Quality regression | 13 cases, score 100.0 | regression gate only |\n| Agent review | 25 cases, score 100.0 | regression gate only |\n| AI-code defect regression | curated verifier cases for hallucinated references, package APIs, and dependency versions | run `python scripts/ai_code_defect_benchmark.py` |\n\nFrozen `golden-v0.2` highlights:\n\n| Frozen Suite | Skylos Result | Caveat |\n|:---|:---|:---|\n| Dead code seeded dev | overall score 96.28; TS/JS/Go/Java score 100.0; Python score 93.33 | Python residuals are label-review items |\n| Security seeded dev | overall score 96.52; full recall with one Python `urljoin` false positive | label should be reviewed |\n| OWASP Java security dev | TP=105 FP=0 FN=15 TN=120, score 94.37 | request-wrapper, LDAP, XPath, and property weak-hash gaps remain |\n| Quality seeded dev | TP=1 FP=0 FN=0 TN=1, score 100.0 | one seeded case only |\n\nFor methodology, commands, competitor rows, and caveats, see\n[BENCHMARK.md](./BENCHMARK.md).\n\n### Real-project regression testing\n\n[liveness_primer](https://github.com/mcdigman/liveness_primer), created and\nmaintained by [Matthew Digman](https://github.com/mcdigman), is Skylos's official\nreal-project regression testing tool. On every PR, it compares the base and\nproposed merge result against the same pinned Python projects and reports\nwhich findings were added, removed, or changed.\n\nRead the **Analyzer Blast Radius** check for the comparison and downloadable\nreports. These results complement the labeled benchmarks above; a change in\nfinding counts alone does not establish accuracy. See the\n[liveness_primer guide](./docs/liveness-primer.md) for scope, review steps, and\nreproduction commands.\n\n## Project Evidence\n\nSkylos-assisted dead-code cleanup PRs have been merged in\n[Black](https://github.com/psf/black/pull/5041),\n[NetworkX](https://github.com/networkx/networkx/pull/8572),\n[Optuna](https://github.com/optuna/optuna/pull/6547),\n[mitmproxy](https://github.com/mitmproxy/mitmproxy/pull/8136),\n[pypdf](https://github.com/py-pdf/pypdf/pull/3685),\n[beets](https://github.com/beetbox/beets/pull/6473), and\n[Flagsmith](https://github.com/Flagsmith/flagsmith/pull/6953). These are\naccepted cleanup PRs, not project endorsements. See\n[Real-World Results](./REAL_WORLD_RESULTS.md).\n\n<a id=\"star-authenticity-audit\"></a>\n\nA local Astronomer scan on April 26, 2026 computed 420 stargazers and returned\n**overall trust: A**. StarGuard also reported **low fake-star risk**.\n\n## Integrations\n\n| Integration | Link | Purpose |\n|:---|:---|:---|\n| GitHub Action | [GitHub Action](./action.yml) | PR gates, annotations, and CI enforcement |\n| VS Code extension | [VS Code extension](./editors/vscode/README.md) | in-editor findings and AI-assisted fixes |\n| MCP server | [MCP setup](https://docs.skylos.dev/mcp-server) | expose Skylos scans to AI agents and coding assistants |\n| Ruff | [Python linting](./docs/python-linting.md) | optional Python linting through `skylos lint` |\n| Docker image | [Installation](https://docs.skylos.dev/installation) | run Skylos without a local Python install |\n| Skylos Cloud | [Cloud workflow](https://docs.skylos.dev/cloud-workflow) | optional upload and dashboard workflows |\n\nGenerate a GitHub Actions workflow from the CLI:\n\n```bash\nskylos cicd init --upload\nskylos cicd init --upload --scan-path apps/api\n```\n\nThe generated upload workflow uses GitHub OIDC, sends PR head commit/branch\nmetadata, and supports monorepo subprojects through `--scan-path`.\n\n## Documentation Map\n\n| Need | Read This |\n|:---|:---|\n| Install options, source install, and Docker | [Installation](https://docs.skylos.dev/installation) |\n| First scan and core workflows | [Quick Start](https://docs.skylos.dev/quick-start) |\n| CLI commands, flags, and examples | [CLI Reference](https://docs.skylos.dev/cli-reference) |\n| CLI output modes, pretty reports, and TUI controls | [CLI Output Modes](./docs/cli-output.md) |\n| Optional Ruff linting through the Skylos CLI | [Python Linting](./docs/python-linting.md) |\n| CI setup, PR gates, annotations, and branch protection | [CI/CD](https://docs.skylos.dev/ci-cd) |\n| Dead-code behavior and framework awareness | [Dead Code Detection](https://docs.skylos.dev/dead-code-detection) |\n| Security scanning and taint analysis | [Security Analysis](https://docs.skylos.dev/security-analysis) |\n| Rule ID prefixes and product terminology | [Rule Dictionary](./dictionary.md) |\n| Agent scan, verification, remediation, and model setup | [AI Features](https://docs.skylos.dev/ai-features) |\n| AI defense checks and LLM guardrails | [AI Defense](https://docs.skylos.dev/ai-defense) |\n| MCP server setup | [MCP Server](https://docs.skylos.dev/mcp-server) |\n| Real-world merged cleanup PRs | [Real-World Results](./REAL_WORLD_RESULTS.md) |\n| Baselines, filtering, suppressions, and whitelists | [Configuration](https://docs.skylos.dev/configuration) |\n| Smart tracing | [Smart Tracing](https://docs.skylos.dev/smart-tracing) |\n| Rule families and language support | [Rules Reference](https://docs.skylos.dev/rules-reference) |\n| Cloud uploads and dashboard flow | [CLI to Dashboard](https://docs.skylos.dev/cloud-workflow) |\n| VS Code extension | [VS Code Extension](https://docs.skylos.dev/vscode) |\n| Benchmarks and methodology | [BENCHMARK.md](./BENCHMARK.md) |\n| Security policy | [SECURITY.md](./SECURITY.md) |\n| Release process | [RELEASE_WORKFLOW.md](./RELEASE_WORKFLOW.md) |\n| Contribution priorities | [ROADMAP.md](./ROADMAP.md) |\n| Contributing | [CONTRIBUTING.md](./CONTRIBUTING.md) |\n\n## Common Questions\n\n**Does Skylos replace Bandit, Semgrep, CodeQL, or Vulture?**\n\nNo. Skylos can run alongside them. It focuses on framework-aware dead-code\nsignal, PR gating, AI-era regression checks, and a combined workflow across\ndead code, security, secrets, quality, and AI-defect checks.\n\n**Does Skylos require an LLM?**\n\nNo. Core static analysis runs locally without API keys. LLM features are\noptional through `skylos[llm]` and agent commands.\n\n**Does Skylos replace Ruff?**\n\nNo. `skylos lint` is an optional convenience entry point that delegates to\nRuff. Install it with `pip install \"skylos[lint]\"`; normal Skylos scans do not\nrun Ruff or merge Ruff violations into `SKY-*` findings.\n\n**Can I use it only on changed code?**\n\nYes. Use `skylos . -a --diff origin/main` locally or configure CI gates to focus\non new findings.\n\n**How should I handle intentional dynamic code?**\n\nUse baselines, whitelists, inline suppressions, or runtime tracing. See the\n[configuration docs](https://docs.skylos.dev/configuration) and\n[smart tracing docs](https://docs.skylos.dev/smart-tracing).\n\n## Contributing And Support\n\n- Report security issues through [SECURITY.md](./SECURITY.md).\n- Open bugs and false-positive reports with minimal repros.\n- Check [ROADMAP.md](./ROADMAP.md) for useful contribution areas.\n- Read [CONTRIBUTING.md](./CONTRIBUTING.md) before sending a pull request.\n- See [QUALITY.md](./QUALITY.md) for project quality and gate expectations.\n- Join the [Discord](https://discord.gg/Ftn9t9tErf) for community support.\n\n## License\n\nSkylos is licensed under the [Apache License 2.0](./LICENSE).\n\n<!-- mcp-name: io.github.duriantaco/skylos -->\n",
  "bytes": 36656,
  "sha": "e05dfe044b9931aebe6f694a57dc0c97dfff57a6454d742c3aac487480976e07",
  "repo_slug": "duriantaco/skylos",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_duriantaco_skylos_34b6cdf2/readme"
}