{"data":{"skill":{"slug":"theguysaccount-syncbook","name":"syncbook","icon":"📦","repo":"https://github.com/theguysaccount/syncbook-agent/tree/85b8364fcbb697d73a16ce56eeefb56fc2b82b11/","status":"approved","author":"theguysaccount","authorVersion":null,"skillstoreRevision":1},"audit":{"id":"1959c10c-2378-4dda-a59f-c2f5a01d3fde","skill_id":"202415e6-893a-4a69-928a-513bea8f3482","version":1,"content_hash":"v3:83d8a0a42a32126fb19983512e32b45bfe3d70f9:c42c657541293bf56bf830c3a10d49b74f09985d91900d78778aa26ca2f0e8c2:d1276ba5e9e2d2b240cbb998e70edfb83560539d27ea718121cb37bceaca3c47:736b696c6c732f746865677579736163636f756e742f73796e63626f6f6b:26d721d84724d63ea865d34727813ada","risk_level":"medium","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"Most static detections are benign documentation, JavaScript syntax, or private credential storage; no evidence of deliberate credential theft was found. The shared request helper can forward sensitive bodies through redirects, and remote prompts introduce an unpinned instruction trust boundary.","remediation":[{"issue":"Automatic redirects can send sensitive request bodies outside the configured origin allowlist.","severity":"medium","suggestion":"Set redirect to error for API requests, including connect. If redirects are necessary, validate every destination before resending any body or credentials."},{"issue":"Live remote prompts supply coordination instructions and the weekly scheduled task without a pinned or reviewed version.","severity":"medium","suggestion":"Bundle reviewed prompts or verify pinned hashes. Treat remote text as untrusted and require owner review before incorporating changed instructions into scheduled tasks."}],"risk_factor_evidence":[{"factor":"network","evidence":[{"file":"README.md","line_end":10,"line_start":10},{"file":"scripts/syncbook.mjs","line_end":21,"line_start":21},{"file":"scripts/syncbook.mjs","line_end":24,"line_start":24},{"file":"scripts/syncbook.mjs","line_end":49,"line_start":49},{"file":"scripts/syncbook.mjs","line_end":10,"line_start":10},{"file":"scripts/syncbook.mjs","line_end":14,"line_start":14},{"file":"scripts/syncbook.mjs","line_end":12,"line_start":12},{"file":"SKILL.md","line_end":8,"line_start":8},{"file":"SKILL.md","line_end":16,"line_start":16},{"file":"SKILL.md","line_end":22,"line_start":22},{"file":"SKILL.md","line_end":23,"line_start":23},{"file":"SKILL.md","line_end":42,"line_start":42}]},{"factor":"filesystem","evidence":[{"file":"references/api.md","line_end":45,"line_start":45},{"file":"references/api.md","line_end":45,"line_start":45},{"file":"scripts/syncbook.mjs","line_end":24,"line_start":24}]},{"factor":"external_commands","evidence":[{"file":"scripts/syncbook.mjs","line_end":21,"line_start":21},{"file":"scripts/syncbook.mjs","line_end":23,"line_start":23},{"file":"scripts/syncbook.mjs","line_end":49,"line_start":49},{"file":"scripts/syncbook.mjs","line_end":54,"line_start":54},{"file":"scripts/syncbook.mjs","line_end":55,"line_start":55},{"file":"SKILL.md","line_end":8,"line_start":8},{"file":"SKILL.md","line_end":14,"line_start":14},{"file":"SKILL.md","line_end":16,"line_start":16},{"file":"SKILL.md","line_end":23,"line_start":23},{"file":"SKILL.md","line_end":24,"line_start":24},{"file":"SKILL.md","line_end":32,"line_start":32},{"file":"SKILL.md","line_end":34,"line_start":34},{"file":"SKILL.md","line_end":40,"line_start":40},{"file":"SKILL.md","line_end":42,"line_start":42}]},{"factor":"env_access","evidence":[{"file":"scripts/syncbook.mjs","line_end":10,"line_start":10},{"file":"scripts/syncbook.mjs","line_end":15,"line_start":15},{"file":"scripts/syncbook.mjs","line_end":10,"line_start":10},{"file":"scripts/syncbook.mjs","line_end":15,"line_start":15}]}],"critical_findings":[],"high_findings":[],"medium_findings":[{"title":"Fetch API call","locations":[{"file":"scripts/syncbook.mjs","line_end":21,"line_start":21}],"confidence":0.97,"description":"async function call(path,method='GET',data,privateAccess=false){const headers={};if(data!==undefined","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"Fetch follows redirects without rechecking the origin allowlist. A 307 or 308 response can forward profile data or the status request's token body externally."},{"title":"Unpinned Remote Instructions Enter Agent Workflows","locations":[{"file":"SKILL.md","line_end":22,"line_start":22},{"file":"SKILL.md","line_end":42,"line_start":40},{"file":"references/api.md","line_end":58,"line_start":58},{"file":"references/weekly.md","line_end":18,"line_start":18}],"confidence":0.93,"description":"The skill says to read the 'complete coordination handoff' and create a weekly job using a live remote prompt. No pinned version or review step protects against changed instructions entering a persistent task with authorized connectors.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"The source explicitly delegates coordination and scheduled instructions to mutable remote text without integrity checks. No evidence of an actual malicious remote payload was found."}],"low_findings":[],"dangerous_patterns":[],"files_scanned":6,"total_lines":308,"audit_model":"codex","audited_at":"2026-10-25T22:41:56.985+00:00","created_at":"2026-10-25T23:43:36.408409+00:00","static_findings":[{"id":"network:README.md:10:hardcoded-url","file":"README.md","pattern":"Hardcoded URL","snippet":"Read https://syncbook.org/join.md and help me join Syncbook. Use relevant context I authorize to pre","category":"network","line_end":10,"severity":"low","line_start":10},{"id":"filesystem:references/api.md:45:hidden-file-in-home-directory","file":"references/api.md","pattern":"Hidden file in home directory","snippet":"Run the bundled helper with `node <skill-folder>/scripts/syncbook.mjs help`. Commands: prepare, stat","category":"filesystem","line_end":45,"severity":"high","line_start":45},{"id":"filesystem:references/api.md:45:hidden-file-access","file":"references/api.md","pattern":"Hidden file access","snippet":"Run the bundled helper with `node <skill-folder>/scripts/syncbook.mjs help`. Commands: prepare, stat","category":"filesystem","line_end":45,"severity":"medium","line_start":45},{"id":"blocker:references/weekly.md:10:system-reconnaissance","file":"references/weekly.md","pattern":"System reconnaissance","snippet":"6. Propose profile changes as private context drafts only if separately granted draft_context. Do no","category":"blocker","line_end":10,"severity":"low","line_start":10},{"id":"external_commands:scripts/syncbook.mjs:21:ruby-shell-backtick-execution","file":"scripts/syncbook.mjs","pattern":"Ruby/shell backtick execution","snippet":"async function call(path,method='GET',data,privateAccess=false){const headers={};if(data!==undefined","category":"external_commands","line_end":21,"severity":"medium","line_start":21},{"id":"external_commands:scripts/syncbook.mjs:23:ruby-shell-backtick-execution","file":"scripts/syncbook.mjs","pattern":"Ruby/shell backtick execution","snippet":"if(command==='help')console.log(`Syncbook terminal adapter\\n\\nnode syncbook.mjs guide [--origin HTTP","category":"external_commands","line_end":23,"severity":"medium","line_start":23},{"id":"external_commands:scripts/syncbook.mjs:49:ruby-shell-backtick-execution","file":"scripts/syncbook.mjs","pattern":"Ruby/shell backtick execution","snippet":"else if(command==='guide'){const r=await fetch(origin+'/join.md',{signal:AbortSignal.timeout(15000)}","category":"external_commands","line_end":49,"severity":"medium","line_start":49},{"id":"external_commands:scripts/syncbook.mjs:54:ruby-shell-backtick-execution","file":"scripts/syncbook.mjs","pattern":"Ruby/shell backtick execution","snippet":"console.log(`Private draft prepared. No profile has been published.\\nGive this private review link o","category":"external_commands","line_end":54,"severity":"medium","line_start":54},{"id":"external_commands:scripts/syncbook.mjs:55:ruby-shell-backtick-execution","file":"scripts/syncbook.mjs","pattern":"Ruby/shell backtick execution","snippet":"}else if(command==='status'){const s=await state();if(!s.enrollmentId)throw new Error('This is an ex","category":"external_commands","line_end":55,"severity":"medium","line_start":55},{"id":"network:scripts/syncbook.mjs:21:fetch-api-call","file":"scripts/syncbook.mjs","pattern":"Fetch API call","snippet":"async function call(path,method='GET',data,privateAccess=false){const headers={};if(data!==undefined","category":"network","line_end":21,"severity":"low","line_start":21},{"id":"network:scripts/syncbook.mjs:24:fetch-api-call","file":"scripts/syncbook.mjs","pattern":"Fetch API call","snippet":"else if(command==='connect'){let raw='';for await(const chunk of process.stdin){raw+=chunk;if(raw.le","category":"network","line_end":24,"severity":"low","line_start":24},{"id":"network:scripts/syncbook.mjs:49:fetch-api-call","file":"scripts/syncbook.mjs","pattern":"Fetch API call","snippet":"else if(command==='guide'){const r=await fetch(origin+'/join.md',{signal:AbortSignal.timeout(15000)}","category":"network","line_end":49,"severity":"low","line_start":49},{"id":"network:scripts/syncbook.mjs:10:hardcoded-url","file":"scripts/syncbook.mjs","pattern":"Hardcoded URL","snippet":"const requested=index>=0?args.splice(index,2)[1]:(process.env.SYNCBOOK_ORIGIN||'https://syncbook.org","category":"network","line_end":10,"severity":"low","line_start":10},{"id":"network:scripts/syncbook.mjs:14:hardcoded-url","file":"scripts/syncbook.mjs","pattern":"Hardcoded URL","snippet":"if(!local&&!['https://syncbook.org','https://common-horizon.cuelayer.workers.dev'].includes(origin))","category":"network","line_end":14,"severity":"low","line_start":14},{"id":"network:scripts/syncbook.mjs:12:hardcoded-ip-address","file":"scripts/syncbook.mjs","pattern":"Hardcoded IP address","snippet":"const local=['localhost','127.0.0.1','[::1]'].includes(url.hostname);","category":"network","line_end":12,"severity":"medium","line_start":12},{"id":"filesystem:scripts/syncbook.mjs:24:hidden-file-access","file":"scripts/syncbook.mjs","pattern":"Hidden file access","snippet":"else if(command==='connect'){let raw='';for await(const chunk of process.stdin){raw+=chunk;if(raw.le","category":"filesystem","line_end":24,"severity":"medium","line_start":24},{"id":"env_access:scripts/syncbook.mjs:10:environment-variable-access-dot-notation","file":"scripts/syncbook.mjs","pattern":"Environment variable access (dot notation)","snippet":"const requested=index>=0?args.splice(index,2)[1]:(process.env.SYNCBOOK_ORIGIN||'https://syncbook.org","category":"env_access","line_end":10,"severity":"low","line_start":10},{"id":"env_access:scripts/syncbook.mjs:15:environment-variable-access-dot-notation","file":"scripts/syncbook.mjs","pattern":"Environment variable access (dot notation)","snippet":"const directory=process.env.SYNCBOOK_STATE_DIR||join(homedir(),'.config','syncbook');","category":"env_access","line_end":15,"severity":"low","line_start":15},{"id":"env_access:scripts/syncbook.mjs:10:environment-variable-object","file":"scripts/syncbook.mjs","pattern":"Environment variable object","snippet":"const requested=index>=0?args.splice(index,2)[1]:(process.env.SYNCBOOK_ORIGIN||'https://syncbook.org","category":"env_access","line_end":10,"severity":"low","line_start":10},{"id":"env_access:scripts/syncbook.mjs:15:environment-variable-object","file":"scripts/syncbook.mjs","pattern":"Environment variable object","snippet":"const directory=process.env.SYNCBOOK_STATE_DIR||join(homedir(),'.config','syncbook');","category":"env_access","line_end":15,"severity":"low","line_start":15},{"id":"sensitive:scripts/syncbook.mjs:10:environment-file-access","file":"scripts/syncbook.mjs","pattern":"Environment file access","snippet":"const requested=index>=0?args.splice(index,2)[1]:(process.env.SYNCBOOK_ORIGIN||'https://syncbook.org","category":"sensitive","line_end":10,"severity":"high","line_start":10},{"id":"sensitive:scripts/syncbook.mjs:15:environment-file-access","file":"scripts/syncbook.mjs","pattern":"Environment file access","snippet":"const directory=process.env.SYNCBOOK_STATE_DIR||join(homedir(),'.config','syncbook');","category":"sensitive","line_end":15,"severity":"high","line_start":15},{"id":"blocker:scripts/syncbook.mjs:12:system-reconnaissance","file":"scripts/syncbook.mjs","pattern":"System reconnaissance","snippet":"const local=['localhost','127.0.0.1','[::1]'].includes(url.hostname);","category":"blocker","line_end":12,"severity":"low","line_start":12},{"id":"external_commands:SKILL.md:8:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Help the person find useful things they can make possible with others. Human choice is the center of","category":"external_commands","line_end":8,"severity":"medium","line_start":8},{"id":"external_commands:SKILL.md:14:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"When the host has a terminal, the bundled `scripts/syncbook.mjs` helper is another path. It reads on","category":"external_commands","line_end":14,"severity":"medium","line_start":14},{"id":"external_commands:SKILL.md:16:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"If HTTP, MCP, or a terminal is unavailable, prepare portable JSON for the person to paste at `https:","category":"external_commands","line_end":16,"severity":"medium","line_start":16},{"id":"external_commands:SKILL.md:23:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"2. Read `https://syncbook.org/join.md` and the live OpenAPI schema. Build a substantial, truthful pr","category":"external_commands","line_end":23,"severity":"medium","line_start":23},{"id":"external_commands:SKILL.md:24:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"3. Use `preview_profile` or the helper's `preview`, then `prepare_signup` or `prepare`. Return the p","category":"external_commands","line_end":24,"severity":"medium","line_start":24},{"id":"external_commands:SKILL.md:32:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Read `get_my_preferences` first. Automatic summaries require **shareAgentFeedback** and the **submit","category":"external_commands","line_end":32,"severity":"medium","line_start":32},{"id":"external_commands:SKILL.md:34:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Send the question or observation, category, and desired outcome with `consent:true`. Report the rece","category":"external_commands","line_end":34,"severity":"medium","line_start":34},{"id":"external_commands:SKILL.md:40:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Read [the weekly workflow](references/weekly.md). Use the host's durable native scheduler: Claude cl","category":"external_commands","line_end":40,"severity":"medium","line_start":40},{"id":"external_commands:SKILL.md:42:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"Create a weekly job using the prompt at `https://syncbook.org/weekly-prompt.txt`. Verify the job exi","category":"external_commands","line_end":42,"severity":"medium","line_start":42},{"id":"network:SKILL.md:8:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"Help the person find useful things they can make possible with others. Human choice is the center of","category":"network","line_end":8,"severity":"low","line_start":8},{"id":"network:SKILL.md:16:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"If HTTP, MCP, or a terminal is unavailable, prepare portable JSON for the person to paste at `https:","category":"network","line_end":16,"severity":"low","line_start":16},{"id":"network:SKILL.md:22:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"1. Check whether this person already has a profile or scoped access. Avoid duplicate enrollment. Use","category":"network","line_end":22,"severity":"low","line_start":22},{"id":"network:SKILL.md:23:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"2. Read `https://syncbook.org/join.md` and the live OpenAPI schema. Build a substantial, truthful pr","category":"network","line_end":23,"severity":"low","line_start":23},{"id":"network:SKILL.md:42:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"Create a weekly job using the prompt at `https://syncbook.org/weekly-prompt.txt`. Verify the job exi","category":"network","line_end":42,"severity":"low","line_start":42},{"id":"blocker:SKILL.md:22:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"1. Check whether this person already has a profile or scoped access. Avoid duplicate enrollment. Use","category":"blocker","line_end":22,"severity":"low","line_start":22}],"finding_verdicts":[{"id":"network:README.md:10:hardcoded-url","reason":"This onboarding example links to the declared Syncbook service and explicitly requires authorized context and profile approval. No covert destination is present.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:references/api.md:45:hidden-file-in-home-directory","reason":"The documented directory stores only this application's scoped token. The helper uses host-specific state, directory mode 0700, and file mode 0600.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:references/api.md:45:hidden-file-access","reason":"This is documented private application state, not access to unrelated hidden files. The helper accepts a token explicitly through stdin.","verdict":"false_positive","confidence":0.99},{"id":"blocker:references/weekly.md:10:system-reconnaissance","reason":"The instruction limits profile changes to private drafts with a separate grant. It performs no host enumeration or system reconnaissance.","verdict":"false_positive","confidence":1},{"id":"external_commands:scripts/syncbook.mjs:21:ruby-shell-backtick-execution","reason":"Backticks construct a JavaScript HTTP error message. No shell execution or subprocess API is used.","verdict":"false_positive","confidence":1},{"id":"external_commands:scripts/syncbook.mjs:23:ruby-shell-backtick-execution","reason":"This JavaScript template literal prints static command help. The listed commands are not executed by the help branch.","verdict":"false_positive","confidence":1},{"id":"external_commands:scripts/syncbook.mjs:49:ruby-shell-backtick-execution","reason":"The backticks format an HTTP status error in JavaScript. Fetching and printing documentation does not execute shell commands.","verdict":"false_positive","confidence":1},{"id":"external_commands:scripts/syncbook.mjs:54:ruby-shell-backtick-execution","reason":"The template literal prints review links and a returned handoff. It does not invoke a shell or evaluate interpolated text as code.","verdict":"false_positive","confidence":1},{"id":"external_commands:scripts/syncbook.mjs:55:ruby-shell-backtick-execution","reason":"This JavaScript template literal builds an enrollment status API path. No shell or subprocess is involved.","verdict":"false_positive","confidence":1},{"id":"network:scripts/syncbook.mjs:21:fetch-api-call","reason":"Fetch follows redirects without rechecking the origin allowlist. A 307 or 308 response can forward profile data or the status request's token body externally.","verdict":"confirmed","severity":"medium","confidence":0.97},{"id":"network:scripts/syncbook.mjs:24:fetch-api-call","reason":"Connect validates an explicitly supplied scoped token against the selected Syncbook origin. Cross-origin fetch redirects strip Authorization; this request has no token-bearing body.","verdict":"false_positive","confidence":0.98},{"id":"network:scripts/syncbook.mjs:49:fetch-api-call","reason":"The guide command retrieves public onboarding documentation without credentials or a request body. This fetch is part of the documented workflow.","verdict":"false_positive","confidence":0.99},{"id":"network:scripts/syncbook.mjs:10:hardcoded-url","reason":"The default URL is the declared service. Subsequent validation rejects public HTTP origins, URL credentials, and unlisted public hosts.","verdict":"false_positive","confidence":0.99},{"id":"network:scripts/syncbook.mjs:14:hardcoded-url","reason":"These two URLs form an explicit public origin allowlist. Their presence restricts initial destinations rather than introducing an unrelated exfiltration endpoint.","verdict":"false_positive","confidence":0.99},{"id":"network:scripts/syncbook.mjs:12:hardcoded-ip-address","reason":"The addresses are IPv4 and IPv6 loopback identifiers for explicitly selected local operation. No remote hardcoded IP destination is present.","verdict":"false_positive","confidence":0.99},{"id":"filesystem:scripts/syncbook.mjs:24:hidden-file-access","reason":"Connect stores only the explicitly supplied scoped token after service validation. The store helper applies private permissions to host-specific application state.","verdict":"false_positive","confidence":0.99},{"id":"env_access:scripts/syncbook.mjs:10:environment-variable-access-dot-notation","reason":"SYNCBOOK_ORIGIN selects the intended service endpoint and is subsequently validated. This line neither enumerates environment variables nor reads credentials.","verdict":"false_positive","confidence":0.99},{"id":"env_access:scripts/syncbook.mjs:15:environment-variable-access-dot-notation","reason":"SYNCBOOK_STATE_DIR is a dedicated application storage override. It does not read unrelated environment secrets or transmit environment contents.","verdict":"false_positive","confidence":0.99},{"id":"env_access:scripts/syncbook.mjs:10:environment-variable-object","reason":"Only the named SYNCBOOK_ORIGIN setting is read. There is no environment-object enumeration, serialization, or bulk export.","verdict":"false_positive","confidence":1},{"id":"env_access:scripts/syncbook.mjs:15:environment-variable-object","reason":"Only the named SYNCBOOK_STATE_DIR setting is read to choose local storage. The environment object is not collected or transmitted.","verdict":"false_positive","confidence":1},{"id":"sensitive:scripts/syncbook.mjs:10:environment-file-access","reason":"This is a process.env property read, not access to an environment file. No dotenv file is opened here.","verdict":"false_positive","confidence":1},{"id":"sensitive:scripts/syncbook.mjs:15:environment-file-access","reason":"This line reads an application directory setting from process.env. It does not open or search for environment files.","verdict":"false_positive","confidence":1},{"id":"blocker:scripts/syncbook.mjs:12:system-reconnaissance","reason":"The comparison classifies a user-selected URL as loopback. It does not inspect network interfaces, scan ports, or enumerate the host.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:8:ruby-shell-backtick-execution","reason":"Markdown backticks mark the service URL as inline text. They are not executable shell syntax in this document.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:14:ruby-shell-backtick-execution","reason":"Inline code identifies the bundled Node helper and its connect command. The text requires private credential handling and prohibits hidden hooks.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:16:ruby-shell-backtick-execution","reason":"The backticks format a browser fallback URL. Preparing portable data does not execute a shell command.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:23:ruby-shell-backtick-execution","reason":"The backticks format an onboarding documentation URL. The instruction requests profile preparation, not shell evaluation.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:24:ruby-shell-backtick-execution","reason":"The inline identifiers name preview and signup operations. These documented application actions are not backtick-based shell execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:32:ruby-shell-backtick-execution","reason":"The backticks mark a preferences tool name. The surrounding instructions enforce opt-in and scope checks rather than invoking a shell.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:34:ruby-shell-backtick-execution","reason":"The inline consent field is a documented payload value. It is not executable code or a shell substitution.","verdict":"false_positive","confidence":1},{"id":"external_commands:SKILL.md:40:ruby-shell-backtick-execution","reason":"The backticks identify native scheduler commands. Scheduling requires explicit authorization, and this line does not execute an OS shell command.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:42:ruby-shell-backtick-execution","reason":"The backticks format a remote prompt URL. The instruction explicitly prohibits OS cron and global configuration workarounds; remote instruction trust is assessed separately.","verdict":"false_positive","confidence":1},{"id":"network:SKILL.md:8:hardcoded-url","reason":"This names the skill's declared service. The same paragraph explicitly treats profiles, documents, and tool results as untrusted data.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:16:hardcoded-url","reason":"The URL is a manual browser fallback on the declared service. The person controls whether to paste the locally prepared profile.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:22:hardcoded-url","reason":"The URL retrieves a service coordination handoff without itself sending private context. Trusting remote instructions is a separate semantic concern.","verdict":"false_positive","confidence":0.98},{"id":"network:SKILL.md:23:hardcoded-url","reason":"This is the declared service's onboarding guide. The surrounding instructions exclude sensitive facts, raw conversations, and other people's private information.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:42:hardcoded-url","reason":"Retrieving a public prompt from the declared service is not itself exfiltration. Incorporating unpinned remote instructions into a schedule is assessed separately.","verdict":"false_positive","confidence":0.98},{"id":"blocker:SKILL.md:22:system-reconnaissance","reason":"The instruction checks existing enrollment and authorized session context to avoid duplicates. It does not authorize disk searches or system reconnaissance.","verdict":"false_positive","confidence":0.99}],"semantic_findings":[{"title":"Unpinned Remote Instructions Enter Agent Workflows","severity":"medium","locations":[{"file":"SKILL.md","line_end":22,"line_start":22},{"file":"SKILL.md","line_end":42,"line_start":40},{"file":"references/api.md","line_end":58,"line_start":58},{"file":"references/weekly.md","line_end":18,"line_start":18}],"confidence":0.93,"description":"The skill says to read the 'complete coordination handoff' and create a weekly job using a live remote prompt. No pinned version or review step protects against changed instructions entering a persistent task with authorized connectors.","confidence_reasoning":"The source explicitly delegates coordination and scheduled instructions to mutable remote text without integrity checks. No evidence of an actual malicious remote payload was found."}],"subject_marketplace_commit_sha":"83d8a0a42a32126fb19983512e32b45bfe3d70f9","subject_content_hash":"c42c657541293bf56bf830c3a10d49b74f09985d91900d78778aa26ca2f0e8c2","subject_tree_hash":"d1276ba5e9e2d2b240cbb998e70edfb83560539d27ea718121cb37bceaca3c47","subject_plugin_path":"skills/theguysaccount/syncbook","audit_payload_hash":"26d721d84724d63ea865d34727813ada","confirmed_risk_level":"medium","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"83d8a0a42a32126fb19983512e32b45bfe3d70f9","contentHash":"c42c657541293bf56bf830c3a10d49b74f09985d91900d78778aa26ca2f0e8c2","treeHash":"d1276ba5e9e2d2b240cbb998e70edfb83560539d27ea718121cb37bceaca3c47","pluginPath":"skills/theguysaccount/syncbook","auditPayloadHash":"26d721d84724d63ea865d34727813ada"},"scannerVersion":"3.0.0","policyVersion":"skillstore-security-audit-policy-v1"},"auditTranslation":null,"localization":{"requestedLocale":"en","contentLocale":"en","availableLocales":["en"],"fallbackToEnglish":false},"attestation":{"availability":"issued","url":"/api/skills/theguysaccount-syncbook/audits/1/attestation","status":"active"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"medium","confirmedFindingCount":1,"capabilityReviewCount":1,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"active","verificationState":"not_verified"},"isLatest":true}}