Skip to main content

Local AppSec Lab

A local application security engine and portable Agent Skill from AVIQEN, licensed under Apache-2.0.

Version 0.2.0 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:

appsec-lab scan --project /path/to/application --mode local-active --authorize
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.

Documentation and development

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.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for local-appsec-lab 0.2.0
File Size Uploaded Provenance
local_appsec_lab-0.2.0.tar.gz 324.7 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for local-appsec-lab 0.2.0
File Interpreter ABI Platform
local_appsec_lab-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 528.7 kB

Release files / local_appsec_lab-0.2.0.tar.gz

Download URL local_appsec_lab-0.2.0.tar.gz
Size 324.7 kB
Tags Source
SHA-256 checksum
How to use checksums
1c128e0c37f6337ce17d9a9d786b1773a16c152b8a630b98ba000bfb1e68a3e9
BLAKE2b-256 checksum
How to use checksums
328c89d6bcfc9797ed269a77d2526e84ea612be3d5dda4baa87d8855620c4819
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 log

Release files / local_appsec_lab-0.2.0-py3-none-any.whl

Download URL local_appsec_lab-0.2.0-py3-none-any.whl
Size 204.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b028b8129ec2e1b18e9039e860df21ade06624dd7e8a69b2d6204577cdc99ce5
BLAKE2b-256 checksum
How to use checksums
11d395454ba086097736572c8cf9774081d63ca63bff6747384d799a7b0b96d7
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 log

Security for local-appsec-lab 0.2.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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for local_appsec_lab-0.2.0.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 log

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.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page