Universal Dev Security (UDS)
One Security System. Every Project.
UDS is an open-source, local-first security toolkit for developers. It runs industry-standard scanners on any project, normalizes their results into one schema, enforces a central security policy for Git and AI coding agents, and produces a dark, self-contained HTML security dashboard.
Status:
1.0.1— stable. See DEVELOPMENT_STATUS.md for verified functionality, known issues and test results. UDS reports what its scanners find; a clean result is never proof that a project is secure.
What it does
| Area | Capability |
|---|---|
| Secrets | Gitleaks directory, staged and outgoing-commit scanning (values always redacted) |
| Code | Semgrep static analysis with technology-based rule packs (metrics disabled) |
| Dependencies | OSV-Scanner and Trivy vulnerability scanning |
| Configuration | Trivy misconfiguration scanning (Dockerfile, Kubernetes, Terraform, …) |
| Policy | Central engine: approval for git push, denial of hook bypasses and secret writes, project rules can only add restrictions |
| Git | pre-commit / pre-push hooks that block secrets (fail closed) |
| AI agents | Claude Code PreToolUse hooks; generic uds guard JSON protocol for any agent |
| GitHub | Generated PR workflow with checksum-verified scanners and SARIF upload |
| Reports | JSON, SARIF 2.1.0 and an offline dark HTML dashboard with filters, history and scan comparison |
| Recovery | Checkpoints before every UDS change; rollback that never clobbers later user edits |
| Fixes | Low-risk, reversible fixes verified by your test suite, rolled back automatically if tests fail |
Scanner states are explicit — clean, findings, not_installed,
not_applicable, skipped, error — and the overall status becomes
incomplete when an applicable scanner did not run. Severity is shown only
when the scanner supplies it or a published scale (CVSS) defines it; everything
else is unclassified. No security score is invented.
Quick start
New to UDS? The Getting started guide walks through installation, your first scan, reading the dashboard, fixing findings and turning on protection, with real example output.
Requirements: Python 3.11+, Windows, Linux or macOS. Git is recommended.
python -m pip install universal-dev-security
The package on PyPI is identical to the
assets of the GitHub release
(same SHA-256). Prefer an isolated install? Use pipx install universal-dev-security, or the
checksum-verifying installers described in
docs/installation.md.
Install at least Gitleaks; uds doctor
shows the official install command for every scanner. Then, inside a project:
uds doctor # runtime, config and scanner availability (+ official install sources)
uds init # create .uds/config.toml (never overwrites)
uds scan # run applicable scanners, write JSON + HTML reports, record history
uds dashboard --open # open the dark HTML dashboard
uds hooks install --apply # block secrets at commit and push time
uds integrate claude-code --apply # enforce the UDS policy inside Claude Code
Every command that changes files is a dry run by default and shows a diff;
--apply creates a recovery checkpoint first. See docs/installation.md
for scanner installation and upgrades, and docs/commands.md for all commands.
Documentation
- Getting started
- Installation and upgrades
- Commands
- Scanners, severity and privacy
- Integrations: Claude Code, GitHub, VS Code, other agents
- Architecture
- Security model and global policy
- Dashboard design system
- Release process
Safety guarantees
- No telemetry. The core never contacts the network; scanners' network use is documented and OSV-Scanner (which sends package names/versions to osv.dev) runs only with explicit approval.
- UDS never installs scanners, never commits, never pushes and never publishes.
- Existing configuration is merged, never silently overwritten; invalid files are left untouched.
- Secret values, matched text and raw scanner output never appear in output, reports or history.
- Global policies cannot be weakened by project configuration or AI tools.
Local Git hooks and AI-agent hooks are defense in depth — keep CI scanning and repository-level protections (for example GitHub push protection) enabled too.
Contributing and security
See CONTRIBUTING.md and SECURITY.md. Changes are listed in CHANGELOG.md.
License
Apache License 2.0. See LICENSE.
Metadata
Release files for universal-dev-security 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| universal_dev_security-1.0.1.tar.gz | 133.2 kB | With provenance | Details for universal_dev_security-1.0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| universal_dev_security-1.0.1-py3-none-any.whl | Python 3 | none | any | Details for universal_dev_security-1.0.1-py3-none-any.whl |
Total release size: 224.8 kB
Release files / universal_dev_security-1.0.1.tar.gz
| Download URL | universal_dev_security-1.0.1.tar.gz |
|---|---|
| Size | 133.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
da8233d48420f9f08b6398bcbdd06d620d4b4acf345b5b5629215ec119280596
|
|
BLAKE2b-256 checksum How to use checksums |
77f8073b2637f1f29d6941f439dafce00fcd86ee2427bff41eb0f6d443c7f902
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 14, 2026.
Transparency logRelease files / universal_dev_security-1.0.1-py3-none-any.whl
| Download URL | universal_dev_security-1.0.1-py3-none-any.whl |
|---|---|
| Size | 91.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fb2d706c5b4317974e9e0a66808b013621efcf0b6dfe36f52b58a6adfedcd68a
|
|
BLAKE2b-256 checksum How to use checksums |
ef250c96cbfa4fd9a5ddb1460f730ca2aa66313ad6a07de172716ecac05693ba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 14, 2026.
Transparency logSecurity for universal-dev-security 1.0.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for universal_dev_security-1.0.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Nov 14, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.