Loading...
Loading...
Use this when users want to set up daily automated promotion and marketing for their Claude Code skills — this includes researching how top skills are promoted on marketplaces (ClawHub / openclaw / SkillsMP / agentskills.io), generating a skill-specific marketing plan, auto-posting to X (Twitter) via xurl, and drafting community discussion posts (Reddit / HN / Discord). Triggers: "推广 skills", "营销 skills", "自动发推广", "每天自动推广", "skill marketing", "promote my skills", "/wjs-promoting-skills".
npx skill4agent add jianshuo/claude-skills wjs-promoting-skillswjs-*claude -poutbox/<date>//wjs-promoting-skills/publish-skill <name>~/.claude/skills/wjs-promoting-skills/
├── SKILL.md # This file
├── setup.sh # One-time: install launchd plist, start 4 AM schedule
├── uninstall.sh # One-time: uninstall launchd plist
├── daily.sh # ★ 4 AM entry point: run the full workflow
├── list-skills.sh # List all current wjs-* skills
├── pick-next-skill.sh # Select today's skill according to rotation rules
├── research-marketplaces.sh # Research how top skills on openclaw / clawhub / SkillsMP write copy (run once a month)
├── make-plan.sh # Generate a marketing plan for a skill (30-day angle rotation)
├── com.jianshuo.wjs-promoting-skills.plist.template
├── prompts/
│ ├── research-marketplaces.md # Research prompt
│ ├── make-plan.md # Marketing plan prompt
│ ├── daily-post.md # Today's X post prompt
│ └── community-drafts.md # Reddit / HN / Discord draft prompt
├── state/ # State directory (.gitignored, won't be pushed to GitHub by publish hook)
│ ├── .gitignore
│ ├── README.md
│ ├── research.md # Output of the latest marketplace research
│ ├── plans/<skill>.md # 30-day angle rotation plan for each skill
│ └── history.jsonl # Append one line after each run: date / skill / tweet_id / status
└── outbox/ # Community post drafts (copy-paste after manual review)
└── YYYY-MM-DD/
├── x-posted.txt # Archived text of the actually posted X tweet
├── reddit-r-ClaudeAI.md
├── hn-show.md
├── discord-anthropic.md
└── wechat-followup.md # (Optional) Angle reference for future WeChat official account articles~/.claude/skills/wjs-promoting-skills/setup.shclaudexurlxurl whoamijqresearch-marketplaces.shstate/research.mdcom.jianshuo.wjs-promoting-skills.plist.template~/Library/LaunchAgents/launchctl bootstrap~/.claude/skills/wjs-promoting-skills/uninstall.shdaily.sh04:00 →
Step 1: list-skills.sh → List of all current wjs-* skills + their last promotion time
Step 2: pick-next-skill.sh → Select today's skill according to rules (see §Rotation Rules)
Step 3: Check skip conditions → Promoted within 7 days / SKILL.md unchanged / Today's content already in outbox → exit 0 directly
Step 4: make-plan.sh <skill> → If the skill has no plan or the plan is older than 30 days, regenerate it
Step 5: Run daily-post.md via claude -p
└── Input: SKILL.md + plan + research.md + last 30 days of history.jsonl
└── Output: An X text ≤ 280 characters (including repo URL)
Step 6: xurl -X POST -d '{"text": "..."}' /2/tweets ← Publish directly
Step 7: Run community-drafts.md via claude -p
└── Output: outbox/<date>/reddit-r-ClaudeAI.md / hn-show.md / discord-anthropic.md
Step 8: Append one line to history.jsonl, and archive the posted X tweet to outbox/<date>/x-posted.txtresearch-marketplaces.shstate/research.mdmake-plan.sh#ClaudeCode#ClaudeSkillsAI-poweredgame-changermake-plan.shoutbox/<date>/reddit-r-ClaudeAI.mdhn-show.mdShow HN: <skill> – <one line value>discord-anthropic.mdwechat-followup.md# See who will be promoted tomorrow
~/.claude/skills/wjs-promoting-skills/pick-next-skill.sh
# Force generate a plan for a specific skill
~/.claude/skills/wjs-promoting-skills/make-plan.sh wjs-transcribing-audio
# Run the entire today's flow without posting to X (dry-run)
DRY_RUN=1 ~/.claude/skills/wjs-promoting-skills/daily.sh
# Force promote a specific skill (bypass rotation)
SKILL=wjs-segmenting-video ~/.claude/skills/wjs-promoting-skills/daily.sh
# Refresh marketplace research
~/.claude/skills/wjs-promoting-skills/research-marketplaces.sh
# See what's been promoted in the last 7 days
tail -7 ~/.claude/skills/wjs-promoting-skills/state/history.jsonl | jq .claude$PATHclaude -p "hello"xurlxurl whoamijianshuojqbrew install jqwjs-*git config --get remote.origin.url~/code/claude-skillslaunchd| Not Do | Reason |
|---|---|
| Post multiple X tweets a day | 7000 followers don't need a cluttered timeline. 1 post per day, quality > quantity |
| Auto-post to Reddit / HN | Anti-spam reviews are extremely strict, auto-posting = account ban risk. Draft only |
| Use templates (emojis + exaggerated words) | The user's tone is "practical, specific, no hype". Template-style copy pollutes the brand |
| Promote the same skill within 7 days | Even with different angles, wrong frequency will cause followers to unfollow |
| "Post for the sake of posting" — post even if SKILL.md hasn't changed in 7 days | Don't post if there's nothing new. Silence is better than noise |
Call | We need deterministic output, no hooks / auto-memory / CLAUDE.md interference |
| Push state/ to GitHub | history.jsonl contains metadata of X posts (like tweet_id), which is not public content |
DRY_RUN=1/publish-skillsetup.shlaunchctl list | grep wjs-promoting-skillsstate/research.mdDRY_RUN=1 daily.shoutbox/<today>/history.jsonlAuto-publish: This skill is automatically synced to github.com/jianshuo/claude-skills via(auto commit + push after each edit).~/.claude/skills-publish-hook.shandstate/are excluded via the directory'soutbox/+ subdirectory.gitignore, and won't be pushed along with SKILL.md..gitignore