{"data":{"skill":{"slug":"tahodev-calil-books","name":"calil-books","icon":"📦","repo":"https://github.com/tahodev/kurashi-skill/tree/09cb7f9eac85f0c85633cce08328a1a57854a94f/calil-books","status":"approved","author":"tahodev","authorVersion":null,"skillstoreRevision":1},"audit":{"id":"6f6203e3-f8f7-4b29-a1fd-f93bece1cb12","skill_id":"9e40406b-080f-4332-a5f1-af1e44da39cb","version":1,"content_hash":"v3:7f17813fb6af1acc7d8fd3fb5f05480f5be52783:1b692ed96d0be6f92ea116bc1d7c3135c99868de0320dd168bb5d0af07fa4cac:7931c15c1faea6bb7dffe6362160fe4c50b597faf9104caafb119d173187122c:736b696c6c732f7461686f6465762f63616c696c2d626f6f6b73:bcf0be75371d546df06e5f17fddc59f3","risk_level":"low","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"All 42 static findings are benign Markdown formatting, expected Calil URLs, readable Japanese prose, library identifiers, or a fixed documentation link. No evidence found of prompt injection, malicious execution, or unauthorized data transmission in SKILL.md. One low-severity semantic finding concerns API keys exposed through expanded curl command arguments.","remediation":[{"issue":"API keys expand into curl URL arguments and may become visible through process inspection or captured command logs.","severity":"low","suggestion":"Use an HTTP client that reads CALIL_APPKEY inside its process, rather than passing the key as a command argument. Redact appkey from logs."}],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":19,"line_start":19},{"file":"SKILL.md","line_end":25,"line_start":23},{"file":"SKILL.md","line_end":27,"line_start":25},{"file":"SKILL.md","line_end":27,"line_start":27},{"file":"SKILL.md","line_end":28,"line_start":28},{"file":"SKILL.md","line_end":29,"line_start":29},{"file":"SKILL.md","line_end":64,"line_start":62},{"file":"SKILL.md","line_end":66,"line_start":64},{"file":"SKILL.md","line_end":68,"line_start":66},{"file":"SKILL.md","line_end":68,"line_start":68},{"file":"SKILL.md","line_end":74,"line_start":72},{"file":"SKILL.md","line_end":76,"line_start":74},{"file":"SKILL.md","line_end":77,"line_start":76},{"file":"SKILL.md","line_end":81,"line_start":77},{"file":"SKILL.md","line_end":81,"line_start":81},{"file":"SKILL.md","line_end":85,"line_start":83},{"file":"SKILL.md","line_end":87,"line_start":85},{"file":"SKILL.md","line_end":87,"line_start":87},{"file":"SKILL.md","line_end":93,"line_start":91},{"file":"SKILL.md","line_end":94,"line_start":93},{"file":"SKILL.md","line_end":95,"line_start":94},{"file":"SKILL.md","line_end":95,"line_start":95},{"file":"SKILL.md","line_end":98,"line_start":96},{"file":"SKILL.md","line_end":110,"line_start":98},{"file":"SKILL.md","line_end":111,"line_start":110},{"file":"SKILL.md","line_end":112,"line_start":111},{"file":"SKILL.md","line_end":115,"line_start":112},{"file":"SKILL.md","line_end":119,"line_start":115}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":18,"line_start":18},{"file":"SKILL.md","line_end":24,"line_start":24},{"file":"SKILL.md","line_end":65,"line_start":65},{"file":"SKILL.md","line_end":73,"line_start":73},{"file":"SKILL.md","line_end":84,"line_start":84},{"file":"SKILL.md","line_end":102,"line_start":102},{"file":"SKILL.md","line_end":112,"line_start":112},{"file":"SKILL.md","line_end":114,"line_start":114},{"file":"SKILL.md","line_end":119,"line_start":119}]},{"factor":"filesystem","evidence":[{"file":"SKILL.md","line_end":108,"line_start":108}]}],"critical_findings":[],"high_findings":[],"medium_findings":[],"low_findings":[{"title":"API Key Exposure Through Command Arguments","locations":[{"file":"SKILL.md","line_end":24,"line_start":24},{"file":"SKILL.md","line_end":65,"line_start":65},{"file":"SKILL.md","line_end":73,"line_start":73},{"file":"SKILL.md","line_end":84,"line_start":84}],"confidence":0.96,"description":"The curl examples expand CALIL_APPKEY into URL arguments. The key can appear in process listings or captured command logs despite the guidance to keep credentials private.","review_kind":"security","source_category":"semantic","source_severity":"low","confidence_reasoning":"Shell expansion places the key directly in curl's URL argument. Actual disclosure depends on process visibility and logging; no evidence found of deliberate exfiltration."}],"dangerous_patterns":[],"files_scanned":1,"total_lines":120,"audit_model":"codex","audited_at":"2026-10-13T03:22:10.555+00:00","created_at":"2026-10-13T18:59:45.035502+00:00","static_findings":[{"id":"external_commands:SKILL.md:19:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"2. キーはチャットやコード、コミットに書かない。環境変数(例: `CALIL_APPKEY`)に入れて使う。","category":"external_commands","line_end":19,"severity":"medium","line_start":19},{"id":"external_commands:SKILL.md:23:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":25,"severity":"medium","line_start":23},{"id":"external_commands:SKILL.md:25:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":27,"severity":"medium","line_start":25},{"id":"external_commands:SKILL.md:27:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **`callback=no` を必ず付ける。** 付けないと `format=json` でも応答がJSONP(`callback(...)` でラップされた形式)で返り、カーリル自身が非推奨と","category":"external_commands","line_end":27,"severity":"medium","line_start":27},{"id":"external_commands:SKILL.md:28:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `pref`: 都道府県名。`city` で市区町村に絞れる。`geocode=経度,緯度` でも検索できる。","category":"external_commands","line_end":28,"severity":"medium","line_start":28},{"id":"external_commands:SKILL.md:29:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- レスポンスの `systemid` が蔵書照会で使う図書館システムのID。`libkey` は館の略名、`formal` は正式名称。","category":"external_commands","line_end":29,"severity":"medium","line_start":29},{"id":"external_commands:SKILL.md:62:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`systemid` はカンマ区切りで複数指定できるので、都立+23区をまとめて1回で照会できる。","category":"external_commands","line_end":64,"severity":"medium","line_start":62},{"id":"external_commands:SKILL.md:64:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":66,"severity":"medium","line_start":64},{"id":"external_commands:SKILL.md:66:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":68,"severity":"medium","line_start":66},{"id":"external_commands:SKILL.md:68:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"別地域のユーザーには、この表を当てはめず、図書館検索(`pref` / `city` / `geocode`)でその地域のsystemidを調べてから照会する。","category":"external_commands","line_end":68,"severity":"medium","line_start":68},{"id":"external_commands:SKILL.md:72:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":74,"severity":"medium","line_start":72},{"id":"external_commands:SKILL.md:74:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":76,"severity":"medium","line_start":74},{"id":"external_commands:SKILL.md:76:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `isbn`: 10桁または13桁。カンマ区切りで複数指定できる。","category":"external_commands","line_end":77,"severity":"medium","line_start":76},{"id":"external_commands:SKILL.md:77:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `systemid`: 図書館検索で得たID。カンマ区切りで複数指定できる。","category":"external_commands","line_end":81,"severity":"medium","line_start":77},{"id":"external_commands:SKILL.md:81:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"蔵書照会は非同期。初回レスポンスが `continue: 1` の場合、返ってきた `session` を付けて2秒以上あけて再取得する。","category":"external_commands","line_end":81,"severity":"medium","line_start":81},{"id":"external_commands:SKILL.md:83:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":85,"severity":"medium","line_start":83},{"id":"external_commands:SKILL.md:85:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":87,"severity":"medium","line_start":85},{"id":"external_commands:SKILL.md:87:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`continue: 0` になるまで繰り返す(数回で終わることが多い)。`session` 指定の再取得では `isbn` や `systemid` は付けない。","category":"external_commands","line_end":87,"severity":"medium","line_start":87},{"id":"external_commands:SKILL.md:91:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`books → ISBN → systemid → libkey` の順に、館ごとの状態が入る。","category":"external_commands","line_end":93,"severity":"medium","line_start":91},{"id":"external_commands:SKILL.md:93:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `貸出可`: いま借りられる","category":"external_commands","line_end":94,"severity":"medium","line_start":93},{"id":"external_commands:SKILL.md:94:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `蔵書なし`: その館にない","category":"external_commands","line_end":95,"severity":"medium","line_start":94},{"id":"external_commands:SKILL.md:95:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `貸出中` / `予約中` / `準備中` / `休館中`: いまは借りられない","category":"external_commands","line_end":95,"severity":"medium","line_start":95},{"id":"external_commands:SKILL.md:96:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- `蔵書あり`: 状況不明(館に問い合わせ)","category":"external_commands","line_end":98,"severity":"medium","line_start":96},{"id":"external_commands:SKILL.md:98:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"`reserveurl` に予約ページへのURLが入ることがある。","category":"external_commands","line_end":110,"severity":"medium","line_start":98},{"id":"external_commands:SKILL.md:110:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **タイムアウトを付ける**: `curl -sm 30` のように必ず制限時間を付ける。","category":"external_commands","line_end":111,"severity":"medium","line_start":110},{"id":"external_commands:SKILL.md:111:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **ポーリングの上限(重要)**: `continue: 1` が続く場合、**最大10回・合計2分程度**を上限にする。それを超えたら打ち切り、「図書館APIの照会が混み合っていて結果が返りませ","category":"external_commands","line_end":112,"severity":"medium","line_start":111},{"id":"external_commands:SKILL.md:112:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **APIキーのエラー**: キーが無効・未設定だと正常な結果が返らない。`CALIL_APPKEY` が設定されているか、キーが正しいかを確認し、「カーリルのAPIキーが無効な可能性があります。","category":"external_commands","line_end":115,"severity":"medium","line_start":112},{"id":"external_commands:SKILL.md:115:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- **`蔵書なし` や空の結果はエラーではない**: その館に本がない正常な結果として伝える。取得失敗と混同しない。","category":"external_commands","line_end":119,"severity":"medium","line_start":115},{"id":"network:SKILL.md:18:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"1. https://calil.jp/api/dashboard/ でカーリルのアカウントを作り、APIキーを発行する(無料)。","category":"network","line_end":18,"severity":"low","line_start":18},{"id":"network:SKILL.md:24:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"curl -s \"https://api.calil.jp/library?appkey=${CALIL_APPKEY}&pref=東京都&format=json&callback=no\"","category":"network","line_end":24,"severity":"low","line_start":24},{"id":"network:SKILL.md:65:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"curl -s \"https://api.calil.jp/check?appkey=${CALIL_APPKEY}&isbn=9784478025819&systemid=Tokyo_Pref,To","category":"network","line_end":65,"severity":"low","line_start":65},{"id":"network:SKILL.md:73:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"curl -s \"https://api.calil.jp/check?appkey=${CALIL_APPKEY}&isbn=9784478025819&systemid=Tokyo_Setagay","category":"network","line_end":73,"severity":"low","line_start":73},{"id":"network:SKILL.md:84:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"curl -s \"https://api.calil.jp/check?appkey=${CALIL_APPKEY}&session=SESSION_ID&format=json&callback=n","category":"network","line_end":84,"severity":"low","line_start":84},{"id":"network:SKILL.md:102:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"- APIキーは無料だが利用規約がある。商用利用や大量アクセスのルールはカーリルの案内 (https://calil.jp/doc/api.html) を確認する。","category":"network","line_end":102,"severity":"low","line_start":102},{"id":"network:SKILL.md:112:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"- **APIキーのエラー**: キーが無効・未設定だと正常な結果が返らない。`CALIL_APPKEY` が設定されているか、キーが正しいかを確認し、「カーリルのAPIキーが無効な可能性があります。","category":"network","line_end":112,"severity":"low","line_start":112},{"id":"network:SKILL.md:114:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"- **HTTP 5xx / タイムアウト**: 1〜2回だけ再試行。直らなければカーリル側の障害の可能性として、 https://calil.jp/ を直接確認するよう案内する。","category":"network","line_end":114,"severity":"low","line_start":114},{"id":"network:SKILL.md:119:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"Searches library holdings and loan availability across Japan via the Calil Library API. Requires a f","category":"network","line_end":119,"severity":"low","line_start":119},{"id":"filesystem:SKILL.md:108:path-traversal-sequence","file":"SKILL.md","pattern":"Path traversal sequence","snippet":"共通の取得時チェックリストは [共通レスポンス契約](../docs/response-contract.md) の「取得時の落とし穴チェックリスト」を参照。","category":"filesystem","line_end":108,"severity":"high","line_start":108},{"id":"blocker:SKILL.md:35:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"| systemid | 図書館システム |","category":"blocker","line_end":35,"severity":"low","line_start":35},{"id":"blocker:SKILL.md:91:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"`books → ISBN → systemid → libkey` の順に、館ごとの状態が入る。","category":"blocker","line_end":91,"severity":"low","line_start":91},{"id":"obfuscation:SKILL.md:27:heuristic-very-high-entropy-string-5-52-bits-lik","file":"SKILL.md","pattern":"[HEURISTIC] Very high entropy string (5.52 bits) - likely encoded/encrypted payload","snippet":" でラップされた形式)で返り、カーリル自身が非推奨と案内している(2026-09-12実測)。JSONPのままでは ","category":"obfuscation","line_end":27,"severity":"high","line_start":27},{"id":"obfuscation:SKILL.md:1:heuristic-high-file-entropy-7-01-bits-possible-b","file":"SKILL.md","pattern":"[HEURISTIC] High file entropy (7.01 bits) - possible binary/encrypted content","snippet":"File: SKILL.md","category":"obfuscation","line_end":1,"severity":"high","line_start":1}],"finding_verdicts":[{"id":"external_commands:SKILL.md:19:ruby-shell-backtick-execution","reason":"The backticks format CALIL_APPKEY as an environment variable name in Markdown. The passage instructs users to protect credentials, not execute backtick substitutions.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:23:ruby-shell-backtick-execution","reason":"These backticks open a Markdown bash fence containing a documented Calil library request. They are not shell command substitution or Ruby execution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:25:ruby-shell-backtick-execution","reason":"The triple backticks close a Markdown code fence; nearby backticks format JSON parameters. Neither occurrence executes commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:27:ruby-shell-backtick-execution","reason":"Inline backticks format callback=no, format=json, callback(...), and jq in explanatory prose. The passage requests plain JSON instead of JSONP and contains no executable backtick substitution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:28:ruby-shell-backtick-execution","reason":"The backticks label geographic search parameters in Markdown. There is no shell or Ruby execution in this parameter description.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:29:ruby-shell-backtick-execution","reason":"The backticks identify systemid, libkey, and formal response fields. These are library metadata names, not executable expressions.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:62:ruby-shell-backtick-execution","reason":"The inline backticks format systemid and the triple backticks introduce a bash example. The described comma-separated lookup is normal Calil API usage.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:64:ruby-shell-backtick-execution","reason":"The backticks delimit a Markdown example querying several library systems through the Calil API. There is no backtick command substitution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:66:ruby-shell-backtick-execution","reason":"The triple backticks close the curl example and nearby inline backticks label location filters. They are Markdown syntax, not shell execution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:68:ruby-shell-backtick-execution","reason":"The backticks format pref, city, and geocode as library search parameters. The instruction selects relevant regional libraries without executing code.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:72:ruby-shell-backtick-execution","reason":"Triple backticks delimit a documented ISBN availability request. They are Markdown fences, not Ruby or shell command substitution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:74:ruby-shell-backtick-execution","reason":"The code fence closes before prose describing ISBN lengths. These formatting delimiters do not execute commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:76:ruby-shell-backtick-execution","reason":"Inline backticks label isbn and systemid in parameter documentation. The passage explains supported identifiers without evaluating them.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:77:ruby-shell-backtick-execution","reason":"Backticks format systemid and asynchronous response fields in explanatory text. They contain no executable shell substitutions.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:81:ruby-shell-backtick-execution","reason":"The backticks format continue: 1 and session while explaining polling intervals. These response values are treated as data, not executed.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:83:ruby-shell-backtick-execution","reason":"The triple backticks delimit a Calil session polling example. No backtick execution appears in the enclosed curl command.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:85:ruby-shell-backtick-execution","reason":"The fence terminates the polling example and inline backticks label response parameters. These are presentation syntax rather than command substitution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:87:ruby-shell-backtick-execution","reason":"Inline backticks format the completion flag and parameter names. The passage describes API polling semantics without evaluating response content.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:91:ruby-shell-backtick-execution","reason":"The backticks format a nested response field path and borrowing status labels. These are explanatory data labels, not executable commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:93:ruby-shell-backtick-execution","reason":"Backticks surround Japanese labels for available books and absent holdings. These are Markdown-formatted status strings, not shell commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:94:ruby-shell-backtick-execution","reason":"The passage uses backticks to display Japanese library status values. No executable context or command substitution is present.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:95:ruby-shell-backtick-execution","reason":"Backticks highlight statuses for checked-out, reserved, preparing, and closed libraries. These are API response labels, not executable expressions.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:96:ruby-shell-backtick-execution","reason":"The backticks format a holdings status and the reserveurl response field. The prose describes uncertain availability and optional reservation links without executing either.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:98:ruby-shell-backtick-execution","reason":"Inline backticks mark reserveurl and a later curl timeout example. The text describes normal response handling and timeout protection, not backtick execution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:110:ruby-shell-backtick-execution","reason":"Backticks format curl -sm 30 and the continue flag in safety guidance. The text requires request timeouts and bounded polling rather than executing substitutions.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:111:ruby-shell-backtick-execution","reason":"Inline backticks identify the polling flag and environment variable. The passage caps retries and diagnoses missing keys without backtick execution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:112:ruby-shell-backtick-execution","reason":"Backticks format CALIL_APPKEY and a normal absent-holdings status in error guidance. They are not executable syntax, and the text does not request credential disclosure.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:115:ruby-shell-backtick-execution","reason":"Backticks highlight an absent-holdings label and the session field in the English summary. Both are documentation formatting rather than shell or Ruby execution.","verdict":"false_positive","confidence":1},{"id":"network:SKILL.md:18:hardcoded-url","reason":"The URL points to the Calil API dashboard for the required account and key setup. It is a relevant service link, not an exfiltration destination.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:24:hardcoded-url","reason":"The HTTPS URL targets Calil's library endpoint with documented authentication and regional filters. Its destination matches the stated task; local credential exposure is assessed separately.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:65:hardcoded-url","reason":"The HTTPS Calil check endpoint receives a sample ISBN and named library systems for an intended availability lookup. Credential argument handling is assessed separately.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:73:hardcoded-url","reason":"This URL performs the declared ISBN lookup against a specified library system on Calil. The destination is expected; credential exposure through arguments is assessed separately.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:84:hardcoded-url","reason":"The Calil check URL polls the documented session using HTTPS and requests plain JSON. It does not forward data elsewhere; credential argument handling is assessed separately.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:102:hardcoded-url","reason":"The URL links to Calil API documentation for commercial use and request-volume rules. No data transmission or executable download is requested.","verdict":"false_positive","confidence":1},{"id":"network:SKILL.md:112:hardcoded-url","reason":"The Calil dashboard link directs users to check invalid or missing API keys. The passage does not send credentials to another party.","verdict":"false_positive","confidence":1},{"id":"network:SKILL.md:114:hardcoded-url","reason":"The Calil homepage is a relevant fallback link after server failures or timeouts. It is not an exfiltration endpoint or an instruction to download executable content.","verdict":"false_positive","confidence":1},{"id":"network:SKILL.md:119:hardcoded-url","reason":"The English summary repeats the expected Calil key-registration link. It explicitly recommends protecting the key and limits polling and caching.","verdict":"false_positive","confidence":1},{"id":"filesystem:SKILL.md:108:path-traversal-sequence","reason":"The parent-directory sequence is a fixed Markdown documentation link, not an input-controlled filesystem operation. Its target is absent from this package, but no sensitive-file access is requested.","verdict":"false_positive","confidence":0.98},{"id":"blocker:SKILL.md:35:system-reconnaissance","reason":"systemid is a table heading for public library system identifiers. The table contains no host, operating system, or local environment reconnaissance.","verdict":"false_positive","confidence":1},{"id":"blocker:SKILL.md:91:system-reconnaissance","reason":"systemid appears in the documented books response hierarchy. It identifies a library network and does not inspect the execution environment.","verdict":"false_positive","confidence":1},{"id":"obfuscation:SKILL.md:27:heuristic-very-high-entropy-string-5-52-bits-lik","reason":"The flagged string is readable Japanese prose explaining JSONP and JSON parsing. Mixed-language characters and formatting are not an encoded payload.","verdict":"false_positive","confidence":1},{"id":"obfuscation:SKILL.md:1:heuristic-high-file-entropy-7-01-bits-possible-b","reason":"The complete file is readable YAML front matter and Japanese Markdown with transparent API examples. No evidence found of binary content, encrypted payloads, or decoding instructions.","verdict":"false_positive","confidence":0.99}],"semantic_findings":[{"title":"API Key Exposure Through Command Arguments","severity":"low","locations":[{"file":"SKILL.md","line_end":24,"line_start":24},{"file":"SKILL.md","line_end":65,"line_start":65},{"file":"SKILL.md","line_end":73,"line_start":73},{"file":"SKILL.md","line_end":84,"line_start":84}],"confidence":0.96,"description":"The curl examples expand CALIL_APPKEY into URL arguments. The key can appear in process listings or captured command logs despite the guidance to keep credentials private.","confidence_reasoning":"Shell expansion places the key directly in curl's URL argument. Actual disclosure depends on process visibility and logging; no evidence found of deliberate exfiltration."}],"subject_marketplace_commit_sha":"7f17813fb6af1acc7d8fd3fb5f05480f5be52783","subject_content_hash":"1b692ed96d0be6f92ea116bc1d7c3135c99868de0320dd168bb5d0af07fa4cac","subject_tree_hash":"7931c15c1faea6bb7dffe6362160fe4c50b597faf9104caafb119d173187122c","subject_plugin_path":"skills/tahodev/calil-books","audit_payload_hash":"bcf0be75371d546df06e5f17fddc59f3","confirmed_risk_level":"low","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"7f17813fb6af1acc7d8fd3fb5f05480f5be52783","contentHash":"1b692ed96d0be6f92ea116bc1d7c3135c99868de0320dd168bb5d0af07fa4cac","treeHash":"7931c15c1faea6bb7dffe6362160fe4c50b597faf9104caafb119d173187122c","pluginPath":"skills/tahodev/calil-books","auditPayloadHash":"bcf0be75371d546df06e5f17fddc59f3"},"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/tahodev-calil-books/audits/1/attestation","status":"active"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"low","confirmedFindingCount":1,"capabilityReviewCount":0,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"active","verificationState":"not_verified"},"isLatest":true}}