Live survey304 models · 14 providers · 22,792 auditsAudited grill-with-docs · SAFE →What changedHow we verifyllms.txt

Agent skill · Audited from source

postiz

skill · gitroomhq/postiz-agentNOASSERTION licenceAudited 19 Oct 2026 · source 9d48a52c87ab

★ 524pushed 4 days ago
✕BLOCKGrade D · 69/100 · 9 findings · 9d48a52
524repo stars · whole gitroomhq/postiz-agent

Is it safe? No — BLOCK, grade D (69/100). We read this skill's source at commit 9d48a52c87ab and observed network and shell access and no hard-coded secrets. The audit raised 9 findings, 3 critical or high. What it does: Postiz is a tool to schedule social media and chat posts to 28+ channels X, LinkedIn, LinkedIn Page, Reddit, Instagram, Facebook Page, Threads, YouTube, Google My Business, TikTok, Pinterest, Dribbble, Discord, Slack,…

Ask an AI about this pageGChatGPTCClaudePPerplexityGeGeminiXGrok
More
Cite

Cite this page

ModelsAtlas. “postiz (gitroomhq/postiz-agent)”. Retrieved 19 Oct 2026. https://modelsatlas.com/skills/gitroomhq/postiz-agent

Blocked. The page stays public so you can check this skill if someone recommended it to you. The audit found 3 critical or high findings, starting with “Code injection” in src/commands/auth.ts:48. Do not install it without reading them.

3 skills are called “postiz”. You are viewing gitroomhq/postiz-agent. 1 of them is BLOCK.

Trust audit

Audit 0.4.1 · source read 19 Oct 2026

Trust score69/100✕BLOCK D
0 critical3 high1 medium2 low3 info

BLOCK means the audit found something that could harm you or your machine. Grade D is shared by 721 of 17,602 audited skills.

What the source does

  • FilesystemNone observedNo reads or writes in the source
  • NetworkDeclared5 observations
  • ShellDeclared3 observations
  • DependenciesNot pinnedSome versions float
  • SecretsNone foundNo keys in source

Five audit layers

LayerWhat we checkResultFindings
L0 ProvenanceRepo owner, licence, archive status, activityPASS0
L1 Static sourceSecrets, path traversal, supply chain, hidden codeFAIL6
L2 InstructionsPrompt injection, authority framing, hidden directivesPASS3
L3 InventoryThe files and declarations match the sourcePASS0
L4 SandboxRun in isolation and watch behaviourSKIPPED why0

Gates applied: no behavioural pass.

Findings (9)

HIGHCode injectioncode.eval_exec · src/commands/auth.ts:48
F-02 Code injectionCWE-78 · CWE-94 · CWE-95Layer L1
exec(`open "${url}"`);
Why
evaluates text as code
Fix
remove; use a parser or a dispatch table
HIGHCode injectioncode.eval_exec · src/commands/auth.ts:50
F-02 Code injectionCWE-78 · CWE-94 · CWE-95Layer L1
exec(`start "" "${url}"`);
Why
evaluates text as code
Fix
remove; use a parser or a dispatch table
HIGHCode injectioncode.eval_exec · src/commands/auth.ts:52
F-02 Code injectionCWE-78 · CWE-94 · CWE-95Layer L1
exec(`xdg-open "${url}"`);
Why
evaluates text as code
Fix
remove; use a parser or a dispatch table
MEDIUMInformation disclosuredisclose.log_secret · src/commands/auth.ts:180
F-12 Information disclosureCWE-209 · CWE-532Layer L1
console.log(`🔑 Token: ${creds.accessToken.substring(0, 8)}...`);
Why
No further detail recorded for this rule.
Fix
—
LOWSupply chainsupply.unpinned · package.json
F-08 Supply chainCWE-829 · CWE-1357Layer L1
@types/pg, node-fetch, yargs, @types/node, @types/yargs, tsup, typescript
Why
7 dependency range(s) float
Fix
pin exact versions or ship a lockfile
LOWSupply chainsupply.unpinned · server/package.json
F-08 Supply chainCWE-829 · CWE-1357Layer L1
node-fetch, pg, @types/node, @types/pg, tsx, typescript
Why
6 dependency range(s) float
Fix
pin exact versions or ship a lockfile
INFOPrompt injectionprompt.credential_read · plugins/dsh-postiz/README.md:81
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
| `apiKeyEnv` | `POSTIZ_API_KEY` | Environment variable read at boot for the API key. |
Why
asks the agent to read credentials
Fix
—
INFOPrompt injectionprompt.persistence · HOW_TO_RUN.md:234
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
# Add to ~/.bashrc or ~/.zshrc
Why
instructs the agent to persist itself in the user's environment
Fix
—
INFOPrompt injectionprompt.persistence · QUICK_START.md:251
F-01 Prompt injectionCWE-94 · CWE-1427Layer L2
3. Add to PATH: `export PATH=$PATH:/path/to/apps/cli/dist`
Why
instructs the agent to persist itself in the user's environment
Fix
—

