{"data":{"skill":{"slug":"threadpage-threadpage","name":"threadpage","icon":"📦","repo":"https://github.com/threadpage/threadpage-companion/tree/6b26845a15b36d7631787e45d6467df2f4c5fa0a/plugins/threadpage/skills/threadpage","status":"approved","author":"threadpage","authorVersion":null,"skillstoreRevision":1,"license":null},"licenseCorrection":null,"audit":{"id":"6d5718e1-29ce-42eb-89c3-ff3c40c1bcfb","skill_id":"bfa06321-0c3f-4676-bd80-5ff9887a1ec8","version":1,"content_hash":"v3:c993c6abcbffafea2683d7748b53b3dfaf438415:385b035dbf29661799ab5460fba4b52bfb578a26112142ac2b42f4777b9ec1cc:1a72389f839c0302ad111e8fb09b7cc5a9962444f59cffdc58da9cacc857a8ba:736b696c6c732f746872656164706167652f74687265616470616765:ca996a4bd0cc4c94d71b83678b862bb2","risk_level":"safe","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"All 14 static findings are false positives involving Markdown delimiters, documented service URLs, or application safety guidance. No evidence found of shell execution, system reconnaissance, credential theft, unauthorized data transfer, or audit-directed prompt injection. The skill describes authorized remote note operations; the service implementation and its enforcement are outside this review.","remediation":[],"risk_factor_evidence":[{"factor":"network","evidence":[{"file":"references/formatting.md","line_end":62,"line_start":62},{"file":"SKILL.md","line_end":8,"line_start":8}]},{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":8,"line_start":8},{"file":"SKILL.md","line_end":12,"line_start":12},{"file":"SKILL.md","line_end":41,"line_start":33},{"file":"SKILL.md","line_end":48,"line_start":41},{"file":"SKILL.md","line_end":48,"line_start":48}]}],"critical_findings":[],"high_findings":[],"medium_findings":[],"low_findings":[],"dangerous_patterns":[],"files_scanned":3,"total_lines":354,"audit_model":"codex","audited_at":"2026-11-06T20:42:47.43+00:00","created_at":"2026-11-09T15:36:20.753505+00:00","static_findings":[{"id":"network:references/formatting.md:62:hardcoded-url","file":"references/formatting.md","pattern":"Hardcoded URL","snippet":"https://thread.page/app/notes/0b7f6a62-5d3c-4f0e-9a51-6f2f1c8d4e21","category":"network","line_end":62,"severity":"low","line_start":62},{"id":"blocker:references/working.md:43:system-reconnaissance","file":"references/working.md","pattern":"System reconnaissance","snippet":"| `get_reminder`, `list_reminders` | The person's own reminder on a Thread or on a Note in it, or al","category":"blocker","line_end":43,"severity":"low","line_start":43},{"id":"blocker:references/working.md:92:system-reconnaissance","file":"references/working.md","pattern":"System reconnaissance","snippet":"When a write times out or its answer is lost, you do not know whether it happened. Send the **identi","category":"blocker","line_end":92,"severity":"low","line_start":92},{"id":"blocker:references/working.md:103:system-reconnaissance","file":"references/working.md","pattern":"System reconnaissance","snippet":"| Changes to Notes you did not add or a person edited, and moves to Trash | 200 an hour, 1,000 a day","category":"blocker","line_end":103,"severity":"low","line_start":103},{"id":"blocker:references/working.md:124:system-reconnaissance","file":"references/working.md","pattern":"System reconnaissance","snippet":"| `declined` | The person did not accept. Do not repeat it |","category":"blocker","line_end":124,"severity":"low","line_start":124},{"id":"blocker:references/working.md:150:system-reconnaissance","file":"references/working.md","pattern":"System reconnaissance","snippet":"- You see only accepted content in this connection's scope, and a Note someone is typing in can be r","category":"blocker","line_end":150,"severity":"low","line_start":150},{"id":"external_commands:SKILL.md:8:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"ThreadPage (https://thread.page) is a private workspace for ongoing work. Its MCP server is `https:/","category":"external_commands","line_end":8,"severity":"medium","line_start":8},{"id":"external_commands:SKILL.md:12:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"This skill comes with the ThreadPage plugin for Claude Code, which is this session's own connection ","category":"external_commands","line_end":12,"severity":"medium","line_start":12},{"id":"external_commands:SKILL.md:33:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```markdown","category":"external_commands","line_end":41,"severity":"medium","line_start":33},{"id":"external_commands:SKILL.md:41:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":48,"severity":"medium","line_start":41},{"id":"external_commands:SKILL.md:48:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"The same guides come from the server: `get_guide` with topic `formatting` or `working`, or the resou","category":"external_commands","line_end":48,"severity":"medium","line_start":48},{"id":"network:SKILL.md:8:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"ThreadPage (https://thread.page) is a private workspace for ongoing work. Its MCP server is `https:/","category":"network","line_end":8,"severity":"low","line_start":8},{"id":"blocker:SKILL.md:23:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- Read a Note with get_note before quoting, summarizing or editing it; never claim to have read what","category":"blocker","line_end":23,"severity":"low","line_start":23},{"id":"blocker:SKILL.md:25:system-reconnaissance","file":"SKILL.md","pattern":"System reconnaissance","snippet":"- Every write takes a new UUID operation_id. After a timeout or lost answer, repeat the identical ca","category":"blocker","line_end":25,"severity":"low","line_start":25}],"finding_verdicts":[{"id":"network:references/formatting.md:62:hardcoded-url","reason":"The URL is inside a fenced Markdown example demonstrating a Note reference. It does not initiate a request or transmit data.","verdict":"false_positive","confidence":0.99},{"id":"blocker:references/working.md:43:system-reconnaissance","reason":"This table row documents reminder tools and their returned fields. It does not inspect the host system or collect system information.","verdict":"false_positive","confidence":0.99},{"id":"blocker:references/working.md:92:system-reconnaissance","reason":"This paragraph explains checking write receipts and retrying with the same operation ID. It prevents duplicate notes rather than performing reconnaissance.","verdict":"false_positive","confidence":0.99},{"id":"blocker:references/working.md:103:system-reconnaissance","reason":"This row states application rate limits for edits and Trash operations. It contains no system inspection instructions.","verdict":"false_positive","confidence":0.99},{"id":"blocker:references/working.md:124:system-reconnaissance","reason":"The declined error explicitly instructs the assistant not to repeat an action the person refused. This respects consent and performs no reconnaissance.","verdict":"false_positive","confidence":0.99},{"id":"blocker:references/working.md:150:system-reconnaissance","reason":"This safety rule explains connection scope, unavailable drafts, and limits on claiming access. It restricts data access rather than gathering host information.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:8:ruby-shell-backtick-execution","reason":"Backticks mark the MCP URL and get_guide identifier as inline Markdown code. No Ruby expression, shell command, or execution instruction appears.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:12:ruby-shell-backtick-execution","reason":"The backticks format plugin connection commands that the person must enter and approve in the browser. They are not shell execution syntax.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:33:ruby-shell-backtick-execution","reason":"These lines are a fenced Markdown sample containing research notes and a checklist. The backticks delimit example content, not executable commands.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:41:ruby-shell-backtick-execution","reason":"The span closes a Markdown example and lists documentation references. Its backticks are formatting delimiters, with no shell or Ruby execution.","verdict":"false_positive","confidence":0.99},{"id":"external_commands:SKILL.md:48:ruby-shell-backtick-execution","reason":"Inline backticks identify guide topics, a tool name, and resource URIs. This documents guide retrieval and contains no shell execution.","verdict":"false_positive","confidence":0.99},{"id":"network:SKILL.md:8:hardcoded-url","reason":"The URLs identify ThreadPage and its OAuth-authenticated MCP endpoint, matching the stated note-management purpose. No hidden destination or unauthorized transfer is specified.","verdict":"false_positive","confidence":0.98},{"id":"blocker:SKILL.md:23:system-reconnaissance","reason":"The rule requires reading a Note before quoting, summarizing, or editing it. This supports accurate application use, not system reconnaissance.","verdict":"false_positive","confidence":0.99},{"id":"blocker:SKILL.md:25:system-reconnaissance","reason":"The rule requires operation IDs and identical retries after lost responses to avoid duplicate writes. It does not inspect the host or bypass access controls.","verdict":"false_positive","confidence":0.99}],"semantic_findings":[],"subject_marketplace_commit_sha":"c993c6abcbffafea2683d7748b53b3dfaf438415","subject_content_hash":"385b035dbf29661799ab5460fba4b52bfb578a26112142ac2b42f4777b9ec1cc","subject_tree_hash":"1a72389f839c0302ad111e8fb09b7cc5a9962444f59cffdc58da9cacc857a8ba","subject_plugin_path":"skills/threadpage/threadpage","audit_payload_hash":"ca996a4bd0cc4c94d71b83678b862bb2","confirmed_risk_level":"safe","scanner_version":"3.0.0","policy_version":"skillstore-security-audit-policy-v1","subject":{"marketplaceCommitSha":"c993c6abcbffafea2683d7748b53b3dfaf438415","contentHash":"385b035dbf29661799ab5460fba4b52bfb578a26112142ac2b42f4777b9ec1cc","treeHash":"1a72389f839c0302ad111e8fb09b7cc5a9962444f59cffdc58da9cacc857a8ba","pluginPath":"skills/threadpage/threadpage","auditPayloadHash":"ca996a4bd0cc4c94d71b83678b862bb2"},"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/threadpage-threadpage/audits/1/attestation","status":"active"},"trust":{"publicState":"public","auditState":"complete","auditCurrentness":null,"confirmedRiskLevel":"safe","confirmedFindingCount":0,"capabilityReviewCount":0,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"active","verificationState":"not_verified"},"isLatest":true}}