AppSec Start -- Project Assessment
The entry point for any codebase. Detects what the project is, what data it
handles, what scanners are available, and recommends exactly which /appsec:*
tools are relevant, in what order, and why.
This skill runs entirely in the main agent context. It does NOT dispatch
subagents. It produces a recommendation, not findings.
Supported Flags
This skill accepts a subset of cross-cutting flags. Read
../../shared/schemas/flags.md for the full
specification.
| Flag |
Behavior |
--scope |
Ignored. Start always assesses the full project. |
--format text |
Human-readable ASCII output (default). |
--format json |
Structured JSON assessment. |
--format md |
Markdown report. |
--quiet |
Suppress explanations, output tool list only. |
Workflow
Execute all 6 steps sequentially in the main agent context. Use Glob, Grep,
Read, and Bash tools to gather evidence. Do NOT guess -- only report what
you find.
Step 1: Detect Tech Stack
Read project manifests to determine languages, frameworks, databases, and
infrastructure. Check for each of these files using Glob:
| File Pattern |
Reveals |
package.json |
Node.js, npm dependencies, scripts |
package-lock.json, yarn.lock, pnpm-lock.yaml |
Dependency lockfiles |
requirements.txt, Pipfile, pyproject.toml, setup.py |
Python |
go.mod, go.sum |
Go |
Cargo.toml, Cargo.lock |
Rust |
Gemfile, Gemfile.lock |
Ruby |
pom.xml, build.gradle, build.gradle.kts |
Java/Kotlin |
*.csproj, *.sln |
.NET/C# |
composer.json |
PHP |
Dockerfile, docker-compose.yml, docker-compose.yaml |
Containers |
serverless.yml, serverless.yaml, serverless.ts |
Serverless |
terraform/*.tf, **/*.tf |
Terraform IaC |
*.yaml in .github/workflows/ |
GitHub Actions CI/CD |
.gitlab-ci.yml |
GitLab CI/CD |
Jenkinsfile |
Jenkins CI/CD |
.circleci/config.yml |
CircleCI |
Read each found manifest to extract framework names, database drivers,
and notable dependencies. Build a concise stack summary.
Step 2: Detect Data Sensitivity
Scan the codebase for patterns indicating sensitive data handling. Use Grep
with these patterns:
PII indicators:
- User model fields:
email, phone, address, ssn, date_of_birth,
social_security, national_id, passport
- GDPR patterns:
consent, gdpr, data_subject, right_to_forget,
data_protection
Financial indicators:
- Payment integrations:
stripe, paypal, braintree, adyen, square
- Card patterns:
card_number, cvv, credit_card, payment_method
- Transaction models:
transaction, invoice, billing, subscription
Health data indicators:
- HIPAA terms:
hipaa, phi, protected_health, medical_record,
diagnosis, patient
Auth mechanism indicators:
- JWT:
jsonwebtoken, jwt, jose
- OAuth:
oauth, passport, openid
- Session:
express-session, cookie-session, session_store
- Password storage:
bcrypt, argon2, scrypt, pbkdf2
Classify data sensitivity as: None detected, PII, Financial,
Health/PHI, or combinations.
Step 3: Detect Architecture Patterns
Determine the application type by scanning for these indicators:
| Pattern |
Indicator Files / Code |
| API-only backend |
Route handlers without template/view rendering, OpenAPI/Swagger spec |
| Full-stack |
Template engines (EJS, Pug, Jinja, ERB), React/Vue/Angular alongside API |
| GraphQL |
.graphql files, graphql in dependencies, schema definitions |
| WebSocket |
ws, socket.io, websocket in dependencies or code |
| Serverless |
serverless.yml, Lambda handlers, Cloud Functions |
| Microservices |
Multiple Dockerfiles, service mesh config, multiple package.jsons |
| Monolith |
Single deployment unit, single database connection |
| Business logic heavy |
Payment processing, e-commerce models, fintech calculations |
| Many dependencies |
100+ entries in lockfile |
| CI/CD present |
.github/workflows/, .gitlab-ci.yml, Jenkinsfile |
Step 4: Detect Installed Scanners
Check PATH for known scanner binaries using Bash which commands. Run
these checks in parallel:
which semgrep
which bandit
which gosec
which brakeman
which cargo-audit
which gitleaks
which trufflehog
which trivy
which osv-scanner
which checkov
which tfsec
which kics
which npm (for npm audit)
which pip-audit
Read ../../shared/schemas/scanners.md
for the full scanner registry and detection patterns.
Mark each as detected or not. For language-specific scanners, only report
relevance if the language is in the detected stack.
Step 5: Check Existing Security Configs
Scan for security configurations already in place:
| Config |
What to Check |
| ESLint security |
.eslintrc* files for eslint-plugin-security or security rules |
| CSP headers |
Content-Security-Policy in middleware, meta tags, or config |
| CORS config |
cors() middleware config, Access-Control-Allow-Origin settings |
| Rate limiting |
express-rate-limit, bottleneck, rate limit middleware |
| Helmet/headers |
helmet in dependencies, security header middleware |
| Input validation |
joi, zod, yup, class-validator, express-validator |
.gitignore |
Whether .env, secrets, and keys are excluded |
| Dependabot |
.github/dependabot.yml for automated dependency updates |
Note what is present and what is missing. This informs recommendations.
Step 6: Output Tailored Recommendation
Based on all detected signals, produce a prioritized list of /appsec:*
tools to run, with rationale for each.
Priority rules:
/appsec:secrets --scope full is ALWAYS priority 1. Committed secrets
are the most common and most damaging solo dev mistake.
- Tools matching detected data sensitivity rank higher (financial data
detected -> prioritize
business-logic, race-conditions).
- Tools matching detected architecture rank higher (GraphQL detected ->
include
graphql).
- Tools with no relevant attack surface in this project go to the SKIP list.
- Include the "why" for each recommendation -- reference specific files or
patterns found.
Output Format
Text Format (default)
=====================================================
APPSEC START -- Project Assessment
=====================================================
PROJECT: <project name from package.json or directory>
STACK: <languages, frameworks, databases, infra>
DATA: <data sensitivity classifications>
SCANNERS: <scanner> Y/N <scanner> Y/N ...
RECOMMENDED TOOLS (priority order):
1. /appsec:secrets --scope full
WHY: <rationale referencing specific findings>
2. /appsec:<tool> --scope <recommended scope>
WHY: <rationale referencing specific findings>
...
SKIP (not relevant for this project):
- /appsec:<tool> (<reason>)
- ...
EXISTING SECURITY:
- <config found> -- <status>
- ...
QUICK START:
/appsec:run # Run top priorities automatically
/appsec:run --depth deep # Thorough analysis
/appsec:run --depth expert # + Red team simulation
/appsec:full-audit # Everything, with dated report
=====================================================
JSON Format
{
"project": "<name>",
"stack": { "languages": [], "frameworks": [], "databases": [], "infra": [] },
"data_sensitivity": [],
"architecture": [],
"scanners": { "<name>": true|false },
"existing_security": { "<config>": true|false },
"recommended_tools": [
{ "rank": 1, "tool": "secrets", "scope": "full", "rationale": "..." }
],
"skip": [
{ "tool": "graphql", "reason": "No GraphQL schema found" }
]
}
Caching
After assessment, write the results to .appsec/start-assessment.json so
that /appsec:run can reuse the detection results without re-scanning.
Include a timestamp so stale results can be detected (older than 24 hours
or if package.json / manifest mtime has changed).
Follow-Up Prompt
After presenting the assessment, suggest:
Ready to scan? Run one of:
/appsec:run Run recommended tools automatically
/appsec:<top-priority-tool> Start with the highest priority
/appsec:full-audit Exhaustive audit with dated report
1---2name: start3description: This skill should be used when the user asks to "start security analysis", "assess security", "which security tools should I use", "appsec start", "what should I scan", "security assessment", or invokes /appsec:start. Assesses the project's tech stack, data sensitivity, architecture, and installed scanners, then recommends which /appsec:* tools to run in priority order with rationale.4---56# AppSec Start -- Project Assessment78The entry point for any codebase. Detects what the project is, what data it9handles, what scanners are available, and recommends exactly which `/appsec:*`10tools are relevant, in what order, and why.1112This skill runs entirely in the main agent context. It does NOT dispatch13subagents. It produces a recommendation, not findings.1415## Supported Flags1617This skill accepts a subset of cross-cutting flags. Read18[`../../shared/schemas/flags.md`](../../shared/schemas/flags.md) for the full19specification.2021| Flag | Behavior |22|------|----------|23| `--scope` | Ignored. Start always assesses the full project. |24| `--format text` | Human-readable ASCII output (default). |25| `--format json` | Structured JSON assessment. |26| `--format md` | Markdown report. |27| `--quiet` | Suppress explanations, output tool list only. |2829## Workflow3031Execute all 6 steps sequentially in the main agent context. Use Glob, Grep,32Read, and Bash tools to gather evidence. Do NOT guess -- only report what33you find.3435### Step 1: Detect Tech Stack3637Read project manifests to determine languages, frameworks, databases, and38infrastructure. Check for each of these files using Glob:3940| File Pattern | Reveals |41|-------------|---------|42| `package.json` | Node.js, npm dependencies, scripts |43| `package-lock.json`, `yarn.lock`, `pnpm-lock.yaml` | Dependency lockfiles |44| `requirements.txt`, `Pipfile`, `pyproject.toml`, `setup.py` | Python |45| `go.mod`, `go.sum` | Go |46| `Cargo.toml`, `Cargo.lock` | Rust |47| `Gemfile`, `Gemfile.lock` | Ruby |48| `pom.xml`, `build.gradle`, `build.gradle.kts` | Java/Kotlin |49| `*.csproj`, `*.sln` | .NET/C# |50| `composer.json` | PHP |51| `Dockerfile`, `docker-compose.yml`, `docker-compose.yaml` | Containers |52| `serverless.yml`, `serverless.yaml`, `serverless.ts` | Serverless |53| `terraform/*.tf`, `**/*.tf` | Terraform IaC |54| `*.yaml` in `.github/workflows/` | GitHub Actions CI/CD |55| `.gitlab-ci.yml` | GitLab CI/CD |56| `Jenkinsfile` | Jenkins CI/CD |57| `.circleci/config.yml` | CircleCI |5859Read each found manifest to extract framework names, database drivers,60and notable dependencies. Build a concise stack summary.6162### Step 2: Detect Data Sensitivity6364Scan the codebase for patterns indicating sensitive data handling. Use Grep65with these patterns:6667**PII indicators:**68- User model fields: `email`, `phone`, `address`, `ssn`, `date_of_birth`,69 `social_security`, `national_id`, `passport`70- GDPR patterns: `consent`, `gdpr`, `data_subject`, `right_to_forget`,71 `data_protection`7273**Financial indicators:**74- Payment integrations: `stripe`, `paypal`, `braintree`, `adyen`, `square`75- Card patterns: `card_number`, `cvv`, `credit_card`, `payment_method`76- Transaction models: `transaction`, `invoice`, `billing`, `subscription`7778**Health data indicators:**79- HIPAA terms: `hipaa`, `phi`, `protected_health`, `medical_record`,80 `diagnosis`, `patient`8182**Auth mechanism indicators:**83- JWT: `jsonwebtoken`, `jwt`, `jose`84- OAuth: `oauth`, `passport`, `openid`85- Session: `express-session`, `cookie-session`, `session_store`86- Password storage: `bcrypt`, `argon2`, `scrypt`, `pbkdf2`8788Classify data sensitivity as: **None detected**, **PII**, **Financial**,89**Health/PHI**, or combinations.9091### Step 3: Detect Architecture Patterns9293Determine the application type by scanning for these indicators:9495| Pattern | Indicator Files / Code |96|---------|----------------------|97| API-only backend | Route handlers without template/view rendering, OpenAPI/Swagger spec |98| Full-stack | Template engines (EJS, Pug, Jinja, ERB), React/Vue/Angular alongside API |99| GraphQL | `.graphql` files, `graphql` in dependencies, schema definitions |100| WebSocket | `ws`, `socket.io`, `websocket` in dependencies or code |101| Serverless | `serverless.yml`, Lambda handlers, Cloud Functions |102| Microservices | Multiple `Dockerfile`s, service mesh config, multiple `package.json`s |103| Monolith | Single deployment unit, single database connection |104| Business logic heavy | Payment processing, e-commerce models, fintech calculations |105| Many dependencies | 100+ entries in lockfile |106| CI/CD present | `.github/workflows/`, `.gitlab-ci.yml`, `Jenkinsfile` |107108### Step 4: Detect Installed Scanners109110Check PATH for known scanner binaries using Bash `which` commands. Run111these checks in parallel:112113```114which semgrep115which bandit116which gosec117which brakeman118which cargo-audit119which gitleaks120which trufflehog121which trivy122which osv-scanner123which checkov124which tfsec125which kics126which npm (for npm audit)127which pip-audit128```129130Read [`../../shared/schemas/scanners.md`](../../shared/schemas/scanners.md)131for the full scanner registry and detection patterns.132133Mark each as detected or not. For language-specific scanners, only report134relevance if the language is in the detected stack.135136### Step 5: Check Existing Security Configs137138Scan for security configurations already in place:139140| Config | What to Check |141|--------|--------------|142| ESLint security | `.eslintrc*` files for `eslint-plugin-security` or security rules |143| CSP headers | `Content-Security-Policy` in middleware, meta tags, or config |144| CORS config | `cors()` middleware config, `Access-Control-Allow-Origin` settings |145| Rate limiting | `express-rate-limit`, `bottleneck`, rate limit middleware |146| Helmet/headers | `helmet` in dependencies, security header middleware |147| Input validation | `joi`, `zod`, `yup`, `class-validator`, `express-validator` |148| `.gitignore` | Whether `.env`, secrets, and keys are excluded |149| Dependabot | `.github/dependabot.yml` for automated dependency updates |150151Note what is present and what is missing. This informs recommendations.152153### Step 6: Output Tailored Recommendation154155Based on all detected signals, produce a prioritized list of `/appsec:*`156tools to run, with rationale for each.157158**Priority rules:**1591. `/appsec:secrets --scope full` is ALWAYS priority 1. Committed secrets160 are the most common and most damaging solo dev mistake.1612. Tools matching detected data sensitivity rank higher (financial data162 detected -> prioritize `business-logic`, `race-conditions`).1633. Tools matching detected architecture rank higher (GraphQL detected ->164 include `graphql`).1654. Tools with no relevant attack surface in this project go to the SKIP list.1665. Include the "why" for each recommendation -- reference specific files or167 patterns found.168169## Output Format170171### Text Format (default)172173```174=====================================================175 APPSEC START -- Project Assessment176=====================================================177178PROJECT: <project name from package.json or directory>179STACK: <languages, frameworks, databases, infra>180DATA: <data sensitivity classifications>181SCANNERS: <scanner> Y/N <scanner> Y/N ...182183RECOMMENDED TOOLS (priority order):184185 1. /appsec:secrets --scope full186 WHY: <rationale referencing specific findings>187188 2. /appsec:<tool> --scope <recommended scope>189 WHY: <rationale referencing specific findings>190191 ...192193SKIP (not relevant for this project):194 - /appsec:<tool> (<reason>)195 - ...196197EXISTING SECURITY:198 - <config found> -- <status>199 - ...200201QUICK START:202 /appsec:run # Run top priorities automatically203 /appsec:run --depth deep # Thorough analysis204 /appsec:run --depth expert # + Red team simulation205 /appsec:full-audit # Everything, with dated report206207=====================================================208```209210### JSON Format211212```json213{214 "project": "<name>",215 "stack": { "languages": [], "frameworks": [], "databases": [], "infra": [] },216 "data_sensitivity": [],217 "architecture": [],218 "scanners": { "<name>": true|false },219 "existing_security": { "<config>": true|false },220 "recommended_tools": [221 { "rank": 1, "tool": "secrets", "scope": "full", "rationale": "..." }222 ],223 "skip": [224 { "tool": "graphql", "reason": "No GraphQL schema found" }225 ]226}227```228229## Caching230231After assessment, write the results to `.appsec/start-assessment.json` so232that `/appsec:run` can reuse the detection results without re-scanning.233Include a timestamp so stale results can be detected (older than 24 hours234or if `package.json` / manifest mtime has changed).235236## Follow-Up Prompt237238After presenting the assessment, suggest:239240```241Ready to scan? Run one of:242 /appsec:run Run recommended tools automatically243 /appsec:<top-priority-tool> Start with the highest priority244 /appsec:full-audit Exhaustive audit with dated report245```