Audit 0.4.1 · source sha 9d48a52c87ab · 19 Oct 2026Report an issue or request a re-scan

Provenance

Who published it, and what the verdict is pinned to

  • Publishergitroomhq GitHub organizationOwner of the repository this skill is read from
  • Source foldergitroomhq/postiz-agentThe exact folder we audited
  • LicenceNOASSERTIONAs the repository states it
  • Commit pinned for this verdict9d48a52c87abA new audit runs when the source changes
  • Repository statusNot archivedLast push 4 days ago
  • Sandboxed runNot runSkills are read, not executed; layer L4 is skipped

What it tells the agent

Full source on GitHub ↗

Its description: Postiz is a tool to schedule social media and chat posts to 28+ channels X, LinkedIn, LinkedIn Page, Reddit, Instagram, Facebook Page, Threads, YouTube, Google My Business, TikTok, Pinterest, Dribbble, Discord, Slack,…

---
name: postiz
description: Postiz is a tool to schedule social media and chat posts to 28+ channels X, LinkedIn, LinkedIn Page, Reddit, Instagram, Facebook Page, Threads, YouTube, Google My Business, TikTok, Pinterest, Dribbble, Discord, Slack, Kick, Twitch, Mastodon, Bluesky, Lemmy, Farcaster, Telegram, Nostr, VK, Medium, Dev.to, Hashnode, WordPress, ListMonk
homepage: https://docs.postiz.com/public-api/introduction
metadata: {"openclaw":{"emoji":"🌎","requires":{"bins":[],"env":["POSTIZ_API_URL"]}}}
---

## Install Postiz if it doesn't exist

```bash
npm install -g postiz
# or
pnpm install -g postiz
```

npm release: https://www.npmjs.com/package/postiz
postiz github: https://github.com/gitroomhq/postiz-app
postiz cli github: https://github.com/gitroomhq/postiz-app
official website: https://postiz.com
---


| Property | Value |
|----------|-------|
| **name** | postiz |
| **description** | Social media automation CLI and MCP server for scheduling posts across 28+ platforms including X, LinkedIn, LinkedIn Pages, Instagram, Facebook, Threads, YouTube, TikTok, Reddit, Pinterest, Bluesky, Mastodon, Google My Business, Discord, Slack, Telegram, Twitch, Kick, Lemmy, Farcaster, Nostr, VK, MeWe, Tumblr, Skool, Whop, Moltbook, Dribbble, Medium, Dev.to, Hashnode, WordPress, and ListMonk |
| **allowed-tools** | Bash(postiz:*) |

---

## ⚠️ Four Hard Rules (Read First)

**Rule 1 — Authenticate before anything.** All commands fail without valid credentials.

**Rule 2 — Every file passed to `-m` (or to `image`/media fields in JSON mode) MUST first go through `postiz upload`.** Raw filesystem paths (`image.jpg`, `video.mp4`) and external URLs (`https://example.com/...`) are **NOT** accepted by the publishing pipeline. TikTok, Instagram, YouTube, and most other providers reject anything that isn't a Postiz-verified URL. Always:

```bash
RESULT=$(postiz upload <file>)
URL=$(echo "$RESULT" | jq -r '.path')
postiz posts:create ... -m "$URL" ...
```

If you see `-m "something.jpg"` anywhere below, treat it as shorthand for "the `.path` you got back from `postiz upload something.jpg`" — never a raw local file.

A file that was already uploaded does not need uploading again: find it with `postiz media:list -s <name>` and reuse its `.path`.

**Rule 3 — When posting to TikTok, `content_posting_method` MUST be `"DIRECT_POST"`** unless the user has explicitly asked to finish the post inside the TikTok app. `"UPLOAD"` does not publish — it drops the media into the account's TikTok inbox to be completed manually within 24 hours, while the Postiz API still reports success. A user saying "upload this video to TikTok" means `"DIRECT_POST"`.

**Rule 4 — Fetch `postiz integrations:settings <id>` before scheduling and honor the returned `rules` and per-field `description`s.** They state which settings apply and when. A setting that doesn't apply (wrong posting method, wrong media type, etc.) is **silently discarded**, not rejected — the post still reports success, so this is your only chance to catch it.

---

## ⚠️ Authentication Required

**You MUST authenticate before running any Postiz CLI command.** All commands will fail without valid credentials.

Before doing anything else, check auth status:
```bash
postiz auth:status
```

