🎁 Get the FREE AI Skills Starter GuideSubscribe →
BytesAgainBytesAgain
🦀 ClawHub

redbook

by @lucasygu

Search, read, analyze, and automate Xiaohongshu (小红书) content via CLI

Versionv0.7.2
Downloads2,530
Stars2
TERMINAL
clawhub install redbook

📖 About This Skill


description: Search, read, analyze, and automate Xiaohongshu (小红书) content via CLI allowed-tools: Bash, Read, Write, Glob, Grep

OpenClaw / ClawHub metadata (clawhub install redbook)

name: redbook version: 0.5.0 metadata: openclaw: requires: bins: - redbook install: - kind: node package: "@lucasygu/redbook" bins: [redbook] os: [macos] homepage: https://github.com/lucasygu/redbook tags: - xiaohongshu - social-media - analytics - content-ops

Redbook — Xiaohongshu CLI

Use the redbook CLI to search notes, read content, analyze creators, automate engagement, and research topics on Xiaohongshu (小红书/RED).

OpenClaw users: Install via clawhub install redbook or npm install -g @lucasygu/redbook.

Usage

/redbook search "AI编程"              # Search notes
/redbook read                    # Read a note
/redbook user                 # Creator profile
/redbook analyze              # Full creator analysis (profile + posts)

Quick Reference

| Intent | Command | |--------|---------| | Search notes | redbook search "keyword" --json | | Read a note | redbook read --json | | Get comments | redbook comments --json --all | | Creator profile | redbook user --json | | Creator's posts | redbook user-posts --json | | Browse feed | redbook feed --json | | Search hashtags | redbook topics "keyword" --json | | Analyze viral note | redbook analyze-viral --json | | Extract content template | redbook viral-template --json | | Post a comment | redbook comment --content "text" | | Reply to comment | redbook reply --comment-id --content "text" | | Batch reply (preview) | redbook batch-reply --strategy questions --dry-run | | Like a note | redbook like | | Unlike a note | redbook like --undo | | List favorites | redbook favorites --json or redbook favorites --json | | Collect a note | redbook collect | | Remove from collection | redbook uncollect | | List followers | redbook followers --json | | List following | redbook following --json | | Delete own note | redbook delete | | Check note health | redbook health --json or redbook health --all --json | | List user boards | redbook boards or redbook boards --json | | List album notes | redbook board or redbook board --json | | Render markdown to cards | redbook render content.md --style xiaohongshu | | Publish image note | redbook post --title "..." --body "..." --images img.jpg | | Check connection | redbook whoami |

Always add --json when parsing output programmatically. Without it, output is human-formatted text.


XHS Platform Signals

XHS is not Twitter or Instagram. These platform-specific engagement ratios reveal content type and audience behavior.

Collect/Like Ratio (collected_count / liked_count)

XHS's "collect" (收藏) is a save-for-later mechanic — users build personal reference libraries. This ratio is the strongest signal of content utility.

| Ratio | Classification | Meaning | |-------|---------------|---------| | >40% | 工具型 (Reference) | Tutorial, checklist, template — users bookmark for reuse | | 20–40% | 认知型 (Insight) | Thought-provoking but not saved for later | | <20% | 娱乐型 (Entertainment) | Consumed and forgotten — engagement is passive |

Comment/Like Ratio (comment_count / liked_count)

Measures how much a note triggers conversation.

| Ratio | Classification | Meaning | |-------|---------------|---------| | >15% | 讨论型 (Discussion) | Debate, sharing experiences, asking questions | | 5–15% | 正常互动 (Normal) | Typical engagement pattern | | <5% | 围观型 (Passive) | Users like but don't engage further |

Share/Like Ratio (share_count / liked_count)

Measures social currency — whether users share to signal identity or help others.

| Ratio | Meaning | |-------|---------| | >10% | 社交货币 — people share to signal taste, identity, or help friends | | <10% | Content consumed individually, not forwarded |

Search Sort Semantics

| Sort | What It Reveals | |------|----------------| | --sort popular | Proven ceiling — the best a keyword can do | | --sort latest | Content velocity — how much is being posted now | | --sort general | Algorithm-weighted blend (default) |

Content Form Dynamics

| Form | Tendency | |------|----------| | 图文 (image-text, type: "normal") | Higher collect rate — users save reference content | | 视频 (video, type: "video") | Higher like rate — easier to consume passively |


Analysis Modules

Each module is a composable building block. Combine them for different analysis depths.

Module A: Keyword Engagement Matrix

Answers: Which keywords have the highest engagement ceiling? Which are saturated vs. underserved?

Commands:

redbook search "keyword1" --sort popular --json
redbook search "keyword2" --sort popular --json

Repeat for each keyword in your list

