Skills productclank-campaigns
Community-powered growth for builders. Boost amplifies your social posts with authentic community engagement (replies, likes, reposts). Discover finds relevant conversations and generates AI-powered replies at scale. Use Boost when the user has a post URL. Use Discover when the user wants to find and engage in conversations about their product.
git clone https://github.com/openclaw/skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/0xcovariance/productclank-community-growth" ~/.claude/skills/clawdbot-skills-productclank-campaigns && rm -rf "$T"
skills/0xcovariance/productclank-community-growth/SKILL.mdProductClank — Community-Powered Growth for Builders
Turn your community into a growth engine. Launch campaigns where real people amplify your product across social platforms — authentic engagement, not bots.
Supports Twitter/X, Instagram, TikTok, LinkedIn, Reddit, and Farcaster.
Capability 1: Boost
Amplify a specific social post with community-powered engagement.
Use Boost when the user has a post URL they want to amplify. One API call, instant results. Works across platforms — just pass the URL.
Supported Platforms
| Platform | Replies | Likes | Reposts |
|---|---|---|---|
| Twitter/X | Yes | Yes | Yes |
| Yes | Yes | — | |
| TikTok | Yes | Yes | — |
| Yes | Yes | — | |
| Yes | Yes | — | |
| Farcaster | Yes | Yes | Yes |
How It Works
- Provide a post URL from any supported platform
- Platform is auto-detected from the URL
- Choose action: replies, likes, or reposts (availability varies by platform)
- Community members execute from their personal accounts
- You get authentic, third-party engagement
Pricing
| Action | What You Get | Credits |
|---|---|---|
| Replies | 10 AI-generated reply threads | 200 |
| Likes | 30 community likes | 300 |
| Reposts | 10 community reposts | 300 |
API
POST /api/v1/agents/campaigns/boost
{ "post_url": "https://x.com/user/status/123456", "product_id": "product-uuid", "action_type": "replies", "reply_guidelines": "optional custom instructions", "post_text": "optional — pass post text to skip server-side fetch", "post_author": "optional — post author username (used with post_text)" }
,tweet_url, andtweet_textare still accepted for backward compatibility.tweet_author
Response:
{ "success": true, "campaign": { "id": "uuid", "campaign_number": "CP-042", "platform": "twitter", "url": "https://app.productclank.com/communiply/uuid" }, "post": { "id": "123456789", "url": "https://x.com/user/status/123456789", "text": "Post content...", "author": "username", "platform": "twitter" }, "items_generated": 10, "credits": { "credits_used": 200, "credits_remaining": 100 } }
Consolidation: All boost actions for the same product share one campaign. Boosting again adds to the existing campaign (
is_reboost: true).
When to Use Boost
- "Boost this post" / "get engagement on my announcement"
- "Get community replies on my LinkedIn post"
- "Get likes on my tweet" / "get reposts on my cast"
- User shares a post URL from any platform and wants community engagement
- Launch announcements, product updates, partnership posts — any post you want your community to rally behind
How to Run a Boost (Agent Interaction Guide)
- Get the post URL — ask the user for their post URL (the post they want community to engage with). Any supported platform works.
- Choose action type — ask: "How should the community engage? Replies (support, questions, congrats), likes, or reposts?" Default to replies if unclear. Note: reposts only available on Twitter and Farcaster.
- Find the product — search
and confirm with user (see Confirm Product Selection)GET /agents/products/search?q=<name> - Get reply guidelines (for replies) — ask what kind of engagement they want: "Should community replies congratulate the team? Ask about features? Show excitement?" Use this to set
reply_guidelines - Confirm cost — "This will use 200 credits for 10 community replies. Proceed?"
- Execute —
POST /agents/campaigns/boost - Share results — show campaign URL and credits remaining
Complete Boost Example
// User says: "Get my community to engage with my latest announcement" const API = "https://app.productclank.com/api/v1/agents"; const headers = { "Authorization": `Bearer ${process.env.PRODUCTCLANK_API_KEY}`, "Content-Type": "application/json", }; // 1. Search for the product const search = await fetch(`${API}/products/search?q=MyProduct&limit=5`, { headers }); const { products } = await search.json(); // → Confirm with user: "I found MyProduct. Is this correct?" // 2. Boost a Twitter post const res = await fetch(`${API}/campaigns/boost`, { method: "POST", headers, body: JSON.stringify({ post_url: "https://x.com/myproduct/status/123456789", product_id: products[0].id, action_type: "replies", reply_guidelines: "Show genuine excitement about the launch. Ask thoughtful questions about the new features or congratulate the team. Keep it authentic — no sales pitch.", post_text: "We just shipped v2.0! New API with 10x faster response times, batch endpoints, and webhook support. Try it out →", // optional, skips server fetch post_author: "myproduct", // optional, used with post_text }), }); const result = await res.json(); if (result.success) { console.log(`✅ Boosted on ${result.campaign.platform}! ${result.items_generated} community replies generated`); console.log(`📊 Dashboard: ${result.campaign.url}`); console.log(`💰 Credits remaining: ${result.credits.credits_remaining}`); } // 3. Works with any platform — just change the URL await fetch(`${API}/campaigns/boost`, { method: "POST", headers, body: JSON.stringify({ post_url: "https://www.linkedin.com/posts/myproduct-launch-update-123", product_id: products[0].id, action_type: "replies", post_text: "Excited to announce our Series A! ...", // recommended for non-Twitter platforms }), });
CLI
# Boost a Twitter post communiply boost https://x.com/myproduct/status/123 --action replies \ --guidelines "Congratulate the team, ask about new features, show excitement" # Boost a LinkedIn post communiply boost https://linkedin.com/posts/myproduct-update-123 --action likes # Boost a TikTok video communiply boost https://tiktok.com/@myproduct/video/123 --action replies # Boost a Farcaster cast communiply boost https://warpcast.com/myproduct/0xabc123 --action reposts
Post Text Resolution
For replies, post text is required for AI generation. Resolution order:
- Client-provided
(skips fetch — recommended for non-Twitter platforms)post_text - Server-side fetch via platform API (Twitter oEmbed, TikTok oEmbed, Reddit JSON, etc.)
- If text unavailable, returns
for replies. Likes/reposts work without text.503
Capability 2: Discover
Find relevant Twitter conversations and generate AI-powered replies at scale.
Use Discover when the user wants to proactively find and engage in conversations about their product's topic. This is a multi-step flow — more powerful than Boost, but requires more setup.
How It Works
- Define keywords and target audience
- AI discovers relevant conversations on Twitter
- AI generates contextual replies for each opportunity
- Community members claim replies and post from personal accounts
- Track results in real-time
Pricing
| Operation | Credits |
|---|---|
| Campaign creation | 10 |
| Post discovery + reply generation | 12 per post |
| Reply regeneration | 5 per reply |
| Research analysis | Free |
API Flow
Step 1: Create campaign (10 credits)
POST /api/v1/agents/campaigns
{ "product_id": "product-uuid", "title": "Launch Week Buzz", "keywords": ["AI tools", "productivity apps", "workflow automation"], "search_context": "People discussing AI productivity tools and looking for better solutions", "mention_accounts": ["@myproduct"], "reply_style_tags": ["friendly", "helpful"], "reply_length": "short", "reply_posted_by": "community", "min_follower_count": 500, "max_post_age_days": 7 }
Step 2 (optional): Run research (free)
POST /api/v1/agents/campaigns/{id}/research
Expands keywords, discovers influencers, finds Twitter lists. Results are automatically used in Step 3.
Step 3: Generate posts (12 credits/post)
POST /api/v1/agents/campaigns/{id}/generate-posts
Discovers relevant tweets and generates AI replies for each.
Step 4 (optional): Review and refine
GET /api/v1/agents/campaigns/{id}/posts?include_replies=true POST /api/v1/agents/campaigns/{id}/regenerate-replies
When to Use Discover
- "Create a Twitter campaign" / "find relevant conversations"
- "Monitor competitor mentions" / "intercept competitor conversations"
- "Scale word-of-mouth" / "community-driven growth"
- "Launch day amplification" — find conversations about the product category
- User wants ongoing, proactive engagement (not one-off amplification)
Use Cases
1. Launch Day Amplification Create a campaign targeting conversations about new tools, launches, and your product category. Community claims AI-generated replies and posts from personal accounts — turning your launch into coordinated authentic buzz. Keywords:
["Product Hunt launch", "new AI tools", "Show HN", "just launched"]
Credits: ~250 for a 20-post campaign
2. Competitor Intercept Target keywords like "[Competitor] alternative" or "switching from [Competitor]". Community members naturally recommend your product in those threads with authentic, experience-based replies. Keywords:
["Salesforce alternative", "switching from HubSpot", "better than Notion"]
3. Growth Campaign with Rewards Create a Communiply campaign + fund it with credits. Community members browse available posts, claim reply opportunities, post from their accounts, and earn rewards for verified engagement. 60-80% lower CAC than traditional ads.
4. Problem-Based Targeting Find people expressing pain points your product solves. AI generates helpful, contextual replies that naturally mention your solution. Keywords:
["struggling with email marketing", "need a better CRM", "project management nightmare"]
5. Autonomous Growth Agent Your agent monitors trending topics via external APIs, detects relevant conversations, and automatically creates Communiply campaigns. Users earn credits by participating, creating a self-sustaining growth flywheel. Architecture:
Cron job → Trend detection → POST /campaigns → POST /generate-posts → Community executes
How to Run a Discover Campaign (Agent Interaction Guide)
Step 1: Gather requirements from the user. Ask for:
- Product: What product are you promoting? (Get
from ProductClank)product_id - Campaign goal: What do you want to achieve? (e.g., "Launch week buzz", "Competitor intercept")
- Target keywords: What topics should we monitor? (e.g.,
)["AI tools", "productivity apps"] - Search context: Describe the conversations to target (e.g., "People discussing AI productivity tools and automation")
Optional refinements to ask about:
- Who posts replies: Brand (first-person: "We built this") or community (third-party: "Check out @brand")? Default: community
- Mention accounts: Twitter handles to reference naturally (e.g.,
)["@productclank"] - Reply style: Tone tags (e.g.,
)["friendly", "technical", "casual"] - Reply length: "very-short" | "short" | "medium" | "long" | "mixed"
- Custom guidelines: Specific instructions for AI reply generation (brand voice, do's and don'ts)
- Filters:
(default 100),min_follower_count
,max_post_age_daysrequire_verified
Step 2: Confirm product selection (see Confirm Product Selection)
Step 3: Create the campaign —
POST /agents/campaigns
Step 4: Run research (recommended, free) —
POST /agents/campaigns/{id}/research
This expands keywords and finds influencers. Results are automatically used during post generation.
Step 5: Generate posts —
POST /agents/campaigns/{id}/generate-posts
Step 6: Share results with user:
- Campaign dashboard URL
- Number of posts discovered and replies generated
- Credits used and remaining
- Next steps: community members will claim and execute replies
Custom Reply Guidelines
Instead of auto-generated guidelines, provide custom instructions for more control:
{ "reply_guidelines": "Reply as a developer who has used our product for 6+ months.\nFocus on: ease of integration, excellent documentation, responsive support.\nAvoid: marketing speak, over-promising, comparing to competitors directly.\nMention @productclank naturally when relevant.\nInclude our website (https://productclank.com) if it adds value." }
Complete Discover Example
// User says: "I want to create a Twitter campaign for my DeFi app launch" const API = "https://app.productclank.com/api/v1/agents"; const headers = { "Authorization": `Bearer ${process.env.PRODUCTCLANK_API_KEY}`, "Content-Type": "application/json", }; // 1. Search for the product const search = await fetch(`${API}/products/search?q=MyDeFiApp&limit=5`, { headers }); const { products } = await search.json(); // → Confirm with user: "I found MyDeFiApp. Is this correct?" // 2. Create campaign (10 credits) const campaign = await fetch(`${API}/campaigns`, { method: "POST", headers, body: JSON.stringify({ product_id: products[0].id, title: "DeFi App Launch Week", keywords: ["DeFi platforms", "yield farming", "decentralized finance", "crypto staking"], search_context: "People discussing DeFi platforms, yield farming strategies, and crypto staking opportunities", mention_accounts: ["@mydefiapp"], reply_style_tags: ["professional", "technical", "helpful"], reply_length: "short", min_follower_count: 1000, max_post_age_days: 3, }), }).then(r => r.json()); console.log(`✅ Campaign created: ${campaign.campaign.campaign_number}`); console.log(`📊 Dashboard: ${campaign.campaign.url}`); // 3. Run research (free — improves targeting) await fetch(`${API}/campaigns/${campaign.campaign.id}/research`, { method: "POST", headers, body: JSON.stringify({ force: false }), }).then(r => r.json()); // 4. Generate posts (12 credits/post) const posts = await fetch(`${API}/campaigns/${campaign.campaign.id}/generate-posts`, { method: "POST", headers, body: JSON.stringify({}), }).then(r => r.json()); console.log(`✅ Generated ${posts.posts_created} posts`); console.log(`💰 Credits used: ${campaign.credits.credits_used + posts.credits_used}`); console.log(`💰 Credits remaining: ${posts.credits_remaining}`); // 5. Optional: review and regenerate const postsData = await fetch( `${API}/campaigns/${campaign.campaign.id}/posts?include_replies=true`, { headers } ).then(r => r.json()); // Regenerate specific replies with new instructions await fetch(`${API}/campaigns/${campaign.campaign.id}/regenerate-replies`, { method: "POST", headers, body: JSON.stringify({ post_ids: [postsData.posts[0].id], edit_request: "Make the replies shorter and more casual. Don't mention the product name directly.", }), }).then(r => r.json());
Required Fields
| Field | Type | Description |
|---|---|---|
| UUID | Product on ProductClank |
| string | Campaign title |
| string[] | Non-empty array of target keywords |
| string | Description of target conversations |
Optional Fields
| Field | Type | Default | Description |
|---|---|---|---|
| string[] | | Handles to mention naturally |
| string[] | | Tone tags (friendly, technical, etc.) |
| string | — | Handle to mimic style |
| enum | — | very-short, short, medium, long, mixed |
| enum | community | community or brand |
| string | auto | Custom AI generation instructions |
| number | 100 | Min followers filter |
| number | — | Min engagement filter |
| number | — | Max post age filter |
| boolean | false | Verified accounts only |
Choosing Between Boost and Discover
| Question | Boost | Discover |
|---|---|---|
| Do you have a post URL? | Yes — your own post you want community to engage with | No |
| Platforms? | Twitter, Instagram, TikTok, LinkedIn, Reddit, Farcaster | Twitter only |
| Time to value? | ~30 seconds | ~5 minutes |
| Setup complexity? | 1 API call | 2-3 API calls |
| Best for? | Rally community around your post (replies, likes, reposts) | Finding & joining new conversations about your topic |
| Ongoing? | One-time per post | Can generate multiple batches |
| Credits? | Fixed (200-300) | Variable (10 + 12/post) |
Rule of thumb: If the user has a specific post they want community to rally behind → Boost. If the user wants to find and join conversations about their product's topic → Discover.
Agent Setup
1. Autonomous Agent (self-funded)
// Self-register — no auth required const res = await fetch("https://app.productclank.com/api/v1/agents/register", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ name: "MyAgent" }), }); const { api_key, credits } = await res.json(); // → API key returned once (store securely) // → 300 free credits to start
Top up credits via USDC on Base:
POST /api/v1/agents/credits/topup
2. Owner-Linked Agent (user-funded)
After registering, link to a ProductClank account:
// Generate a linking URL const linkRes = await fetch("https://app.productclank.com/api/v1/agents/create-link", { method: "POST", headers: { "Authorization": `Bearer ${api_key}` }, }); const { link_url } = await linkRes.json(); // Show link_url to user — they click it, log in, agent is linked
The agent then uses the user's credit balance for all operations.
3. Trusted Agent (multi-tenant) — Coming Soon
For platform agents serving multiple users. Each user authenticates, agent bills per-user via
caller_user_id. Contact ProductClank for trusted agent status.
Confirm Product Selection (REQUIRED)
Before creating any campaign (Boost or Discover), you MUST confirm the product with the user:
- Search:
GET /api/v1/agents/products/search?q=<name>&limit=5 - Present results: "I found [Product Name] (product_id:
). Is this correct?"... - Wait for confirmation before proceeding.
Do NOT skip this step.
Campaign Delegates
Add users as delegators so they can manage campaigns in the webapp:
POST /api/v1/agents/campaigns/{id}/delegates { "user_id": "user-uuid" }
When using
caller_user_id (trusted agents), the billing user is auto-added as a delegator.
Additional Endpoints
| Endpoint | Method | Cost | Description |
|---|---|---|---|
| POST | Free | Register agent, get API key |
| GET | Free | Agent profile + credit balance |
| POST | Free | Generate account linking URL |
| POST | Free | Rotate API key |
| GET | Free | List campaigns |
| GET | Free | Campaign details + stats |
| GET | Free | Read posts + replies |
| GET | Free | Read cached research |
| GET | Free | Credit balance |
| GET | Free | Transaction history |
| GET | Free | Search products |
For complete API reference, see references/API_REFERENCE.md.
Best Practices
For Boost
- Use
to control the tone and focus of generated repliesreply_guidelines - Boost works best on posts less than 48 hours old
- You can boost the same post multiple times with different action types
- For non-Twitter platforms, pass
to ensure reliable reply generationpost_text - AI replies are automatically tuned to each platform's character limits and tone conventions
For Discover
- Be specific with keywords:
>["AI productivity tools"]["AI"] - Use 3-7 keywords for the best discovery quality
- Run research first (free) — it significantly improves targeting
- Set
to 3-7 for timely engagementmax_post_age_days - Provide reply guidelines with brand voice, key value props, and boundaries
General
- Direct users to the dashboard after campaign creation:
https://app.productclank.com/communiply/{id} - Add users as delegators so they can manage campaigns in the webapp
- New accounts get 300 free credits (~$30 value)
Error Handling
| Status | Error | Fix |
|---|---|---|
| 400 | | Check required fields |
| 401 | | Verify API key starts with |
| 402 | | Top up via webapp or |
| 403 | | Check campaign ownership or trusted agent status |
| 404 | | Verify product/campaign ID |
| 429 | | Wait until next day (10 campaigns/day default) |
Coming Soon
Growth Boost — Community members create original content based on your campaign brief. Define your goals, target audience, and messaging — your community produces authentic posts, threads, and videos across any platform. API coming soon.
Support
- Dashboard: app.productclank.com/communiply/
- Website: productclank.com
- Twitter: @productclank
- Warpcast: warpcast.com/productclank
- CLI: github.com/covariance-network/communiply-cli