{"data":{"skill":{"slug":"tencentcloudbase-cloudbase-agent","name":"cloudbase-agent","icon":"📦","repo":"https://github.com/tencentcloudbase/skills/tree/main/skills/cloudbase-agent","status":"approved","author":"tencentcloudbase","authorVersion":"2.23.8","skillstoreRevision":1},"audit":{"id":"2fef85c1-3af6-44b8-8197-5fba8c10a737","skill_id":"1a330caa-2c05-4012-8b6f-3c18e89e9285","version":2,"content_hash":"v3:24b2fe42a456262f3fd0fb3df72e12d9ed2c32ec:d5b1f6e5cd428a3293a8d36d436f5d975430db2b10b1d0ccbfd2e5c1d7e6bbb7:3b702681b881330c08a816ae0cc088d053c21a3ab6a7e5bd56ed8fe286a85848:736b696c6c732f74656e63656e74636c6f7564626173652f636c6f7564626173652d6167656e74:bc3453eceb8e6d67ed5de2e24111953e","risk_level":"high","is_blocked":false,"safe_to_publish":false,"analysis_status":"ok","agent_auto_install_policy":"confirmation_required","manual_install_policy":"allowed","summary":"Most static hits are documentation examples or markdown syntax, including placeholder secrets, local URLs, dotenv usage, and inline code. Confirmed risks remain in authentication examples, unverified JWT decoding, public interface binds, shell-based deployment steps, and wildcard CORS guidance.","remediation":[{"issue":"Authentication examples can continue after missing or invalid credentials.","severity":"high","suggestion":"Reject missing or invalid tokens, remove anonymous fallbacks, and keep development-only examples clearly separated from production code."},{"issue":"TypeScript examples trust decoded JWT payloads for tenant isolation.","severity":"high","suggestion":"Verify JWT signatures or use CloudBase-authenticated identity before using sub as a storage partition key."},{"issue":"Agent server examples use wildcard CORS and public interface binds.","severity":"medium","suggestion":"Document production origin allowlists, required authentication, and network restrictions for services listening on 0.0.0.0."},{"issue":"Deployment guides include shell scripts and destructive env rebuild commands.","severity":"medium","suggestion":"Require explicit user confirmation before running shell scripts, and warn users to run them only from the intended project root."},{"issue":"Sample secrets and API keys can look deployable.","severity":"low","suggestion":"Use clearly invalid placeholders and require generated JWT secrets with at least 32 characters."}],"risk_factor_evidence":[{"factor":"network","evidence":[{"file":"py/adapter-coze.md","line_end":58,"line_start":58},{"file":"py/adapter-coze.md","line_end":125,"line_start":125},{"file":"py/adapter-coze.md","line_end":136,"line_start":136},{"file":"py/adapter-coze.md","line_end":282,"line_start":282},{"file":"py/adapter-langgraph.md","line_end":235,"line_start":235},{"file":"py/adapter-langgraph.md","line_end":295,"line_start":295},{"file":"py/agent-deployment.md","line_end":314,"line_start":314},{"file":"py/authentication.md","line_end":431,"line_start":431},{"file":"py/authentication.md","line_end":456,"line_start":456},{"file":"py/authentication.md","line_end":468,"line_start":468},{"file":"py/references/observability.md","line_end":312,"line_start":312},{"file":"py/references/observability.md","line_end":360,"line_start":360},{"file":"py/references/observability.md","line_end":364,"line_start":364},{"file":"py/references/observability.md","line_end":134,"line_start":134},{"file":"py/references/observability.md","line_end":233,"line_start":233},{"file":"py/references/observability.md","line_end":301,"line_start":301},{"file":"py/references/observability.md","line_end":328,"line_start":328},{"file":"py/references/recipes.md","line_end":300,"line_start":300},{"file":"py/references/recipes.md","line_end":32,"line_start":32},{"file":"py/references/server.md","line_end":36,"line_start":36},{"file":"py/references/tools.md","line_end":55,"line_start":55},{"file":"py/references/tools.md","line_end":87,"line_start":87},{"file":"py/server-quickstart.md","line_end":291,"line_start":291},{"file":"py/server-quickstart.md","line_end":304,"line_start":304},{"file":"py/server-quickstart.md","line_end":321,"line_start":321},{"file":"py/server-quickstart.md","line_end":338,"line_start":338},{"file":"py/server-quickstart.md","line_end":397,"line_start":397},{"file":"py/server-quickstart.md","line_end":430,"line_start":430},{"file":"py/server-quickstart.md","line_end":277,"line_start":277},{"file":"py/server-quickstart.md","line_end":447,"line_start":447},{"file":"py/skill.md","line_end":111,"line_start":111},{"file":"SKILL.md","line_end":14,"line_start":14},{"file":"SKILL.md","line_end":15,"line_start":15},{"file":"ts/server-quickstart.md","line_end":82,"line_start":82},{"file":"ts/server-quickstart.md","line_end":128,"line_start":128},{"file":"ts/server-quickstart.md","line_end":138,"line_start":138},{"file":"ts/ui-clients.md","line_end":16,"line_start":16}]},{"factor":"env_access","evidence":[{"file":"py/adapter-coze.md","line_end":134,"line_start":134},{"file":"py/adapter-coze.md","line_end":135,"line_start":135},{"file":"py/adapter-coze.md","line_end":136,"line_start":136},{"file":"py/adapter-coze.md","line_end":213,"line_start":213},{"file":"py/adapter-coze.md","line_end":267,"line_start":267},{"file":"py/adapter-coze.md","line_end":268,"line_start":268},{"file":"py/adapter-coze.md","line_end":269,"line_start":269},{"file":"py/adapter-coze.md","line_end":281,"line_start":281},{"file":"py/adapter-coze.md","line_end":134,"line_start":134},{"file":"py/adapter-coze.md","line_end":135,"line_start":135},{"file":"py/adapter-coze.md","line_end":136,"line_start":136},{"file":"py/adapter-coze.md","line_end":213,"line_start":213},{"file":"py/adapter-coze.md","line_end":267,"line_start":267},{"file":"py/adapter-coze.md","line_end":268,"line_start":268},{"file":"py/adapter-coze.md","line_end":269,"line_start":269},{"file":"py/adapter-coze.md","line_end":281,"line_start":281},{"file":"py/adapter-coze.md","line_end":30,"line_start":30},{"file":"py/adapter-coze.md","line_end":43,"line_start":43},{"file":"py/adapter-coze.md","line_end":57,"line_start":57},{"file":"py/adapter-coze.md","line_end":97,"line_start":97},{"file":"py/adapter-coze.md","line_end":124,"line_start":124},{"file":"py/adapter-coze.md","line_end":135,"line_start":135},{"file":"py/adapter-coze.md","line_end":149,"line_start":149},{"file":"py/adapter-coze.md","line_end":161,"line_start":161},{"file":"py/adapter-coze.md","line_end":213,"line_start":213},{"file":"py/adapter-coze.md","line_end":268,"line_start":268},{"file":"py/adapter-coze.md","line_end":292,"line_start":292},{"file":"py/adapter-coze.md","line_end":293,"line_start":293},{"file":"py/adapter-coze.md","line_end":319,"line_start":319},{"file":"py/adapter-coze.md","line_end":320,"line_start":320},{"file":"py/adapter-coze.md","line_end":337,"line_start":337},{"file":"py/adapter-coze.md","line_end":338,"line_start":338},{"file":"py/adapter-coze.md","line_end":356,"line_start":356},{"file":"py/adapter-development.md","line_end":117,"line_start":117},{"file":"py/adapter-development.md","line_end":118,"line_start":118},{"file":"py/adapter-langgraph.md","line_end":556,"line_start":556},{"file":"py/adapter-langgraph.md","line_end":557,"line_start":557},{"file":"py/adapter-langgraph.md","line_end":558,"line_start":558},{"file":"py/adapter-langgraph.md","line_end":556,"line_start":556},{"file":"py/adapter-langgraph.md","line_end":557,"line_start":557},{"file":"py/adapter-langgraph.md","line_end":558,"line_start":558},{"file":"py/adapter-langgraph.md","line_end":550,"line_start":550},{"file":"py/adapter-langgraph.md","line_end":551,"line_start":551},{"file":"py/adapter-langgraph.md","line_end":550,"line_start":550},{"file":"py/adapter-langgraph.md","line_end":551,"line_start":551},{"file":"py/adapter-langgraph.md","line_end":545,"line_start":545},{"file":"py/adapter-langgraph.md","line_end":557,"line_start":557},{"file":"py/agent-deployment.md","line_end":313,"line_start":313},{"file":"py/agent-deployment.md","line_end":387,"line_start":387},{"file":"py/authentication.md","line_end":319,"line_start":319}]},{"factor":"external_commands","evidence":[{"file":"py/agent-deployment.md","line_end":92,"line_start":92},{"file":"py/agent-deployment.md","line_end":104,"line_start":104},{"file":"py/agent-deployment.md","line_end":89,"line_start":89},{"file":"py/agent-deployment.md","line_end":322,"line_start":322},{"file":"py/agent-deployment.md","line_end":377,"line_start":377},{"file":"py/skill.md","line_end":26,"line_start":26},{"file":"py/skill.md","line_end":27,"line_start":27},{"file":"py/skill.md","line_end":28,"line_start":28},{"file":"py/skill.md","line_end":29,"line_start":29},{"file":"py/skill.md","line_end":46,"line_start":46},{"file":"py/skill.md","line_end":60,"line_start":60},{"file":"py/skill.md","line_end":61,"line_start":61},{"file":"py/skill.md","line_end":62,"line_start":62},{"file":"py/skill.md","line_end":63,"line_start":63},{"file":"py/skill.md","line_end":87,"line_start":78},{"file":"py/skill.md","line_end":91,"line_start":87},{"file":"py/skill.md","line_end":112,"line_start":91},{"file":"py/skill.md","line_end":122,"line_start":112},{"file":"py/skill.md","line_end":142,"line_start":122},{"file":"py/skill.md","line_end":146,"line_start":142},{"file":"py/skill.md","line_end":146,"line_start":146},{"file":"py/skill.md","line_end":161,"line_start":148},{"file":"py/skill.md","line_end":163,"line_start":161},{"file":"py/skill.md","line_end":164,"line_start":163},{"file":"py/skill.md","line_end":169,"line_start":164},{"file":"py/skill.md","line_end":179,"line_start":169},{"file":"py/skill.md","line_end":181,"line_start":179},{"file":"py/skill.md","line_end":182,"line_start":181},{"file":"py/skill.md","line_end":183,"line_start":182},{"file":"py/skill.md","line_end":184,"line_start":183},{"file":"py/skill.md","line_end":188,"line_start":184},{"file":"py/skill.md","line_end":213,"line_start":188},{"file":"py/skill.md","line_end":217,"line_start":213},{"file":"py/skill.md","line_end":227,"line_start":217},{"file":"py/skill.md","line_end":233,"line_start":227},{"file":"py/skill.md","line_end":234,"line_start":233},{"file":"py/skill.md","line_end":234,"line_start":234},{"file":"py/skill.md","line_end":235,"line_start":235},{"file":"py/skill.md","line_end":236,"line_start":236},{"file":"py/skill.md","line_end":242,"line_start":237},{"file":"py/skill.md","line_end":243,"line_start":242},{"file":"py/skill.md","line_end":244,"line_start":243},{"file":"py/skill.md","line_end":244,"line_start":244},{"file":"py/skill.md","line_end":246,"line_start":245},{"file":"SKILL.md","line_end":12,"line_start":12},{"file":"SKILL.md","line_end":14,"line_start":14},{"file":"SKILL.md","line_end":15,"line_start":15},{"file":"SKILL.md","line_end":17,"line_start":17},{"file":"ts/agent-deployment.md","line_end":74,"line_start":74},{"file":"ts/agent-deployment.md","line_end":84,"line_start":84}]},{"factor":"filesystem","evidence":[{"file":"py/agent-deployment.md","line_end":46,"line_start":46},{"file":"py/agent-deployment.md","line_end":96,"line_start":96},{"file":"py/agent-deployment.md","line_end":215,"line_start":215},{"file":"py/agent-deployment.md","line_end":215,"line_start":215}]},{"factor":"scripts","evidence":[{"file":"py/references/observability.md","line_end":61,"line_start":56},{"file":"py/references/recipes.md","line_end":240,"line_start":240},{"file":"py/references/recipes.md","line_end":246,"line_start":246},{"file":"py/server-quickstart.md","line_end":22,"line_start":17},{"file":"py/server-quickstart.md","line_end":179,"line_start":171}]}],"critical_findings":[],"high_findings":[{"title":"Python getenv function","locations":[{"file":"py/adapter-coze.md","line_end":213,"line_start":213}],"confidence":0.88,"description":"JWT_SECRET = os.getenv(\"JWT_SECRET_KEY\", \"dev-secret\")","review_kind":"capability","source_category":"env_access","source_severity":"low","confidence_reasoning":"The example falls back to JWT_SECRET_KEY=\"dev-secret\", which can create forgeable JWTs if copied into production. This is a real authentication weakness, not just configuration access."},{"title":"getenv function call","locations":[{"file":"py/adapter-coze.md","line_end":213,"line_start":213}],"confidence":0.88,"description":"JWT_SECRET = os.getenv(\"JWT_SECRET_KEY\", \"dev-secret\")","review_kind":"capability","source_category":"env_access","source_severity":"low","confidence_reasoning":"The getenv call supplies a hardcoded dev-secret fallback for JWT signing. A missing environment variable would silently weaken authentication."},{"title":"Generic API/secret keys","locations":[{"file":"py/adapter-coze.md","line_end":213,"line_start":213}],"confidence":0.9,"description":"JWT_SECRET = os.getenv(\"JWT_SECRET_KEY\", \"dev-secret\")","review_kind":"capability","source_category":"env_access","source_severity":"high","confidence_reasoning":"JWT_SECRET falls back to a predictable value named dev-secret. This creates a credible credential weakness when reused beyond local development."},{"title":"System reconnaissance","locations":[{"file":"py/adapter-coze.md","line_end":221,"line_start":221}],"confidence":0.86,"description":"logger.warning(\"Missing or invalid Authorization header\")","review_kind":"security","source_category":"blocker","source_severity":"low","confidence_reasoning":"The middleware logs a missing or invalid Authorization header and then continues as an anonymous user. That behavior can bypass authentication for protected agent actions."},{"title":"System reconnaissance","locations":[{"file":"py/authentication.md","line_end":79,"line_start":79}],"confidence":0.84,"description":"# Handle invalid token (log but don't block in this example)","review_kind":"security","source_category":"blocker","source_severity":"low","confidence_reasoning":"The basic JWT example explicitly handles an invalid token by logging rather than blocking. The request then continues to the agent, which is an authentication bypass if reused."},{"title":"System reconnaissance","locations":[{"file":"py/authentication.md","line_end":80,"line_start":80}],"confidence":0.83,"description":"print(f\"Invalid JWT token: {e}\")","review_kind":"security","source_category":"blocker","source_severity":"low","confidence_reasoning":"The invalid token branch only prints the error in the basic middleware example. Because execution continues afterward, this is a real unsafe pattern."},{"title":"System reconnaissance","locations":[{"file":"py/authentication.md","line_end":82,"line_start":82}],"confidence":0.82,"description":"# raise InvalidRequestError(message=\"Invalid authentication token\")","review_kind":"security","source_category":"blocker","source_severity":"low","confidence_reasoning":"The blocking exception is commented out in the basic authentication example. That makes the shown code continue after invalid authentication."},{"title":"Base64 decode","locations":[{"file":"ts/adapter-langchain.md","line_end":58,"line_start":58}],"confidence":0.9,"description":"const payload = JSON.parse(atob(token.split(\".\")[1]));","review_kind":"security","source_category":"obfuscation","source_severity":"medium","confidence_reasoning":"The code decodes a JWT payload with atob and uses the sub claim for tenant isolation without signature verification. This can let a caller spoof user identity."},{"title":"Base64 decode","locations":[{"file":"ts/adapter-langgraph.md","line_end":64,"line_start":64}],"confidence":0.9,"description":"const payload = JSON.parse(atob(token.split(\".\")[1]));","review_kind":"security","source_category":"obfuscation","source_severity":"medium","confidence_reasoning":"The code decodes a JWT payload with atob and uses the sub claim for tenant isolation without signature verification. This can let a caller spoof user identity."},{"title":"Authentication Fallback Allows Anonymous Requests","locations":[{"file":"py/adapter-coze.md","line_end":228,"line_start":213}],"confidence":0.91,"description":"The Coze middleware uses a dev-secret fallback and continues requests as user anonymous when the Authorization header is missing or invalid. This can turn a protected agent endpoint into an unauthenticated endpoint if copied into production.","review_kind":"security","source_category":"semantic","source_severity":"high","confidence_reasoning":"The cited example directly sets a predictable JWT secret fallback and yields after assigning an anonymous user on missing authentication."},{"title":"Invalid JWT Example Continues Execution","locations":[{"file":"py/authentication.md","line_end":84,"line_start":78}],"confidence":0.86,"description":"The basic authentication middleware logs InvalidTokenError and then yields to the agent instead of blocking the request. Later secure guidance exists, but this initial example is unsafe if reused.","review_kind":"security","source_category":"semantic","source_severity":"high","confidence_reasoning":"The code catches InvalidTokenError, prints the error, leaves the blocking exception commented out, and reaches the yield statement."},{"title":"Unverified JWT Payload Used for Tenant Isolation","locations":[{"file":"ts/adapter-langchain.md","line_end":64,"line_start":56},{"file":"ts/adapter-langgraph.md","line_end":69,"line_start":62}],"confidence":0.9,"description":"TypeScript adapter examples parse the JWT body with atob and use payload.sub for CloudBaseSaver userId. The signature is not verified before using that value for tenant isolation.","review_kind":"security","source_category":"semantic","source_severity":"high","confidence_reasoning":"Both examples decode the JWT payload client-side and trust sub for storage isolation without a verification step."}],"medium_findings":[{"title":"Hardcoded IP address","locations":[{"file":"py/adapter-coze.md","line_end":282,"line_start":282}],"confidence":0.7,"description":"host=\"0.0.0.0\"","review_kind":"capability","source_category":"network","source_severity":"medium","confidence_reasoning":"The example binds an agent service to 0.0.0.0, which exposes it on all interfaces when run directly. This is common for deployment but needs authentication and network controls."},{"title":"Shell command substitution","locations":[{"file":"py/agent-deployment.md","line_end":92,"line_start":92}],"confidence":0.68,"description":"PROJECT_DIR=\"$(pwd)\"","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The deployment guide contains shell script templates that a coding agent may execute during packaging or startup setup. The commands are legitimate but still create real local execution risk."},{"title":"Shell command substitution","locations":[{"file":"py/agent-deployment.md","line_end":104,"line_start":104}],"confidence":0.68,"description":"echo \"✅ Using: $PYTHON_BIN ($($PYTHON_BIN --version 2>&1))\"","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The deployment guide contains shell script templates that a coding agent may execute during packaging or startup setup. The commands are legitimate but still create real local execution risk."},{"title":"Unix shell invocation","locations":[{"file":"py/agent-deployment.md","line_end":89,"line_start":89}],"confidence":0.68,"description":"#!/bin/bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The deployment guide contains shell script templates that a coding agent may execute during packaging or startup setup. The commands are legitimate but still create real local execution risk."},{"title":"Unix shell invocation","locations":[{"file":"py/agent-deployment.md","line_end":322,"line_start":322}],"confidence":0.68,"description":"#!/bin/bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The deployment guide contains shell script templates that a coding agent may execute during packaging or startup setup. The commands are legitimate but still create real local execution risk."},{"title":"Unix shell invocation","locations":[{"file":"py/agent-deployment.md","line_end":377,"line_start":377}],"confidence":0.68,"description":"#!/bin/bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The deployment guide contains shell script templates that a coding agent may execute during packaging or startup setup. The commands are legitimate but still create real local execution risk."},{"title":"Hardcoded IP address","locations":[{"file":"py/agent-deployment.md","line_end":314,"line_start":314}],"confidence":0.7,"description":"AgentServiceApp().run(create_agent, port=port, host=\"0.0.0.0\")","review_kind":"capability","source_category":"network","source_severity":"medium","confidence_reasoning":"The example binds an agent service to 0.0.0.0, which exposes it on all interfaces when run directly. This is common for deployment but needs authentication and network controls."},{"title":"Hardcoded IP address","locations":[{"file":"py/references/recipes.md","line_end":32,"line_start":32}],"confidence":0.7,"description":"server.run(host=\"0.0.0.0\", port=9000)","review_kind":"capability","source_category":"network","source_severity":"medium","confidence_reasoning":"The example binds an agent service to 0.0.0.0, which exposes it on all interfaces when run directly. This is common for deployment but needs authentication and network controls."},{"title":"Hardcoded IP address","locations":[{"file":"py/references/server.md","line_end":36,"line_start":36}],"confidence":0.7,"description":"uvicorn.run(fastapi_app, host=\"0.0.0.0\", port=9000)","review_kind":"capability","source_category":"network","source_severity":"medium","confidence_reasoning":"The example binds an agent service to 0.0.0.0, which exposes it on all interfaces when run directly. This is common for deployment but needs authentication and network controls."},{"title":"Hardcoded IP address","locations":[{"file":"py/server-quickstart.md","line_end":277,"line_start":277}],"confidence":0.7,"description":"uvicorn.run(app, host=\"0.0.0.0\", port=9000)","review_kind":"capability","source_category":"network","source_severity":"medium","confidence_reasoning":"The example binds an agent service to 0.0.0.0, which exposes it on all interfaces when run directly. This is common for deployment but needs authentication and network controls."},{"title":"Hardcoded IP address","locations":[{"file":"py/server-quickstart.md","line_end":447,"line_start":447}],"confidence":0.7,"description":"--bind 0.0.0.0:9000","review_kind":"capability","source_category":"network","source_severity":"medium","confidence_reasoning":"The example binds an agent service to 0.0.0.0, which exposes it on all interfaces when run directly. This is common for deployment but needs authentication and network controls."},{"title":"Hardcoded IP address","locations":[{"file":"py/skill.md","line_end":111,"line_start":111}],"confidence":0.7,"description":"app.run(create_agent, port=port, host=\"0.0.0.0\")","review_kind":"capability","source_category":"network","source_severity":"medium","confidence_reasoning":"The example binds an agent service to 0.0.0.0, which exposes it on all interfaces when run directly. This is common for deployment but needs authentication and network controls."},{"title":"Unix shell invocation","locations":[{"file":"ts/agent-deployment.md","line_end":74,"line_start":74}],"confidence":0.68,"description":"#!/bin/sh","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The deployment guide contains shell script templates that a coding agent may execute during packaging or startup setup. The commands are legitimate but still create real local execution risk."},{"title":"Unix shell invocation","locations":[{"file":"ts/agent-deployment.md","line_end":84,"line_start":84}],"confidence":0.68,"description":"> **NOTE**: Use `#!/bin/sh` (not `#!/bin/bash`) for maximum compatibility. The entry point should ma","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The deployment guide contains shell script templates that a coding agent may execute during packaging or startup setup. The commands are legitimate but still create real local execution risk."},{"title":"Unix shell invocation","locations":[{"file":"ts/agent-deployment.md","line_end":137,"line_start":137}],"confidence":0.68,"description":"| **Startup script** | `scf_bootstrap` — `#!/bin/sh` + `node src/index.js` |","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The deployment guide contains shell script templates that a coding agent may execute during packaging or startup setup. The commands are legitimate but still create real local execution risk."},{"title":"Wildcard CORS in Agent Server Examples","locations":[{"file":"py/skill.md","line_end":111,"line_start":106},{"file":"py/adapter-coze.md","line_end":282,"line_start":272},{"file":"py/agent-deployment.md","line_end":356,"line_start":340},{"file":"ts/server-quickstart.md","line_end":83,"line_start":78}],"confidence":0.8,"description":"TypeScript and Python examples enable broad CORS on agent endpoints, including FastAPI credentialed CORS. Public agent APIs should use explicit origin allowlists in production.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"The cited snippets enable wildcard or broadly enabled CORS for agent servers, and one FastAPI example also enables credentials."}],"low_findings":[],"dangerous_patterns":[{"title":"System reconnaissance","locations":[{"file":"py/adapter-coze.md","line_end":221,"line_start":221}],"confidence":0.86,"description":"logger.warning(\"Missing or invalid Authorization header\")","review_kind":"security","source_category":"blocker","source_severity":"low","confidence_reasoning":"The middleware logs a missing or invalid Authorization header and then continues as an anonymous user. That behavior can bypass authentication for protected agent actions."},{"title":"System reconnaissance","locations":[{"file":"py/authentication.md","line_end":79,"line_start":79}],"confidence":0.84,"description":"# Handle invalid token (log but don't block in this example)","review_kind":"security","source_category":"blocker","source_severity":"low","confidence_reasoning":"The basic JWT example explicitly handles an invalid token by logging rather than blocking. The request then continues to the agent, which is an authentication bypass if reused."},{"title":"System reconnaissance","locations":[{"file":"py/authentication.md","line_end":80,"line_start":80}],"confidence":0.83,"description":"print(f\"Invalid JWT token: {e}\")","review_kind":"security","source_category":"blocker","source_severity":"low","confidence_reasoning":"The invalid token branch only prints the error in the basic middleware example. Because execution continues afterward, this is a real unsafe pattern."},{"title":"System reconnaissance","locations":[{"file":"py/authentication.md","line_end":82,"line_start":82}],"confidence":0.82,"description":"# raise InvalidRequestError(message=\"Invalid authentication token\")","review_kind":"security","source_category":"blocker","source_severity":"low","confidence_reasoning":"The blocking exception is commented out in the basic authentication example. That makes the shown code continue after invalid authentication."}],"files_scanned":22,"total_lines":5743,"audit_model":"codex","audited_at":"2026-07-09T15:45:15.803+00:00","created_at":"2026-07-15T09:20:43.142248+00:00","static_findings":[{"id":"network:py/adapter-coze.md:58:hardcoded-url","file":"py/adapter-coze.md","pattern":"Hardcoded URL","snippet":"base_url=\"https://api.coze.com\",","category":"network","line_end":58,"severity":"low","line_start":58},{"id":"network:py/adapter-coze.md:125:hardcoded-url","file":"py/adapter-coze.md","pattern":"Hardcoded URL","snippet":"COZE_BASE_URL=https://api.coze.com  # optional","category":"network","line_end":125,"severity":"low","line_start":125},{"id":"network:py/adapter-coze.md:136:hardcoded-url","file":"py/adapter-coze.md","pattern":"Hardcoded URL","snippet":"base_url=os.getenv(\"COZE_BASE_URL\", \"https://api.coze.com\")","category":"network","line_end":136,"severity":"low","line_start":136},{"id":"network:py/adapter-coze.md:282:hardcoded-ip-address","file":"py/adapter-coze.md","pattern":"Hardcoded IP address","snippet":"host=\"0.0.0.0\"","category":"network","line_end":282,"severity":"medium","line_start":282},{"id":"env_access:py/adapter-coze.md:134:python-getenv-function","file":"py/adapter-coze.md","pattern":"Python getenv function","snippet":"bot_id=os.getenv(\"COZE_BOT_ID\"),","category":"env_access","line_end":134,"severity":"low","line_start":134},{"id":"env_access:py/adapter-coze.md:135:python-getenv-function","file":"py/adapter-coze.md","pattern":"Python getenv function","snippet":"api_key=os.getenv(\"COZE_API_KEY\"),","category":"env_access","line_end":135,"severity":"low","line_start":135},{"id":"env_access:py/adapter-coze.md:136:python-getenv-function","file":"py/adapter-coze.md","pattern":"Python getenv function","snippet":"base_url=os.getenv(\"COZE_BASE_URL\", \"https://api.coze.com\")","category":"env_access","line_end":136,"severity":"low","line_start":136},{"id":"env_access:py/adapter-coze.md:213:python-getenv-function","file":"py/adapter-coze.md","pattern":"Python getenv function","snippet":"JWT_SECRET = os.getenv(\"JWT_SECRET_KEY\", \"dev-secret\")","category":"env_access","line_end":213,"severity":"low","line_start":213},{"id":"env_access:py/adapter-coze.md:267:python-getenv-function","file":"py/adapter-coze.md","pattern":"Python getenv function","snippet":"bot_id=os.getenv(\"COZE_BOT_ID\"),","category":"env_access","line_end":267,"severity":"low","line_start":267},{"id":"env_access:py/adapter-coze.md:268:python-getenv-function","file":"py/adapter-coze.md","pattern":"Python getenv function","snippet":"api_key=os.getenv(\"COZE_API_KEY\"),","category":"env_access","line_end":268,"severity":"low","line_start":268},{"id":"env_access:py/adapter-coze.md:269:python-getenv-function","file":"py/adapter-coze.md","pattern":"Python getenv function","snippet":"debug_mode=os.getenv(\"DEBUG\", \"false\").lower() == \"true\"","category":"env_access","line_end":269,"severity":"low","line_start":269},{"id":"env_access:py/adapter-coze.md:281:python-getenv-function","file":"py/adapter-coze.md","pattern":"Python getenv function","snippet":"port=int(os.getenv(\"PORT\", \"9000\")),","category":"env_access","line_end":281,"severity":"low","line_start":281},{"id":"env_access:py/adapter-coze.md:134:getenv-function-call","file":"py/adapter-coze.md","pattern":"getenv function call","snippet":"bot_id=os.getenv(\"COZE_BOT_ID\"),","category":"env_access","line_end":134,"severity":"low","line_start":134},{"id":"env_access:py/adapter-coze.md:135:getenv-function-call","file":"py/adapter-coze.md","pattern":"getenv function call","snippet":"api_key=os.getenv(\"COZE_API_KEY\"),","category":"env_access","line_end":135,"severity":"low","line_start":135},{"id":"env_access:py/adapter-coze.md:136:getenv-function-call","file":"py/adapter-coze.md","pattern":"getenv function call","snippet":"base_url=os.getenv(\"COZE_BASE_URL\", \"https://api.coze.com\")","category":"env_access","line_end":136,"severity":"low","line_start":136},{"id":"env_access:py/adapter-coze.md:213:getenv-function-call","file":"py/adapter-coze.md","pattern":"getenv function call","snippet":"JWT_SECRET = os.getenv(\"JWT_SECRET_KEY\", \"dev-secret\")","category":"env_access","line_end":213,"severity":"low","line_start":213},{"id":"env_access:py/adapter-coze.md:267:getenv-function-call","file":"py/adapter-coze.md","pattern":"getenv function call","snippet":"bot_id=os.getenv(\"COZE_BOT_ID\"),","category":"env_access","line_end":267,"severity":"low","line_start":267},{"id":"env_access:py/adapter-coze.md:268:getenv-function-call","file":"py/adapter-coze.md","pattern":"getenv function call","snippet":"api_key=os.getenv(\"COZE_API_KEY\"),","category":"env_access","line_end":268,"severity":"low","line_start":268},{"id":"env_access:py/adapter-coze.md:269:getenv-function-call","file":"py/adapter-coze.md","pattern":"getenv function call","snippet":"debug_mode=os.getenv(\"DEBUG\", \"false\").lower() == \"true\"","category":"env_access","line_end":269,"severity":"low","line_start":269},{"id":"env_access:py/adapter-coze.md:281:getenv-function-call","file":"py/adapter-coze.md","pattern":"getenv function call","snippet":"port=int(os.getenv(\"PORT\", \"9000\")),","category":"env_access","line_end":281,"severity":"low","line_start":281},{"id":"env_access:py/adapter-coze.md:30:generic-api-secret-keys","file":"py/adapter-coze.md","pattern":"Generic API/secret keys","snippet":"api_key=\"your-api-key\"","category":"env_access","line_end":30,"severity":"high","line_start":30},{"id":"env_access:py/adapter-coze.md:43:generic-api-secret-keys","file":"py/adapter-coze.md","pattern":"Generic API/secret keys","snippet":"| `api_key` | `str` | Coze API key |","category":"env_access","line_end":43,"severity":"high","line_start":43},{"id":"env_access:py/adapter-coze.md:57:generic-api-secret-keys","file":"py/adapter-coze.md","pattern":"Generic API/secret keys","snippet":"api_key=\"sk-1234567890\",","category":"env_access","line_end":57,"severity":"high","line_start":57},{"id":"env_access:py/adapter-coze.md:97:generic-api-secret-keys","file":"py/adapter-coze.md","pattern":"Generic API/secret keys","snippet":"api_key=\"your-api-key\"","category":"env_access","line_end":97,"severity":"high","line_start":97},{"id":"env_access:py/adapter-coze.md:124:generic-api-secret-keys","file":"py/adapter-coze.md","pattern":"Generic API/secret keys","snippet":"COZE_API_KEY=sk-1234567890","category":"env_access","line_end":124,"severity":"high","line_start":124},{"id":"env_access:py/adapter-coze.md:135:generic-api-secret-keys","file":"py/adapter-coze.md","pattern":"Generic API/secret keys","snippet":"api_key=os.getenv(\"COZE_API_KEY\"),","category":"env_access","line_end":135,"severity":"high","line_start":135},{"id":"env_access:py/adapter-coze.md:149:generic-api-secret-keys","file":"py/adapter-coze.md","pattern":"Generic API/secret keys","snippet":"| `Invalid API key` | Coze API key is invalid | Check COZE_API_KEY |","category":"env_access","line_end":149,"severity":"high","line_start":149},{"id":"env_access:py/adapter-coze.md:161:generic-api-secret-keys","file":"py/adapter-coze.md","pattern":"Generic API/secret keys","snippet":"api_key=\"your-api-key\",","category":"env_access","line_end":161,"severity":"high","line_start":161},{"id":"env_access:py/adapter-coze.md:213:generic-api-secret-keys","file":"py/adapter-coze.md","pattern":"Generic API/secret keys","snippet":"JWT_SECRET = os.getenv(\"JWT_SECRET_KEY\", \"dev-secret\")","category":"env_access","line_end":213,"severity":"high","line_start":213},{"id":"env_access:py/adapter-coze.md:268:generic-api-secret-keys","file":"py/adapter-coze.md","pattern":"Generic API/secret keys","snippet":"api_key=os.getenv(\"COZE_API_KEY\"),","category":"env_access","line_end":268,"severity":"high","line_start":268},{"id":"env_access:py/adapter-coze.md:292:generic-api-secret-keys","file":"py/adapter-coze.md","pattern":"Generic API/secret keys","snippet":"export COZE_API_KEY=your-api-key","category":"env_access","line_end":292,"severity":"high","line_start":292},{"id":"env_access:py/adapter-coze.md:293:generic-api-secret-keys","file":"py/adapter-coze.md","pattern":"Generic API/secret keys","snippet":"export JWT_SECRET_KEY=your-dev-secret","category":"env_access","line_end":293,"severity":"high","line_start":293},{"id":"env_access:py/adapter-coze.md:319:generic-api-secret-keys","file":"py/adapter-coze.md","pattern":"Generic API/secret keys","snippet":"-e COZE_API_KEY=your-api-key \\","category":"env_access","line_end":319,"severity":"high","line_start":319},{"id":"env_access:py/adapter-coze.md:320:generic-api-secret-keys","file":"py/adapter-coze.md","pattern":"Generic API/secret keys","snippet":"-e JWT_SECRET_KEY=your-secret \\","category":"env_access","line_end":320,"severity":"high","line_start":320},{"id":"env_access:py/adapter-coze.md:337:generic-api-secret-keys","file":"py/adapter-coze.md","pattern":"Generic API/secret keys","snippet":"\"COZE_API_KEY\": \"${COZE_API_KEY}\",","category":"env_access","line_end":337,"severity":"high","line_start":337},{"id":"env_access:py/adapter-coze.md:338:generic-api-secret-keys","file":"py/adapter-coze.md","pattern":"Generic API/secret keys","snippet":"\"JWT_SECRET_KEY\": \"${JWT_SECRET_KEY}\"","category":"env_access","line_end":338,"severity":"high","line_start":338},{"id":"env_access:py/adapter-coze.md:356:generic-api-secret-keys","file":"py/adapter-coze.md","pattern":"Generic API/secret keys","snippet":"api_key=\"test-key\"","category":"env_access","line_end":356,"severity":"high","line_start":356},{"id":"sensitive:py/adapter-coze.md:122:environment-file-access","file":"py/adapter-coze.md","pattern":"Environment file access","snippet":"# .env","category":"sensitive","line_end":122,"severity":"high","line_start":122},{"id":"blocker:py/adapter-coze.md:148:system-reconnaissance","file":"py/adapter-coze.md","pattern":"System reconnaissance","snippet":"| `user_id not found` | No user ID in state | Ensure auth middleware is registered |","category":"blocker","line_end":148,"severity":"low","line_start":148},{"id":"blocker:py/adapter-coze.md:149:system-reconnaissance","file":"py/adapter-coze.md","pattern":"System reconnaissance","snippet":"| `Invalid API key` | Coze API key is invalid | Check COZE_API_KEY |","category":"blocker","line_end":149,"severity":"low","line_start":149},{"id":"blocker:py/adapter-coze.md:221:system-reconnaissance","file":"py/adapter-coze.md","pattern":"System reconnaissance","snippet":"logger.warning(\"Missing or invalid Authorization header\")","category":"blocker","line_end":221,"severity":"low","line_start":221},{"id":"blocker:py/adapter-coze.md:291:system-reconnaissance","file":"py/adapter-coze.md","pattern":"System reconnaissance","snippet":"export COZE_BOT_ID=your-bot-id","category":"blocker","line_end":292,"severity":"low","line_start":291},{"id":"blocker:py/adapter-coze.md:318:system-reconnaissance","file":"py/adapter-coze.md","pattern":"System reconnaissance","snippet":"-e COZE_BOT_ID=your-bot-id \\","category":"blocker","line_end":318,"severity":"low","line_start":318},{"id":"blocker:py/adapter-coze.md:377:system-reconnaissance","file":"py/adapter-coze.md","pattern":"System reconnaissance","snippet":"### \"user_id not found\" Error","category":"blocker","line_end":377,"severity":"low","line_start":377},{"id":"blocker:py/adapter-coze.md:386:system-reconnaissance","file":"py/adapter-coze.md","pattern":"System reconnaissance","snippet":"### \"Invalid API key\" Error","category":"blocker","line_end":386,"severity":"low","line_start":386},{"id":"env_access:py/adapter-development.md:117:generic-api-secret-keys","file":"py/adapter-development.md","pattern":"Generic API/secret keys","snippet":"def __init__(self, api_key: str):","category":"env_access","line_end":117,"severity":"high","line_start":117},{"id":"env_access:py/adapter-development.md:118:generic-api-secret-keys","file":"py/adapter-development.md","pattern":"Generic API/secret keys","snippet":"self.client = AsyncOpenAI(api_key=api_key)","category":"env_access","line_end":118,"severity":"high","line_start":118},{"id":"blocker:py/adapter-development.md:56:system-reconnaissance","file":"py/adapter-development.md","pattern":"System reconnaissance","snippet":"from uuid import uuid4","category":"blocker","line_end":56,"severity":"low","line_start":56},{"id":"blocker:py/adapter-development.md:71:system-reconnaissance","file":"py/adapter-development.md","pattern":"System reconnaissance","snippet":"message_id = str(uuid4())","category":"blocker","line_end":71,"severity":"low","line_start":71},{"id":"blocker:py/adapter-development.md:92:system-reconnaissance","file":"py/adapter-development.md","pattern":"System reconnaissance","snippet":"messageId=message_id","category":"blocker","line_end":93,"severity":"low","line_start":92},{"id":"blocker:py/adapter-development.md:130:system-reconnaissance","file":"py/adapter-development.md","pattern":"System reconnaissance","snippet":"message_id = str(uuid4())","category":"blocker","line_end":130,"severity":"low","line_start":130},{"id":"blocker:py/adapter-development.md:157:system-reconnaissance","file":"py/adapter-development.md","pattern":"System reconnaissance","snippet":"messageId=message_id","category":"blocker","line_end":158,"severity":"low","line_start":157},{"id":"blocker:py/adapter-development.md:175:system-reconnaissance","file":"py/adapter-development.md","pattern":"System reconnaissance","snippet":"tool_call_id = str(uuid4())","category":"blocker","line_end":175,"severity":"low","line_start":175},{"id":"blocker:py/adapter-development.md:201:system-reconnaissance","file":"py/adapter-development.md","pattern":"System reconnaissance","snippet":"toolCallId=tool_call_id","category":"blocker","line_end":202,"severity":"low","line_start":201},{"id":"blocker:py/adapter-development.md:285:system-reconnaissance","file":"py/adapter-development.md","pattern":"System reconnaissance","snippet":"from uuid import uuid4","category":"blocker","line_end":285,"severity":"low","line_start":285},{"id":"blocker:py/adapter-development.md:331:system-reconnaissance","file":"py/adapter-development.md","pattern":"System reconnaissance","snippet":"user_id = self._get_user_id(state)","category":"blocker","line_end":331,"severity":"low","line_start":331},{"id":"blocker:py/adapter-development.md:335:system-reconnaissance","file":"py/adapter-development.md","pattern":"System reconnaissance","snippet":"message_id = str(uuid4())","category":"blocker","line_end":335,"severity":"low","line_start":335},{"id":"blocker:py/adapter-development.md:388:system-reconnaissance","file":"py/adapter-development.md","pattern":"System reconnaissance","snippet":"messageId=message_id","category":"blocker","line_end":389,"severity":"low","line_start":388},{"id":"blocker:py/adapter-development.md:550:system-reconnaissance","file":"py/adapter-development.md","pattern":"System reconnaissance","snippet":"user_id = run_input.state[\"__request_context__\"][\"user\"][\"id\"]  # ❌ May crash","category":"blocker","line_end":550,"severity":"low","line_start":550},{"id":"blocker:py/adapter-development.md:556:system-reconnaissance","file":"py/adapter-development.md","pattern":"System reconnaissance","snippet":"user_id = run_input.state.get(\"__request_context__\", {}).get(\"user\", {}).get(\"id\")","category":"blocker","line_end":556,"severity":"low","line_start":556},{"id":"network:py/adapter-langgraph.md:235:hardcoded-url","file":"py/adapter-langgraph.md","pattern":"Hardcoded URL","snippet":"curl -X POST http://localhost:9000/send-message \\","category":"network","line_end":235,"severity":"low","line_start":235},{"id":"network:py/adapter-langgraph.md:295:hardcoded-url","file":"py/adapter-langgraph.md","pattern":"Hardcoded URL","snippet":"curl -X POST http://localhost:9000/send-message \\","category":"network","line_end":295,"severity":"low","line_start":295},{"id":"env_access:py/adapter-langgraph.md:556:python-getenv-function","file":"py/adapter-langgraph.md","pattern":"Python getenv function","snippet":"model=os.getenv(\"OPENAI_MODEL\", \"gpt-4o-mini\"),","category":"env_access","line_end":556,"severity":"low","line_start":556},{"id":"env_access:py/adapter-langgraph.md:557:python-getenv-function","file":"py/adapter-langgraph.md","pattern":"Python getenv function","snippet":"api_key=os.getenv(\"OPENAI_API_KEY\"),","category":"env_access","line_end":557,"severity":"low","line_start":557},{"id":"env_access:py/adapter-langgraph.md:558:python-getenv-function","file":"py/adapter-langgraph.md","pattern":"Python getenv function","snippet":"temperature=float(os.getenv(\"OPENAI_TEMPERATURE\", \"0.7\"))","category":"env_access","line_end":558,"severity":"low","line_start":558},{"id":"env_access:py/adapter-langgraph.md:556:getenv-function-call","file":"py/adapter-langgraph.md","pattern":"getenv function call","snippet":"model=os.getenv(\"OPENAI_MODEL\", \"gpt-4o-mini\"),","category":"env_access","line_end":556,"severity":"low","line_start":556},{"id":"env_access:py/adapter-langgraph.md:557:getenv-function-call","file":"py/adapter-langgraph.md","pattern":"getenv function call","snippet":"api_key=os.getenv(\"OPENAI_API_KEY\"),","category":"env_access","line_end":557,"severity":"low","line_start":557},{"id":"env_access:py/adapter-langgraph.md:558:getenv-function-call","file":"py/adapter-langgraph.md","pattern":"getenv function call","snippet":"temperature=float(os.getenv(\"OPENAI_TEMPERATURE\", \"0.7\"))","category":"env_access","line_end":558,"severity":"low","line_start":558},{"id":"env_access:py/adapter-langgraph.md:550:dotenv-library","file":"py/adapter-langgraph.md","pattern":"dotenv library","snippet":"from dotenv import load_dotenv","category":"env_access","line_end":550,"severity":"low","line_start":550},{"id":"env_access:py/adapter-langgraph.md:551:dotenv-library","file":"py/adapter-langgraph.md","pattern":"dotenv library","snippet":"load_dotenv()","category":"env_access","line_end":551,"severity":"low","line_start":551},{"id":"env_access:py/adapter-langgraph.md:550:python-dotenv-loader","file":"py/adapter-langgraph.md","pattern":"Python dotenv loader","snippet":"from dotenv import load_dotenv","category":"env_access","line_end":550,"severity":"low","line_start":550},{"id":"env_access:py/adapter-langgraph.md:551:python-dotenv-loader","file":"py/adapter-langgraph.md","pattern":"Python dotenv loader","snippet":"load_dotenv()","category":"env_access","line_end":551,"severity":"low","line_start":551},{"id":"env_access:py/adapter-langgraph.md:545:generic-api-secret-keys","file":"py/adapter-langgraph.md","pattern":"Generic API/secret keys","snippet":"OPENAI_API_KEY=sk-...","category":"env_access","line_end":545,"severity":"high","line_start":545},{"id":"env_access:py/adapter-langgraph.md:557:generic-api-secret-keys","file":"py/adapter-langgraph.md","pattern":"Generic API/secret keys","snippet":"api_key=os.getenv(\"OPENAI_API_KEY\"),","category":"env_access","line_end":557,"severity":"high","line_start":557},{"id":"sensitive:py/adapter-langgraph.md:544:environment-file-access","file":"py/adapter-langgraph.md","pattern":"Environment file access","snippet":"# .env","category":"sensitive","line_end":544,"severity":"high","line_start":544},{"id":"blocker:py/adapter-langgraph.md:234:system-reconnaissance","file":"py/adapter-langgraph.md","pattern":"System reconnaissance","snippet":"# Each conversation gets unique thread_id","category":"blocker","line_end":235,"severity":"low","line_start":234},{"id":"external_commands:py/agent-deployment.md:92:shell-command-substitution","file":"py/agent-deployment.md","pattern":"Shell command substitution","snippet":"PROJECT_DIR=\"$(pwd)\"","category":"external_commands","line_end":92,"severity":"medium","line_start":92},{"id":"external_commands:py/agent-deployment.md:104:shell-command-substitution","file":"py/agent-deployment.md","pattern":"Shell command substitution","snippet":"echo \"✅ Using: $PYTHON_BIN ($($PYTHON_BIN --version 2>&1))\"","category":"external_commands","line_end":104,"severity":"medium","line_start":104},{"id":"external_commands:py/agent-deployment.md:89:unix-shell-invocation","file":"py/agent-deployment.md","pattern":"Unix shell invocation","snippet":"#!/bin/bash","category":"external_commands","line_end":89,"severity":"medium","line_start":89},{"id":"external_commands:py/agent-deployment.md:322:unix-shell-invocation","file":"py/agent-deployment.md","pattern":"Unix shell invocation","snippet":"#!/bin/bash","category":"external_commands","line_end":322,"severity":"medium","line_start":322},{"id":"external_commands:py/agent-deployment.md:377:unix-shell-invocation","file":"py/agent-deployment.md","pattern":"Unix shell invocation","snippet":"#!/bin/bash","category":"external_commands","line_end":377,"severity":"medium","line_start":377},{"id":"network:py/agent-deployment.md:314:hardcoded-ip-address","file":"py/agent-deployment.md","pattern":"Hardcoded IP address","snippet":"AgentServiceApp().run(create_agent, port=port, host=\"0.0.0.0\")","category":"network","line_end":314,"severity":"medium","line_start":314},{"id":"filesystem:py/agent-deployment.md:46:standard-device-file-access","file":"py/agent-deployment.md","pattern":"Standard device file access","snippet":"python3.10 --version 2>/dev/null || python3 --version","category":"filesystem","line_end":46,"severity":"low","line_start":46},{"id":"filesystem:py/agent-deployment.md:96:standard-device-file-access","file":"py/agent-deployment.md","pattern":"Standard device file access","snippet":"if command -v python3.10 &>/dev/null; then","category":"filesystem","line_end":96,"severity":"low","line_start":96},{"id":"filesystem:py/agent-deployment.md:215:temp-file-creation","file":"py/agent-deployment.md","pattern":"Temp file creation","snippet":"if mod.startswith('_') or mod in ('os', 'sys', 'json', 'logging', 'typing', 'datetime', 'pathlib', '","category":"filesystem","line_end":215,"severity":"low","line_start":215},{"id":"filesystem:py/agent-deployment.md:215:python-glob-pattern-matching","file":"py/agent-deployment.md","pattern":"Python glob/pattern matching","snippet":"if mod.startswith('_') or mod in ('os', 'sys', 'json', 'logging', 'typing', 'datetime', 'pathlib', '","category":"filesystem","line_end":215,"severity":"low","line_start":215},{"id":"env_access:py/agent-deployment.md:313:python-environment-access","file":"py/agent-deployment.md","pattern":"Python environment access","snippet":"port = int(os.environ.get(\"SCF_RUNTIME_PORT\", \"9000\"))","category":"env_access","line_end":313,"severity":"low","line_start":313},{"id":"env_access:py/agent-deployment.md:387:dotenv-library","file":"py/agent-deployment.md","pattern":"dotenv library","snippet":"python-dotenv","category":"env_access","line_end":387,"severity":"low","line_start":387},{"id":"sensitive:py/agent-deployment.md:371:environment-file-access","file":"py/agent-deployment.md","pattern":"Environment file access","snippet":"└── .env                      # Environment variables (local only)","category":"sensitive","line_end":371,"severity":"high","line_start":371},{"id":"network:py/authentication.md:431:http-client-library","file":"py/authentication.md","pattern":"HTTP client library","snippet":"def test_authenticated_request():","category":"network","line_end":431,"severity":"low","line_start":431},{"id":"network:py/authentication.md:456:http-client-library","file":"py/authentication.md","pattern":"HTTP client library","snippet":"user_id = extract_user_id_from_request(http_context)","category":"network","line_end":456,"severity":"low","line_start":456},{"id":"network:py/authentication.md:468:http-client-library","file":"py/authentication.md","pattern":"HTTP client library","snippet":"user_id = extract_user_id_from_request(request)","category":"network","line_end":468,"severity":"low","line_start":468},{"id":"env_access:py/authentication.md:319:python-environment-access","file":"py/authentication.md","pattern":"Python environment access","snippet":"JWT_SECRET = os.environ.get(\"JWT_SECRET_KEY\")","category":"env_access","line_end":319,"severity":"low","line_start":319},{"id":"env_access:py/authentication.md:236:generic-api-secret-keys","file":"py/authentication.md","pattern":"Generic API/secret keys","snippet":"api_key=\"your-api-key\"","category":"env_access","line_end":236,"severity":"high","line_start":236},{"id":"env_access:py/authentication.md:319:generic-api-secret-keys","file":"py/authentication.md","pattern":"Generic API/secret keys","snippet":"JWT_SECRET = os.environ.get(\"JWT_SECRET_KEY\")","category":"env_access","line_end":319,"severity":"high","line_start":319},{"id":"env_access:py/authentication.md:321:generic-api-secret-keys","file":"py/authentication.md","pattern":"Generic API/secret keys","snippet":"raise ValueError(\"JWT_SECRET_KEY must be at least 32 characters\")","category":"env_access","line_end":321,"severity":"high","line_start":321},{"id":"blocker:py/authentication.md:79:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"# Handle invalid token (log but don't block in this example)","category":"blocker","line_end":79,"severity":"low","line_start":79},{"id":"blocker:py/authentication.md:80:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"print(f\"Invalid JWT token: {e}\")","category":"blocker","line_end":80,"severity":"low","line_start":80},{"id":"blocker:py/authentication.md:82:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"# raise InvalidRequestError(message=\"Invalid authentication token\")","category":"blocker","line_end":82,"severity":"low","line_start":82},{"id":"blocker:py/authentication.md:112:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"user_id = user.get(\"id\")","category":"blocker","line_end":112,"severity":"low","line_start":112},{"id":"blocker:py/authentication.md:116:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"\"user_id is required but not found in \"","category":"blocker","line_end":116,"severity":"low","line_start":116},{"id":"blocker:py/authentication.md:121:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"return user_id","category":"blocker","line_end":123,"severity":"low","line_start":121},{"id":"blocker:py/authentication.md:125:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"user_id = get_user_id_from_state(state)","category":"blocker","line_end":125,"severity":"low","line_start":125},{"id":"blocker:py/authentication.md:128:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"# Use user_id and jwt_payload for your logic","category":"blocker","line_end":128,"severity":"low","line_start":128},{"id":"blocker:py/authentication.md:157:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"Raises error if token is invalid or missing for protected routes.","category":"blocker","line_end":157,"severity":"low","line_start":157},{"id":"blocker:py/authentication.md:171:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"message=\"Invalid Authorization header format. Expected 'Bearer <token>'\",","category":"blocker","line_end":171,"severity":"low","line_start":171},{"id":"blocker:py/authentication.md:214:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"message=f\"Invalid JWT token: {str(e)}\",","category":"blocker","line_end":214,"severity":"low","line_start":214},{"id":"blocker:py/authentication.md:253:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"\"\"\"Get user_id from state.__request_context__.user.id.\"\"\"","category":"blocker","line_end":253,"severity":"low","line_start":253},{"id":"blocker:py/authentication.md:259:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"user_id = user_info.get(\"id\")","category":"blocker","line_end":259,"severity":"low","line_start":259},{"id":"blocker:py/authentication.md:263:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"\"user_id is required but not found in \"","category":"blocker","line_end":263,"severity":"low","line_start":263},{"id":"blocker:py/authentication.md:302:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"user_id = state[\"__request_context__\"][\"user\"][\"id\"]","category":"blocker","line_end":302,"severity":"low","line_start":302},{"id":"blocker:py/authentication.md:305:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"tenant_id = state[\"__request_context__\"].get(\"tenant_id\")","category":"blocker","line_end":305,"severity":"low","line_start":305},{"id":"blocker:py/authentication.md:366:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"user_id = input_data.state.get(\"__request_context__\", {}).get(\"user\", {}).get(\"id\")","category":"blocker","line_end":366,"severity":"low","line_start":366},{"id":"blocker:py/authentication.md:395:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"\"\"\"Test middleware with valid JWT.\"\"\"","category":"blocker","line_end":395,"severity":"low","line_start":395},{"id":"blocker:py/authentication.md:396:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"# Create mock request with valid token","category":"blocker","line_end":396,"severity":"low","line_start":396},{"id":"blocker:py/authentication.md:456:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"user_id = extract_user_id_from_request(http_context)","category":"blocker","line_end":456,"severity":"low","line_start":456},{"id":"blocker:py/authentication.md:459:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"request.forwarded_props[\"user_id\"] = user_id","category":"blocker","line_end":460,"severity":"low","line_start":459},{"id":"blocker:py/authentication.md:468:system-reconnaissance","file":"py/authentication.md","pattern":"System reconnaissance","snippet":"user_id = extract_user_id_from_request(request)","category":"blocker","line_end":468,"severity":"low","line_start":468},{"id":"scripts:py/references/observability.md:56:dynamic-import-expression","file":"py/references/observability.md","pattern":"Dynamic import() expression","snippet":"from cloudbase_agent.server.metrics import (","category":"scripts","line_end":61,"severity":"medium","line_start":56},{"id":"network:py/references/observability.md:312:http-client-library","file":"py/references/observability.md","pattern":"HTTP client library","snippet":"async def process_request(data: dict):","category":"network","line_end":312,"severity":"low","line_start":312},{"id":"network:py/references/observability.md:360:http-client-library","file":"py/references/observability.md","pattern":"HTTP client library","snippet":"async def handle_request(request):","category":"network","line_end":360,"severity":"low","line_start":360},{"id":"network:py/references/observability.md:364:http-client-library","file":"py/references/observability.md","pattern":"HTTP client library","snippet":"result = await process_request(request.data)","category":"network","line_end":364,"severity":"low","line_start":364},{"id":"network:py/references/observability.md:134:hardcoded-url","file":"py/references/observability.md","pattern":"Hardcoded URL","snippet":"endpoint=\"http://localhost:4317\",","category":"network","line_end":134,"severity":"low","line_start":134},{"id":"network:py/references/observability.md:233:hardcoded-url","file":"py/references/observability.md","pattern":"Hardcoded URL","snippet":"dsn=\"https://xxx@sentry.io/xxx\",","category":"network","line_end":233,"severity":"low","line_start":233},{"id":"network:py/references/observability.md:301:hardcoded-url","file":"py/references/observability.md","pattern":"Hardcoded URL","snippet":"server_url=\"http://apm-server:8200\",","category":"network","line_end":301,"severity":"low","line_start":301},{"id":"network:py/references/observability.md:328:hardcoded-url","file":"py/references/observability.md","pattern":"Hardcoded URL","snippet":"curl -X POST http://grafana:3000/api/dashboards/import \\","category":"network","line_end":328,"severity":"low","line_start":328},{"id":"scripts:py/references/recipes.md:240:dynamic-require-with-variable","file":"py/references/recipes.md","pattern":"Dynamic require with variable","snippet":"@api_key_auth.require()","category":"scripts","line_end":240,"severity":"medium","line_start":240},{"id":"scripts:py/references/recipes.md:246:dynamic-require-with-variable","file":"py/references/recipes.md","pattern":"Dynamic require with variable","snippet":"@jwt_auth.require(roles=[\"admin\"])","category":"scripts","line_end":246,"severity":"medium","line_start":246},{"id":"network:py/references/recipes.md:300:http-client-library","file":"py/references/recipes.md","pattern":"HTTP client library","snippet":"with track_request(request):","category":"network","line_end":300,"severity":"low","line_start":300},{"id":"network:py/references/recipes.md:32:hardcoded-ip-address","file":"py/references/recipes.md","pattern":"Hardcoded IP address","snippet":"server.run(host=\"0.0.0.0\", port=9000)","category":"network","line_end":32,"severity":"medium","line_start":32},{"id":"env_access:py/references/recipes.md:228:generic-api-secret-keys","file":"py/references/recipes.md","pattern":"Generic API/secret keys","snippet":"api_key_auth = APIKeyAuth(","category":"env_access","line_end":228,"severity":"high","line_start":228},{"id":"env_access:py/references/recipes.md:240:generic-api-secret-keys","file":"py/references/recipes.md","pattern":"Generic API/secret keys","snippet":"@api_key_auth.require()","category":"env_access","line_end":240,"severity":"high","line_start":240},{"id":"blocker:py/references/recipes.md:90:system-reconnaissance","file":"py/references/recipes.md","pattern":"System reconnaissance","snippet":"conversation_id = request.conversation_id","category":"blocker","line_end":90,"severity":"low","line_start":90},{"id":"blocker:py/references/recipes.md:144:system-reconnaissance","file":"py/references/recipes.md","pattern":"System reconnaissance","snippet":"approval_id = interrupt(","category":"blocker","line_end":144,"severity":"low","line_start":144},{"id":"blocker:py/references/recipes.md:242:system-reconnaissance","file":"py/references/recipes.md","pattern":"System reconnaissance","snippet":"user_id = request.auth.user_id","category":"blocker","line_end":242,"severity":"low","line_start":242},{"id":"blocker:py/references/recipes.md:338:system-reconnaissance","file":"py/references/recipes.md","pattern":"System reconnaissance","snippet":"task_id = await process_document.delay(request.doc_id)","category":"blocker","line_end":338,"severity":"low","line_start":338},{"id":"network:py/references/server.md:36:hardcoded-ip-address","file":"py/references/server.md","pattern":"Hardcoded IP address","snippet":"uvicorn.run(fastapi_app, host=\"0.0.0.0\", port=9000)","category":"network","line_end":36,"severity":"medium","line_start":36},{"id":"blocker:py/references/storage.md:202:system-reconnaissance","file":"py/references/storage.md","pattern":"System reconnaissance","snippet":"await txn.execute(\"UPDATE users SET balance = balance - 100 WHERE id = 1\")","category":"blocker","line_end":202,"severity":"low","line_start":202},{"id":"blocker:py/references/storage.md:203:system-reconnaissance","file":"py/references/storage.md","pattern":"System reconnaissance","snippet":"await txn.execute(\"UPDATE users SET balance = balance + 100 WHERE id = 2\")","category":"blocker","line_end":203,"severity":"low","line_start":203},{"id":"blocker:py/references/storage.md:266:system-reconnaissance","file":"py/references/storage.md","pattern":"System reconnaissance","snippet":"1. **Use Namespacing**: Organize keys with namespaces to avoid collisions","category":"blocker","line_end":266,"severity":"low","line_start":266},{"id":"blocker:py/references/storage.md:283:system-reconnaissance","file":"py/references/storage.md","pattern":"System reconnaissance","snippet":"session_id = generate_session_id()","category":"blocker","line_end":283,"severity":"low","line_start":283},{"id":"blocker:py/references/storage.md:289:system-reconnaissance","file":"py/references/storage.md","pattern":"System reconnaissance","snippet":"return session_id","category":"blocker","line_end":291,"severity":"low","line_start":289},{"id":"network:py/references/tools.md:55:hardcoded-url","file":"py/references/tools.md","pattern":"Hardcoded URL","snippet":"url=\"https://api.example.com/data\",","category":"network","line_end":55,"severity":"low","line_start":55},{"id":"network:py/references/tools.md:87:hardcoded-url","file":"py/references/tools.md","pattern":"Hardcoded URL","snippet":"response = await client.get(f\"https://api.example.com/search?q={query}\")","category":"network","line_end":87,"severity":"low","line_start":87},{"id":"blocker:py/references/tools.md:120:system-reconnaissance","file":"py/references/tools.md","pattern":"System reconnaissance","snippet":"raise ToolError(f\"Invalid input: {e}\")","category":"blocker","line_end":120,"severity":"low","line_start":120},{"id":"scripts:py/server-quickstart.md:17:dynamic-import-expression","file":"py/server-quickstart.md","pattern":"Dynamic import() expression","snippet":"from cloudbase_agent.server import (","category":"scripts","line_end":22,"severity":"medium","line_start":17},{"id":"scripts:py/server-quickstart.md:171:dynamic-import-expression","file":"py/server-quickstart.md","pattern":"Dynamic import() expression","snippet":"from cloudbase_agent.server import (","category":"scripts","line_end":179,"severity":"medium","line_start":171},{"id":"network:py/server-quickstart.md:291:hardcoded-url","file":"py/server-quickstart.md","pattern":"Hardcoded URL","snippet":"curl -X POST http://localhost:9000/chatbot/send-message \\","category":"network","line_end":291,"severity":"low","line_start":291},{"id":"network:py/server-quickstart.md:304:hardcoded-url","file":"py/server-quickstart.md","pattern":"Hardcoded URL","snippet":"curl -X POST http://localhost:9000/chatbot/chat/completions \\","category":"network","line_end":304,"severity":"low","line_start":304},{"id":"network:py/server-quickstart.md:321:hardcoded-url","file":"py/server-quickstart.md","pattern":"Hardcoded URL","snippet":"base_url=\"http://localhost:9000\",","category":"network","line_end":321,"severity":"low","line_start":321},{"id":"network:py/server-quickstart.md:338:hardcoded-url","file":"py/server-quickstart.md","pattern":"Hardcoded URL","snippet":"curl http://localhost:9000/healthz","category":"network","line_end":338,"severity":"low","line_start":338},{"id":"network:py/server-quickstart.md:397:hardcoded-url","file":"py/server-quickstart.md","pattern":"Hardcoded URL","snippet":"OPENAI_BASE_URL=https://api.openai.com/v1  # Optional","category":"network","line_end":397,"severity":"low","line_start":397},{"id":"network:py/server-quickstart.md:430:hardcoded-url","file":"py/server-quickstart.md","pattern":"Hardcoded URL","snippet":"allow_origins=[\"https://your-frontend.com\"],  # Specific origins in production","category":"network","line_end":430,"severity":"low","line_start":430},{"id":"network:py/server-quickstart.md:277:hardcoded-ip-address","file":"py/server-quickstart.md","pattern":"Hardcoded IP address","snippet":"uvicorn.run(app, host=\"0.0.0.0\", port=9000)","category":"network","line_end":277,"severity":"medium","line_start":277},{"id":"network:py/server-quickstart.md:447:hardcoded-ip-address","file":"py/server-quickstart.md","pattern":"Hardcoded IP address","snippet":"--bind 0.0.0.0:9000","category":"network","line_end":447,"severity":"medium","line_start":447},{"id":"env_access:py/server-quickstart.md:167:dotenv-library","file":"py/server-quickstart.md","pattern":"dotenv library","snippet":"from dotenv import load_dotenv","category":"env_access","line_end":167,"severity":"low","line_start":167},{"id":"env_access:py/server-quickstart.md:183:dotenv-library","file":"py/server-quickstart.md","pattern":"dotenv library","snippet":"load_dotenv()","category":"env_access","line_end":183,"severity":"low","line_start":183},{"id":"env_access:py/server-quickstart.md:400:dotenv-library","file":"py/server-quickstart.md","pattern":"dotenv library","snippet":"from dotenv import load_dotenv","category":"env_access","line_end":400,"severity":"low","line_start":400},{"id":"env_access:py/server-quickstart.md:401:dotenv-library","file":"py/server-quickstart.md","pattern":"dotenv library","snippet":"load_dotenv()","category":"env_access","line_end":401,"severity":"low","line_start":401},{"id":"env_access:py/server-quickstart.md:167:python-dotenv-loader","file":"py/server-quickstart.md","pattern":"Python dotenv loader","snippet":"from dotenv import load_dotenv","category":"env_access","line_end":167,"severity":"low","line_start":167},{"id":"env_access:py/server-quickstart.md:183:python-dotenv-loader","file":"py/server-quickstart.md","pattern":"Python dotenv loader","snippet":"load_dotenv()","category":"env_access","line_end":183,"severity":"low","line_start":183},{"id":"env_access:py/server-quickstart.md:400:python-dotenv-loader","file":"py/server-quickstart.md","pattern":"Python dotenv loader","snippet":"from dotenv import load_dotenv","category":"env_access","line_end":400,"severity":"low","line_start":400},{"id":"env_access:py/server-quickstart.md:401:python-dotenv-loader","file":"py/server-quickstart.md","pattern":"Python dotenv loader","snippet":"load_dotenv()","category":"env_access","line_end":401,"severity":"low","line_start":401},{"id":"env_access:py/server-quickstart.md:322:generic-api-secret-keys","file":"py/server-quickstart.md","pattern":"Generic API/secret keys","snippet":"api_key=\"dummy\"  # Not required for local","category":"env_access","line_end":322,"severity":"high","line_start":322},{"id":"env_access:py/server-quickstart.md:394:generic-api-secret-keys","file":"py/server-quickstart.md","pattern":"Generic API/secret keys","snippet":"OPENAI_API_KEY=sk-...","category":"env_access","line_end":394,"severity":"high","line_start":394},{"id":"sensitive:py/server-quickstart.md:393:environment-file-access","file":"py/server-quickstart.md","pattern":"Environment file access","snippet":"# .env","category":"sensitive","line_end":393,"severity":"high","line_start":393},{"id":"external_commands:py/skill.md:26:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"- Simple AI model calling without agent capabilities (use `ai-model-*` skills)","category":"external_commands","line_end":26,"severity":"medium","line_start":26},{"id":"external_commands:py/skill.md:27:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"- CloudBase cloud functions (use `cloud-functions` skill)","category":"external_commands","line_end":27,"severity":"medium","line_start":27},{"id":"external_commands:py/skill.md:28:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"- CloudRun backend services without agent features (use `cloudrun-development` skill)","category":"external_commands","line_end":28,"severity":"medium","line_start":28},{"id":"external_commands:py/skill.md:29:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"- TypeScript/JavaScript agent projects (use `cloudbase-agent` skill, refer to the `ts/` sub-director","category":"external_commands","line_end":29,"severity":"medium","line_start":29},{"id":"external_commands:py/skill.md:46:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"> Do NOT call `manageAgent` until all blocking steps pass.","category":"external_commands","line_end":46,"severity":"medium","line_start":46},{"id":"external_commands:py/skill.md:60:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"| LangGraph (stateful graphs) | [adapter-langgraph](adapter-langgraph.md) | `cloudbase-agent-langgra","category":"external_commands","line_end":60,"severity":"medium","line_start":60},{"id":"external_commands:py/skill.md:61:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"| CrewAI (multi-agent crews) | [adapter-development](adapter-development.md) | `cloudbase-agent-crew","category":"external_commands","line_end":61,"severity":"medium","line_start":61},{"id":"external_commands:py/skill.md:62:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"| Coze platform | [adapter-coze](adapter-coze.md) | `cloudbase-agent-coze` |","category":"external_commands","line_end":62,"severity":"medium","line_start":62},{"id":"external_commands:py/skill.md:63:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"| Custom / raw FastAPI | [server-quickstart](server-quickstart.md) + [adapter-development](adapter-d","category":"external_commands","line_end":63,"severity":"medium","line_start":63},{"id":"external_commands:py/skill.md:78:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":87,"severity":"medium","line_start":78},{"id":"external_commands:py/skill.md:87:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":91,"severity":"medium","line_start":87},{"id":"external_commands:py/skill.md:91:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"```python","category":"external_commands","line_end":112,"severity":"medium","line_start":91},{"id":"external_commands:py/skill.md:112:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":122,"severity":"medium","line_start":112},{"id":"external_commands:py/skill.md:122:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":142,"severity":"medium","line_start":122},{"id":"external_commands:py/skill.md:142:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":146,"severity":"medium","line_start":142},{"id":"external_commands:py/skill.md:146:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"CloudBase Agent Python SDK is published to PyPI as separate packages. **Note: PyPI package names use","category":"external_commands","line_end":146,"severity":"medium","line_start":146},{"id":"external_commands:py/skill.md:148:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":161,"severity":"medium","line_start":148},{"id":"external_commands:py/skill.md:161:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":163,"severity":"medium","line_start":161},{"id":"external_commands:py/skill.md:163:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"**Import Note**: All packages share the `cloudbase_agent` namespace:","category":"external_commands","line_end":164,"severity":"medium","line_start":163},{"id":"external_commands:py/skill.md:164:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"```python","category":"external_commands","line_end":169,"severity":"medium","line_start":164},{"id":"external_commands:py/skill.md:169:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":179,"severity":"medium","line_start":169},{"id":"external_commands:py/skill.md:179:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"| Server setup, deployment, middleware, multi-agent, CORS | Read `references/server.md` | AgentServi","category":"external_commands","line_end":181,"severity":"medium","line_start":179},{"id":"external_commands:py/skill.md:181:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"| Tools: bash, filesystem, code execution, MCP, custom tools | Read `references/tools.md` | create_b","category":"external_commands","line_end":182,"severity":"medium","line_start":181},{"id":"external_commands:py/skill.md:182:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"| Memory, persistence, short/long-term, MySQL, MongoDB | Read `references/storage.md` | InMemoryMemo","category":"external_commands","line_end":183,"severity":"medium","line_start":182},{"id":"external_commands:py/skill.md:183:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"| Tracing, monitoring, Langfuse, OpenTelemetry | Read `references/observability.md` | ConsoleTraceCo","category":"external_commands","line_end":184,"severity":"medium","line_start":183},{"id":"external_commands:py/skill.md:184:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"| Common patterns, JWT auth, MCP integration, production | Read `references/recipes.md` | JWT middle","category":"external_commands","line_end":188,"severity":"medium","line_start":184},{"id":"external_commands:py/skill.md:188:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"```python","category":"external_commands","line_end":213,"severity":"medium","line_start":188},{"id":"external_commands:py/skill.md:213:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":217,"severity":"medium","line_start":213},{"id":"external_commands:py/skill.md:217:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":227,"severity":"medium","line_start":217},{"id":"external_commands:py/skill.md:227:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":233,"severity":"medium","line_start":227},{"id":"external_commands:py/skill.md:233:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"| `OPENAI_API_KEY` | OpenAI API key |","category":"external_commands","line_end":234,"severity":"medium","line_start":233},{"id":"external_commands:py/skill.md:234:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"| `AUTO_TRACES_STDOUT` | Enable console tracing (`true`) |","category":"external_commands","line_end":234,"severity":"medium","line_start":234},{"id":"external_commands:py/skill.md:235:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"| `LANGFUSE_PUBLIC_KEY` / `LANGFUSE_SECRET_KEY` | Langfuse keys |","category":"external_commands","line_end":235,"severity":"medium","line_start":235},{"id":"external_commands:py/skill.md:236:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"| `TDAI_ENDPOINT` / `TDAI_API_KEY` | TDAI memory/checkpoint endpoint |","category":"external_commands","line_end":236,"severity":"medium","line_start":236},{"id":"external_commands:py/skill.md:237:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"| `SCF_RUNTIME_PORT` | CloudBase runtime port (set automatically during deployment) |","category":"external_commands","line_end":242,"severity":"medium","line_start":237},{"id":"external_commands:py/skill.md:242:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"2. **Dual Protocol**: Every agent supports both AG-UI native (SSE + rich events) and OpenAI-compatib","category":"external_commands","line_end":243,"severity":"medium","line_start":242},{"id":"external_commands:py/skill.md:243:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"3. **Middleware = Generator**: Use `yield` — pre-yield = pre-processing, post-yield = post-processin","category":"external_commands","line_end":244,"severity":"medium","line_start":243},{"id":"external_commands:py/skill.md:244:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"4. **Namespace Package**: `cloudbase_agent` spans multiple PyPI packages (cloudbase-agent-core, clou","category":"external_commands","line_end":244,"severity":"medium","line_start":244},{"id":"external_commands:py/skill.md:245:ruby-shell-backtick-execution","file":"py/skill.md","pattern":"Ruby/shell backtick execution","snippet":"5. **Observability Auto-Integration**: Install `cloudbase-agent-observability` and tracing works aut","category":"external_commands","line_end":246,"severity":"medium","line_start":245},{"id":"network:py/skill.md:111:hardcoded-ip-address","file":"py/skill.md","pattern":"Hardcoded IP address","snippet":"app.run(create_agent, port=port, host=\"0.0.0.0\")","category":"network","line_end":111,"severity":"medium","line_start":111},{"id":"env_access:py/skill.md:110:python-environment-access","file":"py/skill.md","pattern":"Python environment access","snippet":"port = int(os.environ.get(\"SCF_RUNTIME_PORT\", \"9000\"))","category":"env_access","line_end":110,"severity":"low","line_start":110},{"id":"env_access:py/skill.md:94:dotenv-library","file":"py/skill.md","pattern":"dotenv library","snippet":"from dotenv import load_dotenv","category":"env_access","line_end":94,"severity":"low","line_start":94},{"id":"env_access:py/skill.md:95:dotenv-library","file":"py/skill.md","pattern":"dotenv library","snippet":"load_dotenv()","category":"env_access","line_end":95,"severity":"low","line_start":95},{"id":"env_access:py/skill.md:94:python-dotenv-loader","file":"py/skill.md","pattern":"Python dotenv loader","snippet":"from dotenv import load_dotenv","category":"env_access","line_end":94,"severity":"low","line_start":94},{"id":"env_access:py/skill.md:95:python-dotenv-loader","file":"py/skill.md","pattern":"Python dotenv loader","snippet":"load_dotenv()","category":"env_access","line_end":95,"severity":"low","line_start":95},{"id":"env_access:py/skill.md:225:generic-api-secret-keys","file":"py/skill.md","pattern":"Generic API/secret keys","snippet":"├── .env                            # OPENAI_API_KEY, etc.","category":"env_access","line_end":225,"severity":"high","line_start":225},{"id":"env_access:py/skill.md:233:generic-api-secret-keys","file":"py/skill.md","pattern":"Generic API/secret keys","snippet":"| `OPENAI_API_KEY` | OpenAI API key |","category":"env_access","line_end":233,"severity":"high","line_start":233},{"id":"env_access:py/skill.md:235:generic-api-secret-keys","file":"py/skill.md","pattern":"Generic API/secret keys","snippet":"| `LANGFUSE_PUBLIC_KEY` / `LANGFUSE_SECRET_KEY` | Langfuse keys |","category":"env_access","line_end":235,"severity":"high","line_start":235},{"id":"env_access:py/skill.md:236:generic-api-secret-keys","file":"py/skill.md","pattern":"Generic API/secret keys","snippet":"| `TDAI_ENDPOINT` / `TDAI_API_KEY` | TDAI memory/checkpoint endpoint |","category":"env_access","line_end":236,"severity":"high","line_start":236},{"id":"sensitive:py/skill.md:225:environment-file-access","file":"py/skill.md","pattern":"Environment file access","snippet":"├── .env                            # OPENAI_API_KEY, etc.","category":"sensitive","line_end":225,"severity":"high","line_start":225},{"id":"external_commands:SKILL.md:12:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"If this environment only installed the current skill, start from the CloudBase main entry and use th","category":"external_commands","line_end":12,"severity":"medium","line_start":12},{"id":"external_commands:SKILL.md:14:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- CloudBase main entry: `https://cnb.cool/tencent/cloud/cloudbase/cloudbase-skills/-/git/raw/main/sk","category":"external_commands","line_end":14,"severity":"medium","line_start":14},{"id":"external_commands:SKILL.md:15:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"- Current skill raw source: `https://cnb.cool/tencent/cloud/cloudbase/cloudbase-skills/-/git/raw/mai","category":"external_commands","line_end":15,"severity":"medium","line_start":15},{"id":"external_commands:SKILL.md:17:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Keep local `references/...` paths for files that ship with the current skill directory. When this fi","category":"external_commands","line_end":17,"severity":"medium","line_start":17},{"id":"network:SKILL.md:14:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"- CloudBase main entry: `https://cnb.cool/tencent/cloud/cloudbase/cloudbase-skills/-/git/raw/main/sk","category":"network","line_end":14,"severity":"low","line_start":14},{"id":"network:SKILL.md:15:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"- Current skill raw source: `https://cnb.cool/tencent/cloud/cloudbase/cloudbase-skills/-/git/raw/mai","category":"network","line_end":15,"severity":"low","line_start":15},{"id":"env_access:ts/adapter-langchain.md:52:environment-variable-access-dot-notation","file":"ts/adapter-langchain.md","pattern":"Environment variable access (dot notation)","snippet":"const app = tcb.init({ env: process.env.CLOUDBASE_ENV_ID });","category":"env_access","line_end":52,"severity":"low","line_start":52},{"id":"env_access:ts/adapter-langchain.md:52:environment-variable-object","file":"ts/adapter-langchain.md","pattern":"Environment variable object","snippet":"const app = tcb.init({ env: process.env.CLOUDBASE_ENV_ID });","category":"env_access","line_end":52,"severity":"low","line_start":52},{"id":"obfuscation:ts/adapter-langchain.md:58:base64-decode","file":"ts/adapter-langchain.md","pattern":"Base64 decode","snippet":"const payload = JSON.parse(atob(token.split(\".\")[1]));","category":"obfuscation","line_end":58,"severity":"medium","line_start":58},{"id":"sensitive:ts/adapter-langchain.md:52:environment-file-access","file":"ts/adapter-langchain.md","pattern":"Environment file access","snippet":"const app = tcb.init({ env: process.env.CLOUDBASE_ENV_ID });","category":"sensitive","line_end":52,"severity":"high","line_start":52},{"id":"env_access:ts/adapter-langgraph.md:58:environment-variable-access-dot-notation","file":"ts/adapter-langgraph.md","pattern":"Environment variable access (dot notation)","snippet":"const app = tcb.init({ env: process.env.CLOUDBASE_ENV_ID });","category":"env_access","line_end":58,"severity":"low","line_start":58},{"id":"env_access:ts/adapter-langgraph.md:58:environment-variable-object","file":"ts/adapter-langgraph.md","pattern":"Environment variable object","snippet":"const app = tcb.init({ env: process.env.CLOUDBASE_ENV_ID });","category":"env_access","line_end":58,"severity":"low","line_start":58},{"id":"obfuscation:ts/adapter-langgraph.md:64:base64-decode","file":"ts/adapter-langgraph.md","pattern":"Base64 decode","snippet":"const payload = JSON.parse(atob(token.split(\".\")[1]));","category":"obfuscation","line_end":64,"severity":"medium","line_start":64},{"id":"sensitive:ts/adapter-langgraph.md:58:environment-file-access","file":"ts/adapter-langgraph.md","pattern":"Environment file access","snippet":"const app = tcb.init({ env: process.env.CLOUDBASE_ENV_ID });","category":"sensitive","line_end":58,"severity":"high","line_start":58},{"id":"blocker:ts/adapter-langgraph.md:125:system-reconnaissance","file":"ts/adapter-langgraph.md","pattern":"System reconnaissance","snippet":"parallel_tool_calls: false,  // Recommended: avoid race conditions","category":"blocker","line_end":125,"severity":"low","line_start":125},{"id":"external_commands:ts/agent-deployment.md:74:unix-shell-invocation","file":"ts/agent-deployment.md","pattern":"Unix shell invocation","snippet":"#!/bin/sh","category":"external_commands","line_end":74,"severity":"medium","line_start":74},{"id":"external_commands:ts/agent-deployment.md:84:unix-shell-invocation","file":"ts/agent-deployment.md","pattern":"Unix shell invocation","snippet":"> **NOTE**: Use `#!/bin/sh` (not `#!/bin/bash`) for maximum compatibility. The entry point should ma","category":"external_commands","line_end":84,"severity":"medium","line_start":84},{"id":"external_commands:ts/agent-deployment.md:137:unix-shell-invocation","file":"ts/agent-deployment.md","pattern":"Unix shell invocation","snippet":"| **Startup script** | `scf_bootstrap` — `#!/bin/sh` + `node src/index.js` |","category":"external_commands","line_end":137,"severity":"medium","line_start":137},{"id":"env_access:ts/agent-deployment.md:31:generic-api-secret-keys","file":"ts/agent-deployment.md","pattern":"Generic API/secret keys","snippet":"3. Set environment variables (OPENAI_API_KEY, OPENAI_BASE_URL, OPENAI_MODEL, etc.)","category":"env_access","line_end":31,"severity":"high","line_start":31},{"id":"env_access:ts/agent-deployment.md:96:generic-api-secret-keys","file":"ts/agent-deployment.md","pattern":"Generic API/secret keys","snippet":"| `OPENAI_API_KEY` | ✅ | OpenAI API key or compatible service key |","category":"env_access","line_end":96,"severity":"high","line_start":96},{"id":"network:ts/server-quickstart.md:82:hardcoded-url","file":"ts/server-quickstart.md","pattern":"Hardcoded URL","snippet":"cors: true,                  // or { origin: \"https://...\" }","category":"network","line_end":82,"severity":"low","line_start":82},{"id":"network:ts/server-quickstart.md:128:hardcoded-url","file":"ts/server-quickstart.md","pattern":"Hardcoded URL","snippet":"url: \"https://cloud.langfuse.com/api/public/otlp/v1/traces\",","category":"network","line_end":128,"severity":"low","line_start":128},{"id":"network:ts/server-quickstart.md:138:hardcoded-url","file":"ts/server-quickstart.md","pattern":"Hardcoded URL","snippet":"{ type: \"otlp\", url: \"http://localhost:4318/v1/traces\" }","category":"network","line_end":138,"severity":"low","line_start":138},{"id":"blocker:ts/server-quickstart.md:58:system-reconnaissance","file":"ts/server-quickstart.md","pattern":"System reconnaissance","snippet":"cleanup?: () => void   // Called when request ends","category":"blocker","line_end":58,"severity":"low","line_start":58},{"id":"external_commands:ts/skill.md:26:ruby-shell-backtick-execution","file":"ts/skill.md","pattern":"Ruby/shell backtick execution","snippet":"- Simple AI model calling without agent capabilities (use `ai-model-*` skills)","category":"external_commands","line_end":26,"severity":"medium","line_start":26},{"id":"external_commands:ts/skill.md:27:ruby-shell-backtick-execution","file":"ts/skill.md","pattern":"Ruby/shell backtick execution","snippet":"- CloudBase cloud functions (use `cloud-functions` skill)","category":"external_commands","line_end":27,"severity":"medium","line_start":27},{"id":"external_commands:ts/skill.md:28:ruby-shell-backtick-execution","file":"ts/skill.md","pattern":"Ruby/shell backtick execution","snippet":"- CloudRun backend services without agent features (use `cloudrun-development` skill)","category":"external_commands","line_end":28,"severity":"medium","line_start":28},{"id":"external_commands:ts/skill.md:38:ruby-shell-backtick-execution","file":"ts/skill.md","pattern":"Ruby/shell backtick execution","snippet":"- Use `@cloudbase/agent-server` to expose HTTP endpoints","category":"external_commands","line_end":38,"severity":"medium","line_start":38},{"id":"external_commands:ts/skill.md:40:ruby-shell-backtick-execution","file":"ts/skill.md","pattern":"Ruby/shell backtick execution","snippet":"- **Prefer deploying to CloudBase using `manageAgent` MCP tool** (see [agent-deployment](agent-deplo","category":"external_commands","line_end":40,"severity":"medium","line_start":40},{"id":"external_commands:ts/skill.md:44:ruby-shell-backtick-execution","file":"ts/skill.md","pattern":"Ruby/shell backtick execution","snippet":"- Use `@ag-ui/client` for web applications","category":"external_commands","line_end":44,"severity":"medium","line_start":44},{"id":"external_commands:ts/skill.md:45:ruby-shell-backtick-execution","file":"ts/skill.md","pattern":"Ruby/shell backtick execution","snippet":"- Use `@cloudbase/agent-ui-miniprogram` for WeChat Mini Programs","category":"external_commands","line_end":45,"severity":"medium","line_start":45},{"id":"external_commands:ts/skill.md:46:ruby-shell-backtick-execution","file":"ts/skill.md","pattern":"Ruby/shell backtick execution","snippet":"- Connect to the agent server's `/send-message` or `/agui` endpoints","category":"external_commands","line_end":46,"severity":"medium","line_start":46},{"id":"external_commands:ts/skill.md:69:ruby-shell-backtick-execution","file":"ts/skill.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":71,"severity":"medium","line_start":69},{"id":"external_commands:ts/skill.md:71:ruby-shell-backtick-execution","file":"ts/skill.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":73,"severity":"medium","line_start":71},{"id":"external_commands:ts/skill.md:73:ruby-shell-backtick-execution","file":"ts/skill.md","pattern":"Ruby/shell backtick execution","snippet":"**Critical:** Always use `@latest` for all `@cloudbase/agent-*` packages. For dependency version rul","category":"external_commands","line_end":73,"severity":"medium","line_start":73},{"id":"external_commands:ts/skill.md:77:ruby-shell-backtick-execution","file":"ts/skill.md","pattern":"Ruby/shell backtick execution","snippet":"```typescript","category":"external_commands","line_end":85,"severity":"medium","line_start":77},{"id":"blocker:ts/skill.md:41:system-reconnaissance","file":"ts/skill.md","pattern":"System reconnaissance","snippet":"- **Before deploy, read Dependency Alignment Policy in [agent-deployment](agent-deployment.md) to av","category":"blocker","line_end":41,"severity":"low","line_start":41},{"id":"network:ts/ui-clients.md:16:hardcoded-url","file":"ts/ui-clients.md","pattern":"Hardcoded URL","snippet":"const agent = new HttpAgent({ url: \"http://localhost:9000/send-message\" });","category":"network","line_end":16,"severity":"low","line_start":16}],"finding_verdicts":[{"id":"network:py/adapter-coze.md:58:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"network:py/adapter-coze.md:125:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"network:py/adapter-coze.md:136:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"network:py/adapter-coze.md:282:hardcoded-ip-address","reason":"The example binds an agent service to 0.0.0.0, which exposes it on all interfaces when run directly. This is common for deployment but needs authentication and network controls.","verdict":"confirmed","severity":"medium","confidence":0.7},{"id":"env_access:py/adapter-coze.md:134:python-getenv-function","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-coze.md:135:python-getenv-function","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-coze.md:136:python-getenv-function","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-coze.md:213:python-getenv-function","reason":"The example falls back to JWT_SECRET_KEY=\"dev-secret\", which can create forgeable JWTs if copied into production. This is a real authentication weakness, not just configuration access.","verdict":"confirmed","severity":"high","confidence":0.88},{"id":"env_access:py/adapter-coze.md:267:python-getenv-function","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-coze.md:268:python-getenv-function","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-coze.md:269:python-getenv-function","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-coze.md:281:python-getenv-function","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-coze.md:134:getenv-function-call","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-coze.md:135:getenv-function-call","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-coze.md:136:getenv-function-call","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-coze.md:213:getenv-function-call","reason":"The getenv call supplies a hardcoded dev-secret fallback for JWT signing. A missing environment variable would silently weaken authentication.","verdict":"confirmed","severity":"high","confidence":0.88},{"id":"env_access:py/adapter-coze.md:267:getenv-function-call","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-coze.md:268:getenv-function-call","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-coze.md:269:getenv-function-call","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-coze.md:281:getenv-function-call","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-coze.md:30:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/adapter-coze.md:43:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/adapter-coze.md:57:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/adapter-coze.md:97:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/adapter-coze.md:124:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/adapter-coze.md:135:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/adapter-coze.md:149:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/adapter-coze.md:161:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/adapter-coze.md:213:generic-api-secret-keys","reason":"JWT_SECRET falls back to a predictable value named dev-secret. This creates a credible credential weakness when reused beyond local development.","verdict":"confirmed","severity":"high","confidence":0.9},{"id":"env_access:py/adapter-coze.md:268:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/adapter-coze.md:292:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/adapter-coze.md:293:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/adapter-coze.md:319:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/adapter-coze.md:320:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/adapter-coze.md:337:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/adapter-coze.md:338:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/adapter-coze.md:356:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"sensitive:py/adapter-coze.md:122:environment-file-access","reason":"The finding points to .env or process.env documentation for local configuration. I found no evidence that the skill reads or exfiltrates a user environment file.","verdict":"false_positive","confidence":0.84},{"id":"blocker:py/adapter-coze.md:148:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/adapter-coze.md:149:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/adapter-coze.md:221:system-reconnaissance","reason":"The middleware logs a missing or invalid Authorization header and then continues as an anonymous user. That behavior can bypass authentication for protected agent actions.","verdict":"confirmed","severity":"high","confidence":0.86},{"id":"blocker:py/adapter-coze.md:291:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/adapter-coze.md:318:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/adapter-coze.md:377:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/adapter-coze.md:386:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"env_access:py/adapter-development.md:117:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/adapter-development.md:118:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"blocker:py/adapter-development.md:56:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/adapter-development.md:71:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/adapter-development.md:92:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/adapter-development.md:130:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/adapter-development.md:157:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/adapter-development.md:175:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/adapter-development.md:201:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/adapter-development.md:285:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/adapter-development.md:331:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/adapter-development.md:335:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/adapter-development.md:388:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/adapter-development.md:550:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/adapter-development.md:556:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"network:py/adapter-langgraph.md:235:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"network:py/adapter-langgraph.md:295:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"env_access:py/adapter-langgraph.md:556:python-getenv-function","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-langgraph.md:557:python-getenv-function","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-langgraph.md:558:python-getenv-function","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-langgraph.md:556:getenv-function-call","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-langgraph.md:557:getenv-function-call","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-langgraph.md:558:getenv-function-call","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-langgraph.md:550:dotenv-library","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-langgraph.md:551:dotenv-library","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-langgraph.md:550:python-dotenv-loader","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-langgraph.md:551:python-dotenv-loader","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/adapter-langgraph.md:545:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/adapter-langgraph.md:557:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"sensitive:py/adapter-langgraph.md:544:environment-file-access","reason":"The finding points to .env or process.env documentation for local configuration. I found no evidence that the skill reads or exfiltrates a user environment file.","verdict":"false_positive","confidence":0.84},{"id":"blocker:py/adapter-langgraph.md:234:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"external_commands:py/agent-deployment.md:92:shell-command-substitution","reason":"The deployment guide contains shell script templates that a coding agent may execute during packaging or startup setup. The commands are legitimate but still create real local execution risk.","verdict":"confirmed","severity":"medium","confidence":0.68},{"id":"external_commands:py/agent-deployment.md:104:shell-command-substitution","reason":"The deployment guide contains shell script templates that a coding agent may execute during packaging or startup setup. The commands are legitimate but still create real local execution risk.","verdict":"confirmed","severity":"medium","confidence":0.68},{"id":"external_commands:py/agent-deployment.md:89:unix-shell-invocation","reason":"The deployment guide contains shell script templates that a coding agent may execute during packaging or startup setup. The commands are legitimate but still create real local execution risk.","verdict":"confirmed","severity":"medium","confidence":0.68},{"id":"external_commands:py/agent-deployment.md:322:unix-shell-invocation","reason":"The deployment guide contains shell script templates that a coding agent may execute during packaging or startup setup. The commands are legitimate but still create real local execution risk.","verdict":"confirmed","severity":"medium","confidence":0.68},{"id":"external_commands:py/agent-deployment.md:377:unix-shell-invocation","reason":"The deployment guide contains shell script templates that a coding agent may execute during packaging or startup setup. The commands are legitimate but still create real local execution risk.","verdict":"confirmed","severity":"medium","confidence":0.68},{"id":"network:py/agent-deployment.md:314:hardcoded-ip-address","reason":"The example binds an agent service to 0.0.0.0, which exposes it on all interfaces when run directly. This is common for deployment but needs authentication and network controls.","verdict":"confirmed","severity":"medium","confidence":0.7},{"id":"filesystem:py/agent-deployment.md:46:standard-device-file-access","reason":"The snippet is a benign shell redirection or Python import-filtering example. It does not access sensitive filesystem paths or create unsafe temporary files.","verdict":"false_positive","confidence":0.85},{"id":"filesystem:py/agent-deployment.md:96:standard-device-file-access","reason":"The snippet is a benign shell redirection or Python import-filtering example. It does not access sensitive filesystem paths or create unsafe temporary files.","verdict":"false_positive","confidence":0.85},{"id":"filesystem:py/agent-deployment.md:215:temp-file-creation","reason":"The snippet is a benign shell redirection or Python import-filtering example. It does not access sensitive filesystem paths or create unsafe temporary files.","verdict":"false_positive","confidence":0.85},{"id":"filesystem:py/agent-deployment.md:215:python-glob-pattern-matching","reason":"The snippet is a benign shell redirection or Python import-filtering example. It does not access sensitive filesystem paths or create unsafe temporary files.","verdict":"false_positive","confidence":0.85},{"id":"env_access:py/agent-deployment.md:313:python-environment-access","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/agent-deployment.md:387:dotenv-library","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"sensitive:py/agent-deployment.md:371:environment-file-access","reason":"The finding points to .env or process.env documentation for local configuration. I found no evidence that the skill reads or exfiltrates a user environment file.","verdict":"false_positive","confidence":0.84},{"id":"network:py/authentication.md:431:http-client-library","reason":"The snippet is request-handling or test documentation, not a suspicious outbound HTTP client call. No sensitive data transfer is shown.","verdict":"false_positive","confidence":0.82},{"id":"network:py/authentication.md:456:http-client-library","reason":"The snippet is request-handling or test documentation, not a suspicious outbound HTTP client call. No sensitive data transfer is shown.","verdict":"false_positive","confidence":0.82},{"id":"network:py/authentication.md:468:http-client-library","reason":"The snippet is request-handling or test documentation, not a suspicious outbound HTTP client call. No sensitive data transfer is shown.","verdict":"false_positive","confidence":0.82},{"id":"env_access:py/authentication.md:319:python-environment-access","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/authentication.md:236:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/authentication.md:319:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/authentication.md:321:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"blocker:py/authentication.md:79:system-reconnaissance","reason":"The basic JWT example explicitly handles an invalid token by logging rather than blocking. The request then continues to the agent, which is an authentication bypass if reused.","verdict":"confirmed","severity":"high","confidence":0.84},{"id":"blocker:py/authentication.md:80:system-reconnaissance","reason":"The invalid token branch only prints the error in the basic middleware example. Because execution continues afterward, this is a real unsafe pattern.","verdict":"confirmed","severity":"high","confidence":0.83},{"id":"blocker:py/authentication.md:82:system-reconnaissance","reason":"The blocking exception is commented out in the basic authentication example. That makes the shown code continue after invalid authentication.","verdict":"confirmed","severity":"high","confidence":0.82},{"id":"blocker:py/authentication.md:112:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:116:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:121:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:125:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:128:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:157:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:171:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:214:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:253:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:259:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:263:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:302:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:305:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:366:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:395:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:396:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:456:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:459:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/authentication.md:468:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"scripts:py/references/observability.md:56:dynamic-import-expression","reason":"This is normal Python import or decorator syntax in markdown documentation. It is not dynamic code loading from untrusted input.","verdict":"false_positive","confidence":0.88},{"id":"network:py/references/observability.md:312:http-client-library","reason":"The snippet is request-handling or test documentation, not a suspicious outbound HTTP client call. No sensitive data transfer is shown.","verdict":"false_positive","confidence":0.82},{"id":"network:py/references/observability.md:360:http-client-library","reason":"The snippet is request-handling or test documentation, not a suspicious outbound HTTP client call. No sensitive data transfer is shown.","verdict":"false_positive","confidence":0.82},{"id":"network:py/references/observability.md:364:http-client-library","reason":"The snippet is request-handling or test documentation, not a suspicious outbound HTTP client call. No sensitive data transfer is shown.","verdict":"false_positive","confidence":0.82},{"id":"network:py/references/observability.md:134:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"network:py/references/observability.md:233:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"network:py/references/observability.md:301:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"network:py/references/observability.md:328:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"scripts:py/references/recipes.md:240:dynamic-require-with-variable","reason":"This is normal Python import or decorator syntax in markdown documentation. It is not dynamic code loading from untrusted input.","verdict":"false_positive","confidence":0.88},{"id":"scripts:py/references/recipes.md:246:dynamic-require-with-variable","reason":"This is normal Python import or decorator syntax in markdown documentation. It is not dynamic code loading from untrusted input.","verdict":"false_positive","confidence":0.88},{"id":"network:py/references/recipes.md:300:http-client-library","reason":"The snippet is request-handling or test documentation, not a suspicious outbound HTTP client call. No sensitive data transfer is shown.","verdict":"false_positive","confidence":0.82},{"id":"network:py/references/recipes.md:32:hardcoded-ip-address","reason":"The example binds an agent service to 0.0.0.0, which exposes it on all interfaces when run directly. This is common for deployment but needs authentication and network controls.","verdict":"confirmed","severity":"medium","confidence":0.7},{"id":"env_access:py/references/recipes.md:228:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/references/recipes.md:240:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"blocker:py/references/recipes.md:90:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/references/recipes.md:144:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/references/recipes.md:242:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/references/recipes.md:338:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"network:py/references/server.md:36:hardcoded-ip-address","reason":"The example binds an agent service to 0.0.0.0, which exposes it on all interfaces when run directly. This is common for deployment but needs authentication and network controls.","verdict":"confirmed","severity":"medium","confidence":0.7},{"id":"blocker:py/references/storage.md:202:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/references/storage.md:203:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/references/storage.md:266:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/references/storage.md:283:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"blocker:py/references/storage.md:289:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"network:py/references/tools.md:55:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"network:py/references/tools.md:87:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"blocker:py/references/tools.md:120:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"scripts:py/server-quickstart.md:17:dynamic-import-expression","reason":"This is normal Python import or decorator syntax in markdown documentation. It is not dynamic code loading from untrusted input.","verdict":"false_positive","confidence":0.88},{"id":"scripts:py/server-quickstart.md:171:dynamic-import-expression","reason":"This is normal Python import or decorator syntax in markdown documentation. It is not dynamic code loading from untrusted input.","verdict":"false_positive","confidence":0.88},{"id":"network:py/server-quickstart.md:291:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"network:py/server-quickstart.md:304:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"network:py/server-quickstart.md:321:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"network:py/server-quickstart.md:338:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"network:py/server-quickstart.md:397:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"network:py/server-quickstart.md:430:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"network:py/server-quickstart.md:277:hardcoded-ip-address","reason":"The example binds an agent service to 0.0.0.0, which exposes it on all interfaces when run directly. This is common for deployment but needs authentication and network controls.","verdict":"confirmed","severity":"medium","confidence":0.7},{"id":"network:py/server-quickstart.md:447:hardcoded-ip-address","reason":"The example binds an agent service to 0.0.0.0, which exposes it on all interfaces when run directly. This is common for deployment but needs authentication and network controls.","verdict":"confirmed","severity":"medium","confidence":0.7},{"id":"env_access:py/server-quickstart.md:167:dotenv-library","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/server-quickstart.md:183:dotenv-library","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/server-quickstart.md:400:dotenv-library","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/server-quickstart.md:401:dotenv-library","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/server-quickstart.md:167:python-dotenv-loader","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/server-quickstart.md:183:python-dotenv-loader","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/server-quickstart.md:400:python-dotenv-loader","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/server-quickstart.md:401:python-dotenv-loader","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/server-quickstart.md:322:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/server-quickstart.md:394:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"sensitive:py/server-quickstart.md:393:environment-file-access","reason":"The finding points to .env or process.env documentation for local configuration. I found no evidence that the skill reads or exfiltrates a user environment file.","verdict":"false_positive","confidence":0.84},{"id":"external_commands:py/skill.md:26:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:27:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:28:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:29:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:46:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:60:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:61:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:62:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:63:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:78:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:87:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:91:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:112:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:122:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:142:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:146:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:148:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:161:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:163:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:164:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:169:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:179:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:181:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:182:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:183:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:184:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:188:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:213:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:217:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:227:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:233:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:234:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:235:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:236:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:237:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:242:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:243:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:244:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:py/skill.md:245:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"network:py/skill.md:111:hardcoded-ip-address","reason":"The example binds an agent service to 0.0.0.0, which exposes it on all interfaces when run directly. This is common for deployment but needs authentication and network controls.","verdict":"confirmed","severity":"medium","confidence":0.7},{"id":"env_access:py/skill.md:110:python-environment-access","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/skill.md:94:dotenv-library","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/skill.md:95:dotenv-library","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/skill.md:94:python-dotenv-loader","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/skill.md:95:python-dotenv-loader","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:py/skill.md:225:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/skill.md:233:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/skill.md:235:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:py/skill.md:236:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"sensitive:py/skill.md:225:environment-file-access","reason":"The finding points to .env or process.env documentation for local configuration. I found no evidence that the skill reads or exfiltrates a user environment file.","verdict":"false_positive","confidence":0.84},{"id":"external_commands:SKILL.md:12:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:SKILL.md:14:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:SKILL.md:15:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:SKILL.md:17:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"network:SKILL.md:14:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"network:SKILL.md:15:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"env_access:ts/adapter-langchain.md:52:environment-variable-access-dot-notation","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:ts/adapter-langchain.md:52:environment-variable-object","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"obfuscation:ts/adapter-langchain.md:58:base64-decode","reason":"The code decodes a JWT payload with atob and uses the sub claim for tenant isolation without signature verification. This can let a caller spoof user identity.","verdict":"confirmed","severity":"high","confidence":0.9},{"id":"sensitive:ts/adapter-langchain.md:52:environment-file-access","reason":"The finding points to .env or process.env documentation for local configuration. I found no evidence that the skill reads or exfiltrates a user environment file.","verdict":"false_positive","confidence":0.84},{"id":"env_access:ts/adapter-langgraph.md:58:environment-variable-access-dot-notation","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"env_access:ts/adapter-langgraph.md:58:environment-variable-object","reason":"The code example reads expected configuration from environment variables for SDK setup. It does not transmit those values to an unexpected destination.","verdict":"false_positive","confidence":0.86},{"id":"obfuscation:ts/adapter-langgraph.md:64:base64-decode","reason":"The code decodes a JWT payload with atob and uses the sub claim for tenant isolation without signature verification. This can let a caller spoof user identity.","verdict":"confirmed","severity":"high","confidence":0.9},{"id":"sensitive:ts/adapter-langgraph.md:58:environment-file-access","reason":"The finding points to .env or process.env documentation for local configuration. I found no evidence that the skill reads or exfiltrates a user environment file.","verdict":"false_positive","confidence":0.84},{"id":"blocker:ts/adapter-langgraph.md:125:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"external_commands:ts/agent-deployment.md:74:unix-shell-invocation","reason":"The deployment guide contains shell script templates that a coding agent may execute during packaging or startup setup. The commands are legitimate but still create real local execution risk.","verdict":"confirmed","severity":"medium","confidence":0.68},{"id":"external_commands:ts/agent-deployment.md:84:unix-shell-invocation","reason":"The deployment guide contains shell script templates that a coding agent may execute during packaging or startup setup. The commands are legitimate but still create real local execution risk.","verdict":"confirmed","severity":"medium","confidence":0.68},{"id":"external_commands:ts/agent-deployment.md:137:unix-shell-invocation","reason":"The deployment guide contains shell script templates that a coding agent may execute during packaging or startup setup. The commands are legitimate but still create real local execution risk.","verdict":"confirmed","severity":"medium","confidence":0.68},{"id":"env_access:ts/agent-deployment.md:31:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"env_access:ts/agent-deployment.md:96:generic-api-secret-keys","reason":"This is placeholder credential documentation or an environment variable name, not a committed real secret. The surrounding examples show configuration guidance rather than exfiltration.","verdict":"false_positive","confidence":0.87},{"id":"network:ts/server-quickstart.md:82:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"network:ts/server-quickstart.md:128:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"network:ts/server-quickstart.md:138:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88},{"id":"blocker:ts/server-quickstart.md:58:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"external_commands:ts/skill.md:26:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:ts/skill.md:27:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:ts/skill.md:28:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:ts/skill.md:38:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:ts/skill.md:40:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:ts/skill.md:44:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:ts/skill.md:45:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:ts/skill.md:46:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:ts/skill.md:69:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:ts/skill.md:71:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:ts/skill.md:73:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"external_commands:ts/skill.md:77:ruby-shell-backtick-execution","reason":"The match is markdown inline code or a fenced code marker, not executable Ruby backtick syntax. It does not cause command execution by itself.","verdict":"false_positive","confidence":0.89},{"id":"blocker:ts/skill.md:41:system-reconnaissance","reason":"This is user ID, UUID, troubleshooting, or validation text inside agent documentation. It is not host reconnaissance or system enumeration.","verdict":"false_positive","confidence":0.83},{"id":"network:ts/ui-clients.md:16:hardcoded-url","reason":"The URL is an official service, localhost, or placeholder endpoint used in documentation. It is not a hidden outbound request or data exfiltration path.","verdict":"false_positive","confidence":0.88}],"semantic_findings":[{"title":"Authentication Fallback Allows Anonymous Requests","severity":"high","locations":[{"file":"py/adapter-coze.md","line_end":228,"line_start":213}],"confidence":0.91,"description":"The Coze middleware uses a dev-secret fallback and continues requests as user anonymous when the Authorization header is missing or invalid. This can turn a protected agent endpoint into an unauthenticated endpoint if copied into production.","confidence_reasoning":"The cited example directly sets a predictable JWT secret fallback and yields after assigning an anonymous user on missing authentication."},{"title":"Invalid JWT Example Continues Execution","severity":"high","locations":[{"file":"py/authentication.md","line_end":84,"line_start":78}],"confidence":0.86,"description":"The basic authentication middleware logs InvalidTokenError and then yields to the agent instead of blocking the request. Later secure guidance exists, but this initial example is unsafe if reused.","confidence_reasoning":"The code catches InvalidTokenError, prints the error, leaves the blocking exception commented out, and reaches the yield statement."},{"title":"Unverified JWT Payload Used for Tenant Isolation","severity":"high","locations":[{"file":"ts/adapter-langchain.md","line_end":64,"line_start":56},{"file":"ts/adapter-langgraph.md","line_end":69,"line_start":62}],"confidence":0.9,"description":"TypeScript adapter examples parse the JWT body with atob and use payload.sub for CloudBaseSaver userId. The signature is not verified before using that value for tenant isolation.","confidence_reasoning":"Both examples decode the JWT payload client-side and trust sub for storage isolation without a verification step."},{"title":"Wildcard CORS in Agent Server Examples","severity":"medium","locations":[{"file":"py/skill.md","line_end":111,"line_start":106},{"file":"py/adapter-coze.md","line_end":282,"line_start":272},{"file":"py/agent-deployment.md","line_end":356,"line_start":340},{"file":"ts/server-quickstart.md","line_end":83,"line_start":78}],"confidence":0.8,"description":"TypeScript and Python examples enable broad CORS on agent endpoints, including FastAPI credentialed CORS. Public agent APIs should use explicit origin allowlists in production.","confidence_reasoning":"The cited snippets enable wildcard or broadly enabled CORS for agent servers, and one FastAPI example also enables credentials."}],"subject_marketplace_commit_sha":"24b2fe42a456262f3fd0fb3df72e12d9ed2c32ec","subject_content_hash":"d5b1f6e5cd428a3293a8d36d436f5d975430db2b10b1d0ccbfd2e5c1d7e6bbb7","subject_tree_hash":"3b702681b881330c08a816ae0cc088d053c21a3ab6a7e5bd56ed8fe286a85848","subject_plugin_path":"skills/tencentcloudbase/cloudbase-agent","audit_payload_hash":"bc3453eceb8e6d67ed5de2e24111953e","confirmed_risk_level":null,"scanner_version":null,"policy_version":null,"subject":{"marketplaceCommitSha":"24b2fe42a456262f3fd0fb3df72e12d9ed2c32ec","contentHash":"d5b1f6e5cd428a3293a8d36d436f5d975430db2b10b1d0ccbfd2e5c1d7e6bbb7","treeHash":"3b702681b881330c08a816ae0cc088d053c21a3ab6a7e5bd56ed8fe286a85848","pluginPath":"skills/tencentcloudbase/cloudbase-agent","auditPayloadHash":"bc3453eceb8e6d67ed5de2e24111953e"},"scannerVersion":null,"policyVersion":null},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"not_attestable","url":null,"status":null,"reason":"confirmed_risk_level does not match the canonical trust resolver"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"high","confirmedFindingCount":10,"capabilityReviewCount":18,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"confirmation_required","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":true}}