If not authenticated, either:
1. **OAuth2:** `postiz auth:login`
2. **API Key:** `export POSTIZ_API_KEY=your_api_key`

**Do NOT proceed with any other commands until authentication is confirmed.**

---

## Core Workflow

The fundamental pattern for using Postiz CLI:

1. **Authenticate** - Verify or set up authentication (see above)
2. **Discover** - List integrations and get their settings
3. **Fetch** - Use integration tools to retrieve dynamic data (flairs, playlists, companies)
4. **Prepare** - Upload media files if needed (or reuse an existing `.path` from `media:list`)
5. **Post** - Create posts with content, media, and platform-specific settings
6. **Analyze** - Track performance with platform and post-level analytics
7. **Resolve** - If analytics returns `{"missing": true}`, run `posts:missing` to list provider content, then `posts:connect` to link it

```bash
# 1. Authenticate
postiz auth:status
# If not authenticated: postiz auth:login --client-id <id> --client-secret <secret>

# 2. Discover
postiz integrations:list
postiz integrations:settings <integration-id>

# 3. Fetch (if needed)
postiz integrations:trigger <integration-id> <method> -d '{"key":"value"}'

# 4. Prepare
postiz upload image.jpg
postiz media:list -s image   # or reuse an already-uploaded file

# 5. Post
postiz posts:create -c "Content" -m "image.jpg" -i "<integration-id>"

# 6. Analyze
postiz analytics:platform <integration-id> -d 30
postiz analytics:post <post-id> -d 7

# 7. Resolve (if analytics returns {"missing": true})
postiz posts:missing <post-id>
postiz posts:connect <post-id> --release-id "<content-id>"
```

---

## Essential Commands

### Authentication

**Option 1: OAuth2 (Recommended)**
```bash
# Login via device flow (opens browser, no client ID/secret needed)
postiz auth:login

# Check auth status (verifies credentials are still valid)
postiz auth:status

# Logout (remove stored credentials)
postiz auth:logout
```

Credentials are stored in `~/.postiz/credentials.json`. OAuth2 credentials take priority over API key.

**Option 2: API Key**
```bash
export POSTIZ_API_KEY=your_api_key_here
```

**Optional custom API URL:**
```bash
export POSTIZ_API_URL=https://custom-api-url.com
```

### Integration Discovery

```bash
# List all connected integrations
postiz integrations:list

# List integrations belonging to a specific group (customer)
postiz integrations:list --group <group-id>

# List all groups (customers) as {id, name}
postiz integrations:groups

# Get settings schema for specific integration
postiz integrations:settings <integration-id>

# Trigger integration tool to fetch dynamic data
postiz integrations:trigger <integration-id> <method-name>
postiz integrations:trigger <integration-id> <method-na

Excerpt, first 6,001 characters of SKILL.md, verbatim from the audited commit. It is text from someone else’s repository, quoted so you can judge it before your agent reads it.

Install

Pinned to the audited commit 9d48a52

npm install -g postiz
npm install postiz
npm install -g agent-postiz

Commands as the repository documents them: shown, never run by us. Our verdict covers commit 9d48a52c87ab only.

Works in which agents?

What its own text says, not a test

AgentStatusMore
Claude CodeMentioned in its text, not testedSkills for Claude Code · About Claude Code
CodexMentioned in its text, not testedSkills for Codex · About Codex
CursorMentioned in its text, not testedSkills for Cursor · About Cursor
Gemini CLIMentioned in its text, not testedSkills for Gemini CLI · About Gemini CLI
OpenClawMentioned in its text, not testedSkills for OpenClaw · About OpenClaw
“Mentioned” means the skill’s text names the agent. We have not run it there.

Audit history

Every audit, every source change

  1. ✕BLOCK D 69 / 100

    first audit · source 9d48a52c87ab

Similar skills

Questions about postiz

What does the postiz skill do?
Postiz Agents CLI - connect it to Claude / OpenClaw / etc, to schedule social media posts 🤖
Is postiz safe to install?
No — not without reading the findings first. The audit graded it D (69/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What can postiz access on my machine?
The audit observed that it reaches the network and runs shell commands. Each of those is consistent with what it says it does. Secrets in the source: none found.
Which assistants does postiz work with?
Its documentation mentions claude-code, codex, cursor, gemini-cli and openclaw. That is what the text claims, not a compatibility test we ran.
How current is this page?
The grade is for one exact copy of the source (9d48a52c87ab), read on 2026-10-19. The repository is watched, and a new audit runs when it changes — this is the first audit.

Sources

Spotted something wrong? Report a correction · Methodology

Keep going in your AI

Opens with this page as the source. We add nothing else to the prompt.