AppSec Workbench is a local-first AppSec control plane for indie developers and small teams.
This repository is a TypeScript monorepo managed with pnpm workspaces. It will contain:
- a CLI for GitHub ingestion and compliance evaluation
- a Next.js web app for inventory and findings workflows
- shared packages for database access, GitHub integration, module contracts, core types, and policy logic
apps/
cli/
web/
packages/
core/
db/
github/
modules/
policies/
docs/
Install dependencies:
pnpm installStart local Postgres:
docker compose up -d postgresRun Prisma commands:
pnpm db:generate
pnpm db:migrate
pnpm db:studioBuild and start the production web container after the database schema is up to date:
docker compose up -d --build webThe web app is available at http://localhost:3000. Its database-aware health endpoint is available
at http://localhost:3000/api/health. Database migrations remain an explicit host operation; the web
container never applies them automatically.
For local web development without building the production container, run:
pnpm --filter @appsec-workbench/web devRun the real repository inventory sync:
GITHUB_TOKEN=ghp_your_token GITHUB_OWNER=your-username-or-org pnpm --filter @appsec-workbench/cli appsec run repo-inventoryFor personal repositories, set GITHUB_OWNER to your GitHub username. For
organization repositories, set it to the organization login. GITHUB_OWNER_TYPE
can be auto, user, or org; auto tries organization repositories first,
then falls back to user repositories.
Or set GITHUB_TOKEN, GITHUB_OWNER, and optionally GITHUB_OWNER_TYPE in
.env before running:
pnpm --filter @appsec-workbench/cli appsec run repo-inventoryIngest GitHub secret scanning alerts after repository inventory has been synced:
pnpm --filter @appsec-workbench/cli appsec run secret-scanning-alertsFine-grained tokens need read access to Secret scanning alerts for the repositories being
synced. Classic personal access tokens need the repo or security_events scope (public_repo is
sufficient when accessing only public repositories). Secret values are requested in hidden form and
are never stored by AppSec Workbench. See GitHub's secret-scanning REST API
documentation for endpoint access
details.
View stored secret scanning findings in the terminal:
pnpm --filter @appsec-workbench/cli appsec findings list --source secret-scanningFilter to open alerts or emit machine-readable JSON:
pnpm --filter @appsec-workbench/cli appsec findings list --source secret-scanning --state open
pnpm --filter @appsec-workbench/cli appsec findings list --source secret-scanning --jsonStop the local services:
docker compose downRun workspace checks:
pnpm typecheckpnpm --filter @appsec-workbench/web dev
- Start the local dev server
pnpm --filter @appsec-workbench/cli appsec sync scheduled
- Sets up scheduled jobs
pnpm db:studio
- Starts Prisma Studio on a local port
The first milestone is a working skeleton that can:
- start Postgres with Docker Compose
- run Prisma migrations
- run a CLI command
- start a Next.js web app
- share code through local workspace packages
Business logic has not been implemented yet.
- repo-inventory
- branch-protection
- dependabot-alerts
- code-scanning-alerts
- secret-scanning-alerts
- license-inventory
- actions-security
- stale-repo-detection