{"data":{"skill":{"slug":"101-skills-twitter-automation","name":"twitter-automation","icon":"📦","repo":"https://github.com/101-skills/skills/tree/main/tools/social/twitter-automation/","status":"approved","author":"101-skills","authorVersion":null,"skillstoreRevision":null},"audit":{"id":"b1c80bf6-2190-4be6-855b-324947fd95ae","skill_id":"8de886ac-0822-4c4d-b5c1-c8a632c76954","version":1,"content_hash":"5291efccc32a3e8589fa0f8dfac480dd","risk_level":"medium","is_blocked":false,"safe_to_publish":true,"analysis_status":"ok","agent_auto_install_policy":"allowed","manual_install_policy":"allowed","summary":"The skill is documentation-only, but it includes actionable belt and npx commands for installing external skills and performing authenticated Twitter/X actions. I confirmed real command-execution and account-mutation examples, while marking markdown fences, app identifiers, and ordinary documentation links as false positives. No prompt injection text was found.","remediation":[{"issue":"External package installation through npx","severity":"medium","suggestion":"Pin trusted package sources, prefer signed releases, and tell users to review package provenance before installing related skills."},{"issue":"Authenticated Twitter/X mutations","severity":"medium","suggestion":"Require explicit user confirmation before posting, deleting, sending DMs, following users, liking, or retweeting from a connected account."},{"issue":"Third-party CLI authentication dependency","severity":"medium","suggestion":"Document where belt stores credentials, how users can revoke access, and how to avoid exposing account tokens."},{"issue":"Embedded remote image in documentation","severity":"low","suggestion":"Use a local marketplace asset or make the remote image optional to reduce automatic third-party requests during rendering."}],"risk_factor_evidence":[{"factor":"external_commands","evidence":[{"file":"SKILL.md","line_end":7,"line_start":7},{"file":"SKILL.md","line_end":17,"line_start":17},{"file":"SKILL.md","line_end":24,"line_start":19},{"file":"SKILL.md","line_end":31,"line_start":24},{"file":"SKILL.md","line_end":32,"line_start":31},{"file":"SKILL.md","line_end":33,"line_start":32},{"file":"SKILL.md","line_end":34,"line_start":33},{"file":"SKILL.md","line_end":35,"line_start":34},{"file":"SKILL.md","line_end":36,"line_start":35},{"file":"SKILL.md","line_end":37,"line_start":36},{"file":"SKILL.md","line_end":38,"line_start":37},{"file":"SKILL.md","line_end":39,"line_start":38},{"file":"SKILL.md","line_end":45,"line_start":39},{"file":"SKILL.md","line_end":47,"line_start":45},{"file":"SKILL.md","line_end":51,"line_start":47},{"file":"SKILL.md","line_end":61,"line_start":51},{"file":"SKILL.md","line_end":65,"line_start":61},{"file":"SKILL.md","line_end":67,"line_start":65},{"file":"SKILL.md","line_end":71,"line_start":67},{"file":"SKILL.md","line_end":73,"line_start":71},{"file":"SKILL.md","line_end":77,"line_start":73},{"file":"SKILL.md","line_end":82,"line_start":77},{"file":"SKILL.md","line_end":86,"line_start":82},{"file":"SKILL.md","line_end":88,"line_start":86},{"file":"SKILL.md","line_end":92,"line_start":88},{"file":"SKILL.md","line_end":94,"line_start":92},{"file":"SKILL.md","line_end":98,"line_start":94},{"file":"SKILL.md","line_end":100,"line_start":98},{"file":"SKILL.md","line_end":104,"line_start":100},{"file":"SKILL.md","line_end":106,"line_start":104},{"file":"SKILL.md","line_end":110,"line_start":106},{"file":"SKILL.md","line_end":119,"line_start":110},{"file":"SKILL.md","line_end":123,"line_start":119},{"file":"SKILL.md","line_end":132,"line_start":123},{"file":"SKILL.md","line_end":136,"line_start":132},{"file":"SKILL.md","line_end":148,"line_start":136},{"file":"SKILL.md","line_end":150,"line_start":148}]},{"factor":"network","evidence":[{"file":"SKILL.md","line_end":11,"line_start":11},{"file":"SKILL.md","line_end":13,"line_start":13},{"file":"SKILL.md","line_end":17,"line_start":17},{"file":"SKILL.md","line_end":57,"line_start":57},{"file":"SKILL.md","line_end":154,"line_start":154},{"file":"SKILL.md","line_end":155,"line_start":155},{"file":"SKILL.md","line_end":156,"line_start":156}]}],"critical_findings":[],"high_findings":[],"medium_findings":[{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":7,"line_start":7}],"confidence":0.86,"description":"> **Install the belt CLI skill:** `npx skills add belt-sh/cli`","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"This line instructs users to run npx to install an external CLI skill package. That executes code from the package ecosystem and is a real supply-chain risk."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":24,"line_start":19}],"confidence":0.9,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The fenced block contains belt login and a belt app run command that can authenticate and post to a connected Twitter/X account. This is legitimate functionality, but it is real external command execution."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":47,"line_start":45}],"confidence":0.88,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The block contains a belt app run command that posts content to Twitter/X through an external CLI. The command performs an authenticated account action."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":61,"line_start":51}],"confidence":0.88,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The block runs belt commands to create sample input and post media through the external CLI. It also relies on a local input file passed to the command."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":67,"line_start":65}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The block runs belt app run x/post-like against a tweet ID. This is an authenticated engagement action through an external CLI."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":73,"line_start":71}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The block runs belt app run x/post-retweet against a tweet ID. This is an authenticated public engagement action through an external CLI."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":82,"line_start":77}],"confidence":0.88,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The block runs belt app run x/dm-send with a recipient and message. This can send authenticated direct messages from the connected account."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":88,"line_start":86}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The block runs belt app run x/user-follow against a username. This performs an authenticated follow action through an external CLI."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":94,"line_start":92}],"confidence":0.78,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The block runs belt app run x/user-get, which calls an external service to retrieve a profile. It is read-only but still executes an external CLI command."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":100,"line_start":98}],"confidence":0.78,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The block runs belt app run x/post-get, which calls an external service to retrieve post details. It is read-only but still executes an external CLI command."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":106,"line_start":104}],"confidence":0.88,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The block runs belt app run x/post-delete against a tweet ID. This can delete content from the connected Twitter/X account."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":119,"line_start":110}],"confidence":0.9,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The workflow runs belt commands for image generation and Twitter/X posting, including output redirection to image.json. It executes external services and then publishes media."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":132,"line_start":123}],"confidence":0.9,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The workflow runs belt commands for video generation and Twitter/X posting, including output redirection to video.json. It executes external services and then publishes media."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":148,"line_start":136}],"confidence":0.86,"description":"```bash","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The block instructs users to run npx skills add for several external skill packages. Installing external packages is a supply-chain and command execution risk."},{"title":"Ruby/shell backtick execution","locations":[{"file":"SKILL.md","line_end":150,"line_start":148}],"confidence":0.58,"description":"```","review_kind":"capability","source_category":"external_commands","source_severity":"medium","confidence_reasoning":"The finding range includes an inline belt app store command after the closing fence. It appears read-only, but it still directs execution of an external CLI."},{"title":"Authenticated Twitter/X Account Actions","locations":[{"file":"SKILL.md","line_end":38,"line_start":31},{"file":"SKILL.md","line_end":88,"line_start":75},{"file":"SKILL.md","line_end":106,"line_start":102}],"confidence":0.93,"description":"The skill describes posting, liking, retweeting, deleting, sending DMs, and following users from a connected account. These actions can cause public, private, or destructive account changes if run without clear user consent.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"The app table and examples explicitly include mutating Twitter/X actions, including DMs, follows, posts, and deletion. The risk is contextual business-logic abuse rather than a code pattern."},{"title":"Third-Party CLI Authentication Requirement","locations":[{"file":"SKILL.md","line_end":23,"line_start":17}],"confidence":0.86,"description":"The quick start requires users to authenticate with the belt CLI before running Twitter/X commands. Connected account tokens or session state are therefore entrusted to the external CLI and service.","review_kind":"security","source_category":"semantic","source_severity":"medium","confidence_reasoning":"The quick-start text requires the belt CLI and shows belt login before posting. The exact credential storage model is not shown, so the finding is limited to the documented authentication dependency."}],"low_findings":[{"title":"Hardcoded URL","locations":[{"file":"SKILL.md","line_end":13,"line_start":13}],"confidence":0.74,"description":"![Twitter/X Automation](https://cloud.inference.sh/app/files/u/4mg21r6ta37mpaz6ktzwtt8krr/01kgad3pxs","review_kind":"capability","source_category":"network","source_severity":"low","confidence_reasoning":"This is an embedded remote image from cloud.inference.sh. Markdown renderers may fetch it automatically, which can expose viewer metadata to a third party."}],"dangerous_patterns":[],"files_scanned":1,"total_lines":158,"audit_model":"codex","audited_at":"2026-07-08T14:06:02.07+00:00","created_at":"2026-07-08T23:37:26.17038+00:00","static_findings":[{"id":"external_commands:SKILL.md:7:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"> **Install the belt CLI skill:** `npx skills add belt-sh/cli`","category":"external_commands","line_end":7,"severity":"medium","line_start":7},{"id":"external_commands:SKILL.md:17:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"> Requires inference.sh CLI (`belt`). [Install instructions](https://raw.githubusercontent.com/infer","category":"external_commands","line_end":17,"severity":"medium","line_start":17},{"id":"external_commands:SKILL.md:19:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":24,"severity":"medium","line_start":19},{"id":"external_commands:SKILL.md:24:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":31,"severity":"medium","line_start":24},{"id":"external_commands:SKILL.md:31:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Post Tweet | `x/post-tweet` | Post text tweets |","category":"external_commands","line_end":32,"severity":"medium","line_start":31},{"id":"external_commands:SKILL.md:32:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Create Post | `x/post-create` | Post with media |","category":"external_commands","line_end":33,"severity":"medium","line_start":32},{"id":"external_commands:SKILL.md:33:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Like Post | `x/post-like` | Like a tweet |","category":"external_commands","line_end":34,"severity":"medium","line_start":33},{"id":"external_commands:SKILL.md:34:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Retweet | `x/post-retweet` | Retweet a post |","category":"external_commands","line_end":35,"severity":"medium","line_start":34},{"id":"external_commands:SKILL.md:35:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Delete Post | `x/post-delete` | Delete a tweet |","category":"external_commands","line_end":36,"severity":"medium","line_start":35},{"id":"external_commands:SKILL.md:36:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Get Post | `x/post-get` | Get tweet by ID |","category":"external_commands","line_end":37,"severity":"medium","line_start":36},{"id":"external_commands:SKILL.md:37:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Send DM | `x/dm-send` | Send direct message |","category":"external_commands","line_end":38,"severity":"medium","line_start":37},{"id":"external_commands:SKILL.md:38:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Follow User | `x/user-follow` | Follow a user |","category":"external_commands","line_end":39,"severity":"medium","line_start":38},{"id":"external_commands:SKILL.md:39:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"| Get User | `x/user-get` | Get user profile |","category":"external_commands","line_end":45,"severity":"medium","line_start":39},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":47,"severity":"medium","line_start":45},{"id":"external_commands:SKILL.md:47:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":51,"severity":"medium","line_start":47},{"id":"external_commands:SKILL.md:51:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":61,"severity":"medium","line_start":51},{"id":"external_commands:SKILL.md:61:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":65,"severity":"medium","line_start":61},{"id":"external_commands:SKILL.md:65:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":67,"severity":"medium","line_start":65},{"id":"external_commands:SKILL.md:67:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":71,"severity":"medium","line_start":67},{"id":"external_commands:SKILL.md:71:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":73,"severity":"medium","line_start":71},{"id":"external_commands:SKILL.md:73:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":77,"severity":"medium","line_start":73},{"id":"external_commands:SKILL.md:77:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":82,"severity":"medium","line_start":77},{"id":"external_commands:SKILL.md:82:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":86,"severity":"medium","line_start":82},{"id":"external_commands:SKILL.md:86:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":88,"severity":"medium","line_start":86},{"id":"external_commands:SKILL.md:88:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":92,"severity":"medium","line_start":88},{"id":"external_commands:SKILL.md:92:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":94,"severity":"medium","line_start":92},{"id":"external_commands:SKILL.md:94:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":98,"severity":"medium","line_start":94},{"id":"external_commands:SKILL.md:98:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":100,"severity":"medium","line_start":98},{"id":"external_commands:SKILL.md:100:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":104,"severity":"medium","line_start":100},{"id":"external_commands:SKILL.md:104:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":106,"severity":"medium","line_start":104},{"id":"external_commands:SKILL.md:106:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":110,"severity":"medium","line_start":106},{"id":"external_commands:SKILL.md:110:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":119,"severity":"medium","line_start":110},{"id":"external_commands:SKILL.md:119:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":123,"severity":"medium","line_start":119},{"id":"external_commands:SKILL.md:123:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":132,"severity":"medium","line_start":123},{"id":"external_commands:SKILL.md:132:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":136,"severity":"medium","line_start":132},{"id":"external_commands:SKILL.md:136:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```bash","category":"external_commands","line_end":148,"severity":"medium","line_start":136},{"id":"external_commands:SKILL.md:148:ruby-shell-backtick-execution","file":"SKILL.md","pattern":"Ruby/shell backtick execution","snippet":"```","category":"external_commands","line_end":150,"severity":"medium","line_start":148},{"id":"network:SKILL.md:11:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"Automate Twitter/X via [inference.sh](https://inference.sh) CLI.","category":"network","line_end":11,"severity":"low","line_start":11},{"id":"network:SKILL.md:13:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"![Twitter/X Automation](https://cloud.inference.sh/app/files/u/4mg21r6ta37mpaz6ktzwtt8krr/01kgad3pxs","category":"network","line_end":13,"severity":"low","line_start":13},{"id":"network:SKILL.md:17:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"> Requires inference.sh CLI (`belt`). [Install instructions](https://raw.githubusercontent.com/infer","category":"network","line_end":17,"severity":"low","line_start":17},{"id":"network:SKILL.md:57:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"#   \"media_url\": \"https://your-image-url.jpg\"","category":"network","line_end":57,"severity":"low","line_start":57},{"id":"network:SKILL.md:154:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"- [X.com Integration](https://inference.sh/docs/integrations/x) - Setting up Twitter/X integration","category":"network","line_end":154,"severity":"low","line_start":154},{"id":"network:SKILL.md:155:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"- [X.com Integration Example](https://inference.sh/docs/examples/x-integration) - Complete Twitter w","category":"network","line_end":155,"severity":"low","line_start":155},{"id":"network:SKILL.md:156:hardcoded-url","file":"SKILL.md","pattern":"Hardcoded URL","snippet":"- [Apps Overview](https://inference.sh/docs/apps/overview) - Understanding the app ecosystem","category":"network","line_end":156,"severity":"low","line_start":156}],"finding_verdicts":[{"id":"external_commands:SKILL.md:7:ruby-shell-backtick-execution","reason":"This line instructs users to run npx to install an external CLI skill package. That executes code from the package ecosystem and is a real supply-chain risk.","verdict":"confirmed","severity":"medium","confidence":0.86},{"id":"external_commands:SKILL.md:17:ruby-shell-backtick-execution","reason":"This is inline documentation naming the belt CLI and linking to install instructions. The separate network finding covers the URL, and no shell command is executed here.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:19:ruby-shell-backtick-execution","reason":"The fenced block contains belt login and a belt app run command that can authenticate and post to a connected Twitter/X account. This is legitimate functionality, but it is real external command execution.","verdict":"confirmed","severity":"medium","confidence":0.9},{"id":"external_commands:SKILL.md:24:ruby-shell-backtick-execution","reason":"This finding points to a markdown fence boundary after the quick-start block. The executable commands are covered by the adjacent confirmed finding.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:31:ruby-shell-backtick-execution","reason":"This table row contains an app identifier in inline code, not a shell command. There is no execution or command injection path in the row.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:32:ruby-shell-backtick-execution","reason":"This table row contains an app identifier in inline code, not a shell command. There is no execution or command injection path in the row.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:33:ruby-shell-backtick-execution","reason":"This table row contains an app identifier in inline code, not a shell command. There is no execution or command injection path in the row.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:34:ruby-shell-backtick-execution","reason":"This table row contains an app identifier in inline code, not a shell command. There is no execution or command injection path in the row.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:35:ruby-shell-backtick-execution","reason":"This table row contains an app identifier in inline code, not a shell command. There is no execution or command injection path in the row.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:36:ruby-shell-backtick-execution","reason":"This table row contains an app identifier in inline code, not a shell command. There is no execution or command injection path in the row.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:37:ruby-shell-backtick-execution","reason":"This table row contains an app identifier in inline code, not a shell command. There is no execution or command injection path in the row.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:38:ruby-shell-backtick-execution","reason":"This table row contains an app identifier in inline code, not a shell command. There is no execution or command injection path in the row.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:39:ruby-shell-backtick-execution","reason":"This table row contains an app identifier in inline code, not a shell command. The next executable example is covered by a later finding.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:45:ruby-shell-backtick-execution","reason":"The block contains a belt app run command that posts content to Twitter/X through an external CLI. The command performs an authenticated account action.","verdict":"confirmed","severity":"medium","confidence":0.88},{"id":"external_commands:SKILL.md:47:ruby-shell-backtick-execution","reason":"This finding points to a markdown fence boundary and heading text. The actual post command is covered by the preceding confirmed finding.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:51:ruby-shell-backtick-execution","reason":"The block runs belt commands to create sample input and post media through the external CLI. It also relies on a local input file passed to the command.","verdict":"confirmed","severity":"medium","confidence":0.88},{"id":"external_commands:SKILL.md:61:ruby-shell-backtick-execution","reason":"This finding points to a markdown fence boundary and heading text. The actual media command block is covered by the preceding confirmed finding.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:65:ruby-shell-backtick-execution","reason":"The block runs belt app run x/post-like against a tweet ID. This is an authenticated engagement action through an external CLI.","verdict":"confirmed","severity":"medium","confidence":0.86},{"id":"external_commands:SKILL.md:67:ruby-shell-backtick-execution","reason":"This finding points to a markdown fence boundary and heading text. The actual like command is covered by the preceding confirmed finding.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:71:ruby-shell-backtick-execution","reason":"The block runs belt app run x/post-retweet against a tweet ID. This is an authenticated public engagement action through an external CLI.","verdict":"confirmed","severity":"medium","confidence":0.86},{"id":"external_commands:SKILL.md:73:ruby-shell-backtick-execution","reason":"This finding points to a markdown fence boundary and heading text. The actual retweet command is covered by the preceding confirmed finding.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:77:ruby-shell-backtick-execution","reason":"The block runs belt app run x/dm-send with a recipient and message. This can send authenticated direct messages from the connected account.","verdict":"confirmed","severity":"medium","confidence":0.88},{"id":"external_commands:SKILL.md:82:ruby-shell-backtick-execution","reason":"This finding points to a markdown fence boundary and heading text. The actual direct-message command is covered by the preceding confirmed finding.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:86:ruby-shell-backtick-execution","reason":"The block runs belt app run x/user-follow against a username. This performs an authenticated follow action through an external CLI.","verdict":"confirmed","severity":"medium","confidence":0.86},{"id":"external_commands:SKILL.md:88:ruby-shell-backtick-execution","reason":"This finding points to a markdown fence boundary and heading text. The actual follow command is covered by the preceding confirmed finding.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:92:ruby-shell-backtick-execution","reason":"The block runs belt app run x/user-get, which calls an external service to retrieve a profile. It is read-only but still executes an external CLI command.","verdict":"confirmed","severity":"medium","confidence":0.78},{"id":"external_commands:SKILL.md:94:ruby-shell-backtick-execution","reason":"This finding points to a markdown fence boundary and heading text. The actual profile lookup command is covered by the preceding confirmed finding.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:98:ruby-shell-backtick-execution","reason":"The block runs belt app run x/post-get, which calls an external service to retrieve post details. It is read-only but still executes an external CLI command.","verdict":"confirmed","severity":"medium","confidence":0.78},{"id":"external_commands:SKILL.md:100:ruby-shell-backtick-execution","reason":"This finding points to a markdown fence boundary and heading text. The actual post lookup command is covered by the preceding confirmed finding.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:104:ruby-shell-backtick-execution","reason":"The block runs belt app run x/post-delete against a tweet ID. This can delete content from the connected Twitter/X account.","verdict":"confirmed","severity":"medium","confidence":0.88},{"id":"external_commands:SKILL.md:106:ruby-shell-backtick-execution","reason":"This finding points to a markdown fence boundary and heading text. The actual delete command is covered by the preceding confirmed finding.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:110:ruby-shell-backtick-execution","reason":"The workflow runs belt commands for image generation and Twitter/X posting, including output redirection to image.json. It executes external services and then publishes media.","verdict":"confirmed","severity":"medium","confidence":0.9},{"id":"external_commands:SKILL.md:119:ruby-shell-backtick-execution","reason":"This finding points to a markdown fence boundary and heading text. The actual image workflow commands are covered by the preceding confirmed finding.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:123:ruby-shell-backtick-execution","reason":"The workflow runs belt commands for video generation and Twitter/X posting, including output redirection to video.json. It executes external services and then publishes media.","verdict":"confirmed","severity":"medium","confidence":0.9},{"id":"external_commands:SKILL.md:132:ruby-shell-backtick-execution","reason":"This finding points to a markdown fence boundary and heading text. The actual video workflow commands are covered by the preceding confirmed finding.","verdict":"false_positive","confidence":0.87},{"id":"external_commands:SKILL.md:136:ruby-shell-backtick-execution","reason":"The block instructs users to run npx skills add for several external skill packages. Installing external packages is a supply-chain and command execution risk.","verdict":"confirmed","severity":"medium","confidence":0.86},{"id":"external_commands:SKILL.md:148:ruby-shell-backtick-execution","reason":"The finding range includes an inline belt app store command after the closing fence. It appears read-only, but it still directs execution of an external CLI.","verdict":"confirmed","severity":"medium","confidence":0.58},{"id":"network:SKILL.md:11:hardcoded-url","reason":"This is a visible documentation link to the inference.sh homepage. It does not make a hidden request or transmit user data by itself.","verdict":"false_positive","confidence":0.86},{"id":"network:SKILL.md:13:hardcoded-url","reason":"This is an embedded remote image from cloud.inference.sh. Markdown renderers may fetch it automatically, which can expose viewer metadata to a third party.","verdict":"confirmed","severity":"low","confidence":0.74},{"id":"network:SKILL.md:17:hardcoded-url","reason":"This is a visible link to installation documentation hosted on GitHub. It is not a hidden network request or data exfiltration path.","verdict":"false_positive","confidence":0.84},{"id":"network:SKILL.md:57:hardcoded-url","reason":"This is a placeholder media URL inside a commented example input. It is not an active request or a fixed exfiltration endpoint.","verdict":"false_positive","confidence":0.91},{"id":"network:SKILL.md:154:hardcoded-url","reason":"This is a visible documentation link for the X integration. It does not make a request unless the user follows it.","verdict":"false_positive","confidence":0.88},{"id":"network:SKILL.md:155:hardcoded-url","reason":"This is a visible documentation link for an X integration example. It does not make a request unless the user follows it.","verdict":"false_positive","confidence":0.88},{"id":"network:SKILL.md:156:hardcoded-url","reason":"This is a visible documentation link for the app overview. It does not make a request unless the user follows it.","verdict":"false_positive","confidence":0.88}],"semantic_findings":[{"title":"Authenticated Twitter/X Account Actions","severity":"medium","locations":[{"file":"SKILL.md","line_end":38,"line_start":31},{"file":"SKILL.md","line_end":88,"line_start":75},{"file":"SKILL.md","line_end":106,"line_start":102}],"confidence":0.93,"description":"The skill describes posting, liking, retweeting, deleting, sending DMs, and following users from a connected account. These actions can cause public, private, or destructive account changes if run without clear user consent.","confidence_reasoning":"The app table and examples explicitly include mutating Twitter/X actions, including DMs, follows, posts, and deletion. The risk is contextual business-logic abuse rather than a code pattern."},{"title":"Third-Party CLI Authentication Requirement","severity":"medium","locations":[{"file":"SKILL.md","line_end":23,"line_start":17}],"confidence":0.86,"description":"The quick start requires users to authenticate with the belt CLI before running Twitter/X commands. Connected account tokens or session state are therefore entrusted to the external CLI and service.","confidence_reasoning":"The quick-start text requires the belt CLI and shows belt login before posting. The exact credential storage model is not shown, so the finding is limited to the documented authentication dependency."}],"subject_marketplace_commit_sha":null,"subject_content_hash":null,"subject_tree_hash":null,"subject_plugin_path":null,"audit_payload_hash":null,"confirmed_risk_level":null,"scanner_version":null,"policy_version":null,"subject":{"marketplaceCommitSha":null,"contentHash":null,"treeHash":null,"pluginPath":null,"auditPayloadHash":null},"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":"medium","confirmedFindingCount":2,"capabilityReviewCount":16,"needsReviewCount":0,"falsePositiveCount":0,"agentAutoInstallPolicy":"allowed","manualInstallPolicy":"allowed","artifactSignatureState":"available","attestationState":"not_attestable","verificationState":"not_verified"},"isLatest":false}}