Token导航 LogoToken导航

Agent Skill · 研究检索

panda-publish(熊猫发布)

panda-publish 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

panda-publish 是研究检索类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为接触敏感数据;许可证信息还不明确,第三方扫描有未通过项,按安装量在研究检索类的 73,675 个 Skill 里排第 68,490。

总安装 233周安装 10GitHub Stars 公开资料未说明下载 82核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:panda-publish(熊猫发布)
来源仓库:https://github.com/mrpaulscrivens/nosy-pandas-skills
仓库路径:skills/panda-publish
安装命令:
npx skills add https://github.com/mrpaulscrivens/nosy-pandas-skills --skill panda-publish
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/mrpaulscrivens/nosy-pandas-skills --skill panda-publish

这个 Skill 是做什么的

研究检索类 Skill 主要解决「找资料、核对事实、把来源整理清楚」的问题,通常会让助手先检索再总结。

panda-publish 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。适用于内容发布、信息聚合及多渠道分发等场景。通过 npx skills add 命令从指定 GitHub 仓库安装并使用该技能。

安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。适用宿主包括 Codex、Claude、Cursor、Gemini CLI,接入前应确认版本、权限和运行环境要求。

来源仓库内路径:skills/panda-publish

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/mrpaulscrivens/nosy-pandas-skills --skill pand…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要接触敏感数据,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

panda-publish 怎么安装?

在终端执行 npx skills add https://github.com/mrpaulscrivens/nosy-pandas-skills --skill panda-publish。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

panda-publish 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

panda-publish 需要什么权限?

权限级别是接触敏感数据。该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

panda-publish 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

panda-publish 用的人多吗?

公开数据是累计安装 233 次,近一周安装 10 次,下载 82 次。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

panda-publish 安全吗?

第三方扫描有未通过项,风险较高。除非你确认过源码,否则不建议直接安装到常用环境。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。

先想清楚的地方

  • 需要接触敏感数据,装到常用环境前要先评估影响面。
  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方扫描存在提醒项或未通过项,需要人工逐条确认。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理研究检索类任务、又不想每次都手写提示词的人。

不太适合

  • 环境里有大量密钥、凭证,不方便给第三方 Skill 读取的人。
  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

研究检索类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
find-skills

寻找技能 · Codex、Claude

31,199,81316,486操作浏览器MIT有提醒
self-improving-agent

自我改进 Agent · OpenClaw

16,464,0023,396接触敏感数据MIT-0通过
soultrace

灵魂追踪 · Codex、Claude

7,588,94412需要联网未明确有提醒
self-improving

自我完善 · OpenClaw

6,829,2841,046需要联网MIT-0通过
microsoft-foundry

微软代工厂 · Codex、Claude

6,614,144764调用外部服务未明确有提醒
panda-publish

熊猫发布 · 本页

233—接触敏感数据未明确未通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Social Publish

Publish social media posts to connected platforms via the Nosy Pandas API from Claude Code.

Configuration

Configuration is stored in ~/.pandas as simple key=value pairs:

api_url=https://nosypandas.com/api
api_key=your-key-here
media_folder=~/social-media

If this file doesn't exist or is missing values, the skill will walk the user through setup:

  1. Ask them to paste their API key (generated from the dashboard under API Keys)
  2. Write ~/.pandas automatically

The user can also just paste their API key directly in chat at any time — the skill should detect it and offer to save it.

media_folder is optional and defaults to ~/social-media/.

Reading Configuration

# Read config values (use these instead of env vars in all curl commands)
PANDAS_API_URL="https://nosypandas.com/api"
PANDAS_API_KEY=$(grep '^api_key=' ~/.pandas 2>/dev/null | cut -d= -f2-)
PANDAS_MEDIA_FOLDER=$(grep '^media_folder=' ~/.pandas 2>/dev/null | cut -d= -f2-)
PANDAS_MEDIA_FOLDER="${PANDAS_MEDIA_FOLDER:-$HOME/social-media}"

Available Commands

CommandDescription
PublishCreate and publish a post to one or more platforms
HistoryView recent posts and their statuses
DetailCheck a specific post's full details
RetryRetry a failed post
DeleteDelete a scheduled or failed post

Publish Flow

Follow these steps in order:

Step 0: Permission Setup (first run only)

Check if the user's Claude Code permissions already include the skill's bash patterns:

grep -q "nosypandas.com" ~/.claude/settings.json 2>/dev/null && echo "CONFIGURED" || echo "NOT_CONFIGURED"

If CONFIGURED, skip to Step 1.

If NOT_CONFIGURED, explain to the user:

