{"data":{"skill":{"slug":"lambdasec-adaptive-classifier","name":"adaptive-classifier","icon":"📦","repo":"https://github.com/lambdasec/skills/tree/7d791206069498962a85a0f1ba95f7468dcf82f7/skills/adaptive-classifier","status":"approved","author":"lambdasec","authorVersion":null,"skillstoreRevision":1},"audit":{"id":"a8c4b8bd-6e15-467c-83fe-2b2538c61075","skill_id":"bd840bda-68fc-4c01-9e19-1378db8f2fb0","version":1,"content_hash":"v3:87c9669baf85385959f9b0a344dc9dfc8d978f9c:33c82f6d62ca9959b9817b56c225c8af24ee246a5f8850860d60f3de22588035:2e64ffb79e3b9908530fdd4313bc5dabbf57bc1d50161a2c34b753589a058b5d:736b696c6c732f6c616d6264617365632f61646170746976652d636c6173736966696572:7a0981272f282b5d9aef05feffdda293","risk_level":"safe","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"All 32 static findings are false positives: 31 match Markdown backticks, and one matches a documentation URL. No evidence found of prompt injection, credential access, or data exfiltration in the reviewed files. Model downloads require approval, remote model code stays disabled, and model-dependent examples were not executed during this audit.","remediation":[],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":7,"line_start":7},{"file":"SKILL.md","line_end":9,"line_start":9},{"file":"SKILL.md","line_end":28,"line_start":26},{"file":"SKILL.md","line_end":32,"line_start":28},{"file":"SKILL.md","line_end":34,"line_start":32},{"file":"SKILL.md","line_end":38,"line_start":34},{"file":"SKILL.md","line_end":45,"line_start":38},{"file":"SKILL.md","line_end":48,"line_start":45},{"file":"SKILL.md","line_end":48,"line_start":48},{"file":"SKILL.md","line_end":49,"line_start":49},{"file":"SKILL.md","line_end":50,"line_start":50},{"file":"SKILL.md","line_end":51,"line_start":51},{"file":"SKILL.md","line_end":59,"line_start":55},{"file":"SKILL.md","line_end":61,"line_start":59},{"file":"SKILL.md","line_end":63,"line_start":61},{"file":"SKILL.md","line_end":63,"line_start":63},{"file":"SKILL.md","line_end":69,"line_start":65},{"file":"SKILL.md","line_end":75,"line_start":69},{"file":"SKILL.md","line_end":81,"line_start":75},{"file":"SKILL.md","line_end":81,"line_start":81},{"file":"SKILL.md","line_end":91,"line_start":85},{"file":"SKILL.md","line_end":91,"line_start":91},{"file":"SKILL.md","line_end":101,"line_start":97},{"file":"SKILL.md","line_end":103,"line_start":101},{"file":"SKILL.md","line_end":103,"line_start":103},{"file":"SKILL.md","line_end":107,"line_start":107},{"file":"SKILL.md","line_end":114,"line_start":112},{"file":"SKILL.md","line_end":115,"line_start":114},{"file":"SKILL.md","line_end":118,"line_start":115},{"file":"SKILL.md","line_end":122,"line_start":118},{"file":"SKILL.md","line_end":122,"line_start":122}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":7,"line_start":7}]}],"critical_findings":[],"high_findings":[],"medium_findings":[],"low_findings":[],"dangerous_patterns":[],"files_scanned":2,"total_lines":170,"audit_model":"codex","audited_at":"2026-10-28T06:31:15.63+00:00","created_at":"2026-10-28T07:04:02.734178+00:00","static_findings":[{"id":"external_commands:SKILL.md:7:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Use this skill when the user wants a text classifier (https://github.com/codelion/adaptive-classifie","category":"external_commands","line_end":7,"severity":"medium","line_start":7},{"id":"external_commands:SKILL.md:9:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Ask before anything downloads model weights or datasets. Creating `AdaptiveClassifier(...)` with a m","category":"external_commands","line_end":9,"severity":"medium","line_start":9},{"id":"external_commands:SKILL.md:26:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":28,"severity":"medium","line_start":26},{"id":"external_commands:SKILL.md:28:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":32,"severity":"medium","line_start":28},{"id":"external_commands:SKILL.md:32:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":34,"severity":"medium","line_start":32},{"id":"external_commands:SKILL.md:34:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":38,"severity":"medium","line_start":34},{"id":"external_commands:SKILL.md:38:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```python","category":"external_commands","line_end":45,"severity":"medium","line_start":38},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":48,"severity":"medium","line_start":45},{"id":"external_commands:SKILL.md:48:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `add_examples` raises `ValueError` on empty lists or mismatched lengths. `predict` raises on empty","category":"external_commands","line_end":48,"severity":"medium","line_start":48},{"id":"external_commands:SKILL.md:49:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Encoder choice matters. The README says some models give poor embeddings for short inputs and sugg","category":"external_commands","line_end":49,"severity":"medium","line_start":49},{"id":"external_commands:SKILL.md:50:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Pooling: since 0.2.0 the default `pooling` is `auto` (the model's own sentence-transformers poolin","category":"external_commands","line_end":50,"severity":"medium","line_start":50},{"id":"external_commands:SKILL.md:51:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Config is a plain dict: `AdaptiveClassifier(name, config={...})`. Defaults checked: `prototype_wei","category":"external_commands","line_end":51,"severity":"medium","line_start":51},{"id":"external_commands:SKILL.md:55:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```python","category":"external_commands","line_end":59,"severity":"medium","line_start":55},{"id":"external_commands:SKILL.md:59:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":61,"severity":"medium","line_start":59},{"id":"external_commands:SKILL.md:61:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"A label that has not been seen creates a new class: the head is expanded and trained with attention ","category":"external_commands","line_end":63,"severity":"medium","line_start":61},{"id":"external_commands:SKILL.md:63:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"After any addition, re-run your held-out evaluation, because old classes can drift. Other tools: `cl","category":"external_commands","line_end":63,"severity":"medium","line_start":63},{"id":"external_commands:SKILL.md:65:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Order dependence: the README says example order can change predictions. For strict order independenc","category":"external_commands","line_end":69,"severity":"medium","line_start":65},{"id":"external_commands:SKILL.md:69:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```python","category":"external_commands","line_end":75,"severity":"medium","line_start":69},{"id":"external_commands:SKILL.md:75:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":81,"severity":"medium","line_start":75},{"id":"external_commands:SKILL.md:81:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Only for settings where users may rewrite text to game the classifier (spam, review scoring). Enable","category":"external_commands","line_end":81,"severity":"medium","line_start":81},{"id":"external_commands:SKILL.md:85:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"1. Split before training: stratified train / validation / test. Never evaluate on texts that were ad","category":"external_commands","line_end":91,"severity":"medium","line_start":85},{"id":"external_commands:SKILL.md:91:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"7. Compare `prototype_weight` / `neural_weight` and `pooling` settings on the validation split only,","category":"external_commands","line_end":91,"severity":"medium","line_start":91},{"id":"external_commands:SKILL.md:97:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```python","category":"external_commands","line_end":101,"severity":"medium","line_start":97},{"id":"external_commands:SKILL.md:101:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":103,"severity":"medium","line_start":101},{"id":"external_commands:SKILL.md:103:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`save(save_dir, include_onnx=True, quantize_onnx=True)`. Use `include_onnx=False` to skip the ONNX e","category":"external_commands","line_end":103,"severity":"medium","line_start":103},{"id":"external_commands:SKILL.md:107:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`use_onnx=\"auto\"` uses ONNX on CPU and PyTorch on GPU. The README claims 2-4x faster CPU inference w","category":"external_commands","line_end":107,"severity":"medium","line_start":107},{"id":"external_commands:SKILL.md:112:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Each `add_examples` call retrains the head, so many tiny calls cost more than one batch.","category":"external_commands","line_end":114,"severity":"medium","line_start":112},{"id":"external_commands:SKILL.md:114:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Per-class memory is capped by `max_examples_per_class` (1000), so old examples can be evicted.","category":"external_commands","line_end":115,"severity":"medium","line_start":114},{"id":"external_commands:SKILL.md:115:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Labels are plain strings. Inconsistent spelling makes accidental new classes: check `get_example_s","category":"external_commands","line_end":118,"severity":"medium","line_start":115},{"id":"external_commands:SKILL.md:118:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"A minimal complete example is in `references/minimal_example.md`.","category":"external_commands","line_end":122,"severity":"medium","line_start":118},{"id":"external_commands:SKILL.md:122:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Signatures, defaults and config keys above were checked with `inspect` and `ModelConfig` on version ","category":"external_commands","line_end":122,"severity":"medium","line_start":122},{"id":"network:SKILL.md:7:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"Use this skill when the user wants a text classifier (https://github.com/codelion/adaptive-classifie","category":"network","line_end":7,"severity":"low","line_start":7}],"finding_verdicts":[{"id":"external_commands:SKILL.md:7:ruby-shell-backtick-execution","reason":"Backticks format the push_to_hub API name in prose, not executable shell substitution. The instruction prohibits publishing without an explicit user request.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:9:ruby-shell-backtick-execution","reason":"Backticks identify Python constructor and loading APIs in Markdown. The surrounding instruction requires approval before downloading weights or datasets.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:26:ruby-shell-backtick-execution","reason":"This is a Markdown fence around a fixed Python command that prints the installed package version. It contains no shell backtick execution or interpolated input.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:28:ruby-shell-backtick-execution","reason":"The matched backticks close and open Markdown code blocks. The intervening prose prohibits automatic installation or fetching code.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:32:ruby-shell-backtick-execution","reason":"This Markdown block contains a fixed Python introspection command that prints a constructor signature. There is no user-controlled shell expression.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:34:ruby-shell-backtick-execution","reason":"The matched tokens are Markdown code fences separating introspection and quickstart examples. They are not shell command substitution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:38:ruby-shell-backtick-execution","reason":"The fenced Python example calls documented classifier APIs without shell execution. Its model constructor explicitly notes that downloads require approval.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","reason":"This match spans a closing Markdown fence and API documentation. The backticks are presentation syntax, not executable Ruby or shell code.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:48:ruby-shell-backtick-execution","reason":"Inline backticks mark API names and ValueError in an input-validation note. No command is executed by this prose.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:49:ruby-shell-backtick-execution","reason":"Backticks format encoder model identifiers in selection guidance. These identifiers are not shell commands, and downloads require approval elsewhere in the document.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:50:ruby-shell-backtick-execution","reason":"The matched text documents pooling configuration using inline Markdown code. It contains no process invocation or shell substitution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:51:ruby-shell-backtick-execution","reason":"Inline backticks describe constructor arguments and configuration defaults. The text explicitly directs users to leave trust_remote_code disabled.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:55:ruby-shell-backtick-execution","reason":"A Markdown Python fence contains local add_examples and statistics calls. The example has no shell execution or externally constructed command.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:59:ruby-shell-backtick-execution","reason":"This is a closing code fence followed by classifier behavior documentation. The matched backticks do not execute anything.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:61:ruby-shell-backtick-execution","reason":"Backticks identify the new-class threshold and local memory-management APIs in prose. The passage explains behavior and recommends reevaluation, without shell commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:63:ruby-shell-backtick-execution","reason":"The named clear_memory and merge_classifiers methods are documented as optional local operations. No automatic deletion or shell invocation is instructed.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:65:ruby-shell-backtick-execution","reason":"The inline configuration example adjusts classifier blending weights. Markdown formatting and the following Python fence are not command substitution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:69:ruby-shell-backtick-execution","reason":"This fenced Python example demonstrates multilabel classification through library methods. It does not invoke a shell, and model downloads remain subject to approval.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:75:ruby-shell-backtick-execution","reason":"The matched backticks close a Markdown example and introduce inline configuration documentation. No executable shell syntax is present.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:81:ruby-shell-backtick-execution","reason":"Inline code names defensive prediction and robustness evaluation APIs. The passage recommends testing benchmark claims, not executing shell commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:85:ruby-shell-backtick-execution","reason":"The backticks format add_examples and configuration names within evaluation guidance. The instructions prevent data leakage between training and evaluation splits.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:91:ruby-shell-backtick-execution","reason":"Inline Markdown names classifier weights and pooling settings. The sentence limits tuning to validation data and contains no shell execution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:97:ruby-shell-backtick-execution","reason":"This Markdown Python block saves and reloads a classifier at a fixed local directory. It contains no shell substitution or arbitrary command construction.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:101:ruby-shell-backtick-execution","reason":"The matched tokens close the persistence example and format API signatures in prose. They do not invoke Ruby or a shell.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:103:ruby-shell-backtick-execution","reason":"Backticks document save, load, and hub-loading signatures rather than shell commands. Hub downloads require approval and user-specified model names.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:107:ruby-shell-backtick-execution","reason":"Inline Markdown describes ONNX selection and quantization options. The passage recommends validating predictions and contains no shell execution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:112:ruby-shell-backtick-execution","reason":"Backticks mark the add_examples method and memory cap in performance limitations. This documentation does not execute commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:114:ruby-shell-backtick-execution","reason":"The backticks format memory configuration and statistics APIs. The surrounding warnings describe retention limits and label consistency, not shell operations.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:115:ruby-shell-backtick-execution","reason":"This match spans an inline statistics expression and a relative documentation reference. Neither is executable shell substitution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:118:ruby-shell-backtick-execution","reason":"Backticks format a relative example-document path and Python introspection names. The text links documentation and discloses verification limits.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:122:ruby-shell-backtick-execution","reason":"Inline Markdown names inspect and ModelConfig in a verification statement. It explicitly states model-dependent behavior was read from documentation, not executed.","verdict":"false_positive","confidence":1},{"id":"network:SKILL.md:7:hardcoded-url","reason":"The GitHub URL identifies the upstream adaptive-classifier project in prose. It is not an outbound request, upload endpoint, or instruction to transmit data.","verdict":"false_positive","confidence":0.99}],"semantic_findings":[],"subject_marketplace_commit_sha":"87c9669baf85385959f9b0a344dc9dfc8d978f9c","subject_content_hash":"33c82f6d62ca9959b9817b56c225c8af24ee246a5f8850860d60f3de22588035","subject_tree_hash":"2e64ffb79e3b9908530fdd4313bc5dabbf57bc1d50161a2c34b753589a058b5d","subject_plugin_path":"skills/lambdasec/adaptive-classifier","audit_payload_hash":"7a0981272f282b5d9aef05feffdda293","confirmed_risk_level":"safe","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"87c9669baf85385959f9b0a344dc9dfc8d978f9c","contentHash":"33c82f6d62ca9959b9817b56c225c8af24ee246a5f8850860d60f3de22588035","treeHash":"2e64ffb79e3b9908530fdd4313bc5dabbf57bc1d50161a2c34b753589a058b5d","pluginPath":"skills/lambdasec/adaptive-classifier","auditPayloadHash":"7a0981272f282b5d9aef05feffdda293"},"scannerVersion":"3.0.0","policyVersion":"skillstore-security-audit-policy-v1"},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"issued","url":"/api/skills/lambdasec-adaptive-classifier/audits/1/attestation","status":"active"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"safe","confirmedFindingCount":0,"capabilityReviewCount":0,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"active","verificationState":"not_verified"},"isLatest":true}}