appsec
The App Security toolbelt — a stateful CLI that guides an AI agent or a human through a rigorous, resumable vulnerability hunt. It scopes the target by project type, language, and surface; hands back a prioritized checklist of what to look for and where; and records every finding and decision to a local append-only JSONL log so the hunt can pause, resume, and be audited.
appsec is a guide and state-keeper, not a scanner or exploit engine — it does not run payloads or replace semgrep/trivy/CodeQL. Its output is guidance, checklist state, and recorded findings.
Install
uv sync
The hunt loop
uv run appsec learn # get into the app-sec frame of mind
uv run appsec learn --scaffold web_api # emit a portable template + a SKILL.md kit
# Scope the target — derives a prioritized checklist keyed to the KB:
uv run appsec scope \
--project-type backend --language python \
--surface internet-facing --use-case "payments API" --targeted-system acme-api
uv run appsec status # read-only: coverage + recommended next item
uv run appsec finding add \
--location app/db.py:42 --class "A03:2021-Injection / CWE-89" \
--severity High --evidence "string-formatted SQL" --item web-sql-injection
uv run appsec report --out appsec-report.md # export findings + coverage
uv run appsec resume # come back tomorrow: exact open/checked/finding state
Every verb takes --json for agent-mode (deterministic, machine-parseable on
stdout; diagnostics on stderr). State lives under .appsec/hunt.jsonl in the
current repo.
Knowledge base
v1 covers two target domains, grounded in the OWASP Top 10 (2021) with canonical CWE ids and a Low/Medium/High/Critical severity scale:
- web app + API/backend — the OWASP Top 10 classes.
- CLI / library — path traversal, command injection, unsafe deserialization, supply-chain/dependency exposure, privilege boundaries.
The mapping from scope dimensions to vulnerability classes lives in declarative
YAML under appsec/knowledge/, so coverage grows by editing data, not code.
Cloud/IaC/container (#18) and
LLM-app/agent-surface (#19)
coverage are tracked follow-ups.
Test / lint
uv run pytest -n auto
uv run flake8 --config=.flake8 appsec/ tests/
uv run black appsec/ tests/ && uv run isort appsec/ tests/
Docs
The design trail lives in docs/specs/ (the converged spec) and docs/plans/
(the buildable plan), both produced with the /think → /spec-to-plan skills.
Metadata
Release files for appsec 0.4.0
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 | |
|---|---|---|---|---|
| appsec-0.4.0.tar.gz | 191.4 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| appsec-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 240.1 kB
Release files / appsec-0.4.0.tar.gz
| Download URL | appsec-0.4.0.tar.gz |
|---|---|
| Size | 191.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a1315e6c0870cffc53853a0bf6231dafd450d3e0f9d9edc8db501e2a1be3713b
|
|
BLAKE2b-256 checksum How to use checksums |
04300be5a652f53d5c5d0a55dccb34534a251953ec1a26a492459142a7123d39
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / appsec-0.4.0-py3-none-any.whl
| Download URL | appsec-0.4.0-py3-none-any.whl |
|---|---|
| Size | 48.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e0b2fe8fc15d1deb9b7400fdb622996c58d0767d2ca2c2cbb8ff4fb0e4a3a7ef
|
|
BLAKE2b-256 checksum How to use checksums |
c161dcaf71fe7739555aa77fea7f2dc9822682bc204169f3ec25916ca9ed5040
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for appsec 0.4.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A 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.