Skip to content

duriantaco/skylos

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

920 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Skylos

Skylos

Open-source, local-first checks for dead code, security issues, secrets, quality regressions, and AI-code mistakes before merge.

License: Apache 2.0 codecov PyPI - Python Version PyPI version VS Code Marketplace Astronomer Trust Discord

Website | Docs | Repo Map | Quick Start | GitHub Action | VS Code Extension | Real-World Results | Benchmarks | Roadmap | Contributing

English | Deutsch | 简体中文 | Translations

What Is Skylos?

Skylos is an open-source static analysis CLI for Python, TypeScript, JavaScript, Java, Go, PHP, Rust, Dart, C#, Shell, and deployment config. It runs locally by default and can also be used as a CI/CD PR gate.

Use Skylos when you want one command to check a repo or pull request for:

  • dead code and unused files
  • security flaws and dangerous data flows
  • secrets and dependency CVEs
  • CI/CD and edge-device deployment misconfigurations
  • quality regressions such as complexity, duplicate branches, and deep nesting
  • common AI-generated code mistakes, including missing guards and fake helpers
  • LLM app risks such as unsafe tool use and missing output validation

Start In 60 Seconds

pip install skylos
skylos .

The default scan focuses on dead code. Add security, secrets, quality, and dependency checks with -a:

skylos . -a

Create a project config with thresholds, ignores, template hooks, and vibe dictionary extensions:

skylos init

Create a starter local rule pack:

skylos rules init
skylos rules validate .skylos/rules/local.yml
skylos rules list --json
skylos rules list cross --json
skylos rules list --packs --json
skylos cache stats

Generate a GitHub Actions PR gate:

skylos cicd init
git add .github/workflows/skylos.yml
git commit -m "Add Skylos CI gate"
git push

Need more commands? Read the CLI Reference.

Common Workflows

Goal Command What You Get More Detail
First dead-code scan skylos . Finds unused functions, classes, imports, files, and framework entrypoint mistakes Dead code docs
Security and quality audit skylos . -a Adds dangerous flow, secrets, dependency, config, and quality checks Security docs
PR gate skylos cicd init Generates a GitHub Actions workflow with annotations and failure thresholds CI/CD guide
Readable terminal report skylos . --format pretty Groups findings by file with severity badges, snippets, and copyable file:line locations CLI output modes
Selectable terminal triage skylos . --tui Opens a keyboard-driven category list, finding list, and detail pane CLI output modes
IDE/test-script output skylos --format concise src/test.py Prints only file:line findings and exits non-zero when findings exist CLI Reference
Changed-lines review skylos . -a --diff origin/main Keeps findings focused on active work instead of legacy debt Quality gate docs
Runtime-assisted dead-code check skylos . --trace Uses runtime traces to reduce dynamic-code false positives Smart tracing
Local rule pack skylos rules init Scaffolds YAML rules for project-specific security and quality checks Custom rules
Security agent quick scan skylos agent security-quick . One-shot LLM security audit; compatibility alias for skylos agent scan . --security AI features
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
AI-assisted review skylos agent scan . Static analysis plus optional LLM review and fix suggestions AI features
LLM app defense skylos defend . Finds missing AI app guardrails mapped to OWASP LLM risks AI defense
Technical debt triage skylos debt . Ranks hotspots and debt trends Technical debt

What Skylos Catches

Category Examples Why It Matters
Dead code unused functions, classes, imports, package entrypoints, route handlers reduces maintenance cost without breaking dynamic frameworks
Security flaws SQL injection, XSS, SSRF, path traversal, command injection, unsafe deserialization catches exploitable flows before code reaches main
Secrets API keys, tokens, private credentials, high-entropy strings prevents credentials from leaking through commits and PRs
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
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
Quality regressions complexity, deep nesting, duplicate branches, long functions, inconsistent returns keeps AI-assisted refactors from adding brittle code
AI code mistakes phantom security calls, missing decorators, unfinished stubs, disabled controls, network calls without timeouts catches common hallucinated or incomplete code paths
LLM app risks unsafe tool use, prompt injection exposure, missing output validation, missing rate limits helps teams ship AI features with guardrails

See the full Rules Reference.

How Skylos Fits

Skylos is not a replacement for every specialized scanner. It is a local-first repo and PR checker that puts several common review checks behind one CLI.

  • Framework-aware dead code detection: FastAPI, Django, Flask, pytest, SQLAlchemy, Next.js, React, package entrypoints, and common plugin patterns.
  • PR-focused output: diff scanning, CI thresholds, GitHub annotations, and baselines for existing findings.
  • Local-first operation: core static analysis does not require cloud upload or LLM calls.
  • AI-assisted change review: checks for removed validation, auth, logging, CSRF, rate limiting, timeouts, and other guards in generated or edited code.
  • Project-specific rules: add local YAML rules and extend prompt, credential, sensitive-file, and timeout dictionaries from config.
  • One command surface: dead code, security, secrets, dependency, quality, technical debt, agent review, and AI defense commands share the same CLI.

Install Options

# Core static analysis
pip install skylos

# LLM-powered agent workflows
pip install "skylos[llm]"

# All published optional extras
pip install "skylos[all]"

Container image:

docker pull ghcr.io/duriantaco/skylos:latest
docker run --rm -v "$PWD":/work -w /work ghcr.io/duriantaco/skylos:latest . --json --no-provenance

See Installation for source installs, container usage, and optional dependencies.

Configure Templates And Vibe Checks

Run skylos init to add these sections to pyproject.toml:

[tool.skylos.templates]
# security = ".skylos/templates/security.md"
# quality = ".skylos/templates/quality.md"
# security_audit = ".skylos/templates/security_audit.md"
# review = ".skylos/templates/review.md"