Fields to extract from each result's items[]:

  • items[].note_card.interact_info.liked_count — likes (may use Chinese numbers: "1.5万" = 15,000)
  • items[].note_card.interact_info.collected_count — collects
  • items[].note_card.interact_info.comment_count — comments
  • items[].note_card.user.nickname — author
  • How to interpret:

  • Top1 ceiling = items[0] likes — the best-performing note for this keyword. This is the proven demand signal.
  • Top10 average = mean likes across items[0..9] — how well an average top note does.
  • A high Top1 but low Top10 avg means one outlier dominates; hard to compete.
  • A high Top10 avg means consistent demand; easier to break in.
  • Output: Keyword × engagement table ranked by Top1 ceiling.

    | Keyword | Top1 Likes | Top10 Avg | Top1 Collects | Collect/Like | |---------|-----------|-----------|---------------|-------------| | keyword1 | 12,000 | 3,200 | 5,400 | 45% | | keyword2 | 8,500 | 4,100 | 1,200 | 14% |


    Module B: Cross-Topic Heatmap

    Answers: Which topic × scene intersections have demand? Where are the content gaps?

    Commands:

    # Combine base topic with scene/angle keywords
    redbook search "base topic + scene1" --sort popular --json
    redbook search "base topic + scene2" --sort popular --json
    redbook search "base topic + scene3" --sort popular --json
    

    Fields to extract: Same as Module A — Top1 liked_count for each combination.

    How to interpret:

  • High Top1 = proven demand for this intersection
  • Zero or very low results = content gap (opportunity or no demand — check if the combination makes sense)
  • Compare across scenes to find which angles resonate most with the base topic
  • Output: Base × Scene heatmap.

                 scene1    scene2    scene3    scene4
    base topic   ████ 8K   ██ 2K     ████ 12K  ░░ 200
    


    Module C: Engagement Signal Analysis

    Answers: What type of content is each keyword? Reference, insight, or entertainment?

    Commands: Use search results from Module A, or for a single note:

    redbook analyze-viral "" --json
    

    Fields to extract:

  • From search results: compute ratios from interact_info fields
  • From analyze-viral: use pre-computed engagement.collectToLikeRatio, engagement.commentToLikeRatio, engagement.shareToLikeRatio
  • How to interpret: Apply the ratio benchmarks from XHS Platform Signals above.

    Output: Per-keyword or per-note classification.

    | Keyword | Collect/Like | Comment/Like | Type | |---------|-------------|-------------|------| | keyword1 | 45% | 8% | 工具型 + 正常互动 | | keyword2 | 12% | 22% | 娱乐型 + 讨论型 |


    Module D: Creator Discovery & Profiling

    Answers: Who are the key creators in this niche? What are their strategies?

    Commands:

    # 1. Collect unique user_ids from search results across keywords
    

    Extract from items[].note_card.user.user_id

    2. For each creator:

    redbook user "" --json redbook user-posts "" --json

    Fields to extract:

  • From user: interactions[] where type === "fans" → follower count
  • From user-posts: notes[].interact_info.liked_count for all posts → compute avg, median, max
  • From user-posts: notes[].display_title → content patterns, posting frequency
  • How to interpret:

  • Avg vs. Median likes: Large gap means viral outliers inflate the average. Median is the "true" baseline.
  • Max / Median ratio: >5× means they've had breakout hits. Study those notes specifically.
  • Post frequency: Count notes to estimate posting cadence. Prolific creators (>3/week) vs. quality-focused (<1/week).
  • Output: Creator comparison table.

    | Creator | Followers | Avg Likes | Median | Max | Posts | Style | |---------|----------|-----------|--------|-----|-------|-------| | @creator1 | 12万 | 3,200 | 1,800 | 45,000 | 89 | Tutorial | | @creator2 | 5.4万 | 8,100 | 6,500 | 22,000 | 34 | Story |


    Module E: Content Form Breakdown

    Answers: Do image-text or video notes perform better for this topic?

    Commands:

    redbook search "keyword" --type image --sort popular --json
    redbook search "keyword" --type video --sort popular --json
    

    Fields to extract:

  • Compare Top1 and Top10 avg liked_count and collected_count between the two result sets
  • Note the type field: "normal" = image-text, "video" = video
  • Output: Form × engagement table.

    | Form | Top1 Likes | Top10 Avg | Collect/Like | |------|-----------|-----------|-------------| | 图文 | 8,000 | 2,400 | 42% | | 视频 | 15,000 | 5,100 | 18% |


    Module F: Opportunity Scoring

    Answers: Which keywords should I target? Where is the best effort-to-reward ratio?

    Input: Keyword matrix from Module A.

    Scoring logic:

  • Demand = Top1 likes ceiling (proven audience size)
  • Competition = density of high-engagement results (how many notes in Top10 have >1K likes)
  • Score = Demand × (1 / Competition density)
  • Tier thresholds (based on Top1 likes):

    | Tier | Top1 Likes | Meaning | |------|-----------|---------| | S | >100,000 (10万+) | Massive demand — hard to compete but huge upside | | A | 20,000–100,000 | Strong demand — competitive but winnable | | B | 5,000–20,000 | Moderate demand — good for growing accounts | | C | <5,000 | Niche — low competition, low ceiling |

    Output: Tiered keyword list.

    | Tier | Keyword | Top1 | Competition | Opportunity | |------|---------|------|-------------|------------| | A | keyword1 | 45K | Medium (6/10 >1K) | High | | B | keyword3 | 12K | Low (2/10 >1K) | Very High | | S | keyword2 | 120K | High (10/10 >1K) | Medium |


    Module G: Audience Inference

    Answers: Who is the audience for this niche? What do they want?

    Input: Engagement ratios from Module C + comment themes from analyze-viral + content patterns.

    Fields to extract from analyze-viral JSON:

  • comments.themes[] — recurring phrases and keywords from comment section
  • comments.questionRate — % of comments that are questions (learning intent)
  • engagement.collectToLikeRatio — save behavior signals intent
  • hook.hookPatterns[] — what title patterns attract this audience
  • Inference rules:

  • High collect rate + high question rate → learning-oriented audience (students, professionals)
  • High comment rate + emotional themes → community-oriented audience (sharing experiences)
  • High share rate → aspiration-oriented audience (lifestyle, identity signaling)
  • Comment language patterns → age/education signals (formal = older, slang = younger)
  • Output: Audience persona summary — demographics, intent, content preferences.


    Module H: Content Brainstorm

    Answers: What specific content should I create, backed by data?

    Input: Opportunity scores (Module F) + audience persona (Module G) + heatmap gaps (Module B).

    For each content idea, specify:

  • Target keyword — from opportunity scoring
  • Hook angle — based on hookPatterns that work for this niche
  • Content type — 工具型/认知型/娱乐型 based on what the audience wants
  • Form — 图文 or 视频 based on Module E
  • Engagement target — realistic based on Top10 avg for this keyword
  • Competitive reference — specific note URL that proves this angle works
  • Output: Ranked content ideas with data backing.

    | # | Keyword | Hook Angle | Type | Target Likes | Reference | |---|---------|-----------|------|-------------|-----------| | 1 | keyword3 | "N个方法..." (List) | 工具型 图文 | 5K+ | [top note URL] | | 2 | keyword1 | "为什么..." (Question) | 认知型 视频 | 10K+ | [top note URL] |


    Module I: Comment Operations

    Answers: Which comments deserve a reply? What is the comment quality distribution?

    Commands:

    # 1. Fetch all comments
    redbook comments "" --all --json

    2. Preview reply candidates (dry run)

    redbook batch-reply "" --strategy questions --dry-run --json

    3. Execute replies with template (5 min delay with ±30% jitter)

    redbook batch-reply "" --strategy questions \ --template "感谢提问!关于{content},..." \ --max 10

    Fields to extract from --dry-run JSON:

  • candidates[].commentId — target comments
  • candidates[].isQuestion — boolean, detected question
  • candidates[].likes — engagement signal
  • candidates[].hasSubReplies — whether already answered
  • skipped — how many comments were filtered out
  • totalComments — total fetched
  • Strategies:

  • questions — replies to comments ending with or ? (learning-oriented audience)
  • top-engaged — replies to highest-liked comments (maximum visibility)
  • all-unanswered — replies to comments with no existing sub-replies (fill gaps)
  • How to interpret:

  • High question rate (>15%) = audience is learning-oriented → reply to build authority
  • High top-engaged comments (>100 likes) = reply to visible comments for maximum reach
  • Many unanswered comments = engagement gap, opportunity to increase reply rate
  • Safety: Hard cap 30 replies per batch, minimum 3-minute delay with ±30% jitter (default 5 min), --dry-run by default (no template = preview only), immediate stop on captcha. See Rate Limits & Safety for details.

    Output: Reply plan table with candidate comments, strategy match reason, and status.


    Module J: Viral Replication

    Answers: What structural template can I extract from successful notes to guide new content creation?

    Commands:

    # 1. Find top notes for a keyword
    redbook search "keyword" --sort popular --json

    2. Extract structural template from 2-3 top performers

    redbook viral-template "" "" "" --json

    Fields to extract from viral-template JSON:

  • dominantHookPatterns[] — hook types appearing in majority of notes
  • titleStructure.commonPatterns[] — specific title formula
  • titleStructure.avgLength — target title length
  • bodyStructure.lengthRange — target word count [min, max]
  • bodyStructure.paragraphRange — target paragraph count
  • engagementProfile.type — reference/insight/entertainment
  • audienceSignals.commonThemes[] — what the audience talks about
  • How to interpret:

  • Consistent hook patterns across notes = proven formula for this niche
  • Narrow body length range = audience has clear content length preference
  • High collect/like in profile = audience saves content → create reference material
  • Common comment themes = topics to address in new content
  • Composition with other modules:

  • Uses Module A results to identify top URLs for template extraction
  • Feeds into Module H (Content Brainstorm) as structural constraint
  • Uses Module C classification to validate engagement profile
  • Output: Content template spec — the structural skeleton for content creation. An LLM (via the composed workflow) uses this template to generate actual title, body, hashtags, and cover image prompt.


    Module K: Engagement Automation

    Answers: How should I manage ongoing engagement with my audience?

    This module is a workflow that composes Modules I and J with human oversight.

    Workflow: 1. Monitorredbook comments "" --all --json to fetch recent comments 2. Filterredbook batch-reply --strategy questions --dry-run to identify reply candidates 3. Review — Human reviews dry-run output (or LLM reviews with persona guidelines) 4. Executeredbook batch-reply --strategy questions --template "..." --max 10 5. Report — Summary of replies sent, errors encountered, rate limit status

    Safety rules:

  • Always --dry-run first, human approval before execution
  • Maximum 30 replies per session (hard cap)
  • Minimum 3-minute delay between replies, default 5 minutes, with ±30% random jitter
  • Never reply to the same comment twice (check hasSubReplies)
  • Stop immediately on captcha — do not retry
  • See Rate Limits & Safety for XHS risk control thresholds
  • Anti-spam guidelines:

  • Vary reply templates across batches
  • Limit to 1-2 batch runs per note per day
  • Prioritize quality (targeted strategy) over quantity
  • Uniform timing patterns trigger bot detection — jitter is applied automatically

  • Module L: Card Rendering

    Answers: How do I turn markdown content into Xiaohongshu-ready image cards?

    Commands:

    # Render markdown to styled PNG cards
    redbook render content.md --style xiaohongshu

    Custom style and output directory

    redbook render content.md --style dark --output-dir ./cards

    JSON output (for programmatic use)

    redbook render content.md --json

    Input: Markdown file with YAML frontmatter:

    ---
    emoji: "🚀"
    title: "5个AI效率技巧"
    subtitle: "Claude Code 实战"
    

    技巧一:...

    Content here...


    技巧二:...

    More content...

    Output: cover.png + card_1.png, card_2.png, ... in the same directory.

    Card specs:

  • Size: 1080×1440 (3:4 ratio, standard XHS image)
  • DPR: 2 (retina quality, actual output 2160×2880)
  • Styles: purple, xiaohongshu, mint, sunset, ocean, elegant, dark
  • Pagination modes:

  • auto (default) — smart split on heading/paragraph boundaries using character-count heuristic
  • separator — manual split on --- in markdown
  • How to interpret:

  • Uses the user's existing Chrome for rendering (via puppeteer-core) — no browser download needed
  • Purely offline — no XHS API or cookies required
  • Output images are ready for redbook post --images cover.png card_1.png ...
  • Dependencies: Requires puppeteer-core and marked (optional, install with npm install -g puppeteer-core marked).

    Composition with other modules:

  • Pairs with Module H (Content Brainstorm) — generate content ideas, write markdown, render to cards
  • Pairs with Module J (Viral Replication) — extract template, write content matching the template, render
  • Output feeds into redbook post --images for publishing

  • Module M: Note Health Check (限流检测)

    Answers: Are any of my notes being secretly rate-limited by XHS?

    XHS assigns a hidden level field to each note in the creator backend API. This level controls recommendation distribution but is never shown in the UI. Your note may look "normal" while secretly receiving zero recommendations.

    Commands:

    # Check all notes (first page)
    redbook health

    Check all pages

    redbook health --all

    JSON output for programmatic use

    redbook health --all --json

    Level definitions:

    | Level | Status | Meaning | |-------|--------|---------| | 4 | 🟢 Normal | Full recommendation distribution | | 2-3 | 🟡 Baseline | Basically normal, minor constraints | | 1 | ⚪ New | Under review (new post) | | -1 | 🔴 Soft limit | Mild throttling, decreased recommendations | | -5 to -101 | 🔴 Moderate | Moderate throttling, minimal promotion | | -102 | ⛔ Severe | Irreversible — must delete and repost |

    Additional checks:

  • Sensitive word detection — flags titles containing automation/AI keywords (自动化, AI生成, 批量, etc.)
  • Tag count warning — flags notes with >5 hashtags (risk factor)
  • How to interpret:

  • Level -1 or below = your note is being throttled. Consider editing or deleting + reposting.
  • Level -102 = irreversible. Delete the note and create fresh content.
  • Sensitive word hits = risky title keywords that may trigger throttling. Rephrase.
  • Excessive tags = potential spam signal. Use 3-5 targeted tags.
  • Output: Terminal dashboard with color-coded distribution summary, limited notes list, and risk factor warnings.

    Discovery credit: @xxx111godxhs-note-health-checker


    Composed Workflows

    Combine modules for different analysis depths.

    Quick Topic Scan (~5 min)

    Modules: A → C → F

    Search 3–5 keywords, classify engagement type, rank opportunities. Good for quickly validating whether a niche is worth deeper research.

    Content Planning

    Modules: A → B → E → F → H

    Build keyword matrix, map topic × scene intersections, check content form performance, score opportunities, brainstorm specific content ideas.

    Creator Competitive Analysis

    Modules: A → D

    Find who dominates a niche and study their content strategy, posting frequency, and engagement patterns.

    Full Niche Analysis

    Modules: A → B → C → D → E → F → G → H

    The comprehensive playbook — keyword landscape, cross-topic heatmap, engagement signals, creator profiles, content form analysis, opportunity scoring, audience personas, and data-backed content ideas.

    Single Note Deep-Dive

    Command: redbook analyze-viral "" --json

    No module composition needed — analyze-viral returns hook analysis, engagement ratios, comment themes, author baseline comparison, and a 0-100 viral score in one call.

    Viral Pattern Research → Content Template

    # 1. Find top notes
    redbook search "keyword" --sort popular --json

    2. Extract template from top 3 notes (replaces manual synthesis)

    redbook viral-template "" "" "" --json

    viral-template automates what previously required manual synthesis across analyze-viral results. It outputs a ContentTemplate JSON that captures dominant hooks, body structure ranges, engagement profile, and audience signals.

    Reply Management

    Modules: I

    Single-module workflow for managing comment engagement on your notes. Use batch-reply --dry-run to audit, then execute with a template.

    Content Replication

    Modules: A → J → H → L

    Keyword research → viral template extraction → data-backed content brainstorm → render to image cards. The template provides structural constraints that guide Module H's content ideas. Module L renders the final markdown to XHS-ready PNGs.

    Content Creation End-to-End

    Modules: A → J → H → L → post

    The full pipeline: research keywords → extract viral template → brainstorm content → write markdown → render to styled image cards → publish via redbook post --images cover.png card_1.png ...

    Account Health Monitoring

    Modules: M

    Run redbook health --all periodically to catch throttled notes early. If level drops below 1, investigate the note's content for policy violations. Combine with Module I to check if throttled notes still have unanswered comments worth replying to.

    Full Operations

    Modules: A → C → I → J → K → M

    Comprehensive automation playbook — keyword analysis, engagement classification, comment operations, viral replication templates, and engagement automation workflow.


    Rate Limits & Safety

    XHS enforces aggressive anti-spam (风控) that detects automated behavior through device fingerprinting, activity ratio monitoring, and timing pattern analysis. The CLI applies safe defaults based on platform research.

    Safe Thresholds

    | Action | Safe Interval | CLI Default | Hard Cap | |--------|--------------|-------------|----------| | Post a note | 3-4 hours (2-3 notes/day max) | N/A (manual) | — | | Comment | ≥3 minutes | N/A (manual) | — | | Reply | ≥3 minutes | N/A (manual) | — | | Batch reply delay | ≥3 minutes | 5 min ±30% jitter | — | | Batch reply count | — | 10 | 30 |

    Anti-Detection Measures

  • Timing jitter: ±30% random variation on all batch delays. Uniform intervals are a bot signature.
  • Hard caps: Maximum 30 replies per batch (down from 50). No override.
  • Rate limit warnings: post, comment, and reply commands display safe interval reminders after each action.
  • Captcha circuit breaker: Batch operations stop immediately on captcha (NeedVerify).
  • What Triggers Risk Control

  • Uniform timing — replying at exact 3-second intervals flags bot detection
  • High frequency — >50 interactions/minute across any action type
  • Activity ratio anomaly — more comments than post views signals inauthentic behavior
  • Device fingerprint mismatch — XHS fingerprints 21 hardware parameters
  • Best Practices for Agents

    1. Always --dry-run first, review candidates, then execute 2. Use the default 5-minute delay — do not override --delay below 180000 (3 min) 3. Limit batch runs to 1-2 per note per day 4. Vary reply templates between batches 5. Space post commands 3-4 hours apart (2-3 notes/day maximum)


    API vs Browser Limitations

    The following operations work reliably via API:

  • Reading: search, notes, comments, user profiles, feed, favorites
  • Writing: top-level comments, comment replies, collect/uncollect notes
  • Analysis: viral scoring, template extraction, batch reply planning
  • The following operations are unreliable via API (frequently trigger captcha):

  • Publishing notes (use --private for higher success rate)
  • Bulk operations at very high frequency
  • The following operations require browser automation (not supported by this CLI):

  • Captcha solving, real-time notifications
  • Like/follow (heavy anti-automation enforcement)
  • DM/private messaging
  • Cover image generation (use external tools like Gemini/DALL-E)

  • Command Details

    redbook search

    Search for notes by keyword. Returns note titles, URLs, likes, author info.

    redbook search "Claude Code教程" --json
    redbook search "AI编程" --sort popular --json        # Sort: general, popular, latest
    redbook search "Cursor" --type image --json           # Type: all, video, image
    redbook search "MCP Server" --page 2 --json           # Pagination
    

    Options:

  • --sort : general (default), popular, latest
  • --type : all (default), video, image
  • --page : Page number (default: 1)
  • redbook read

    Read a note's full content — title, body text, images, likes, comments count.

    redbook read "https://www.xiaohongshu.com/explore/abc123" --json
    

    Accepts full URLs or short note IDs. Falls back to HTML scraping if API returns captcha.

    redbook comments

    Get comments on a note. Use --all to fetch all pages.

    redbook comments "https://www.xiaohongshu.com/explore/abc123" --json
    redbook comments "https://www.xiaohongshu.com/explore/abc123" --all --json
    

    redbook user

    Get a creator's profile — nickname, bio, follower count, note count, likes received.

    redbook user "5a1234567890abcdef012345" --json
    

    The userId is the hex string from the creator's profile URL.

    redbook user-posts

    List all notes posted by a creator. Returns titles, URLs, likes, timestamps.

    redbook user-posts "5a1234567890abcdef012345" --json
    

    redbook feed

    Browse the recommendation feed.

    redbook feed --json
    

    redbook topics

    Search for topic hashtags. Useful for finding trending topics to attach to posts.

    redbook topics "Claude Code" --json
    

    redbook favorites [userId]

    List a user's collected (bookmarked) notes. Defaults to the current logged-in user when no userId is provided.

    redbook favorites --json                        # Your own favorites
    redbook favorites "5a1234567890abcdef" --json   # Another user's favorites
    redbook favorites --all --json                  # Fetch all pages
    

    Options:

  • --all: Fetch all pages of favorites (default: first page only)
  • Note: Other users' favorites are only visible if they haven't set their collection to private.

    redbook collect

    Collect (bookmark) a note to your favorites.

    redbook collect "https://www.xiaohongshu.com/explore/abc123"
    

    redbook uncollect

    Remove a note from your collection.

    redbook uncollect "https://www.xiaohongshu.com/explore/abc123"
    

    redbook analyze-viral

    Analyze why a viral note works. Returns a deterministic viral score (0–100).

    redbook analyze-viral "https://www.xiaohongshu.com/explore/abc123" --json
    redbook analyze-viral "https://www.xiaohongshu.com/explore/abc123" --comment-pages 5
    

    Options:

  • --comment-pages : Comment pages to fetch (default: 3, max: 10)
  • JSON output structure: Returns { note, score, hook, content, visual, engagement, comments, relative, fetchedAt }.

  • score.overall (0–100) — composite of hook (20) + engagement (20) + relative (20) + content (20) + comments (20)
  • hook.hookPatterns[] — detected title patterns (Identity Hook, Emotion Word, Number Hook, Question, etc.)
  • engagement — likes, comments, collects, shares + ratios (collectToLikeRatio, commentToLikeRatio, shareToLikeRatio)
  • relative.viralMultiplier — this note's likes / author's median likes
  • relative.isOutlier — true if viralMultiplier > 3
  • comments.themes[] — top recurring keyword phrases from comments
  • redbook viral-template [url2] [url3]

    Extract a reusable content template from 1-3 viral notes. Analyzes each note (same pipeline as analyze-viral) and synthesizes common structural patterns.

    redbook viral-template "" "" "" --json
    redbook viral-template "" --comment-pages 5 --json
    

    Options:

  • --comment-pages : Comment pages to fetch per note (default: 3, max: 10)
  • JSON output structure: Returns { dominantHookPatterns, titleStructure, bodyStructure, engagementProfile, audienceSignals, sourceNotes, generatedAt }.

  • dominantHookPatterns[] — hook types appearing in majority of input notes
  • titleStructure.avgLength — average title length across notes
  • bodyStructure.lengthRange — [min, max] body length
  • engagementProfile.type — "reference" / "insight" / "entertainment"
  • audienceSignals.commonThemes[] — merged comment themes across notes
  • redbook comment

    Post a top-level comment on a note.

    redbook comment "" --content "Great post!" --json
    

    Options:

  • --content (required): Comment text
  • redbook reply

    Reply to a specific comment on a note.

    redbook reply "" --comment-id "" --content "Thanks for asking!" --json
    

    Options:

  • --comment-id (required): Comment ID to reply to (from comments --json output)
  • --content (required): Reply text
  • redbook batch-reply

    Reply to multiple comments using a filtering strategy. Always preview with --dry-run first.

    # Preview which comments match the strategy
    redbook batch-reply "" --strategy questions --dry-run --json

    Execute replies with a template (default 5 min delay with jitter)

    redbook batch-reply "" --strategy questions \ --template "感谢提问!{content}" --max 10

    Options:

  • --strategy : questions (default), top-engaged, all-unanswered
  • --template : Reply template with {author}, {content} placeholders
  • --max : Max replies (default: 10, hard cap: 30)
  • --delay : Delay between replies in ms (default: 300000 / 5 min, min: 180000 / 3 min). ±30% random jitter applied automatically.
  • --dry-run: Preview candidates without posting (default when no template)
  • Safety: Stops immediately on captcha. No template = dry-run only. Delays include random jitter to avoid uniform timing patterns that trigger XHS bot detection.

    redbook render

    Render a markdown file with YAML frontmatter into styled PNG image cards. Uses the user's existing Chrome installation — no browser download needed.

    redbook render content.md --style xiaohongshu
    redbook render content.md --style dark --output-dir ./cards
    redbook render content.md --pagination separator --json
    

    Options:

  • --style : purple, xiaohongshu (default), mint, sunset, ocean, elegant, dark
  • --pagination : auto (default), separator (split on ---)
  • --output-dir : Output directory (default: same as input file)
  • --width : Card width in px (default: 1080)
  • --height : Card height in px (default: 1440)
  • --dpr : Device pixel ratio (default: 2)
  • Requires: puppeteer-core and marked (npm install -g puppeteer-core marked). Does NOT require XHS cookies — purely offline rendering.

    Override Chrome path: Set CHROME_PATH environment variable if Chrome is not in the standard location.

    redbook whoami

    Check connection status. Verifies cookies are valid and shows the logged-in user.

    redbook whoami
    

    redbook post (Limited)

    Publish an image note. Frequently triggers captcha (type=124) on the creator API. Image upload works, but the publish step is unreliable. For posting, consider using browser automation instead.

    redbook post --title "标题" --body "正文" --images cover.png --json
    redbook post --title "测试" --body "..." --images img.png --private --json
    

    Options:

  • --title </code>: Note title (required)</li> <li style="color:#94a3b8;margin:3px 0"><code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--body <body></code>: Note body text (required)</li> <li style="color:#94a3b8;margin:3px 0"><code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--images <paths...></code>: Image file paths (required, at least one)</li> <li style="color:#94a3b8;margin:3px 0"><code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--topic <keyword></code>: Search and attach a topic hashtag</li> <li style="color:#94a3b8;margin:3px 0"><code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--private</code>: Publish as private note</li></p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">Global Options</h4></p><p style="margin:8px 0">All commands accept: <li style="color:#94a3b8;margin:3px 0"><code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--cookie-source <browser></code>: <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">chrome</code> (default), <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">safari</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">firefox</code></li> <li style="color:#94a3b8;margin:3px 0"><code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--chrome-profile <name></code>: Chrome profile directory name (e.g., "Profile 1"). Auto-discovered if omitted.</li> <li style="color:#94a3b8;margin:3px 0"><code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--json</code>: Output as JSON</li></p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">Technical Reference</h3></p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">xsec_token — Required for Reading & Sharing Notes</h4></p><p style="margin:8px 0">The XHS API requires a valid <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">xsec_token</code> to fetch note content. Without it, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">read</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">comments</code>, and <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">analyze-viral</code> return <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">{}</code>.</p><p style="margin:8px 0"><strong style="color:#e5e7eb">The same token is also required for shareable URLs.</strong> Any <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">https://www.xiaohongshu.com/explore/<id></code> URL without <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">?xsec_token=...&xsec_source=...</code> is 302-redirected by XHS's anti-scrape layer to <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">https://www.xiaohongshu.com/404/sec_*?source=xhs_sec_server&originalUrl=...</code>. This affects anyone who clicks the URL — Safari, iOS link previews, agent action buttons, etc.</p><p style="margin:8px 0"><strong style="color:#e5e7eb"><code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">webUrl</code> — use this (since v0.7.0):</strong></p><p style="margin:8px 0">Every note-returning command (<code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">feed</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">search</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">user-posts</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">favorites</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">board</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">read</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">post</code>) now includes a <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">webUrl</code> field with the token baked in and the correct <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">xsec_source</code>. Consumers should use <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">webUrl</code> directly — do not construct URLs by hand.</p><p style="margin:8px 0"><pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em">redbook feed --json | jq '.items[0].webUrl' <h2 style="color:#f3f4f6;margin:20px 0 10px;font-size:1.15em">=> "https://www.xiaohongshu.com/explore/<id>?xsec_token=<t>&xsec_source=pc_feed"</h2> </code></pre></p><p style="margin:8px 0"><code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">xsec_source</code> is set per-command: <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">pc_feed</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">pc_search</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">pc_user</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">pc_board</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">pc_share</code>.</p><p style="margin:8px 0"><strong style="color:#e5e7eb">Key rules:</strong></p><p style="margin:8px 0">1. <strong style="color:#e5e7eb">Tokens expire.</strong> A URL with <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">?xsec_token=...</code> from a previous session will return <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">{}</code>. Never cache or reuse old URLs. 2. <strong style="color:#e5e7eb"><code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">search</code> and <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">feed</code> always return fresh tokens.</strong> Every item includes a valid <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">xsec_token</code> + a pre-built <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">webUrl</code>. 3. <strong style="color:#e5e7eb">noteId alone returns <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">{}</code>.</strong> Running <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">redbook read <noteId></code> without a token almost always fails.</p><p style="margin:8px 0"><strong style="color:#e5e7eb">The correct workflow — always search first:</strong></p><p style="margin:8px 0"><pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em"># WRONG — stale URL or bare noteId, will likely return {} redbook read "689da7b0000000001b0372c6" --json redbook read "https://www.xiaohongshu.com/explore/689da7b0?xsec_token=OLD_TOKEN" --json</p><p style="margin:8px 0"><h2 style="color:#f3f4f6;margin:20px 0 10px;font-size:1.15em">RIGHT — search first, then use the fresh URL with token</h2> redbook search "AI编程" --sort popular --json <h2 style="color:#f3f4f6;margin:20px 0 10px;font-size:1.15em">Extract the webUrl from search results, then:</h2> redbook read "<webUrl from search result>" --json </code></pre></p><p style="margin:8px 0"><strong style="color:#e5e7eb">For agents:</strong> Prefer <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">webUrl</code> from the response. When only a bare noteId is available, search first to obtain a fresh token, then use the returned <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">webUrl</code>.</p><p style="margin:8px 0"><strong style="color:#e5e7eb">Commands that need xsec_token:</strong> <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">read</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">comments</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">analyze-viral</code> <strong style="color:#e5e7eb">Commands that do NOT need xsec_token:</strong> <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">search</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">user</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">user-posts</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">feed</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">whoami</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">topics</code></p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">Chinese Number Formats in API Responses</h4></p><p style="margin:8px 0">The XHS API returns abbreviated numbers with Chinese unit suffixes:</p><p style="margin:8px 0">| API value | Actual number | |-----------|---------------| | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">"1.5万"</code> | 15,000 | | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">"2.4万"</code> | 24,000 | | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">"1.2亿"</code> | 120,000,000 | | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">"115"</code> | 115 |</p><p style="margin:8px 0"><code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">万</code> = ×10,000. <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">亿</code> = ×100,000,000. Numbers under 10,000 are plain integers as strings.</p><p style="margin:8px 0">The <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">analyze-viral</code> command handles this automatically. When parsing <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--json</code> output manually, watch for these suffixes in <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">interact_info</code> fields (<code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">liked_count</code>, <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">collected_count</code>, etc.).</p><p style="margin:8px 0"><h4 style="color:#d1d5db;margin:14px 0 6px;font-size:.95em">Error Handling</h4></p><p style="margin:8px 0">| Error | Meaning | Fix | |-------|---------|-----| | <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">{}</code> empty response | Missing or expired xsec_token | Search first to get a fresh token | | "No 'a1' cookie" | Not logged into XHS in browser | Log into xiaohongshu.com in Chrome | | "Session expired" | Cookie too old | Re-login in Chrome | | "NeedVerify" / captcha | Anti-bot triggered | Wait and retry, or reduce request frequency | | "IP blocked" (300012) | Rate limited | Wait or switch network |</p><p style="margin:8px 0"><hr style="border:none;border-top:1px solid #1e1e3f;margin:12px 0"></p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">Output Format Guidance</h3></p><p style="margin:8px 0">When producing analysis reports, use these formats:</p><p style="margin:8px 0"><strong style="color:#e5e7eb">Data tables:</strong> Markdown tables with exact field mappings. Always include the metric unit.</p><p style="margin:8px 0"><strong style="color:#e5e7eb">Heatmaps:</strong> ASCII bar charts for cross-topic comparison: <pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em"> 职场 生活 教育 创业 AI编程 ████ 8K ██ 2K ████ 12K ░░ 200 Claude Code ██ 3K ░░ 100 ██ 4K █ 1K </code></pre></p><p style="margin:8px 0"><strong style="color:#e5e7eb">Creator comparison:</strong> Structured table with both quantitative metrics and qualitative style assessment.</p><p style="margin:8px 0"><strong style="color:#e5e7eb">Final reports:</strong> Use this section order: 1. Market Overview (demand signals, content velocity) 2. Keyword Landscape (engagement matrix, opportunity tiers) 3. Cross-Topic Heatmap (topic × scene intersections) 4. Audience Persona (demographics, intent, preferences) 5. Competitive Landscape (creator profiles, strategy patterns) 6. Content Opportunities (tiered recommendations with data backing) 7. Content Ideas (specific hooks, angles, targets)</p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">Programmatic API</h3></p><p style="margin:8px 0"><pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em">import { XhsClient } from "@lucasygu/redbook"; import { loadCookies } from "@lucasygu/redbook/cookies";</p><p style="margin:8px 0">const cookies = await loadCookies("chrome"); const client = new XhsClient(cookies);</p><p style="margin:8px 0">const results = await client.searchNotes("AI编程", 1, 20, "popular"); const topics = await client.searchTopics("Claude Code"); </code></pre></p><p style="margin:8px 0"><h3 style="color:#e5e7eb;margin:18px 0 8px;font-size:1.05em">Requirements</h3></p><p style="margin:8px 0"><li style="color:#94a3b8;margin:3px 0">Node.js >= 22</li> <li style="color:#94a3b8;margin:3px 0">Logged into xiaohongshu.com in Chrome (or Safari/Firefox with <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">--cookie-source</code>)</li> <li style="color:#94a3b8;margin:3px 0">macOS (cookie extraction uses native keychain access)</li> <li style="color:#94a3b8;margin:3px 0"><strong style="color:#e5e7eb">For card rendering only:</strong> <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">puppeteer-core</code> and <code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">marked</code> (<code style="background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em">npm install -g puppeteer-core marked</code>). Uses your existing Chrome — no additional browser download.</li> </p></div></section><section class="skill-card" style="margin-bottom:20px"><h2 style="color:#f8fafc;font-size:1.2em;font-weight:800;margin:0 0 16px;display:flex;align-items:center;gap:8px">💡 Examples</h2><div style="font-size:.92em;color:#94a3b8;line-height:1.75"><p style="margin:8px 0"><pre style="background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0"><code style="color:#a5f3fc;background:none;padding:0;font-size:1em">/redbook search "AI编程" # Search notes /redbook read <url> # Read a note /redbook user <userId> # Creator profile /redbook analyze <userId> # Full creator analysis (profile + posts) </code></pre></p></div></section></div><div class="two-col-side"></div></div></div><script> document.querySelectorAll('.copy-btn, .script-copy-btn').forEach(btn => { btn.addEventListener('click', () => { const cmd = btn.getAttribute('data-cmd'); if (!cmd) return; navigator.clipboard.writeText(cmd).then(() => { const orig = btn.textContent; btn.textContent = 'Copied!'; setTimeout(() => btn.textContent = orig, 1500); }).catch(() => {}); }); }); </script><!--$--><!--/$--></main><footer style="background:var(--bg-primary);border-top:1px solid var(--border-secondary);margin-top:60px"><div style="border-top:1px solid var(--border-light);max-width:1200px;margin:0 auto;padding:24px 20px"><div style="display:flex;justify-content:space-between;flex-wrap:wrap;gap:24px;margin-bottom:24px"><div><div style="font-weight:700;color:var(--text-muted);margin-bottom:8px">BytesAgain</div><div style="color:var(--text-muted3);font-size:.82em;max-width:200px">Discover the best AI agent skills for your workflow.</div></div><div><div style="color:var(--text-muted);font-size:.75em;text-transform:uppercase;letter-spacing:1px;margin-bottom:10px">Explore</div><div style="margin-bottom:6px"><a href="/skills" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Skills</a></div><div style="margin-bottom:6px"><a href="/articles" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Articles</a></div><div style="margin-bottom:6px"><a href="/use-case" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Cases</a></div></div><div><div style="color:var(--text-muted);font-size:.75em;text-transform:uppercase;letter-spacing:1px;margin-bottom:10px">Company</div><div style="margin-bottom:6px"><a href="/about" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">About</a></div><div style="margin-bottom:6px"><a href="/contact" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Contact</a></div><div style="margin-bottom:6px"><a href="/privacy-policy" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Privacy Policy</a></div><div style="margin-bottom:6px"><a href="/terms" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Terms</a></div><div style="margin-bottom:6px"><a href="/feedback" style="color:var(--text-muted2);text-decoration:none;font-size:.85em">Feedback</a></div></div></div><div style="border-top:1px solid var(--border-light);padding-top:16px"><div style="color:var(--text-muted4);font-size:.8em;margin-bottom:8px">© <!-- -->2026<!-- --> BytesAgain. All rights reserved.</div><div style="color:var(--text-muted5);font-size:.75em;line-height:1.6;max-width:720px">BytesAgain is an independent skill directory. We index and link to third-party content (ClawHub, GitHub, LobeHub, Dify, etc.) for informational purposes only. All trademarks, skill names, and content are the property of their respective owners. BytesAgain does not claim ownership of any indexed content.</div></div></div></footer><button style="position:fixed;bottom:28px;right:28px;z-index:1000;width:48px;height:48px;border-radius:50%;border:none;cursor:pointer;background:linear-gradient(135deg,#667eea,#00d4ff);color:#fff;font-size:1.3em;box-shadow:0 4px 20px #667eea66;display:flex;align-items:center;justify-content:center;transition:transform .2s">💬</button><script src="/_next/static/chunks/0ze4gu236oq96.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[62894,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"LangProvider\"]\n3:I[89220,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"ThemeProvider\"]\n4:I[16988,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\ne:I[68027,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\",1]\n:HL[\"/_next/static/chunks/051nc0vy_6.rl.css?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"style\"]\n:HL[\"/_next/static/media/caa3a2e1cccd8315-s.p.09~u27dqhyhd6.woff2?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n5:Td5e,"])</script><script>self.__next_f.push([1,"[{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"BytesAgain\",\"url\":\"https://bytesagain.com\",\"description\":\"Search 60,000+ verified AI agent skills via MCP API or REST. Supports 7 languages. Free, no auth required.\",\"inLanguage\":[\"en\",\"zh\",\"es\",\"fr\",\"de\",\"ja\",\"ko\"],\"potentialAction\":{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https://bytesagain.com/skills?q={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}},{\"@context\":\"https://schema.org\",\"@type\":\"Organization\",\"name\":\"BytesAgain\",\"url\":\"https://bytesagain.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://bytesagain.com/og-image.png\"},\"description\":\"AI agent skill directory. Search 60,000+ skills, 1,000+ use cases, and community requests.\",\"foundingDate\":\"2026\",\"foundingLocation\":{\"@type\":\"Place\",\"name\":\"Global\"},\"sameAs\":[\"https://x.com/bytesagain\",\"https://github.com/bytesagain/ai-skills\",\"https://clawhub.ai/profile/bytesagain\"],\"contactPoint\":{\"@type\":\"ContactPoint\",\"email\":\"hello@bytesagain.com\",\"contactType\":\"customer support\"},\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"value\":1}},{\"@context\":\"https://schema.org\",\"@type\":\"WebApplication\",\"name\":\"BytesAgain AI Skills Search\",\"url\":\"https://bytesagain.com\",\"applicationCategory\":\"DeveloperApplication\",\"operatingSystem\":\"Web\",\"description\":\"Search engine and MCP API for 60,000+ AI agent skills. Semantic search, role recommendations, and use case packs.\",\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"USD\"},\"featureList\":[\"Search 60,000+ AI agent skills\",\"Role-based recommendations for developers, creators, and traders\",\"1,000+ curated use case packs\",\"Free MCP API and REST API\",\"Multi-language search (EN, ZH, ES, FR, DE, JA, KO)\"],\"potentialAction\":{\"@type\":\"SearchAction\",\"target\":\"https://bytesagain.com/skills?q={search_term_string}\",\"query-input\":\"required name=search_term_string\"},\"dateModified\":\"2026-07-23\"},{\"@context\":\"https://schema.org\",\"@type\":\"FAQPage\",\"mainEntity\":[{\"@type\":\"Question\",\"name\":\"What is BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"BytesAgain is a curated directory of 60,000+ AI agent skills from ClawHub, GitHub, LobeHub, and Dify. Search skills by keyword in 7 languages, browse by role (developer, creator, trader, marketer) or by use case.\"}},{\"@type\":\"Question\",\"name\":\"How do I find AI skills on BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Use the search bar on BytesAgain.com to search by keyword in 7 languages. You can also browse by role (developer, creator, trader, marketer) or by use case. Each skill shows install instructions for Claude, Cursor, OpenClaw, Continue, and more.\"}},{\"@type\":\"Question\",\"name\":\"Is BytesAgain free?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes, BytesAgain is completely free. No registration required for searching skills. The MCP API is also free with rate limits.\"}},{\"@type\":\"Question\",\"name\":\"Does BytesAgain have an API for AI agents?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes! BytesAgain provides a free MCP SSE endpoint at /api/mcp/sse for AI agents, plus a REST API at /api/mcp?action=search\u0026q=\u003cquery\u003e. No authentication needed.\"}},{\"@type\":\"Question\",\"name\":\"Can I request a new AI skill on BytesAgain?\",\"acceptedAnswer\":{\"@type\":\"Answer\",\"text\":\"Yes! Visit the Requests page on BytesAgain.com to submit a skill request. Your request will be visible to the community and notified to the site admin.\"}}]}]"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"skill\",\"redbook\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"skill\",{\"children\":[[\"slug\",\"redbook\",\"d\",null],{\"children\":[\"__PAGE__\",{}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/051nc0vy_6.rl.css?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[[\"$\",\"head\",null,{\"children\":[[\"$\",\"link\",null,{\"rel\":\"llms\",\"href\":\"/llms.txt\"}],[\"$\",\"link\",null,{\"rel\":\"llms-full\",\"href\":\"/llms-full.txt\"}],[\"$\",\"script\",null,{\"async\":true,\"src\":\"https://www.googletagmanager.com/gtag/js?id=G-3C1MM9FWYF\"}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n window.dataLayer = window.dataLayer || [];\\n function gtag(){dataLayer.push(arguments);}\\n gtag('js', new Date());\\n gtag('config', 'G-3C1MM9FWYF');\\n \"}}]]}],[\"$\",\"body\",null,{\"className\":\"geist_9e050971-module__05dp7a__className\",\"style\":{\"margin\":0},\"children\":[\"$\",\"$L2\",null,{\"children\":[\"$\",\"$L3\",null,{\"children\":[[\"$\",\"div\",null,{\"style\":{\"width\":\"100%\",\"background\":\"var(--bg-subscribe)\",\"borderBottom\":\"1px solid var(--border-primary)\",\"padding\":\"8px 20px\",\"textAlign\":\"center\",\"fontSize\":\".82em\",\"color\":\"#818cf8\"},\"children\":[\"🎁 \",[\"$\",\"strong\",null,{\"style\":{\"color\":\"var(--text-primary)\"},\"children\":\"Get the FREE AI Skills Starter Guide\"}],\" — \",[\"$\",\"a\",null,{\"href\":\"/register\",\"style\":{\"color\":\"#00d4ff\",\"textDecoration\":\"underline\"},\"children\":\"Subscribe →\"}]]}],[\"$\",\"$L4\",null,{}],[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$5\"}}],\"$L6\",\"$L7\",\"$L8\"]}]}]}]]}]]}],{\"children\":[\"$L9\",{\"children\":[\"$La\",{\"children\":[\"$Lb\",{},null,false,null]},null,false,\"$@c\"]},null,false,\"$@c\"]},null,false,null],\"$Ld\",false]],\"m\":\"$undefined\",\"G\":[\"$e\",[\"$Lf\"]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"10:I[39756,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n11:I[37457,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n12:I[22016,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0ka051yepewro.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"\"]\n13:I[90940,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n14:I[16397,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n16:I[97367,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"OutletBoundary\"]\n17:\"$Sreact.suspense\"\n1a:I[97367,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"ViewportBoundary\"]\n1c:I[97367,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"MetadataBoundary\"]\n"])</script><script>self.__next_f.push([1,"6:[\"$\",\"main\",null,{\"children\":[\"$\",\"$L10\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"main\",null,{\"style\":{\"minHeight\":\"100vh\",\"display\":\"flex\",\"alignItems\":\"center\",\"justifyContent\":\"center\",\"background\":\"#050611\",\"color\":\"#e5e7eb\"},\"children\":[[\"$\",\"style\",null,{\"children\":\"\\n .nf-box { text-align: center; padding: 60px 32px; }\\n .nf-code { font-size: 6rem; font-weight: 900; color: #22d3ee; line-height: 1; margin: 0; }\\n .nf-title { font-size: 1.8rem; font-weight: 800; margin: 12px 0 8px; }\\n .nf-desc { color: var(--text-muted2); font-size: 1rem; margin-bottom: 32px; max-width: 440px; }\\n .nf-link { display: inline-block; padding: 12px 28px; background: linear-gradient(135deg,#34d399,#22d3ee); color: #000; font-weight: 900; border-radius: 12px; text-decoration: none; }\\n \"}],[\"$\",\"div\",null,{\"className\":\"nf-box\",\"children\":[[\"$\",\"p\",null,{\"className\":\"nf-code\",\"children\":\"404\"}],[\"$\",\"h1\",null,{\"className\":\"nf-title\",\"children\":\"Page Not Found\"}],[\"$\",\"p\",null,{\"className\":\"nf-desc\",\"children\":\"The skill or page you're looking for doesn't exist or has been moved.\"}],[\"$\",\"$L12\",null,{\"className\":\"nf-link\",\"href\":\"/\",\"children\":\"Back to BytesAgain\"}]]}]]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]\n"])</script><script>self.__next_f.push([1,"7:[\"$\",\"$L13\",null,{}]\n8:[\"$\",\"$L14\",null,{}]\n9:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L10\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\na:[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L10\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L11\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}]\nb:[\"$\",\"$1\",\"c\",{\"children\":[\"$L15\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/12w5ognupk9fb.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L16\",null,{\"children\":[\"$\",\"$17\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@18\"}]}]]}]\n19:[]\nc:\"$W19\"\nd:[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L1a\",null,{\"children\":\"$L1b\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$L1c\",null,{\"children\":[\"$\",\"$17\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1d\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}]\nf:[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/051nc0vy_6.rl.css?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]\n"])</script><script>self.__next_f.push([1,"1b:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"1e:I[27201,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"IconMark\"]\n18:null\n"])</script><script>self.__next_f.push([1,"1d:[[\"$\",\"title\",\"0\",{\"children\":\"redbook — AI Agent Skill | BytesAgain | BytesAgain\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Search, read, analyze, and automate Xiaohongshu (小红书) content via CLI\"}],[\"$\",\"meta\",\"2\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"3\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"meta\",\"4\",{\"name\":\"llms-txt\",\"content\":\"https://bytesagain.com/llms.txt\"}],[\"$\",\"meta\",\"5\",{\"name\":\"llms-full-txt\",\"content\":\"https://bytesagain.com/llms-full.txt\"}],[\"$\",\"link\",\"6\",{\"rel\":\"canonical\",\"href\":\"https://bytesagain.com/skill/redbook\"}],[\"$\",\"meta\",\"7\",{\"name\":\"baidu-site-verification\",\"content\":\"codeva-0evUqX1TFs\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:title\",\"content\":\"redbook — AI Agent Skill | BytesAgain\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:description\",\"content\":\"Search, read, analyze, and automate Xiaohongshu (小红书) content via CLI\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:url\",\"content\":\"https://bytesagain.com/skill/redbook\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:site_name\",\"content\":\"BytesAgain\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:image\",\"content\":\"https://bytesagain.com/social-preview.png\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"16\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"17\",{\"name\":\"twitter:title\",\"content\":\"redbook — AI Agent Skill | BytesAgain\"}],[\"$\",\"meta\",\"18\",{\"name\":\"twitter:description\",\"content\":\"Search, read, analyze, and automate Xiaohongshu (小红书) content via CLI\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:image\",\"content\":\"https://bytesagain.com/social-preview.png\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"link\",\"22\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0x3dzn~oxb6tn.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$L1e\",\"23\",{}]]\n"])</script><script>self.__next_f.push([1,"1f:T1562,"])</script><script>self.__next_f.push([1,"\n .skill-page { max-width: 1100px; margin: 0 auto; padding: 32px 20px 80px; }\n .two-col { display: flex; gap: 32px; align-items: flex-start; }\n .two-col-main { flex: 1; min-width: 0; }\n .two-col-side { width: 300px; flex-shrink: 0; }\n @media (max-width: 860px) {\n .two-col { flex-direction: column; }\n .two-col-side { width: 100%; }\n }\n .breadcrumb { font-size: .82em; color: var(--text-muted2); margin-bottom: 28px; }\n .breadcrumb a { color: #818cf8; text-decoration: none; }\n .breadcrumb a:hover { text-decoration: underline; }\n .skill-card { background: var(--bg-card); border: 1px solid var(--border-card); border-radius: 20px; padding: 28px; margin-bottom: 24px; }\n .skill-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; margin-bottom: 20px; flex-wrap: wrap; }\n .skill-badges { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }\n .skill-top-actions { display: flex; align-items: center; gap: 10px; margin-left: auto; }\n .badge { display: inline-flex; align-items: center; gap: 5px; font-size: .75em; font-weight: 600; padding: 4px 12px; border-radius: 999px; border: 1px solid transparent; }\n .skill-title { font-size: 1.6em; font-weight: 800; color: var(--text-primary); margin: 0 0 4px; line-height: 1.2; }\n .skill-owner { font-size: .82em; color: var(--text-muted2); margin: 0 0 14px; }\n .skill-owner span { color: #818cf8; }\n .skill-desc { font-size: .92em; color: var(--text-secondary); line-height: 1.65; margin: 0 0 16px; }\n .skill-meta { display: flex; gap: 16px; flex-wrap: wrap; margin-bottom: 18px; padding-bottom: 16px; border-bottom: 1px solid var(--border-card); }\n .meta-item { display: flex; flex-direction: column; gap: 2px; }\n .meta-label { font-size: .7em; color: var(--text-muted5); text-transform: uppercase; letter-spacing: 1px; font-weight: 600; }\n .meta-value { font-size: .92em; color: var(--text-muted2); font-weight: 600; }\n .tags-row { display: flex; gap: 6px; flex-wrap: wrap; }\n .tag { font-size: .75em; color: #6366f1; background: #6366f115; border: 1px solid #6366f130; border-radius: 6px; padding: 3px 10px; text-decoration: none; }\n .tag:hover { background: #6366f125; }\n .install-box { background: var(--bg-deep); border: 1px solid var(--border-card); border-radius: 12px; overflow: hidden; margin-bottom: 24px; }\n .install-header { display: flex; align-items: center; justify-content: space-between; padding: 10px 16px; border-bottom: 1px solid var(--border-card); }\n .install-dots { display: flex; gap: 6px; }\n .dot { width: 10px; height: 10px; border-radius: 50%; }\n .install-label { font-size: .72em; color: var(--text-muted5); font-family: monospace; letter-spacing: 1px; }\n .install-body { padding: 16px 20px; display: flex; align-items: center; justify-content: space-between; gap: 12px; }\n .install-cmd { color: var(--text-code);\n font-family: 'Courier New', monospace; font-size: 1em; }\n .copy-btn { font-size: .75em; color: #6366f1; background: #6366f115; border: 1px solid #6366f130; border-radius: 6px; padding: 5px 12px; cursor: pointer; white-space: nowrap; transition: all .15s; }\n .copy-btn:hover { background: #6366f125; }\n .btn-secondary { display: inline-flex; align-items: center; gap: 8px; padding: 13px 24px; background: transparent; border: 1px solid var(--border-card); border-radius: 10px; color: #6b7280; text-decoration: none; font-weight: 600; font-size: .95em; transition: all .15s; }\n .btn-secondary:hover { border-color: #818cf8; color: #818cf8; }\n .ours-badge { display: inline-flex; align-items: center; gap: 6px; font-size: .72em; font-weight: 700; color: #22d3ee; background: #22d3ee10; border: 1px solid #22d3ee30; border-radius: 999px; padding: 4px 14px; }\n .section-card { background: var(--bg-card); border: 1px solid var(--border-card); border-radius: 16px; padding: 22px 24px; margin-bottom: 20px; }\n .section-title { color: var(--text-primary); font-size: 1.08em; font-weight: 800; margin: 0 0 12px; display: flex; align-items: center; gap: 8px; }\n /* Script box */\n .script-header { display: flex; align-items: center; justify-content: space-between; padding: 8px 14px; background: var(--bg-input); border-bottom: 1px solid var(--border-card); }\n .script-filename { font-size: .72em; color: var(--text-muted2); font-family: 'Courier New', monospace; }\n .script-copy-btn { font-size: .72em; color: #6366f1; background: none; border: 1px solid #6366f130; border-radius: 4px; padding: 2px 10px; cursor: pointer; }\n .script-copy-btn:hover { background: #6366f115; }\n .script-body { padding: 14px 16px; font-family: 'Courier New', monospace; font-size: .82em; line-height: 1.6; color: var(--text-code); overflow-x: auto; max-height: 420px; overflow-y: auto; white-space: pre; }\n /* Articles */\n .article-card { display: block; background: var(--bg-secondary); border: 1px solid var(--border-primary); border-radius: 10px; padding: 14px 16px; text-decoration: none; transition: border-color .15s; }\n .article-card:hover { border-color: #6366f1; }\n @media (max-width: 600px) {\n .skill-card { padding: 20px; }\n .skill-title { font-size: 1.5em; }\n }\n "])</script><script>self.__next_f.push([1,"15:[[\"$\",\"style\",null,{\"children\":\"$1f\"}],\"$L20\",\"$L21\"]\n"])</script><script>self.__next_f.push([1,"22:I[78297,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/12w5ognupk9fb.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n23:T18fa7,"])</script><script>self.__next_f.push([1,"\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\ndescription: Search, read, analyze, and automate Xiaohongshu (小红书) content via CLI\nallowed-tools: Bash, Read, Write, Glob, Grep\n\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003eOpenClaw / ClawHub metadata (clawhub install redbook)\u003c/h2\u003e\nname: redbook\nversion: 0.5.0\nmetadata:\n openclaw:\n requires:\n bins:\n - redbook\n install:\n - kind: node\n package: \"@lucasygu/redbook\"\n bins: [redbook]\n os: [macos]\n homepage: https://github.com/lucasygu/redbook\ntags:\n - xiaohongshu\n - social-media\n - analytics\n - content-ops\n\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003eRedbook — Xiaohongshu CLI\u003c/h2\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eUse the \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook\u003c/code\u003e CLI to search notes, read content, analyze creators, automate engagement, and research topics on Xiaohongshu (小红书/RED).\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOpenClaw users:\u003c/strong\u003e Install via \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eclawhub install redbook\u003c/code\u003e or \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003enpm install -g @lucasygu/redbook\u003c/code\u003e.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eUsage\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e/redbook search \"AI编程\" # Search notes\n/redbook read \u003curl\u003e # Read a note\n/redbook user \u003cuserId\u003e # Creator profile\n/redbook analyze \u003cuserId\u003e # Full creator analysis (profile + posts)\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eQuick Reference\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Intent | Command |\n|--------|---------|\n| Search notes | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook search \"keyword\" --json\u003c/code\u003e |\n| Read a note | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook read \u003curl\u003e --json\u003c/code\u003e |\n| Get comments | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook comments \u003curl\u003e --json --all\u003c/code\u003e |\n| Creator profile | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook user \u003cuserId\u003e --json\u003c/code\u003e |\n| Creator's posts | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook user-posts \u003cuserId\u003e --json\u003c/code\u003e |\n| Browse feed | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook feed --json\u003c/code\u003e |\n| Search hashtags | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook topics \"keyword\" --json\u003c/code\u003e |\n| Analyze viral note | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook analyze-viral \u003curl\u003e --json\u003c/code\u003e |\n| Extract content template | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook viral-template \u003curl1\u003e \u003curl2\u003e --json\u003c/code\u003e |\n| Post a comment | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook comment \u003curl\u003e --content \"text\"\u003c/code\u003e |\n| Reply to comment | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook reply \u003curl\u003e --comment-id \u003cid\u003e --content \"text\"\u003c/code\u003e |\n| Batch reply (preview) | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook batch-reply \u003curl\u003e --strategy questions --dry-run\u003c/code\u003e |\n| Like a note | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook like \u003curl\u003e\u003c/code\u003e |\n| Unlike a note | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook like \u003curl\u003e --undo\u003c/code\u003e |\n| List favorites | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook favorites --json\u003c/code\u003e or \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook favorites \u003cuserId\u003e --json\u003c/code\u003e |\n| Collect a note | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook collect \u003curl\u003e\u003c/code\u003e |\n| Remove from collection | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook uncollect \u003curl\u003e\u003c/code\u003e |\n| List followers | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook followers \u003cuserId\u003e --json\u003c/code\u003e |\n| List following | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook following \u003cuserId\u003e --json\u003c/code\u003e |\n| Delete own note | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook delete \u003curl\u003e\u003c/code\u003e |\n| Check note health | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook health --json\u003c/code\u003e or \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook health --all --json\u003c/code\u003e |\n| List user boards | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook boards\u003c/code\u003e or \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook boards \u003cuserId\u003e --json\u003c/code\u003e |\n| List album notes | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook board \u003cboard-url\u003e\u003c/code\u003e or \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook board \u003cboardId\u003e --json\u003c/code\u003e |\n| Render markdown to cards | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook render content.md --style xiaohongshu\u003c/code\u003e |\n| Publish image note | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook post --title \"...\" --body \"...\" --images img.jpg\u003c/code\u003e |\n| Check connection | \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook whoami\u003c/code\u003e |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAlways add \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--json\u003c/code\u003e\u003c/strong\u003e when parsing output programmatically. Without it, output is human-formatted text.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eXHS Platform Signals\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eXHS is not Twitter or Instagram. These platform-specific engagement ratios reveal content type and audience behavior.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eCollect/Like Ratio (\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecollected_count / liked_count\u003c/code\u003e)\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eXHS's \"collect\" (收藏) is a save-for-later mechanic — users build personal reference libraries. This ratio is the strongest signal of content utility.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Ratio | Classification | Meaning |\n|-------|---------------|---------|\n| \u003e40% | 工具型 (Reference) | Tutorial, checklist, template — users bookmark for reuse |\n| 20–40% | 认知型 (Insight) | Thought-provoking but not saved for later |\n| \u003c20% | 娱乐型 (Entertainment) | Consumed and forgotten — engagement is passive |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eComment/Like Ratio (\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecomment_count / liked_count\u003c/code\u003e)\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eMeasures how much a note triggers conversation.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Ratio | Classification | Meaning |\n|-------|---------------|---------|\n| \u003e15% | 讨论型 (Discussion) | Debate, sharing experiences, asking questions |\n| 5–15% | 正常互动 (Normal) | Typical engagement pattern |\n| \u003c5% | 围观型 (Passive) | Users like but don't engage further |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eShare/Like Ratio (\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eshare_count / liked_count\u003c/code\u003e)\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eMeasures social currency — whether users share to signal identity or help others.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Ratio | Meaning |\n|-------|---------|\n| \u003e10% | 社交货币 — people share to signal taste, identity, or help friends |\n| \u003c10% | Content consumed individually, not forwarded |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eSearch Sort Semantics\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Sort | What It Reveals |\n|------|----------------|\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--sort popular\u003c/code\u003e | Proven ceiling — the best a keyword can do |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--sort latest\u003c/code\u003e | Content velocity — how much is being posted now |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--sort general\u003c/code\u003e | Algorithm-weighted blend (default) |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eContent Form Dynamics\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Form | Tendency |\n|------|----------|\n| 图文 (image-text, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etype: \"normal\"\u003c/code\u003e) | Higher collect rate — users save reference content |\n| 视频 (video, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etype: \"video\"\u003c/code\u003e) | Higher like rate — easier to consume passively |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eAnalysis Modules\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eEach module is a composable building block. Combine them for different analysis depths.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eModule A: Keyword Engagement Matrix\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAnswers:\u003c/strong\u003e Which keywords have the highest engagement ceiling? Which are saturated vs. underserved?\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eCommands:\u003c/strong\u003e\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook search \"keyword1\" --sort popular --json\nredbook search \"keyword2\" --sort popular --json\n\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003eRepeat for each keyword in your list\u003c/h2\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eFields to extract\u003c/strong\u003e from each result's \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eitems[]\u003c/code\u003e:\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eitems[].note_card.interact_info.liked_count\u003c/code\u003e — likes (may use Chinese numbers: \"1.5万\" = 15,000)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eitems[].note_card.interact_info.collected_count\u003c/code\u003e — collects\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eitems[].note_card.interact_info.comment_count\u003c/code\u003e — comments\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eitems[].note_card.user.nickname\u003c/code\u003e — author\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eHow to interpret:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eTop1 ceiling\u003c/strong\u003e = \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eitems[0]\u003c/code\u003e likes — the best-performing note for this keyword. This is the proven demand signal.\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eTop10 average\u003c/strong\u003e = mean likes across \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eitems[0..9]\u003c/code\u003e — how well an average top note does.\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eA high Top1 but low Top10 avg means one outlier dominates; hard to compete.\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eA high Top10 avg means consistent demand; easier to break in.\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOutput:\u003c/strong\u003e Keyword × engagement table ranked by Top1 ceiling.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Keyword | Top1 Likes | Top10 Avg | Top1 Collects | Collect/Like |\n|---------|-----------|-----------|---------------|-------------|\n| keyword1 | 12,000 | 3,200 | 5,400 | 45% |\n| keyword2 | 8,500 | 4,100 | 1,200 | 14% |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eModule B: Cross-Topic Heatmap\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAnswers:\u003c/strong\u003e Which topic × scene intersections have demand? Where are the content gaps?\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eCommands:\u003c/strong\u003e\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e# Combine base topic with scene/angle keywords\nredbook search \"base topic + scene1\" --sort popular --json\nredbook search \"base topic + scene2\" --sort popular --json\nredbook search \"base topic + scene3\" --sort popular --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eFields to extract:\u003c/strong\u003e Same as Module A — Top1 \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eliked_count\u003c/code\u003e for each combination.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eHow to interpret:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eHigh Top1 = proven demand for this intersection\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eZero or very low results = content gap (opportunity or no demand — check if the combination makes sense)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eCompare across scenes to find which angles resonate most with the base topic\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOutput:\u003c/strong\u003e Base × Scene heatmap.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e scene1 scene2 scene3 scene4\nbase topic ████ 8K ██ 2K ████ 12K ░░ 200\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eModule C: Engagement Signal Analysis\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAnswers:\u003c/strong\u003e What type of content is each keyword? Reference, insight, or entertainment?\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eCommands:\u003c/strong\u003e Use search results from Module A, or for a single note:\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook analyze-viral \"\u003cnoteUrl\u003e\" --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eFields to extract:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eFrom search results: compute ratios from \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003einteract_info\u003c/code\u003e fields\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eFrom \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eanalyze-viral\u003c/code\u003e: use pre-computed \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eengagement.collectToLikeRatio\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eengagement.commentToLikeRatio\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eengagement.shareToLikeRatio\u003c/code\u003e\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eHow to interpret:\u003c/strong\u003e Apply the ratio benchmarks from \u003ca href=\"#xhs-platform-signals\" target=\"_blank\" rel=\"noopener\" style=\"color:#6366f1\"\u003eXHS Platform Signals\u003c/a\u003e above.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOutput:\u003c/strong\u003e Per-keyword or per-note classification.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Keyword | Collect/Like | Comment/Like | Type |\n|---------|-------------|-------------|------|\n| keyword1 | 45% | 8% | 工具型 + 正常互动 |\n| keyword2 | 12% | 22% | 娱乐型 + 讨论型 |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eModule D: Creator Discovery \u0026 Profiling\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAnswers:\u003c/strong\u003e Who are the key creators in this niche? What are their strategies?\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eCommands:\u003c/strong\u003e\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e# 1. Collect unique user_ids from search results across keywords\n\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003e Extract from items[].note_card.user.user_id\u003c/h2\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003e2. For each creator:\u003c/h2\u003e\nredbook user \"\u003cuserId\u003e\" --json\nredbook user-posts \"\u003cuserId\u003e\" --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eFields to extract:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eFrom \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003euser\u003c/code\u003e: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003einteractions[]\u003c/code\u003e where \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etype === \"fans\"\u003c/code\u003e → follower count\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eFrom \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003euser-posts\u003c/code\u003e: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003enotes[].interact_info.liked_count\u003c/code\u003e for all posts → compute avg, median, max\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eFrom \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003euser-posts\u003c/code\u003e: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003enotes[].display_title\u003c/code\u003e → content patterns, posting frequency\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eHow to interpret:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAvg vs. Median likes:\u003c/strong\u003e Large gap means viral outliers inflate the average. Median is the \"true\" baseline.\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eMax / Median ratio:\u003c/strong\u003e \u003e5× means they've had breakout hits. Study those notes specifically.\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003ePost frequency:\u003c/strong\u003e Count notes to estimate posting cadence. Prolific creators (\u003e3/week) vs. quality-focused (\u003c1/week).\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOutput:\u003c/strong\u003e Creator comparison table.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Creator | Followers | Avg Likes | Median | Max | Posts | Style |\n|---------|----------|-----------|--------|-----|-------|-------|\n| @creator1 | 12万 | 3,200 | 1,800 | 45,000 | 89 | Tutorial |\n| @creator2 | 5.4万 | 8,100 | 6,500 | 22,000 | 34 | Story |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eModule E: Content Form Breakdown\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAnswers:\u003c/strong\u003e Do image-text or video notes perform better for this topic?\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eCommands:\u003c/strong\u003e\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook search \"keyword\" --type image --sort popular --json\nredbook search \"keyword\" --type video --sort popular --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eFields to extract:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eCompare Top1 and Top10 avg \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eliked_count\u003c/code\u003e and \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecollected_count\u003c/code\u003e between the two result sets\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eNote the \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etype\u003c/code\u003e field: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e\"normal\"\u003c/code\u003e = image-text, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e\"video\"\u003c/code\u003e = video\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOutput:\u003c/strong\u003e Form × engagement table.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Form | Top1 Likes | Top10 Avg | Collect/Like |\n|------|-----------|-----------|-------------|\n| 图文 | 8,000 | 2,400 | 42% |\n| 视频 | 15,000 | 5,100 | 18% |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eModule F: Opportunity Scoring\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAnswers:\u003c/strong\u003e Which keywords should I target? Where is the best effort-to-reward ratio?\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eInput:\u003c/strong\u003e Keyword matrix from Module A.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eScoring logic:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eDemand\u003c/strong\u003e = Top1 likes ceiling (proven audience size)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eCompetition\u003c/strong\u003e = density of high-engagement results (how many notes in Top10 have \u003e1K likes)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eScore\u003c/strong\u003e = Demand × (1 / Competition density)\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eTier thresholds\u003c/strong\u003e (based on Top1 likes):\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Tier | Top1 Likes | Meaning |\n|------|-----------|---------|\n| S | \u003e100,000 (10万+) | Massive demand — hard to compete but huge upside |\n| A | 20,000–100,000 | Strong demand — competitive but winnable |\n| B | 5,000–20,000 | Moderate demand — good for growing accounts |\n| C | \u003c5,000 | Niche — low competition, low ceiling |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOutput:\u003c/strong\u003e Tiered keyword list.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Tier | Keyword | Top1 | Competition | Opportunity |\n|------|---------|------|-------------|------------|\n| A | keyword1 | 45K | Medium (6/10 \u003e1K) | High |\n| B | keyword3 | 12K | Low (2/10 \u003e1K) | Very High |\n| S | keyword2 | 120K | High (10/10 \u003e1K) | Medium |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eModule G: Audience Inference\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAnswers:\u003c/strong\u003e Who is the audience for this niche? What do they want?\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eInput:\u003c/strong\u003e Engagement ratios from Module C + comment themes from \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eanalyze-viral\u003c/code\u003e + content patterns.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eFields to extract\u003c/strong\u003e from \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eanalyze-viral\u003c/code\u003e JSON:\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecomments.themes[]\u003c/code\u003e — recurring phrases and keywords from comment section\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecomments.questionRate\u003c/code\u003e — % of comments that are questions (learning intent)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eengagement.collectToLikeRatio\u003c/code\u003e — save behavior signals intent\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ehook.hookPatterns[]\u003c/code\u003e — what title patterns attract this audience\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eInference rules:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eHigh collect rate + high question rate → learning-oriented audience (students, professionals)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eHigh comment rate + emotional themes → community-oriented audience (sharing experiences)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eHigh share rate → aspiration-oriented audience (lifestyle, identity signaling)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eComment language patterns → age/education signals (formal = older, slang = younger)\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOutput:\u003c/strong\u003e Audience persona summary — demographics, intent, content preferences.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eModule H: Content Brainstorm\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAnswers:\u003c/strong\u003e What specific content should I create, backed by data?\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eInput:\u003c/strong\u003e Opportunity scores (Module F) + audience persona (Module G) + heatmap gaps (Module B).\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eFor each content idea, specify:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eTarget keyword\u003c/strong\u003e — from opportunity scoring\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eHook angle\u003c/strong\u003e — based on \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ehookPatterns\u003c/code\u003e that work for this niche\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eContent type\u003c/strong\u003e — 工具型/认知型/娱乐型 based on what the audience wants\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eForm\u003c/strong\u003e — 图文 or 视频 based on Module E\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eEngagement target\u003c/strong\u003e — realistic based on Top10 avg for this keyword\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eCompetitive reference\u003c/strong\u003e — specific note URL that proves this angle works\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOutput:\u003c/strong\u003e Ranked content ideas with data backing.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| # | Keyword | Hook Angle | Type | Target Likes | Reference |\n|---|---------|-----------|------|-------------|-----------|\n| 1 | keyword3 | \"N个方法...\" (List) | 工具型 图文 | 5K+ | [top note URL] |\n| 2 | keyword1 | \"为什么...\" (Question) | 认知型 视频 | 10K+ | [top note URL] |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eModule I: Comment Operations\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAnswers:\u003c/strong\u003e Which comments deserve a reply? What is the comment quality distribution?\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eCommands:\u003c/strong\u003e\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e# 1. Fetch all comments\nredbook comments \"\u003cnoteUrl\u003e\" --all --json\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003e2. Preview reply candidates (dry run)\u003c/h2\u003e\nredbook batch-reply \"\u003cnoteUrl\u003e\" --strategy questions --dry-run --json\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003e3. Execute replies with template (5 min delay with ±30% jitter)\u003c/h2\u003e\nredbook batch-reply \"\u003cnoteUrl\u003e\" --strategy questions \\\n --template \"感谢提问!关于{content},...\" \\\n --max 10\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eFields to extract from \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--dry-run\u003c/code\u003e JSON:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecandidates[].commentId\u003c/code\u003e — target comments\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecandidates[].isQuestion\u003c/code\u003e — boolean, detected question\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecandidates[].likes\u003c/code\u003e — engagement signal\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecandidates[].hasSubReplies\u003c/code\u003e — whether already answered\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eskipped\u003c/code\u003e — how many comments were filtered out\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etotalComments\u003c/code\u003e — total fetched\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eStrategies:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003equestions\u003c/code\u003e — replies to comments ending with \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e?\u003c/code\u003e or \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e?\u003c/code\u003e (learning-oriented audience)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etop-engaged\u003c/code\u003e — replies to highest-liked comments (maximum visibility)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eall-unanswered\u003c/code\u003e — replies to comments with no existing sub-replies (fill gaps)\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eHow to interpret:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eHigh question rate (\u003e15%) = audience is learning-oriented → reply to build authority\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eHigh top-engaged comments (\u003e100 likes) = reply to visible comments for maximum reach\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eMany unanswered comments = engagement gap, opportunity to increase reply rate\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eSafety:\u003c/strong\u003e Hard cap 30 replies per batch, minimum 3-minute delay with ±30% jitter (default 5 min), \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--dry-run\u003c/code\u003e by default (no template = preview only), immediate stop on captcha. See \u003ca href=\"#rate-limits--safety\" target=\"_blank\" rel=\"noopener\" style=\"color:#6366f1\"\u003eRate Limits \u0026 Safety\u003c/a\u003e for details.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOutput:\u003c/strong\u003e Reply plan table with candidate comments, strategy match reason, and status.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eModule J: Viral Replication\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAnswers:\u003c/strong\u003e What structural template can I extract from successful notes to guide new content creation?\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eCommands:\u003c/strong\u003e\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e# 1. Find top notes for a keyword\nredbook search \"keyword\" --sort popular --json\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003e2. Extract structural template from 2-3 top performers\u003c/h2\u003e\nredbook viral-template \"\u003curl1\u003e\" \"\u003curl2\u003e\" \"\u003curl3\u003e\" --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eFields to extract from \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eviral-template\u003c/code\u003e JSON:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edominantHookPatterns[]\u003c/code\u003e — hook types appearing in majority of notes\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etitleStructure.commonPatterns[]\u003c/code\u003e — specific title formula\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etitleStructure.avgLength\u003c/code\u003e — target title length\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ebodyStructure.lengthRange\u003c/code\u003e — target word count [min, max]\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ebodyStructure.paragraphRange\u003c/code\u003e — target paragraph count\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eengagementProfile.type\u003c/code\u003e — reference/insight/entertainment\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eaudienceSignals.commonThemes[]\u003c/code\u003e — what the audience talks about\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eHow to interpret:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eConsistent hook patterns across notes = proven formula for this niche\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eNarrow body length range = audience has clear content length preference\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eHigh collect/like in profile = audience saves content → create reference material\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eCommon comment themes = topics to address in new content\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eComposition with other modules:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eUses Module A results to identify top URLs for template extraction\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eFeeds into Module H (Content Brainstorm) as structural constraint\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eUses Module C classification to validate engagement profile\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOutput:\u003c/strong\u003e Content template spec — the structural skeleton for content creation. An LLM (via the composed workflow) uses this template to generate actual title, body, hashtags, and cover image prompt.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eModule K: Engagement Automation\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAnswers:\u003c/strong\u003e How should I manage ongoing engagement with my audience?\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eThis module is a workflow that composes Modules I and J with human oversight.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eWorkflow:\u003c/strong\u003e\n1. \u003cstrong style=\"color:#e5e7eb\"\u003eMonitor\u003c/strong\u003e — \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook comments \"\u003cmyNoteUrl\u003e\" --all --json\u003c/code\u003e to fetch recent comments\n2. \u003cstrong style=\"color:#e5e7eb\"\u003eFilter\u003c/strong\u003e — \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook batch-reply --strategy questions --dry-run\u003c/code\u003e to identify reply candidates\n3. \u003cstrong style=\"color:#e5e7eb\"\u003eReview\u003c/strong\u003e — Human reviews dry-run output (or LLM reviews with persona guidelines)\n4. \u003cstrong style=\"color:#e5e7eb\"\u003eExecute\u003c/strong\u003e — \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook batch-reply --strategy questions --template \"...\" --max 10\u003c/code\u003e\n5. \u003cstrong style=\"color:#e5e7eb\"\u003eReport\u003c/strong\u003e — Summary of replies sent, errors encountered, rate limit status\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eSafety rules:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eAlways \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--dry-run\u003c/code\u003e first, human approval before execution\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eMaximum 30 replies per session (hard cap)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eMinimum 3-minute delay between replies, default 5 minutes, with ±30% random jitter\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eNever reply to the same comment twice (check \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ehasSubReplies\u003c/code\u003e)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eStop immediately on captcha — do not retry\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eSee \u003ca href=\"#rate-limits--safety\" target=\"_blank\" rel=\"noopener\" style=\"color:#6366f1\"\u003eRate Limits \u0026 Safety\u003c/a\u003e for XHS risk control thresholds\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAnti-spam guidelines:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eVary reply templates across batches\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eLimit to 1-2 batch runs per note per day\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003ePrioritize quality (targeted strategy) over quantity\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eUniform timing patterns trigger bot detection — jitter is applied automatically\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eModule L: Card Rendering\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAnswers:\u003c/strong\u003e How do I turn markdown content into Xiaohongshu-ready image cards?\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eCommands:\u003c/strong\u003e\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e# Render markdown to styled PNG cards\nredbook render content.md --style xiaohongshu\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003eCustom style and output directory\u003c/h2\u003e\nredbook render content.md --style dark --output-dir ./cards\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003eJSON output (for programmatic use)\u003c/h2\u003e\nredbook render content.md --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eInput:\u003c/strong\u003e Markdown file with YAML frontmatter:\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e---\nemoji: \"🚀\"\ntitle: \"5个AI效率技巧\"\nsubtitle: \"Claude Code 实战\"\n\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e技巧一:...\u003c/h3\u003e\nContent here...\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003e技巧二:...\u003c/h3\u003e\nMore content...\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOutput:\u003c/strong\u003e \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecover.png\u003c/code\u003e + \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecard_1.png\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecard_2.png\u003c/code\u003e, ... in the same directory.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eCard specs:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eSize:\u003c/strong\u003e 1080×1440 (3:4 ratio, standard XHS image)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eDPR:\u003c/strong\u003e 2 (retina quality, actual output 2160×2880)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eStyles:\u003c/strong\u003e purple, xiaohongshu, mint, sunset, ocean, elegant, dark\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003ePagination modes:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eauto\u003c/code\u003e (default) — smart split on heading/paragraph boundaries using character-count heuristic\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eseparator\u003c/code\u003e — manual split on \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e---\u003c/code\u003e in markdown\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eHow to interpret:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eUses the user's existing Chrome for rendering (via \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epuppeteer-core\u003c/code\u003e) — no browser download needed\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003ePurely offline — no XHS API or cookies required\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eOutput images are ready for \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook post --images cover.png card_1.png ...\u003c/code\u003e\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eDependencies:\u003c/strong\u003e Requires \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epuppeteer-core\u003c/code\u003e and \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003emarked\u003c/code\u003e (optional, install with \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003enpm install -g puppeteer-core marked\u003c/code\u003e).\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eComposition with other modules:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003ePairs with Module H (Content Brainstorm) — generate content ideas, write markdown, render to cards\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003ePairs with Module J (Viral Replication) — extract template, write content matching the template, render\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eOutput feeds into \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook post --images\u003c/code\u003e for publishing\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eModule M: Note Health Check (限流检测)\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAnswers:\u003c/strong\u003e Are any of my notes being secretly rate-limited by XHS?\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eXHS assigns a hidden \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003elevel\u003c/code\u003e field to each note in the creator backend API. This level controls recommendation distribution but is \u003cstrong style=\"color:#e5e7eb\"\u003enever shown in the UI\u003c/strong\u003e. Your note may look \"normal\" while secretly receiving zero recommendations.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eCommands:\u003c/strong\u003e\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e# Check all notes (first page)\nredbook health\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003eCheck all pages\u003c/h2\u003e\nredbook health --all\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003eJSON output for programmatic use\u003c/h2\u003e\nredbook health --all --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eLevel definitions:\u003c/strong\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Level | Status | Meaning |\n|-------|--------|---------|\n| 4 | 🟢 Normal | Full recommendation distribution |\n| 2-3 | 🟡 Baseline | Basically normal, minor constraints |\n| 1 | ⚪ New | Under review (new post) |\n| -1 | 🔴 Soft limit | Mild throttling, decreased recommendations |\n| -5 to -101 | 🔴 Moderate | Moderate throttling, minimal promotion |\n| -102 | ⛔ Severe | Irreversible — must delete and repost |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAdditional checks:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eSensitive word detection\u003c/strong\u003e — flags titles containing automation/AI keywords (自动化, AI生成, 批量, etc.)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eTag count warning\u003c/strong\u003e — flags notes with \u003e5 hashtags (risk factor)\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eHow to interpret:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eLevel -1 or below = your note is being throttled. Consider editing or deleting + reposting.\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eLevel -102 = irreversible. Delete the note and create fresh content.\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eSensitive word hits = risky title keywords that may trigger throttling. Rephrase.\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eExcessive tags = potential spam signal. Use 3-5 targeted tags.\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOutput:\u003c/strong\u003e Terminal dashboard with color-coded distribution summary, limited notes list, and risk factor warnings.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eDiscovery credit:\u003c/strong\u003e \u003ca href=\"https://x.com/xxx111god\" target=\"_blank\" rel=\"noopener\" style=\"color:#6366f1\"\u003e@xxx111god\u003c/a\u003e — \u003ca href=\"https://github.com/jzOcb/xhs-note-health-checker\" target=\"_blank\" rel=\"noopener\" style=\"color:#6366f1\"\u003exhs-note-health-checker\u003c/a\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eComposed Workflows\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eCombine modules for different analysis depths.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eQuick Topic Scan (~5 min)\u003c/h4\u003e\n\u003cstrong style=\"color:#e5e7eb\"\u003eModules:\u003c/strong\u003e A → C → F\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eSearch 3–5 keywords, classify engagement type, rank opportunities. Good for quickly validating whether a niche is worth deeper research.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eContent Planning\u003c/h4\u003e\n\u003cstrong style=\"color:#e5e7eb\"\u003eModules:\u003c/strong\u003e A → B → E → F → H\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eBuild keyword matrix, map topic × scene intersections, check content form performance, score opportunities, brainstorm specific content ideas.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eCreator Competitive Analysis\u003c/h4\u003e\n\u003cstrong style=\"color:#e5e7eb\"\u003eModules:\u003c/strong\u003e A → D\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eFind who dominates a niche and study their content strategy, posting frequency, and engagement patterns.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eFull Niche Analysis\u003c/h4\u003e\n\u003cstrong style=\"color:#e5e7eb\"\u003eModules:\u003c/strong\u003e A → B → C → D → E → F → G → H\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eThe comprehensive playbook — keyword landscape, cross-topic heatmap, engagement signals, creator profiles, content form analysis, opportunity scoring, audience personas, and data-backed content ideas.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eSingle Note Deep-Dive\u003c/h4\u003e\n\u003cstrong style=\"color:#e5e7eb\"\u003eCommand:\u003c/strong\u003e \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook analyze-viral \"\u003curl\u003e\" --json\u003c/code\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eNo module composition needed — \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eanalyze-viral\u003c/code\u003e returns hook analysis, engagement ratios, comment themes, author baseline comparison, and a 0-100 viral score in one call.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eViral Pattern Research → Content Template\u003c/h4\u003e\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e# 1. Find top notes\nredbook search \"keyword\" --sort popular --json\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003e2. Extract template from top 3 notes (replaces manual synthesis)\u003c/h2\u003e\nredbook viral-template \"\u003curl1\u003e\" \"\u003curl2\u003e\" \"\u003curl3\u003e\" --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eviral-template\u003c/code\u003e automates what previously required manual synthesis across \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eanalyze-viral\u003c/code\u003e results. It outputs a \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eContentTemplate\u003c/code\u003e JSON that captures dominant hooks, body structure ranges, engagement profile, and audience signals.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eReply Management\u003c/h4\u003e\n\u003cstrong style=\"color:#e5e7eb\"\u003eModules:\u003c/strong\u003e I\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eSingle-module workflow for managing comment engagement on your notes. Use \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ebatch-reply --dry-run\u003c/code\u003e to audit, then execute with a template.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eContent Replication\u003c/h4\u003e\n\u003cstrong style=\"color:#e5e7eb\"\u003eModules:\u003c/strong\u003e A → J → H → L\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eKeyword research → viral template extraction → data-backed content brainstorm → render to image cards. The template provides structural constraints that guide Module H's content ideas. Module L renders the final markdown to XHS-ready PNGs.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eContent Creation End-to-End\u003c/h4\u003e\n\u003cstrong style=\"color:#e5e7eb\"\u003eModules:\u003c/strong\u003e A → J → H → L → \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epost\u003c/code\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eThe full pipeline: research keywords → extract viral template → brainstorm content → write markdown → render to styled image cards → publish via \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook post --images cover.png card_1.png ...\u003c/code\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eAccount Health Monitoring\u003c/h4\u003e\n\u003cstrong style=\"color:#e5e7eb\"\u003eModules:\u003c/strong\u003e M\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eRun \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook health --all\u003c/code\u003e periodically to catch throttled notes early. If level drops below 1, investigate the note's content for policy violations. Combine with Module I to check if throttled notes still have unanswered comments worth replying to.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eFull Operations\u003c/h4\u003e\n\u003cstrong style=\"color:#e5e7eb\"\u003eModules:\u003c/strong\u003e A → C → I → J → K → M\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eComprehensive automation playbook — keyword analysis, engagement classification, comment operations, viral replication templates, and engagement automation workflow.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eRate Limits \u0026 Safety\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eXHS enforces aggressive anti-spam (风控) that detects automated behavior through device fingerprinting, activity ratio monitoring, and timing pattern analysis. The CLI applies safe defaults based on platform research.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eSafe Thresholds\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Action | Safe Interval | CLI Default | Hard Cap |\n|--------|--------------|-------------|----------|\n| Post a note | 3-4 hours (2-3 notes/day max) | N/A (manual) | — |\n| Comment | ≥3 minutes | N/A (manual) | — |\n| Reply | ≥3 minutes | N/A (manual) | — |\n| Batch reply delay | ≥3 minutes | 5 min ±30% jitter | — |\n| Batch reply count | — | 10 | 30 |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eAnti-Detection Measures\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eTiming jitter:\u003c/strong\u003e ±30% random variation on all batch delays. Uniform intervals are a bot signature.\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eHard caps:\u003c/strong\u003e Maximum 30 replies per batch (down from 50). No override.\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eRate limit warnings:\u003c/strong\u003e \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epost\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecomment\u003c/code\u003e, and \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ereply\u003c/code\u003e commands display safe interval reminders after each action.\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eCaptcha circuit breaker:\u003c/strong\u003e Batch operations stop immediately on captcha (NeedVerify).\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eWhat Triggers Risk Control\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eUniform timing\u003c/strong\u003e — replying at exact 3-second intervals flags bot detection\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eHigh frequency\u003c/strong\u003e — \u003e50 interactions/minute across any action type\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eActivity ratio anomaly\u003c/strong\u003e — more comments than post views signals inauthentic behavior\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eDevice fingerprint mismatch\u003c/strong\u003e — XHS fingerprints 21 hardware parameters\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eBest Practices for Agents\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e1. Always \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--dry-run\u003c/code\u003e first, review candidates, then execute\n2. Use the default 5-minute delay — do not override \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--delay\u003c/code\u003e below 180000 (3 min)\n3. Limit batch runs to 1-2 per note per day\n4. Vary reply templates between batches\n5. Space \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epost\u003c/code\u003e commands 3-4 hours apart (2-3 notes/day maximum)\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eAPI vs Browser Limitations\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eThe following operations work reliably via API:\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eReading\u003c/strong\u003e: search, notes, comments, user profiles, feed, favorites\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eWriting\u003c/strong\u003e: top-level comments, comment replies, collect/uncollect notes\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eAnalysis\u003c/strong\u003e: viral scoring, template extraction, batch reply planning\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eThe following operations are unreliable via API (frequently trigger captcha):\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003ePublishing notes (use \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--private\u003c/code\u003e for higher success rate)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eBulk operations at very high frequency\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eThe following operations require browser automation (not supported by this CLI):\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eCaptcha solving, real-time notifications\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eLike/follow (heavy anti-automation enforcement)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eDM/private messaging\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eCover image generation (use external tools like Gemini/DALL-E)\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eCommand Details\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook search \u003ckeyword\u003e\u003c/code\u003e\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eSearch for notes by keyword. Returns note titles, URLs, likes, author info.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook search \"Claude Code教程\" --json\nredbook search \"AI编程\" --sort popular --json # Sort: general, popular, latest\nredbook search \"Cursor\" --type image --json # Type: all, video, image\nredbook search \"MCP Server\" --page 2 --json # Pagination\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOptions:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--sort \u003ctype\u003e\u003c/code\u003e: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003egeneral\u003c/code\u003e (default), \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epopular\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003elatest\u003c/code\u003e\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--type \u003ctype\u003e\u003c/code\u003e: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eall\u003c/code\u003e (default), \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003evideo\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eimage\u003c/code\u003e\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--page \u003cn\u003e\u003c/code\u003e: Page number (default: 1)\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook read \u003curl\u003e\u003c/code\u003e\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eRead a note's full content — title, body text, images, likes, comments count.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook read \"https://www.xiaohongshu.com/explore/abc123\" --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eAccepts full URLs or short note IDs. Falls back to HTML scraping if API returns captcha.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook comments \u003curl\u003e\u003c/code\u003e\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eGet comments on a note. Use \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--all\u003c/code\u003e to fetch all pages.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook comments \"https://www.xiaohongshu.com/explore/abc123\" --json\nredbook comments \"https://www.xiaohongshu.com/explore/abc123\" --all --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook user \u003cuserId\u003e\u003c/code\u003e\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eGet a creator's profile — nickname, bio, follower count, note count, likes received.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook user \"5a1234567890abcdef012345\" --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eThe userId is the hex string from the creator's profile URL.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook user-posts \u003cuserId\u003e\u003c/code\u003e\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eList all notes posted by a creator. Returns titles, URLs, likes, timestamps.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook user-posts \"5a1234567890abcdef012345\" --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook feed\u003c/code\u003e\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eBrowse the recommendation feed.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook feed --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook topics \u003ckeyword\u003e\u003c/code\u003e\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eSearch for topic hashtags. Useful for finding trending topics to attach to posts.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook topics \"Claude Code\" --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook favorites [userId]\u003c/code\u003e\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eList a user's collected (bookmarked) notes. Defaults to the current logged-in user when no userId is provided.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook favorites --json # Your own favorites\nredbook favorites \"5a1234567890abcdef\" --json # Another user's favorites\nredbook favorites --all --json # Fetch all pages\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOptions:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--all\u003c/code\u003e: Fetch all pages of favorites (default: first page only)\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eNote:\u003c/strong\u003e Other users' favorites are only visible if they haven't set their collection to private.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook collect \u003curl\u003e\u003c/code\u003e\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eCollect (bookmark) a note to your favorites.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook collect \"https://www.xiaohongshu.com/explore/abc123\"\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook uncollect \u003curl\u003e\u003c/code\u003e\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eRemove a note from your collection.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook uncollect \"https://www.xiaohongshu.com/explore/abc123\"\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook analyze-viral \u003curl\u003e\u003c/code\u003e\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eAnalyze why a viral note works. Returns a deterministic viral score (0–100).\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook analyze-viral \"https://www.xiaohongshu.com/explore/abc123\" --json\nredbook analyze-viral \"https://www.xiaohongshu.com/explore/abc123\" --comment-pages 5\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOptions:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--comment-pages \u003cn\u003e\u003c/code\u003e: Comment pages to fetch (default: 3, max: 10)\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eJSON output structure:\u003c/strong\u003e\nReturns \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e{ note, score, hook, content, visual, engagement, comments, relative, fetchedAt }\u003c/code\u003e.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003escore.overall\u003c/code\u003e (0–100) — composite of hook (20) + engagement (20) + relative (20) + content (20) + comments (20)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ehook.hookPatterns[]\u003c/code\u003e — detected title patterns (Identity Hook, Emotion Word, Number Hook, Question, etc.)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eengagement\u003c/code\u003e — likes, comments, collects, shares + ratios (collectToLikeRatio, commentToLikeRatio, shareToLikeRatio)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003erelative.viralMultiplier\u003c/code\u003e — this note's likes / author's median likes\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003erelative.isOutlier\u003c/code\u003e — true if viralMultiplier \u003e 3\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecomments.themes[]\u003c/code\u003e — top recurring keyword phrases from comments\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook viral-template \u003curl\u003e [url2] [url3]\u003c/code\u003e\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eExtract a reusable content template from 1-3 viral notes. Analyzes each note (same pipeline as \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eanalyze-viral\u003c/code\u003e) and synthesizes common structural patterns.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook viral-template \"\u003curl1\u003e\" \"\u003curl2\u003e\" \"\u003curl3\u003e\" --json\nredbook viral-template \"\u003curl1\u003e\" --comment-pages 5 --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOptions:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--comment-pages \u003cn\u003e\u003c/code\u003e: Comment pages to fetch per note (default: 3, max: 10)\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eJSON output structure:\u003c/strong\u003e\nReturns \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e{ dominantHookPatterns, titleStructure, bodyStructure, engagementProfile, audienceSignals, sourceNotes, generatedAt }\u003c/code\u003e.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edominantHookPatterns[]\u003c/code\u003e — hook types appearing in majority of input notes\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etitleStructure.avgLength\u003c/code\u003e — average title length across notes\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ebodyStructure.lengthRange\u003c/code\u003e — [min, max] body length\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eengagementProfile.type\u003c/code\u003e — \"reference\" / \"insight\" / \"entertainment\"\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eaudienceSignals.commonThemes[]\u003c/code\u003e — merged comment themes across notes\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook comment \u003curl\u003e\u003c/code\u003e\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003ePost a top-level comment on a note.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook comment \"\u003cnoteUrl\u003e\" --content \"Great post!\" --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOptions:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--content \u003ctext\u003e\u003c/code\u003e (required): Comment text\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook reply \u003curl\u003e\u003c/code\u003e\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eReply to a specific comment on a note.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook reply \"\u003cnoteUrl\u003e\" --comment-id \"\u003ccommentId\u003e\" --content \"Thanks for asking!\" --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOptions:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--comment-id \u003cid\u003e\u003c/code\u003e (required): Comment ID to reply to (from \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecomments --json\u003c/code\u003e output)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--content \u003ctext\u003e\u003c/code\u003e (required): Reply text\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook batch-reply \u003curl\u003e\u003c/code\u003e\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eReply to multiple comments using a filtering strategy. Always preview with \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--dry-run\u003c/code\u003e first.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e# Preview which comments match the strategy\nredbook batch-reply \"\u003cnoteUrl\u003e\" --strategy questions --dry-run --json\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003eExecute replies with a template (default 5 min delay with jitter)\u003c/h2\u003e\nredbook batch-reply \"\u003cnoteUrl\u003e\" --strategy questions \\\n --template \"感谢提问!{content}\" --max 10\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOptions:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--strategy \u003cname\u003e\u003c/code\u003e: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003equestions\u003c/code\u003e (default), \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etop-engaged\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eall-unanswered\u003c/code\u003e\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--template \u003ctext\u003e\u003c/code\u003e: Reply template with \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e{author}\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e{content}\u003c/code\u003e placeholders\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--max \u003cn\u003e\u003c/code\u003e: Max replies (default: 10, hard cap: 30)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--delay \u003cms\u003e\u003c/code\u003e: Delay between replies in ms (default: 300000 / 5 min, min: 180000 / 3 min). ±30% random jitter applied automatically.\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--dry-run\u003c/code\u003e: Preview candidates without posting (default when no template)\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eSafety:\u003c/strong\u003e Stops immediately on captcha. No template = dry-run only. Delays include random jitter to avoid uniform timing patterns that trigger XHS bot detection.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook render \u003cfile\u003e\u003c/code\u003e\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eRender a markdown file with YAML frontmatter into styled PNG image cards. Uses the user's existing Chrome installation — no browser download needed.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook render content.md --style xiaohongshu\nredbook render content.md --style dark --output-dir ./cards\nredbook render content.md --pagination separator --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOptions:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--style \u003cname\u003e\u003c/code\u003e: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epurple\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003exiaohongshu\u003c/code\u003e (default), \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003emint\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003esunset\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eocean\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eelegant\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003edark\u003c/code\u003e\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--pagination \u003cmode\u003e\u003c/code\u003e: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eauto\u003c/code\u003e (default), \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eseparator\u003c/code\u003e (split on \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e---\u003c/code\u003e)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--output-dir \u003cdir\u003e\u003c/code\u003e: Output directory (default: same as input file)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--width \u003cn\u003e\u003c/code\u003e: Card width in px (default: 1080)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--height \u003cn\u003e\u003c/code\u003e: Card height in px (default: 1440)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--dpr \u003cn\u003e\u003c/code\u003e: Device pixel ratio (default: 2)\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eRequires:\u003c/strong\u003e \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epuppeteer-core\u003c/code\u003e and \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003emarked\u003c/code\u003e (\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003enpm install -g puppeteer-core marked\u003c/code\u003e). Does NOT require XHS cookies — purely offline rendering.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOverride Chrome path:\u003c/strong\u003e Set \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eCHROME_PATH\u003c/code\u003e environment variable if Chrome is not in the standard location.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook whoami\u003c/code\u003e\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eCheck connection status. Verifies cookies are valid and shows the logged-in user.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook whoami\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook post\u003c/code\u003e (Limited)\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003ePublish an image note. \u003cstrong style=\"color:#e5e7eb\"\u003eFrequently triggers captcha (type=124) on the creator API.\u003c/strong\u003e Image upload works, but the publish step is unreliable. For posting, consider using browser automation instead.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook post --title \"标题\" --body \"正文\" --images cover.png --json\nredbook post --title \"测试\" --body \"...\" --images img.png --private --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eOptions:\u003c/strong\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--title \u003ctitle\u003e\u003c/code\u003e: Note title (required)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--body \u003cbody\u003e\u003c/code\u003e: Note body text (required)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--images \u003cpaths...\u003e\u003c/code\u003e: Image file paths (required, at least one)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--topic \u003ckeyword\u003e\u003c/code\u003e: Search and attach a topic hashtag\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--private\u003c/code\u003e: Publish as private note\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eGlobal Options\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eAll commands accept:\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--cookie-source \u003cbrowser\u003e\u003c/code\u003e: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003echrome\u003c/code\u003e (default), \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003esafari\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003efirefox\u003c/code\u003e\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--chrome-profile \u003cname\u003e\u003c/code\u003e: Chrome profile directory name (e.g., \"Profile 1\"). Auto-discovered if omitted.\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--json\u003c/code\u003e: Output as JSON\u003c/li\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eTechnical Reference\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003exsec_token — Required for Reading \u0026 Sharing Notes\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eThe XHS API requires a valid \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003exsec_token\u003c/code\u003e to fetch note content. Without it, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eread\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecomments\u003c/code\u003e, and \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eanalyze-viral\u003c/code\u003e return \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e{}\u003c/code\u003e.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eThe same token is also required for shareable URLs.\u003c/strong\u003e Any \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ehttps://www.xiaohongshu.com/explore/\u003cid\u003e\u003c/code\u003e URL without \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e?xsec_token=...\u0026xsec_source=...\u003c/code\u003e is 302-redirected by XHS's anti-scrape layer to \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ehttps://www.xiaohongshu.com/404/sec_*?source=xhs_sec_server\u0026originalUrl=...\u003c/code\u003e. This affects anyone who clicks the URL — Safari, iOS link previews, agent action buttons, etc.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ewebUrl\u003c/code\u003e — use this (since v0.7.0):\u003c/strong\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eEvery note-returning command (\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003efeed\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003esearch\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003euser-posts\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003efavorites\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eboard\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eread\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epost\u003c/code\u003e) now includes a \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ewebUrl\u003c/code\u003e field with the token baked in and the correct \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003exsec_source\u003c/code\u003e. Consumers should use \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ewebUrl\u003c/code\u003e directly — do not construct URLs by hand.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eredbook feed --json | jq '.items[0].webUrl'\n\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003e=\u003e \"https://www.xiaohongshu.com/explore/\u003cid\u003e?xsec_token=\u003ct\u003e\u0026xsec_source=pc_feed\"\u003c/h2\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003exsec_source\u003c/code\u003e is set per-command: \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epc_feed\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epc_search\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epc_user\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epc_board\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epc_share\u003c/code\u003e.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eKey rules:\u003c/strong\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e1. \u003cstrong style=\"color:#e5e7eb\"\u003eTokens expire.\u003c/strong\u003e A URL with \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e?xsec_token=...\u003c/code\u003e from a previous session will return \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e{}\u003c/code\u003e. Never cache or reuse old URLs.\n2. \u003cstrong style=\"color:#e5e7eb\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003esearch\u003c/code\u003e and \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003efeed\u003c/code\u003e always return fresh tokens.\u003c/strong\u003e Every item includes a valid \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003exsec_token\u003c/code\u003e + a pre-built \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ewebUrl\u003c/code\u003e.\n3. \u003cstrong style=\"color:#e5e7eb\"\u003enoteId alone returns \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e{}\u003c/code\u003e.\u003c/strong\u003e Running \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eredbook read \u003cnoteId\u003e\u003c/code\u003e without a token almost always fails.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eThe correct workflow — always search first:\u003c/strong\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e# WRONG — stale URL or bare noteId, will likely return {}\nredbook read \"689da7b0000000001b0372c6\" --json\nredbook read \"https://www.xiaohongshu.com/explore/689da7b0?xsec_token=OLD_TOKEN\" --json\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003eRIGHT — search first, then use the fresh URL with token\u003c/h2\u003e\nredbook search \"AI编程\" --sort popular --json\n\u003ch2 style=\"color:#f3f4f6;margin:20px 0 10px;font-size:1.15em\"\u003eExtract the webUrl from search results, then:\u003c/h2\u003e\nredbook read \"\u003cwebUrl from search result\u003e\" --json\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eFor agents:\u003c/strong\u003e Prefer \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ewebUrl\u003c/code\u003e from the response. When only a bare noteId is available, search first to obtain a fresh token, then use the returned \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ewebUrl\u003c/code\u003e.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eCommands that need xsec_token:\u003c/strong\u003e \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eread\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecomments\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eanalyze-viral\u003c/code\u003e\n\u003cstrong style=\"color:#e5e7eb\"\u003eCommands that do NOT need xsec_token:\u003c/strong\u003e \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003esearch\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003euser\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003euser-posts\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003efeed\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ewhoami\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003etopics\u003c/code\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eChinese Number Formats in API Responses\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eThe XHS API returns abbreviated numbers with Chinese unit suffixes:\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| API value | Actual number |\n|-----------|---------------|\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e\"1.5万\"\u003c/code\u003e | 15,000 |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e\"2.4万\"\u003c/code\u003e | 24,000 |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e\"1.2亿\"\u003c/code\u003e | 120,000,000 |\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e\"115\"\u003c/code\u003e | 115 |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e万\u003c/code\u003e = ×10,000. \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e亿\u003c/code\u003e = ×100,000,000. Numbers under 10,000 are plain integers as strings.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eThe \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eanalyze-viral\u003c/code\u003e command handles this automatically. When parsing \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--json\u003c/code\u003e output manually, watch for these suffixes in \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003einteract_info\u003c/code\u003e fields (\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003eliked_count\u003c/code\u003e, \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003ecollected_count\u003c/code\u003e, etc.).\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch4 style=\"color:#d1d5db;margin:14px 0 6px;font-size:.95em\"\u003eError Handling\u003c/h4\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e| Error | Meaning | Fix |\n|-------|---------|-----|\n| \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e{}\u003c/code\u003e empty response | Missing or expired xsec_token | Search first to get a fresh token |\n| \"No 'a1' cookie\" | Not logged into XHS in browser | Log into xiaohongshu.com in Chrome |\n| \"Session expired\" | Cookie too old | Re-login in Chrome |\n| \"NeedVerify\" / captcha | Anti-bot triggered | Wait and retry, or reduce request frequency |\n| \"IP blocked\" (300012) | Rate limited | Wait or switch network |\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003chr style=\"border:none;border-top:1px solid #1e1e3f;margin:12px 0\"\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eOutput Format Guidance\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003eWhen producing analysis reports, use these formats:\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eData tables:\u003c/strong\u003e Markdown tables with exact field mappings. Always include the metric unit.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eHeatmaps:\u003c/strong\u003e ASCII bar charts for cross-topic comparison:\n\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003e 职场 生活 教育 创业\nAI编程 ████ 8K ██ 2K ████ 12K ░░ 200\nClaude Code ██ 3K ░░ 100 ██ 4K █ 1K\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eCreator comparison:\u003c/strong\u003e Structured table with both quantitative metrics and qualitative style assessment.\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eFinal reports:\u003c/strong\u003e Use this section order:\n1. Market Overview (demand signals, content velocity)\n2. Keyword Landscape (engagement matrix, opportunity tiers)\n3. Cross-Topic Heatmap (topic × scene intersections)\n4. Audience Persona (demographics, intent, preferences)\n5. Competitive Landscape (creator profiles, strategy patterns)\n6. Content Opportunities (tiered recommendations with data backing)\n7. Content Ideas (specific hooks, angles, targets)\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eProgrammatic API\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cpre style=\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\"\u003e\u003ccode style=\"color:#a5f3fc;background:none;padding:0;font-size:1em\"\u003eimport { XhsClient } from \"@lucasygu/redbook\";\nimport { loadCookies } from \"@lucasygu/redbook/cookies\";\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003econst cookies = await loadCookies(\"chrome\");\nconst client = new XhsClient(cookies);\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003econst results = await client.searchNotes(\"AI编程\", 1, 20, \"popular\");\nconst topics = await client.searchTopics(\"Claude Code\");\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003ch3 style=\"color:#e5e7eb;margin:18px 0 8px;font-size:1.05em\"\u003eRequirements\u003c/h3\u003e\u003c/p\u003e\u003cp style=\"margin:8px 0\"\u003e\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eNode.js \u003e= 22\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003eLogged into xiaohongshu.com in Chrome (or Safari/Firefox with \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003e--cookie-source\u003c/code\u003e)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003emacOS (cookie extraction uses native keychain access)\u003c/li\u003e\n\u003cli style=\"color:#94a3b8;margin:3px 0\"\u003e\u003cstrong style=\"color:#e5e7eb\"\u003eFor card rendering only:\u003c/strong\u003e \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003epuppeteer-core\u003c/code\u003e and \u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003emarked\u003c/code\u003e (\u003ccode style=\"background:#0d0d1e;color:#a5f3fc;padding:1px 5px;border-radius:3px;font-size:.88em\"\u003enpm install -g puppeteer-core marked\u003c/code\u003e). Uses your existing Chrome — no additional browser download.\u003c/li\u003e\n\u003c/p\u003e"])</script><script>self.__next_f.push([1,"20:[\"$\",\"div\",null,{\"className\":\"skill-page\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"{\\\"@context\\\":\\\"https://schema.org\\\",\\\"@type\\\":\\\"SoftwareApplication\\\",\\\"name\\\":\\\"redbook\\\",\\\"description\\\":\\\"Search, read, analyze, and automate Xiaohongshu (小红书) content via CLI\\\",\\\"url\\\":\\\"https://bytesagain.com/skill/redbook\\\",\\\"applicationCategory\\\":\\\"crypto\\\",\\\"operatingSystem\\\":\\\"Any\\\",\\\"offers\\\":{\\\"@type\\\":\\\"Offer\\\",\\\"price\\\":\\\"0\\\",\\\"priceCurrency\\\":\\\"USD\\\"},\\\"publisher\\\":{\\\"@type\\\":\\\"Organization\\\",\\\"name\\\":\\\"BytesAgain\\\",\\\"url\\\":\\\"https://bytesagain.com\\\"}}\"}}],[\"$\",\"div\",null,{\"className\":\"breadcrumb\",\"children\":[[\"$\",\"a\",null,{\"href\":\"/\",\"children\":\"BytesAgain\"}],\" › \",[\"$\",\"a\",null,{\"href\":\"/skills\",\"children\":\"Skills\"}],\" › \",\"redbook\"]}],[\"$\",\"div\",null,{\"className\":\"two-col\",\"children\":[[\"$\",\"div\",null,{\"className\":\"two-col-main\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-card\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-header\",\"children\":[[\"$\",\"div\",null,{\"className\":\"skill-badges\",\"children\":[[\"$\",\"span\",null,{\"className\":\"badge\",\"style\":{\"color\":\"#818cf8\",\"background\":\"#818cf822\",\"borderColor\":\"#818cf844\"},\"children\":[\"🦀\",\" \",\"ClawHub\"]}],false]}],[\"$\",\"div\",null,{\"className\":\"skill-top-actions\",\"children\":[\"$\",\"$L22\",null,{\"slug\":\"redbook\"}]}]]}],[\"$\",\"h1\",null,{\"className\":\"skill-title\",\"children\":\"redbook\"}],[\"$\",\"p\",null,{\"className\":\"skill-owner\",\"children\":[\"by \",[\"$\",\"span\",null,{\"children\":[\"@\",\"lucasygu\"]}]]}],[\"$\",\"p\",null,{\"className\":\"skill-desc\",\"children\":\"Search, read, analyze, and automate Xiaohongshu (小红书) content via CLI\"}],[\"$\",\"div\",null,{\"className\":\"skill-meta\",\"children\":[[\"$\",\"div\",null,{\"className\":\"meta-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"meta-label\",\"children\":\"Version\"}],[\"$\",\"span\",null,{\"className\":\"meta-value\",\"children\":[\"v\",\"0.7.2\"]}]]}],[\"$\",\"div\",null,{\"className\":\"meta-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"meta-label\",\"children\":\"Downloads\"}],[\"$\",\"span\",null,{\"className\":\"meta-value\",\"children\":\"2,530\"}]]}],false,[\"$\",\"div\",null,{\"className\":\"meta-item\",\"children\":[[\"$\",\"span\",null,{\"className\":\"meta-label\",\"children\":\"Stars\"}],[\"$\",\"span\",null,{\"className\":\"meta-value\",\"children\":[\"⭐ \",\"2\"]}]]}],false,[\"$\",\"div\",null,{\"className\":\"meta-item\",\"style\":{\"flexDirection\":\"row\",\"gap\":6,\"alignItems\":\"center\"},\"children\":[[\"$\",\"a\",\"crypto-defi\",{\"href\":\"/?q=crypto-defi\",\"className\":\"tag\",\"children\":[\"#\",\"crypto-defi\"]}],[\"$\",\"a\",\"writing\",{\"href\":\"/?q=writing\",\"className\":\"tag\",\"children\":[\"#\",\"writing\"]}],[\"$\",\"a\",\"social-media\",{\"href\":\"/?q=social-media\",\"className\":\"tag\",\"children\":[\"#\",\"social-media\"]}],[\"$\",\"a\",\"legal\",{\"href\":\"/?q=legal\",\"className\":\"tag\",\"children\":[\"#\",\"legal\"]}],[\"$\",\"a\",\"automation\",{\"href\":\"/?q=automation\",\"className\":\"tag\",\"children\":[\"#\",\"automation\"]}]]}]]}],[\"$\",\"div\",null,{\"style\":{\"marginTop\":6},\"children\":[\"$\",\"a\",null,{\"href\":\"https://clawhub.ai/lucasygu/redbook\",\"target\":\"_blank\",\"rel\":\"noopener\",\"className\":\"btn-secondary\",\"style\":{\"padding\":\"6px 12px\",\"fontSize\":\".82em\",\"borderRadius\":8,\"background\":\"transparent\",\"border\":\"1px solid var(--border-card)\",\"color\":\"var(--text-muted2)\",\"textDecoration\":\"none\",\"whiteSpace\":\"nowrap\"},\"children\":[\"View on \",\"ClawHub\",\" →\"]}]}]]}],[\"$\",\"div\",null,{\"className\":\"install-box\",\"children\":[[\"$\",\"div\",null,{\"className\":\"install-header\",\"children\":[[\"$\",\"div\",null,{\"className\":\"install-dots\",\"children\":[[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#ef4444\"}}],[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#eab308\"}}],[\"$\",\"div\",null,{\"className\":\"dot\",\"style\":{\"background\":\"#22c55e\"}}]]}],[\"$\",\"span\",null,{\"className\":\"install-label\",\"children\":\"TERMINAL\"}]]}],[\"$\",\"div\",null,{\"className\":\"install-body\",\"style\":{\"flexWrap\":\"wrap\"},\"children\":[[\"$\",\"code\",null,{\"className\":\"install-cmd\",\"children\":\"clawhub install redbook\"}],[\"$\",\"button\",null,{\"className\":\"copy-btn\",\"data-cmd\":\"clawhub install redbook\",\"style\":{\"fontWeight\":700},\"children\":\"Copy\"}]]}]]}],[\"$\",\"section\",null,{\"className\":\"skill-card\",\"style\":{\"marginBottom\":20},\"children\":[[\"$\",\"h2\",null,{\"style\":{\"color\":\"#f8fafc\",\"fontSize\":\"1.2em\",\"fontWeight\":800,\"margin\":\"0 0 16px\",\"display\":\"flex\",\"alignItems\":\"center\",\"gap\":8},\"children\":\"📖 About This Skill\"}],[\"$\",\"div\",null,{\"style\":{\"fontSize\":\".92em\",\"color\":\"#94a3b8\",\"lineHeight\":1.75},\"dangerouslySetInnerHTML\":{\"__html\":\"$23\"}}]]}],null,\"$L24\",null,null,null,null,null,false,false]}],\"$L25\"]}]]}]\n"])</script><script>self.__next_f.push([1,"21:[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n document.querySelectorAll('.copy-btn, .script-copy-btn').forEach(btn =\u003e {\\n btn.addEventListener('click', () =\u003e {\\n const cmd = btn.getAttribute('data-cmd');\\n if (!cmd) return;\\n navigator.clipboard.writeText(cmd).then(() =\u003e {\\n const orig = btn.textContent;\\n btn.textContent = 'Copied!';\\n setTimeout(() =\u003e btn.textContent = orig, 1500);\\n }).catch(() =\u003e {});\\n });\\n });\\n \"}}]\n"])</script><script>self.__next_f.push([1,"26:I[71521,[\"/_next/static/chunks/0ph_0rx9ah5dc.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/0i_x3w546rsb3.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/06ig5gym-0n-u.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\",\"/_next/static/chunks/12w5ognupk9fb.js?dpl=dpl_9zPFH6pojPkqyspdDNz28GzCc6KQ\"],\"default\"]\n24:[\"$\",\"section\",null,{\"className\":\"skill-card\",\"style\":{\"marginBottom\":20},\"children\":[[\"$\",\"h2\",null,{\"style\":{\"color\":\"#f8fafc\",\"fontSize\":\"1.2em\",\"fontWeight\":800,\"margin\":\"0 0 16px\",\"display\":\"flex\",\"alignItems\":\"center\",\"gap\":8},\"children\":\"💡 Examples\"}],[\"$\",\"div\",null,{\"style\":{\"fontSize\":\".92em\",\"color\":\"#94a3b8\",\"lineHeight\":1.75},\"dangerouslySetInnerHTML\":{\"__html\":\"\u003cp style=\\\"margin:8px 0\\\"\u003e\u003cpre style=\\\"background:#0a0a1c;border:1px solid #1e1e3f;border-radius:6px;padding:10px 12px;overflow-x:auto;font-size:.9em;margin:8px 0\\\"\u003e\u003ccode style=\\\"color:#a5f3fc;background:none;padding:0;font-size:1em\\\"\u003e/redbook search \\\"AI编程\\\" # Search notes\\n/redbook read \u003curl\u003e # Read a note\\n/redbook user \u003cuserId\u003e # Creator profile\\n/redbook analyze \u003cuserId\u003e # Full creator analysis (profile + posts)\\n\u003c/code\u003e\u003c/pre\u003e\u003c/p\u003e\"}}]]}]\n25:[\"$\",\"div\",null,{\"className\":\"two-col-side\",\"children\":[\"$\",\"$L26\",null,{\"category\":\"crypto\",\"currentSlug\":\"redbook\",\"name\":\"redbook\",\"tags\":[\"crypto-defi\",\"writing\",\"social-media\",\"legal\",\"automation\"]}]}]\n"])</script></body></html>