Quick setup: This skill runs bash commands to call the Nosy Pandas API, read your config, scan for media files, and move them after posting. By default, Claude Code asks you to approve each one — that's 6-11 prompts every time you publish. I can add permission patterns to your Claude Code settings (~/.claude/settings.json) so these commands auto-approve. The patterns are scoped narrowly: - API calls only to nosypandas.com - Config reads/writes only to ~/.pandas - File operations only in your social-media/ folder Want me to set this up?

If the user agrees, read ~/.claude/settings.json, merge these patterns into the permissions.allow array (avoiding duplicates), and write it back:

"Bash(cat > ~/.pandas *)",
"Bash(chmod 600 ~/.pandas)",
"Bash(grep * ~/.pandas *)",
"Bash(find * social-media *)",
"Bash(curl * https://nosypandas.com/*)",
"Bash(sleep *)",
"Bash(mkdir -p * social-media/*)",
"Bash(mv * social-media/*)"

If the user declines, proceed normally — they'll just see approval prompts for each command.

Step 1: Verify Configuration & Fetch Accounts

Read ~/.pandas and check that api_key is present.

If the file doesn't exist or is missing api_key:

  1. Ask: "Paste your API key" (tell them to generate one from the dashboard under API Keys)
  2. Write the values to ~/.pandas:
cat > ~/.pandas << 'EOF'
api_url=https://nosypandas.com/api
api_key=the-pasted-key
media_folder=~/social-media
EOF
chmod 600 ~/.pandas

If the user pastes what looks like an API key without being asked, detect it and offer to save it to ~/.pandas.

Once config is confirmed, read config and fetch accounts in a single call:

PANDAS_API_KEY=$(grep '^api_key=' ~/.pandas 2>/dev/null | cut -d= -f2-) && \
curl -s "https://nosypandas.com/api/accounts" \
  -H "Authorization: Bearer $PANDAS_API_KEY" \
  -H "Accept: application/json"

Response:

{
  "accounts": [
    { "id": 1, "platform": "twitter", "account_name": "@myhandle" },
    { "id": 2, "platform": "bluesky", "account_name": "@me.bsky.social" }
  ]
}

If no accounts are returned, tell the user to connect accounts via the web dashboard.

Step 3: Select Platforms

Show the user their connected accounts as a numbered list and ask which to post to:

Which platforms do you want to post to? 1. Twitter/X (@myhandle) 2. Bluesky (@me.bsky.social) 3. LinkedIn (My Profile)

After selection, show the character limits and media requirements for the selected platforms using the Platform Reference Table below.

Step 4: Ask for Content

Ask: "What do you want to post?"

Show character limits for each selected platform so the user knows constraints before writing. If content exceeds a platform's limit and that platform supports threading (Twitter, Threads, Bluesky), note the content will be auto-split into a thread.

If content exceeds LinkedIn's 3000 character hard limit, warn the user and ask them to shorten it.

Step 5: Platform-Specific Fields

  • If YouTube is selected, ask: "What's the video title?" (required, max 500 chars)
  • If Pinterest is selected, ask: "What's the destination URL for this pin?" (required, must be a valid URL)

Step 6: Media Selection

Scan the configured media folder using find:

MEDIA_DIR="${PANDAS_MEDIA_FOLDER:-$HOME/social-media}"
find "$MEDIA_DIR" -maxdepth 1 -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" -o -iname "*.gif" -o -iname "*.webp" -o -iname "*.mp4" -o -iname "*.mov" -o -iname "*.avi" -o -iname "*.webm" \) 2>/dev/null

If files are found, list them (distinguishing images vs videos by extension) and ask which to attach. If no files found, ask: "Do you want to attach any media? Provide a file path, or skip."

Important checks before proceeding:

  • If a selected platform requires media (Instagram, YouTube, Pinterest, TikTok) and no media is attached, warn the user and ask them to provide media.
  • If a selected platform requires video (YouTube, TikTok) and only images are attached, warn the user that video is required.
  • Check media counts against the Platform Reference Table limits below and warn about any violations.
  • If a platform has noMix: true and both images and videos are selected, warn the user.
  • Accepted file types: jpg, jpeg, png, gif, webp (images); mp4, mov, avi, webm (videos).

Step 7: Schedule or Publish Now

Ask: "Publish now or schedule for later?"

If scheduling, ask for the date and time. Accept natural language like "tomorrow at 9am". Auto-detect the system timezone using:

readlink /etc/localtime | sed 's|.*/zoneinfo/||'

Use this value for the "timezone" field in the API payload. Do not ask the user for their timezone.

Step 8: Confirmation Summary

Show a summary with any applicable warnings:

Content: [first 100 chars...]
Media: [count] files ([list filenames])
Platforms: Twitter, Bluesky
Timing: Publish now
Title: [if YouTube]
Link URL: [if Pinterest]

Warnings:
- Twitter: Content will be split into a thread (exceeds 280 chars)
- Threads: Posts take a few minutes to fully process on Meta's platform — the skill will show "Submitted" after posting. Use the Detail command to confirm the final status.