[tool.skylos.vibe]
extra_phantom_names = ["verify_enterprise_auth"]
extra_phantom_decorators = ["tenant_admin_required"]
extra_credential_names = ["tenant_signing_secret"]
extra_network_timeout_calls = ["vendor_sdk.fetch"]

Template files extend Skylos' built-in prompts; they do not replace the JSON-only output contract or untrusted-code safety rules. Vibe dictionary extensions let teams teach Skylos about local fake-auth helpers, project credential names, sensitive files, and network calls that must set timeouts.

Language Support

Language Dead Code Security Quality Notes
Python Yes Yes Yes strongest coverage; framework-aware static analysis and optional tracing
TypeScript / JavaScript Yes Yes Yes Tree-sitter parsing, package graph reachability, framework conventions
Java Yes Yes Yes Tree-sitter parsing and structured security-flow analysis
Go Yes Partial Partial dead-code and selected security benchmark coverage
PHP Yes Yes Partial PHP parser coverage plus taint-style security sinks and sources
Rust Yes Yes Partial Rust parser coverage plus security sink/source checks
Dart Yes Yes Partial Dart parser coverage plus selected security sinks and sources
C# Yes Yes Partial C# symbol coverage plus selected ASP.NET, process, SQL, HTTP, and file sinks
Shell No Yes Partial shell-script security checks for command injection, SSRF, and path traversal

See Rules Reference for rule families and scanner scope.

Config And Deployment Support

Surface Files Security Scope
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
GitLab CI .gitlab-ci.yml mutable images, unpinned includes, literal secrets, untrusted eval, Docker-in-Docker, OIDC, cache, timeout, and runner-tag policy
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
Edge systemd *.service root edge services, mutable ExecStart paths, missing sandboxing, broad capabilities, and broad device access

Benchmark Snapshot

Skylos has checked-in regression benchmarks for dead code, security, quality, and agent review. These are strict regression gates, not broad proof that any tool is universally state of the art.

Suite Current Skylos Result Baseline
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
Security regression 56 cases, TP=35 FP=0 FN=0 TN=23, score 100.0 Bandit score 47.14 on Python-applicable cases
Quality regression 13 cases, score 100.0 regression gate only
Agent review 25 cases, score 100.0 regression gate only

Frozen golden-v0.2 highlights:

Frozen Suite Skylos Result Caveat
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
Security seeded dev overall score 96.52; full recall with one Python urljoin false positive label should be reviewed
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
Quality seeded dev TP=1 FP=0 FN=0 TN=1, score 100.0 one seeded case only

For methodology, commands, competitor rows, and caveats, see BENCHMARK.md.

Project Evidence

Skylos-assisted dead-code cleanup PRs have been merged in Black, NetworkX, Optuna, mitmproxy, pypdf, beets, and Flagsmith. These are accepted cleanup PRs, not project endorsements. See Real-World Results.

A local Astronomer scan on April 26, 2026 computed 420 stargazers and returned overall trust: A. StarGuard also reported low fake-star risk.

Integrations

Integration Link Purpose
GitHub Action GitHub Action PR gates, annotations, and CI enforcement
VS Code extension VS Code extension in-editor findings and AI-assisted fixes
MCP server MCP setup expose Skylos scans to AI agents and coding assistants
Docker image Installation run Skylos without a local Python install
Skylos Cloud Cloud workflow optional upload and dashboard workflows

Generate a GitHub Actions workflow from the CLI:

skylos cicd init --upload
skylos cicd init --upload --scan-path apps/api

The generated upload workflow uses GitHub OIDC, sends PR head commit/branch metadata, and supports monorepo subprojects through --scan-path.

Documentation Map

Need Read This
Install options, source install, and Docker Installation
First scan and core workflows Quick Start
CLI commands, flags, and examples CLI Reference
CLI output modes, pretty reports, and TUI controls CLI Output Modes
CI setup, PR gates, annotations, and branch protection CI/CD
Dead-code behavior and framework awareness Dead Code Detection
Security scanning and taint analysis Security Analysis
Rule ID prefixes and product terminology Rule Dictionary
Agent scan, verification, remediation, and model setup AI Features
AI defense checks and LLM guardrails AI Defense
MCP server setup MCP Server
Real-world merged cleanup PRs Real-World Results
Baselines, filtering, suppressions, and whitelists Configuration
Smart tracing Smart Tracing
Rule families and language support Rules Reference
Cloud uploads and dashboard flow CLI to Dashboard
VS Code extension VS Code Extension
Benchmarks and methodology BENCHMARK.md
Security policy SECURITY.md
Release process RELEASE_WORKFLOW.md
Contribution priorities ROADMAP.md
Contributing CONTRIBUTING.md

Common Questions

Does Skylos replace Bandit, Semgrep, CodeQL, or Vulture?

No. Skylos can run alongside them. It focuses on framework-aware dead-code signal, PR gating, AI-era regression checks, and a combined workflow across dead code, security, secrets, and quality.

Does Skylos require an LLM?

No. Core static analysis runs locally without API keys. LLM features are optional through skylos[llm] and agent commands.

Can I use it only on changed code?

Yes. Use skylos . -a --diff origin/main locally or configure CI gates to focus on new findings.

How should I handle intentional dynamic code?

Use baselines, whitelists, inline suppressions, or runtime tracing. See the configuration docs and smart tracing docs.

Contributing And Support

  • Report security issues through SECURITY.md.
  • Open bugs and false-positive reports with minimal repros.
  • Check ROADMAP.md for useful contribution areas.
  • Read CONTRIBUTING.md before sending a pull request.
  • See QUALITY.md for project quality and gate expectations.
  • Join the Discord for community support.

License

Skylos is licensed under the Apache License 2.0.