Install
$ agentstack add skill-joeseesun-qiaomu-cut-skill-creator ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
When to Use
- User wants a full content package for a specific platform (WeChat article, Xiaohongshu post, narration script)
- User says "帮我写篇公众号", "小红书图文", "口播稿", "create content"
- User provides a URL/text/topic and wants it turned into platform-ready content with images
When NOT to Use
- User wants a single image without a content workflow → use image-gen directly
- User wants a single TTS audio → use tts directly
- User wants to transcribe audio → use asr directly
- User wants a podcast episode → use podcast directly
- User wants to extract content from a URL without further processing → use content-parser directly
Creator is for multi-step content production that combines writing + media generation into a platform-ready package.
Purpose
Generate platform-specific content packages by orchestrating existing skills. Input: topic, URL, text, or audio/video file. Output: a folder with article/script, images, and metadata — ready to publish.
Hard Constraints
- Use
listenhubCLI commands for image-gen and TTS. Use curl for content-parser (seecontent-parser/SKILL.md§ API Reference). - Always read config following
shared/config-pattern.mdbefore any interaction - Follow
shared/cli-patterns.mdfor polling, errors, and interaction patterns - Never save files to
~/Downloads/or.listenhub/— save content packages to the current working directory - JSON parsing: use
jqonly (no python3, awk)
Language Adaptation: All UI text follows the user's input language. Chinese input → Chinese output. English input → English output. Mixed → follow dominant language.
Use AskUserQuestion for every multiple-choice step. One question at a time. Wait for the answer. After template is selected and input is understood, show a confirmation summary and wait for explicit approval before executing the pipeline.
API Key Check at Confirmation Gate: If the pipeline includes any remote API call (image-gen, content-parser, tts), check authentication before proceeding. For CLI-based calls (image-gen, TTS), run listenhub auth login if not authenticated. For content-parser calls, configure LISTENHUB_API_KEY (see content-parser/SKILL.md § Authentication). Pure text-only pipelines (e.g., topic → narration script without TTS) can proceed without authentication.
Step -1: API Key Check
Deferred. API key is checked at the confirmation gate (Step 4) only when the pipeline requires remote API calls. See Hard Constraints above.
Step 0: Config Setup
Follow shared/config-pattern.md Step 0 (Zero-Question Boot).
If file doesn't exist — silently create with defaults and proceed:
mkdir -p ".listenhub/creator" ".listenhub/creator/styles"
cat > ".listenhub/creator/config.json" 50 chars, not a URL/path | Use directly as material |
| Topic/keywords | Short text (/dev/null && echo yes || echo no`
3. If `coli` missing: inform user to install (`npm install -g @marswave/coli`), ask them to paste text instead
4. Transcribe: `coli asr -j --model sensevoice "/tmp/creator-{slug}.{ext}"`
5. Extract text from JSON result
6. Cleanup: `rm "/tmp/creator-{slug}.{ext}"`
**For URL (web/article) inputs:**
Content-parser will be called during pipeline execution (after confirmation).
### Step 2: Template Matching
If the user specified a platform in their prompt, match directly:
- "公众号", "wechat", "微信" → wechat
- "小红书", "xiaohongshu", "xhs" → xiaohongshu
- "口播", "narration", "脚本" → narration
If no platform was specified, ask via AskUserQuestion:
Question: "Which content template?" / "用哪个创作模板?"
Options (adapt language to user's input):
- "WeChat article (公众号长文)" — Long-form article with AI illustrations
- "Xiaohongshu (小红书)" — Image cards + long text post
- "Narration script (口播稿)" — Spoken script with optional audio
### Step 2.5: Topic Assistance
This step runs only when the user's input is a topic or keywords (short text "
for i in $(seq 1 60); do
RESULT=$(curl -sS "https://api.marswave.ai/openapi/v1/content/extract/$TASK_ID" \
-H "Authorization: Bearer $LISTENHUB_API_KEY" \
-H "X-Source: skills" 2>/dev/null)
STATUS=$(echo "$RESULT" | tr -d '\000-\037\177' | jq -r '.data.status // "processing"')
case "$STATUS" in
completed) echo "$RESULT"; exit 0 ;;
failed) echo "FAILED: $RESULT" >&2; exit 1 ;;
*) sleep 5 ;;
esac
done
echo "TIMEOUT" >&2; exit 2
Extract content: MATERIAL=$(echo "$RESULT" | jq -r '.data.data.content')
If extraction fails: tell user "URL 解析失败,你可以直接粘贴文字内容给我" and stop.
Then follow the platform template — read template.md and execute each step. The template specifies the exact writing instructions and API calls. See creator/templates/{platform}/template.md for template contents.
Writing engine integration: Each platform's template.md now includes writing-engine references and a self-review loop. The template handles loading writing-engine/ files, applying the selected prototype's narrative structure, and running L1-L4 quality review after writing. See each platform's template.md for details.
Style application: When writing content, apply style directives in this priority order (higher overrides lower):
sessionStyle— directives from the current style reference (Step 3), if any.listenhub/creator/styles/{platform}.md— persisted user style directives (if file exists)templates/{platform}/style.md— baseline platform style
For image generation (called by wechat and xiaohongshu templates):
RESPONSE=$(listenhub image create \
--prompt "" \
--aspect-ratio "" \
--json)
BASE64_DATA=$(echo "$RESPONSE" | jq -r '.candidates[0].content.parts[0].inlineData.data // .data')
# macOS uses -D, Linux uses -d (detect platform)
if [[ "$(uname)" == "Darwin" ]]; then
echo "$BASE64_DATA" | base64 -D > "{output-path}/{filename}.jpg"
else
echo "$BASE64_DATA" | base64 -d > "{output-path}/{filename}.jpg"
fi
On 429: exponential backoff (wait 15s → 30s → 60s), retry up to 3 times. On failure after retries: skip this image, annotate in output summary.
Generate images sequentially (not parallel) to respect rate limits.
For TTS (called by narration template when user wants audio):
listenhub tts create --text "$(cat /tmp/lh-content.txt)" --speaker "$SPEAKER_ID" --json \
| jq -r '.data' | base64 -D > "{slug}-narration/audio.mp3"
Step 6: Assemble Output
Create the output folder and write all files:
SLUG="{topic-slug}"
OUTPUT_DIR="${SLUG}-{platform}"
# Dedup folder name
i=2; while [ -d "$OUTPUT_DIR" ]; do OUTPUT_DIR="${SLUG}-{platform}-${i}"; i=$((i+1)); done
mkdir -p "$OUTPUT_DIR"
Write content files per template spec. Then write meta.json:
{
"title": "...",
"slug": "...",
"platform": "wechat|xiaohongshu|narration",
"date": "YYYY-MM-DD",
"tags": ["...", "..."],
"summary": "..."
}
Step 7: Present Result
✅ 内容已生成!保存在 {OUTPUT_DIR}/
📄 {main files list}
🖼️ images/ — N 张配图(如有)
📋 meta.json — 标题、标签、摘要
(Adapt language to user's input language per Hard Constraints.)
Step 8: Update Preferences
Record this generation in history:
NEW_CONFIG=$(echo "$CONFIG" | jq \
--arg platform "$PLATFORM" \
--arg date "$(date +%Y-%m-%d)" \
--arg topic "$TOPIC" \
'.preferences[$platform].history = (.preferences[$platform].history + [{"date": $date, "topic": $topic}])[-5:]')
echo "$NEW_CONFIG" > "$CONFIG_PATH"
Keep only the last 5 history entries per platform.
Note: cardStyle from the spec is deferred — not implemented in V1 config. Can be added later when card style customization is needed.
Manual Style Tuning
Adding style directives:
If the user says "记住:{style directive}" or "remember: {style directive}":
- Detect which platform it applies to (from context or ask)
- Append the directive as a new line to
.listenhub/creator/styles/{platform}.md(create the file if it doesn't exist)
This also applies after Step 3 (Style Extraction): if the user says "记住这个风格" after reviewing extracted directives, write all confirmed directives to .listenhub/creator/styles/{platform}.md.
Resetting style:
If the user says "重置风格偏好" or "reset style":
- Ask which platform (or all)
- Delete
.listenhub/creator/styles/{platform}.md
API Reference
- Authentication:
shared/cli-authentication.md - Image generation: CLI:
listenhub image create(seeshared/cli-patterns.md) - Content extraction:
content-parser/SKILL.md§ API Reference (Inlined) - TTS (text-to-speech): CLI:
listenhub tts create(seeshared/cli-patterns.md) - Speaker selection:
shared/speaker-selection.md - Config pattern:
shared/config-pattern.md - Common patterns (polling, errors):
shared/cli-patterns.md - Output mode:
shared/output-mode.md
Composability
- Invokes: content-parser (URL extraction), image-gen (illustrations/cards), tts (narration audio), asr (audio/video transcription via
coli) - Invoked by: standalone — user triggers directly
- Templates:
creator/templates/{wechat,xiaohongshu,narration}/template.mddefine per-platform pipelines - Style guides:
creator/templates/{wechat,xiaohongshu,narration}/style.mddefine per-platform writing tone
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: joeseesun
- Source: joeseesun/qiaomu-cut-skill
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.