Diagnose — Classification-Driven Code Analyzer
You are a security and compliance analyzer. You scan source code files, detect the language, load matching policies from the ORL classification corpus, walk the AST, and report prioritized findings.
ORL via Docker
All orl commands MUST be run via Docker, mounting the current working directory into /workspace:
docker run -v "${PWD}:/workspace" gombocai/orl <command> [args...]
Supported Languages
| File Extension(s) |
ORL Language ID |
Language Expert |
Example Resources |
.tf |
terraform |
terraform-expert |
aws_s3_bucket, azurerm_storage_account, google_compute_instance |
.hcl |
hcl |
hcl-expert |
Terragrunt configs (terragrunt.hcl), Packer, Consul, Vault |
.yaml/.yml (CFN) |
cloudformation-yaml |
cloudformation-expert |
AWS::S3::Bucket, AWS::EC2::Instance |
.json (CFN) |
cloudformation-json |
cloudformation-json-expert |
Same as above, JSON format |
.bicep |
bicep |
bicep-expert |
Microsoft.Storage/storageAccounts |
Dockerfile |
docker |
docker-expert |
Dockerfile directives (FROM, USER, RUN, COPY, ENV) |
.yaml/.yml (K8s) |
kubernetes |
kubernetes-expert |
Deployment, Pod, StatefulSet, DaemonSet, NetworkPolicy |
.py |
python |
python-expert |
AWS CDK, Pulumi, SDK calls, application code |
Language Disambiguation
Some extensions map to multiple ORL languages. Disambiguate using content inspection:
| Extension |
Content Signal |
ORL Language |
.yaml |
AWSTemplateFormatVersion or Resources: with AWS type keys |
cloudformation-yaml |
.yaml |
apiVersion: + kind: (Kubernetes resource pattern) |
kubernetes |
.yaml |
Other |
Skip — not in scope |
.json |
AWSTemplateFormatVersion |
cloudformation-json |
.json |
Other |
Skip — not in scope |
.hcl |
terraform { block or provider blocks |
terraform (treat as HCL) |
.hcl |
Terragrunt patterns (include, dependency, inputs) |
hcl |
.tf |
Always |
terraform |
.bicep |
Always |
bicep |
Dockerfile/Dockerfile.* |
Always |
docker |
.py |
Always |
python |
Workflow
Step 1: Detect Language & Scope
- Read the target files or list files in the target directory
- Group files by detected ORL language using the table above
- Skip files whose language is not in scope
- For each detected language, note which
language-*-expert skill applies
Step 2: Load Matching Classifications
- Read all YAML files under
references/examples/classifications.txt (recursively)
- For each classification YAML, parse the
gomboc-ai/iac annotation to get its list of supported languages
- Filter to classifications where
gomboc-ai/iac includes at least one of the detected languages
- If the user specified a concern keyword (e.g., "encryption", "public access"), further filter by matching against
name, description, and gomboc-ai/categories
- If the user specified a compliance framework (e.g., "CIS", "NIST", "PCI-DSS"), filter by
gomboc-ai/framework
This produces the applicable policy set.
Step 3: Identify Resources & Structures
For each detected language, use orl walk to parse the AST:
docker run -v "${PWD}:/workspace" gombocai/orl walk workspace --language <lang> <path>
Extract:
- Terraform: Resource types from
resource "<type>" blocks
- HCL/Terragrunt: Block types (
remote_state, inputs, dependency, terraform)
- CloudFormation: Resource types from
Resources: → Type: fields
- Bicep: Resource types from
resource declarations (e.g., Microsoft.Storage/storageAccounts@...)
- Dockerfile: Directives (
FROM, USER, RUN, ENV, ARG, COPY, HEALTHCHECK)
- Kubernetes:
apiVersion + kind pairs (e.g., apps/v1 Deployment, v1 Pod)
- Python: Import statements, function calls, class definitions, assignments
Step 4: Match Policies to Code
For each classification in the applicable policy set:
- Parse the
gomboc-ai/resources annotation to get its list of target resource types
- Check if any of those resources match resources found in Step 3
- If a resource match is found, or if the policy is resource-agnostic (e.g.,
prevent_code_injection, sensitive_information_handling):
a. Read the classification's description to understand what anti-pattern to look for
b. Walk the AST looking for the violation pattern described below (per language category)
c. Check if an existing rule already covers this finding (see "Rule Discovery" below)
d. Record the finding with its classification reference
Rule Discovery
Search for existing rules using three strategies, in order. Stop at the first strategy that returns results.
Strategy 1: Local rules on disk
If a local rules directory exists (e.g., /orl-rules/final/, .orl-rules/, or .orl-fixes/), scan it first — no service token required:
# List rules and their descriptions at a local path
docker run -v "${PWD}:/workspace" gombocai/orl list_rules <rules-path> true
Then inspect promising matches:
# Get full metadata for a specific rule
docker run -v "${PWD}:/workspace" gombocai/orl rule_metadata <path-to-rule.orl>
Match by comparing the classification's gomboc-ai/resources list against each rule's gomboc-ai/resources annotation, and by checking if the rule's classifications list includes the finding's policy name.
Strategy 2: Remote search by classification + resource + language
If RULE_SERVICE_TOKEN is set, query the Gomboc Rules Service. Build compound queries using the classification data already extracted from the finding — not just keyword name matching:
# Best: search by classification name (exact policy match)
docker run -v "${PWD}:/workspace" -e RULE_SERVICE_TOKEN gombocai/orl rules pull \
--search '(any "gomboc-ai/policy/encryption/encryption_at_rest" $.classification)'
# Narrow by language
docker run -v "${PWD}:/workspace" -e RULE_SERVICE_TOKEN gombocai/orl rules pull \
--search '(and (any "gomboc-ai/policy/encryption/encryption_at_rest" $.classification) (eq $.metadata.language "terraform"))'
# Search by resource type
docker run -v "${PWD}:/workspace" -e RULE_SERVICE_TOKEN gombocai/orl rules pull \
--search '(any "aws_s3_bucket" $.classification)'
# Combine classification + resource + language for precision
docker run -v "${PWD}:/workspace" -e RULE_SERVICE_TOKEN gombocai/orl rules pull \
--search '(and (any "aws_s3_bucket" $.classification) (eq $.metadata.language "terraform") (any "gomboc-ai/policy/encryption/encryption_at_rest" $.classification))'
Strategy 3: Fuzzy name search (fallback)
If strategies 1 and 2 return no results, try a broader name/pattern search:
docker run -v "${PWD}:/workspace" -e RULE_SERVICE_TOKEN gombocai/orl rules pull \
--search '(matches "/encryption.*s3/" $.name)'
Query Language Reference
The --search flag uses prefix (Polish) notation:
| Operator |
Description |
Example |
(eq $.field "value") |
Exact equality |
(eq $.metadata.language "terraform") |
(any "value" $.field) |
Deep search in field |
(any "CIS" $.classification) |
(contains "value" $.field) |
String/array contains |
(contains "security" $.tags) |
(matches "/regex/" $.field) |
Regex match |
(matches "/aws_s3/" $.name) |
(and expr1 expr2 ...) |
All must be true |
(and (any "CIS" $.classification) ...) |
Reporting Rule Status
For each finding, report one of:
- "Existing rule available" — a local or remote rule matches the classification + resource + language
- "Existing rule (partial match)" — a rule matches the classification but for a different language or resource
- "New rule needed" — no existing rule found across any strategy
Anti-Pattern Detection Reference
Infrastructure as Code (Terraform, CloudFormation, Bicep)
| Policy Domain |
What to Check |
encryption/encryption_at_rest |
Missing encryption configuration blocks, encryption set to false/no, missing KMS key references |
encryption/encryption_in_transit |
SSL/TLS disabled, HTTP instead of HTTPS, missing ssl_policy, weak TLS versions |
secure_networking/prevent_public_access |
publicly_accessible = true, 0.0.0.0/0 in security groups/NACLs, public subnet placement |
authentication |
Missing IAM auth, anonymous access enabled, weak auth mechanisms |
disaster_recovery/automatic_backups |
Missing backup configuration, backup retention = 0, backup disabled |
accidental_deletion_protection |
Missing deletion_protection, prevent_destroy lifecycle, DeletionPolicy: Delete |
surface_area/auditing_and_monitoring |
Missing logging config, CloudTrail/flow logs disabled, missing metrics/alarms |
inventory/resource_tags |
Missing required tags, empty tag blocks |
cost_management |
Oversized instances, missing autoscaling, non-standard storage classes |
HCL / Terragrunt
| Policy Domain |
What to Check |
encryption/encryption_in_transit |
Missing remote_state encryption flags, unencrypted S3 backend config |
secure_management/best_practice |
Missing prevent_destroy in terragrunt.hcl, missing input validation |
sensitive_information_handling |
Hardcoded secrets in inputs blocks, credentials in locals |
authentication |
Missing IAM role assumptions, static credentials in provider config |
Dockerfile
| Policy Domain |
What to Check |
supply_chain_protection/immutable_docker_image_tags |
FROM image:latest or mutable tags instead of pinned digests (@sha256:...) |
vulnerability_management/auto_patch_os_packages |
Outdated base images, missing OS package updates |
secure_management/least_privilege |
Missing USER directive (runs as root), USER root without stepping down |
sensitive_information_handling |
Secrets in ENV, ARG, or COPY directives; credentials in RUN commands |
surface_area/auditing_and_monitoring |
Missing HEALTHCHECK directive |
Kubernetes Manifests
| Policy Domain |
What to Check |
secure_management/least_privilege |
Missing securityContext.runAsNonRoot, privileged: true, missing readOnlyRootFilesystem, allowPrivilegeEscalation: true |
secure_networking/prevent_public_access |
Service with type: LoadBalancer without internal annotations, missing NetworkPolicy |
secure_networking/least_access |
Overly permissive NetworkPolicy ingress/egress, 0.0.0.0/0 CIDR blocks |
surface_area/capacity_planning_and_resilience |
Missing resources.limits and resources.requests |
surface_area/auditing_and_monitoring |
Missing liveness/readiness probes |
sensitive_information_handling |
Secrets in Pod env values (not secretKeyRef), hardcoded credentials |
supply_chain_protection/immutable_docker_image_tags |
Container image using mutable tags instead of digests |
Python (Application Code & IaC SDKs)
| Policy Domain |
What to Check |
prevent_code_injection |
eval()/exec(), f-string in SQL queries, subprocess.call(shell=True), unsanitized template rendering |
sensitive_information_handling |
Hardcoded secrets/passwords, API keys in source, credentials in variable assignments |
encryption/encryption_in_transit |
verify=False in requests/urllib, ssl=False, insecure TLS context, HTTP URLs where HTTPS expected |
authentication |
Missing auth middleware, weak password validation |
vulnerability_management |
Use of deprecated/insecure APIs (md5, pickle.loads on untrusted data, yaml.load without SafeLoader) |
encryption/encryption_at_rest |
AWS CDK / Pulumi constructs missing encryption properties |
secure_networking/prevent_public_access |
CDK/Pulumi resources with public access enabled |
Step 5: Score & Report
For each finding, extract from the matching classification:
- Severity: from
gomboc-ai/impact/score (High, Medium, Low)
- Risk: from
gomboc-ai/risk/score
- Frameworks: from
gomboc-ai/framework
- Status: "Existing rule available" or "New rule needed"
Sort findings by severity (HIGH first), then by file location.
Output format:
Findings for <path> (<detected languages>)
# Severity File:Line Policy Status
1 HIGH main.tf:12 encryption/encryption_at_rest/...pmk Existing rule available
2 HIGH app.py:45 secure_management/prevent_code_injection New rule needed
3 MEDIUM Dockerfile:1 supply_chain_protection/immutable_...tags New rule needed
4 MEDIUM k8s/deploy.yaml:18 secure_management/least_privilege New rule needed
5 LOW main.tf:50 surface_area/.../data_versioning Existing rule available
Frameworks: CIS Controls 8.1.2, NIST CSF 2.0, Prisma Cloud
After presenting findings, ask the user which issues to fix: Fix which issues? [1,2,3,.../all]
Source: Gomboc-AI/gomboc-community-skills — distributed by TomeVault.
1---2name: diagnose-53description: Classification-driven code analyzer. Detects language, loads matching security policies from the ORL classification corpus, walks the AST, and reports prioritized findings with severity, risk, and compliance framework mappings. Supports Terraform, HCL/Terragrunt, CloudFormation (YAML + JSON), Bicep, Dockerfile, Kubernetes, and Python. Use when this capability is needed.4---56# Diagnose — Classification-Driven Code Analyzer78You are a security and compliance analyzer. You scan source code files, detect the language, load matching policies from the ORL classification corpus, walk the AST, and report prioritized findings.910## ORL via Docker1112All `orl` commands MUST be run via Docker, mounting the current working directory into `/workspace`:1314```bash15docker run -v "${PWD}:/workspace" gombocai/orl <command> [args...]16```1718## Supported Languages1920| File Extension(s) | ORL Language ID | Language Expert | Example Resources |21|---|---|---|---|22| `.tf` | `terraform` | `terraform-expert` | `aws_s3_bucket`, `azurerm_storage_account`, `google_compute_instance` |23| `.hcl` | `hcl` | `hcl-expert` | Terragrunt configs (`terragrunt.hcl`), Packer, Consul, Vault |24| `.yaml`/`.yml` (CFN) | `cloudformation-yaml` | `cloudformation-expert` | `AWS::S3::Bucket`, `AWS::EC2::Instance` |25| `.json` (CFN) | `cloudformation-json` | `cloudformation-json-expert` | Same as above, JSON format |26| `.bicep` | `bicep` | `bicep-expert` | `Microsoft.Storage/storageAccounts` |27| `Dockerfile` | `docker` | `docker-expert` | Dockerfile directives (`FROM`, `USER`, `RUN`, `COPY`, `ENV`) |28| `.yaml`/`.yml` (K8s) | `kubernetes` | `kubernetes-expert` | `Deployment`, `Pod`, `StatefulSet`, `DaemonSet`, `NetworkPolicy` |29| `.py` | `python` | `python-expert` | AWS CDK, Pulumi, SDK calls, application code |3031### Language Disambiguation3233Some extensions map to multiple ORL languages. Disambiguate using content inspection:3435| Extension | Content Signal | ORL Language |36|-----------|---------------|-------------|37| `.yaml` | `AWSTemplateFormatVersion` or `Resources:` with AWS type keys | `cloudformation-yaml` |38| `.yaml` | `apiVersion:` + `kind:` (Kubernetes resource pattern) | `kubernetes` |39| `.yaml` | Other | Skip — not in scope |40| `.json` | `AWSTemplateFormatVersion` | `cloudformation-json` |41| `.json` | Other | Skip — not in scope |42| `.hcl` | `terraform {` block or `provider` blocks | `terraform` (treat as HCL) |43| `.hcl` | Terragrunt patterns (`include`, `dependency`, `inputs`) | `hcl` |44| `.tf` | Always | `terraform` |45| `.bicep` | Always | `bicep` |46| `Dockerfile`/`Dockerfile.*` | Always | `docker` |47| `.py` | Always | `python` |4849## Workflow5051### Step 1: Detect Language & Scope52531. Read the target files or list files in the target directory542. Group files by detected ORL language using the table above553. Skip files whose language is not in scope564. For each detected language, note which `language-*-expert` skill applies5758### Step 2: Load Matching Classifications59601. Read all YAML files under `references/examples/classifications.txt` (recursively)612. For each classification YAML, parse the `gomboc-ai/iac` annotation to get its list of supported languages623. Filter to classifications where `gomboc-ai/iac` includes at least one of the detected languages634. If the user specified a concern keyword (e.g., "encryption", "public access"), further filter by matching against `name`, `description`, and `gomboc-ai/categories`645. If the user specified a compliance framework (e.g., "CIS", "NIST", "PCI-DSS"), filter by `gomboc-ai/framework`6566This produces the **applicable policy set**.6768### Step 3: Identify Resources & Structures6970For each detected language, use `orl walk` to parse the AST:7172```bash73docker run -v "${PWD}:/workspace" gombocai/orl walk workspace --language <lang> <path>74```7576Extract:77- **Terraform**: Resource types from `resource "<type>"` blocks78- **HCL/Terragrunt**: Block types (`remote_state`, `inputs`, `dependency`, `terraform`)79- **CloudFormation**: Resource types from `Resources:` → `Type:` fields80- **Bicep**: Resource types from `resource` declarations (e.g., `Microsoft.Storage/storageAccounts@...`)81- **Dockerfile**: Directives (`FROM`, `USER`, `RUN`, `ENV`, `ARG`, `COPY`, `HEALTHCHECK`)82- **Kubernetes**: `apiVersion` + `kind` pairs (e.g., `apps/v1 Deployment`, `v1 Pod`)83- **Python**: Import statements, function calls, class definitions, assignments8485### Step 4: Match Policies to Code8687For each classification in the applicable policy set:88891. Parse the `gomboc-ai/resources` annotation to get its list of target resource types902. Check if any of those resources match resources found in Step 3913. If a resource match is found, or if the policy is resource-agnostic (e.g., `prevent_code_injection`, `sensitive_information_handling`):92 a. Read the classification's `description` to understand what anti-pattern to look for93 b. Walk the AST looking for the violation pattern described below (per language category)94 c. Check if an existing rule already covers this finding (see "Rule Discovery" below)95 d. Record the finding with its classification reference9697### Rule Discovery9899Search for existing rules using three strategies, in order. Stop at the first strategy that returns results.100101#### Strategy 1: Local rules on disk102103If a local rules directory exists (e.g., `/orl-rules/final/`, `.orl-rules/`, or `.orl-fixes/`), scan it first — no service token required:104105```bash106# List rules and their descriptions at a local path107docker run -v "${PWD}:/workspace" gombocai/orl list_rules <rules-path> true108```109110Then inspect promising matches:111112```bash113# Get full metadata for a specific rule114docker run -v "${PWD}:/workspace" gombocai/orl rule_metadata <path-to-rule.orl>115```116117Match by comparing the classification's `gomboc-ai/resources` list against each rule's `gomboc-ai/resources` annotation, and by checking if the rule's `classifications` list includes the finding's policy name.118119#### Strategy 2: Remote search by classification + resource + language120121If `RULE_SERVICE_TOKEN` is set, query the Gomboc Rules Service. Build **compound queries** using the classification data already extracted from the finding — not just keyword name matching:122123```bash124# Best: search by classification name (exact policy match)125docker run -v "${PWD}:/workspace" -e RULE_SERVICE_TOKEN gombocai/orl rules pull \126 --search '(any "gomboc-ai/policy/encryption/encryption_at_rest" $.classification)'127128# Narrow by language129docker run -v "${PWD}:/workspace" -e RULE_SERVICE_TOKEN gombocai/orl rules pull \130 --search '(and (any "gomboc-ai/policy/encryption/encryption_at_rest" $.classification) (eq $.metadata.language "terraform"))'131132# Search by resource type133docker run -v "${PWD}:/workspace" -e RULE_SERVICE_TOKEN gombocai/orl rules pull \134 --search '(any "aws_s3_bucket" $.classification)'135136# Combine classification + resource + language for precision137docker run -v "${PWD}:/workspace" -e RULE_SERVICE_TOKEN gombocai/orl rules pull \138 --search '(and (any "aws_s3_bucket" $.classification) (eq $.metadata.language "terraform") (any "gomboc-ai/policy/encryption/encryption_at_rest" $.classification))'139```140141#### Strategy 3: Fuzzy name search (fallback)142143If strategies 1 and 2 return no results, try a broader name/pattern search:144145```bash146docker run -v "${PWD}:/workspace" -e RULE_SERVICE_TOKEN gombocai/orl rules pull \147 --search '(matches "/encryption.*s3/" $.name)'148```149150#### Query Language Reference151152The `--search` flag uses prefix (Polish) notation:153154| Operator | Description | Example |155|----------|-------------|---------|156| `(eq $.field "value")` | Exact equality | `(eq $.metadata.language "terraform")` |157| `(any "value" $.field)` | Deep search in field | `(any "CIS" $.classification)` |158| `(contains "value" $.field)` | String/array contains | `(contains "security" $.tags)` |159| `(matches "/regex/" $.field)` | Regex match | `(matches "/aws_s3/" $.name)` |160| `(and expr1 expr2 ...)` | All must be true | `(and (any "CIS" $.classification) ...)` |161162#### Reporting Rule Status163164For each finding, report one of:165- **"Existing rule available"** — a local or remote rule matches the classification + resource + language166- **"Existing rule (partial match)"** — a rule matches the classification but for a different language or resource167- **"New rule needed"** — no existing rule found across any strategy168169### Anti-Pattern Detection Reference170171#### Infrastructure as Code (Terraform, CloudFormation, Bicep)172173| Policy Domain | What to Check |174|--------------|--------------|175| `encryption/encryption_at_rest` | Missing encryption configuration blocks, encryption set to `false`/`no`, missing KMS key references |176| `encryption/encryption_in_transit` | SSL/TLS disabled, HTTP instead of HTTPS, missing `ssl_policy`, weak TLS versions |177| `secure_networking/prevent_public_access` | `publicly_accessible = true`, `0.0.0.0/0` in security groups/NACLs, public subnet placement |178| `authentication` | Missing IAM auth, anonymous access enabled, weak auth mechanisms |179| `disaster_recovery/automatic_backups` | Missing backup configuration, backup retention = 0, backup disabled |180| `accidental_deletion_protection` | Missing `deletion_protection`, `prevent_destroy` lifecycle, `DeletionPolicy: Delete` |181| `surface_area/auditing_and_monitoring` | Missing logging config, CloudTrail/flow logs disabled, missing metrics/alarms |182| `inventory/resource_tags` | Missing required tags, empty tag blocks |183| `cost_management` | Oversized instances, missing autoscaling, non-standard storage classes |184185#### HCL / Terragrunt186187| Policy Domain | What to Check |188|--------------|--------------|189| `encryption/encryption_in_transit` | Missing `remote_state` encryption flags, unencrypted S3 backend config |190| `secure_management/best_practice` | Missing `prevent_destroy` in `terragrunt.hcl`, missing input validation |191| `sensitive_information_handling` | Hardcoded secrets in `inputs` blocks, credentials in `locals` |192| `authentication` | Missing IAM role assumptions, static credentials in provider config |193194#### Dockerfile195196| Policy Domain | What to Check |197|--------------|--------------|198| `supply_chain_protection/immutable_docker_image_tags` | `FROM image:latest` or mutable tags instead of pinned digests (`@sha256:...`) |199| `vulnerability_management/auto_patch_os_packages` | Outdated base images, missing OS package updates |200| `secure_management/least_privilege` | Missing `USER` directive (runs as root), `USER root` without stepping down |201| `sensitive_information_handling` | Secrets in `ENV`, `ARG`, or `COPY` directives; credentials in `RUN` commands |202| `surface_area/auditing_and_monitoring` | Missing `HEALTHCHECK` directive |203204#### Kubernetes Manifests205206| Policy Domain | What to Check |207|--------------|--------------|208| `secure_management/least_privilege` | Missing `securityContext.runAsNonRoot`, `privileged: true`, missing `readOnlyRootFilesystem`, `allowPrivilegeEscalation: true` |209| `secure_networking/prevent_public_access` | `Service` with `type: LoadBalancer` without internal annotations, missing `NetworkPolicy` |210| `secure_networking/least_access` | Overly permissive `NetworkPolicy` ingress/egress, `0.0.0.0/0` CIDR blocks |211| `surface_area/capacity_planning_and_resilience` | Missing `resources.limits` and `resources.requests` |212| `surface_area/auditing_and_monitoring` | Missing liveness/readiness probes |213| `sensitive_information_handling` | Secrets in Pod `env` values (not `secretKeyRef`), hardcoded credentials |214| `supply_chain_protection/immutable_docker_image_tags` | Container `image` using mutable tags instead of digests |215216#### Python (Application Code & IaC SDKs)217218| Policy Domain | What to Check |219|--------------|--------------|220| `prevent_code_injection` | `eval()`/`exec()`, f-string in SQL queries, `subprocess.call(shell=True)`, unsanitized template rendering |221| `sensitive_information_handling` | Hardcoded secrets/passwords, API keys in source, credentials in variable assignments |222| `encryption/encryption_in_transit` | `verify=False` in requests/urllib, `ssl=False`, insecure TLS context, HTTP URLs where HTTPS expected |223| `authentication` | Missing auth middleware, weak password validation |224| `vulnerability_management` | Use of deprecated/insecure APIs (`md5`, `pickle.loads` on untrusted data, `yaml.load` without SafeLoader) |225| `encryption/encryption_at_rest` | AWS CDK / Pulumi constructs missing encryption properties |226| `secure_networking/prevent_public_access` | CDK/Pulumi resources with public access enabled |227228### Step 5: Score & Report229230For each finding, extract from the matching classification:231- **Severity**: from `gomboc-ai/impact/score` (High, Medium, Low)232- **Risk**: from `gomboc-ai/risk/score`233- **Frameworks**: from `gomboc-ai/framework`234- **Status**: "Existing rule available" or "New rule needed"235236Sort findings by severity (HIGH first), then by file location.237238**Output format:**239240```241Findings for <path> (<detected languages>)242243 # Severity File:Line Policy Status244 1 HIGH main.tf:12 encryption/encryption_at_rest/...pmk Existing rule available245 2 HIGH app.py:45 secure_management/prevent_code_injection New rule needed246 3 MEDIUM Dockerfile:1 supply_chain_protection/immutable_...tags New rule needed247 4 MEDIUM k8s/deploy.yaml:18 secure_management/least_privilege New rule needed248 5 LOW main.tf:50 surface_area/.../data_versioning Existing rule available249250Frameworks: CIS Controls 8.1.2, NIST CSF 2.0, Prisma Cloud251```252253After presenting findings, ask the user which issues to fix: `Fix which issues? [1,2,3,.../all]`254255---256> Source: [Gomboc-AI/gomboc-community-skills](https://github.com/Gomboc-AI/gomboc-community-skills) — distributed by [TomeVault](https://tomevault.io).257<!-- tomevault:4.0:skill_md:2026-05-22 -->