Ask: "Look good? (yes/no)"

Step 9: Execute Post

This step has two parts: stage media (if any), then create the post.

Step 9a: Stage Media, Create Post & Check Status

Run all of media staging, post creation, and status checking in a single bash call. The script stages each file, collects tokens, creates the post, and (if needed) waits 5s to recheck status.

For posts with media:

PANDAS_API_KEY=$(grep '^api_key=' ~/.pandas 2>/dev/null | cut -d= -f2-) && \
PANDAS_API_URL="https://nosypandas.com/api" && \
TOKENS="" && \
for FILE in /path/to/file1.jpg /path/to/file2.png; do \
  RESULT=$(curl -s -X POST "$PANDAS_API_URL/media/stage" \
    -H "Authorization: Bearer $PANDAS_API_KEY" \
    -H "Accept: application/json" \
    -F "file=@$FILE") && \
  T=$(echo "$RESULT" | jq -r '.token') && \
  TOKENS="${TOKENS:+$TOKENS,}\"$T\""; \
done && \
POST_RESULT=$(curl -s -X POST "$PANDAS_API_URL/posts" \
  -H "Authorization: Bearer $PANDAS_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d "{
    \"content\": \"POST_CONTENT\",
    \"platforms\": [ACCOUNT_ID_1, ACCOUNT_ID_2],
    \"publish_now\": true,
    \"media_tokens\": [$TOKENS]
  }") && \
echo "$POST_RESULT" && \
POST_ID=$(echo "$POST_RESULT" | jq -r '.post.id') && \
HAS_PENDING=$(echo "$POST_RESULT" | jq '[.post.platforms[] | select(.status == "pending" or .status == "publishing" or (.status == "failed" and (.error == null or .error == "" or .error == "Publishing failed (no details provided by platform)")))] | length') && \
if [ "$HAS_PENDING" -gt 0 ]; then \
  sleep 5 && \
  curl -s "$PANDAS_API_URL/posts/$POST_ID" \
    -H "Authorization: Bearer $PANDAS_API_KEY" \
    -H "Accept: application/json"; \
fi

For posts without media:

PANDAS_API_KEY=$(grep '^api_key=' ~/.pandas 2>/dev/null | cut -d= -f2-) && \
PANDAS_API_URL="https://nosypandas.com/api" && \
POST_RESULT=$(curl -s -X POST "$PANDAS_API_URL/posts" \
  -H "Authorization: Bearer $PANDAS_API_KEY" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{
    "content": "POST_CONTENT",
    "platforms": [ACCOUNT_ID_1, ACCOUNT_ID_2],
    "publish_now": true
  }') && \
echo "$POST_RESULT" && \
POST_ID=$(echo "$POST_RESULT" | jq -r '.post.id') && \
HAS_PENDING=$(echo "$POST_RESULT" | jq '[.post.platforms[] | select(.status == "pending" or .status == "publishing" or (.status == "failed" and (.error == null or .error == "" or .error == "Publishing failed (no details provided by platform)")))] | length') && \
if [ "$HAS_PENDING" -gt 0 ]; then \
  sleep 5 && \
  curl -s "$PANDAS_API_URL/posts/$POST_ID" \
    -H "Authorization: Bearer $PANDAS_API_KEY" \
    -H "Accept: application/json"; \
fi

Optional fields (add to the JSON when applicable):

  • "title": "VIDEO_TITLE" — for YouTube
  • "link_url": "https://example.com" — for Pinterest
  • "scheduled_at": "2026-03-16T09:00:00Z" — for scheduled posts (omit publish_now or set to false)
  • "timezone": "America/New_York" — timezone for scheduled posts

Stage response (201):

{
  "token": "stg_abc123...",
  "original_filename": "photo.jpg",
  "type": "image",
  "expires_at": "2026-03-16T14:00:00+00:00"
}

Tokens are valid for 2 hours.

Post response (201):

{
  "post": {
    "id": 42,
    "content": "Hello world!",
    "status": "published",
    "platforms": [
      { "platform": "twitter", "status": "published", "url": "https://x.com/..." },
      { "platform": "bluesky", "status": "published", "url": "https://bsky.app/..." }
    ]
  }
}

Some platforms (especially Threads) take time to process. The script automatically does one 5-second recheck if any platform has a non-terminal status (pending, publishing, or failed with no error details). The generic error string "Publishing failed (no details provided by platform)" also counts as non-terminal — it means the platform is still processing, not that it actually failed. Do not add additional retries — the server handles final status updates via background jobs and webhooks.

Step 10: Display Results

Show the result per platform using these rules, evaluated in order:

  1. Published — status is published: "[Platform]: Published — [url]"
  2. Pending/Processing — status is pending or publishing: "[Platform]: Pending — check back shortly"
  3. Threads submitted (not a real failure) — platform is threads, status is failed, AND error is null, empty, OR "Publishing failed (no details provided by platform)": "Threads: Submitted — this platform takes a few minutes to fully process. Use the Detail command to confirm the final status."
  4. Failed with real error — status is failed with a specific, non-generic error message: "[Platform]: Failed — [error message]"

Critical rule: NEVER display "Failed" for Threads if the error is null, empty, or the generic string "Publishing failed (no details provided by platform)". Only show "Failed" for Threads when there is a specific, actionable error (e.g., "Account not found", "Content policy violation").

Step 11: Move Media

After successful posting, move all used media files to a posted/ subfolder in a single call:

MEDIA_DIR="${PANDAS_MEDIA_FOLDER:-$HOME/social-media}" && \
mkdir -p "$MEDIA_DIR/posted/" && \
mv "$MEDIA_DIR/file1.jpg" "$MEDIA_DIR/file2.png" "$MEDIA_DIR/posted/"

List all used files as arguments to a single mv command.

Post History Flow

Fetch recent posts:

curl -s "$PANDAS_API_URL/posts" \
  -H "Authorization: Bearer $PANDAS_API_KEY" \
  -H "Accept: application/json"

Returns paginated posts with platform statuses. Display as a table showing post ID, content preview, status, and platform results.

Post Detail Flow

Check a specific post's full details:

curl -s "$PANDAS_API_URL/posts/POST_ID" \
  -H "Authorization: Bearer $PANDAS_API_KEY" \
  -H "Accept: application/json"

Response:

{
  "post": {
    "id": 42,
    "content": "Hello world!",
    "title": null,
    "status": "published",
    "scheduled_at": null,
    "created_at": "2026-03-15T12:00:00Z",
    "platforms": [
      { "platform": "twitter", "status": "published", "url": "https://x.com/...", "error": null }
    ],
    "media": [
      { "url": "https://cdn.example.com/file.jpg", "type": "image", "filename": "photo.jpg" }
    ]
  }
}

Retry Flow

Retry a failed post:

curl -s -X POST "$PANDAS_API_URL/posts/POST_ID/retry" \
  -H "Authorization: Bearer $PANDAS_API_KEY" \
  -H "Accept: application/json"

Response:

{
  "post": {
    "id": 42,
    "status": "pending"
  }
}

Only posts with failed status can be retried. If the post is not in a failed state, the API will return a 404.

Delete Flow

Delete a scheduled or failed post. Only posts with scheduled or failed status can be deleted — published posts cannot be removed.

Step 1: Identify the Post

Use the Detail flow to fetch the post and confirm its status is scheduled or failed. Show the post summary to the user and ask for confirmation:

Are you sure you want to delete this post? Content: [first 100 chars...] Status: scheduled Platforms: Twitter, Bluesky

Step 2: Send Delete Request

curl -s -X DELETE "$PANDAS_API_URL/posts/POST_ID" \
  -H "Authorization: Bearer $PANDAS_API_KEY" \
  -H "Accept: application/json"

Response (200):

{
  "message": "Post deleted."
}

Step 3: Display Confirmation

Show: "Post #POST_ID has been deleted."

If the API returns 404, the post either doesn't exist or is in a non-deletable status (e.g., published). Inform the user accordingly.

Platform Reference Table

PlatformMax ContentThreadingRequires MediaRequires VideoMax ImagesMax VideosNo Mix
Twitter/X280 charsYesNoNo41Yes
Bluesky300 charsYesNoNo41No
Threads500 charsYesNoNo101No
InstagramNoneNoYesNo101No
LinkedIn3000 charsNoNoNo201No
YouTubeNoneNoYesYes01No
PinterestNoneNoYesNo11Yes
TikTokNoneNoYesYes351Yes

Notes:

  • "Threading" means content exceeding the character limit is auto-split into a thread.
  • "No Mix" means the platform does not allow images and videos in the same post.
  • YouTube requires a title field (max 500 chars). Pinterest requires a link_url field.
  • YouTube and TikTok require at least one video file — images alone will be rejected.
  • Accepted file types: jpg, jpeg, png, gif, webp (images); mp4, mov, avi, webm (videos).

Error Handling

StatusMeaningRecovery
401Invalid API keyCheck api_key in ~/.pandas is correct
403Subscription requiredSubscribe at the dashboard
404Post not found or not retryableVerify the post ID and that its status is failed
422Validation errorShow the specific error messages from the response body and help the user fix them
500Server errorTry again later

平台分布

Codex

38.09%
按下载量换算31

Claude

29.69%
按下载量换算24

Cursor

18.1%
按下载量换算15

Gemini CLI

8.75%
按下载量换算7

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

未通过

权限和风险

接触敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。来源安全扫描存在提醒或未通过项,安装前请自行复核。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills