Local AppSec Lab
A local application security engine and portable Agent Skill from AVIQEN, licensed under Apache-2.0.
Version 0.2.1 is experimental. Assess repositories you own or are authorized to test. Findings carry evidence and coverage limits; a scan cannot certify an application as secure.
The engine inventories source, runs bounded source and Python data-flow analysis, coordinates specialist AI workers with fresh verification and remediation workers, provisions supported locked dependencies and disposable Compose services, and tests actual local applications through scoped HTTP and Chromium. It produces JSON, Markdown, offline HTML and SARIF reports. Deterministic assessments require no model subscription or API key.
Install
Install the published package in your chosen Python environment:
python -m pip install local-appsec-lab
appsec-lab doctor
Or install from source using the commands below.
Prerequisites: Python 3.11+, venv and pip; Git for cloning. Active execution also needs a supported OS isolation backend and a prepared runtime. Browser/database workflows require Docker with Linux containers. See the full prerequisites and installation guide.
git clone https://github.com/aviqentech/local-appsec-lab.git
cd local-appsec-lab
python3 -m venv .venv
. .venv/bin/activate
python -m pip install .
appsec-lab doctor
Windows PowerShell, without activating scripts or changing execution policy:
git clone https://github.com/aviqentech/local-appsec-lab.git
cd local-appsec-lab
py -3 -m venv .venv
.\.venv\Scripts\python.exe -m pip install .
.\.venv\Scripts\appsec-lab.exe doctor
Use the explicit Windows executable in subsequent examples when the environment is not active. The PyPI package and source checkout provide the same CLI and portable skill.
Use it
Replace /path/to/application with an authorized local repository:
appsec-lab inspect --project /path/to/application
appsec-lab plan --project /path/to/application
appsec-lab scan --project /path/to/application --mode review
appsec-lab report --project /path/to/application --run latest --format html
Review does not execute application code. Configure a supported startup command and synthetic test policies, inspect the plan, then authorize execution with the plan_digest that plan printed. The scan is refused if the effective configuration has changed since:
appsec-lab scan --project /path/to/application --mode local-active --authorize --plan-digest PLAN_DIGEST
appsec-lab clean --project /path/to/application
A deliberately vulnerable fixture can exit 1 for a confirmed finding. Exit 2 means partial coverage; inspect blocked and untested checks. Read usage and exit codes and the configuration guide.
Optional AI and skill
Install the skill in a user or project directory:
python -m local_appsec_lab.install --global --target all
# Or: python -m local_appsec_lab.install --project /path/to/application --target codex
Targets are Claude Code, Codex, Cursor, Gemini CLI and generic Agent Skills hosts. Installing files, invoking a skill, and running specialist model workers are distinct capabilities. Use host instructions and measured compatibility.
For automatic model workers, set ai.strategy: native, a positive limits.model_tokens budget and a bounded limits.model_calls, then explicitly authorize transmitting selected redacted context:
appsec-lab scan --project /path/to/application --mode review \
--native-host codex --allow-model-requests
Claude, Cursor and Gemini have corresponding --native-host values. Authenticated CLIs must be installed separately. Native vendor token/cost caps are not uniformly enforceable; reports distinguish reserved and reported usage. Gemini's individual-account OAuth client was rejected by Google during testing; supported API/enterprise authentication is needed. See AI setup.
Capabilities and limits
| Capability | Implemented behavior |
|---|---|
| Source review | File/route/dependency inventory, deterministic candidates, bounded interprocedural Python provenance; Semgrep adds supported JS/TS taint rules |
| Specialist orchestration | Distinct scheduled roles, parent-owned shared knowledge, fresh AI verifier and remediation processes, bounded adaptive check proposals |
| Local execution | macOS Seatbelt, Docker Linux containers; experimental Linux bubblewrap |
| Environment setup | Integrity-pinned public Python wheels/npm packages, lifecycle scripts disabled; constrained generated Compose, disposable PostgreSQL/Redis, explicit seeds/migrations |
| Active tests | Synthetic access policies, multi-step state workflows with rollback, bounded scalar-schema fuzzing and isolated Playwright/Chromium workflows |
| Security intelligence | Explicit OSV refresh and offline OSV/Trivy database updates, staleness reporting, sealed persistent deterministic cache |
| Scanners | Real offline Semgrep, OSV-Scanner and Trivy adapters on macOS and Docker; no implicit installs/downloads |
| Remediation | Contextual guidance, explicit CVSS v4 vectors, private patch preparation, separately authorized apply/rollback |
| Reports | JSON/schema, SARIF, Markdown and offline HTML; candidates and untested coverage remain visible |
Runtime recognition does not imply universal framework launch. Whole-program proof, arbitrary Compose files, inferred business policies, mobile emulators and ZAP execution are outside the implemented scope. Fix generation currently supports a narrow Python debug rewrite or a reviewed Python/JSON replacement. See the requirement-by-requirement status.
| Platform/host | Verification boundary |
|---|---|
| macOS | Real Seatbelt/Docker applications, browser/database workflows, scanners and Codex/Claude/Cursor model workers tested locally |
| Linux | Native source/installer and Linux Docker tested; bubblewrap passed with a trusted root controller, with unprivileged restrictions documented |
| Windows | Native source/installer tests; Linux-container execution requires Docker Desktop and a native Windows test machine |
| Agent hosts | Skill installation supports all four; worker verification and skill discovery are tracked separately |
Consult validation for exact measured results and outstanding prerequisites.
Automatic PyPI updates
Merged PRs into main publish a new PyPI release after CI passes. The workflow
chooses the next unused patch version, synchronizes package/CLI/changelog versions,
validates the distributions, publishes with the existing Trusted Publisher, and
verifies a fresh public installation. Direct pushes and unmerged PRs do not publish.
See the release process for concurrency, retries and manual validation.
Documentation and development
- Installation, update and uninstall
- Usage, advanced workflows, configuration/schema
- Architecture, security model, framework support
- Troubleshooting, FAQ, report format
- Validation, requirements status, release procedure
- Contributing, security disclosure, third-party notices
python -m pip install '.[dev]'
make lint
python -m pytest -q
python -m build
Runtime tests need their documented platform and preloaded images. Never treat skipped integration tests as successful execution. Private .appsec-lab state contains local security evidence and must stay out of version control.
Native macOS Seatbelt is an explicit reviewed-source option. It cannot block every numeric same-user process-argument query; host process environment/arguments may be exposed. Use Docker for untrusted application or scanner code.
Metadata
Release files for local-appsec-lab 0.2.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 | |
|---|---|---|---|---|
| local_appsec_lab-0.2.1.tar.gz | 338.6 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| local_appsec_lab-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 544.1 kB
Release files / local_appsec_lab-0.2.1.tar.gz
| Download URL | local_appsec_lab-0.2.1.tar.gz |
|---|---|
| Size | 338.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ab96e5db025b35cf44c6f9585c3a7b4bbaa500e95fe1efa2545172fee8ded48c
|
|
BLAKE2b-256 checksum How to use checksums |
11a33d272951a552e1e4b32046555e8cebc2c3cb8aa79747e20266815f614933
|
| 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 Oct 27, 2026.
Transparency logRelease files / local_appsec_lab-0.2.1-py3-none-any.whl
| Download URL | local_appsec_lab-0.2.1-py3-none-any.whl |
|---|---|
| Size | 205.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3ef055b65f9146cbb6b65cf71aea5ca627b93e0014518fc30bf86ed99a43a0a9
|
|
BLAKE2b-256 checksum How to use checksums |
ab7b4034c68e0343e6dc0e943ffe3879a0981883eb8d533fcb07769d098e7c6e
|
| 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 Oct 27, 2026.
Transparency logSecurity for local-appsec-lab 0.2.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
All 2 files in this release have been uploaded with provenance metadata.
Attestation for local_appsec_lab-0.2.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 Oct 27, 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.