Use this skill to give the user a personalized ScoutX digest with the same product shape as follow-good-builders:
--announce --channel --to for the actual chat/channel deliveryUse this skill when the user says things like:
set up follow scoutx/follow-scoutx帮我订一个每天早上 9 点的 AI 摘要改成每周一早上推送只看 OpenAI、Anthropic 和 Cursor显示我当前的设置Do not use this skill for:
The end user should only configure:
The end user should not configure:
BASE_URLAPI_TOKENDeveloper-only overrides may exist in the helper script, but do not surface them to normal users unless you are explicitly debugging the skill itself.
In OpenClaw, treat delivery.channel=in_chat as stdout output delivered by OpenClaw to the current channel. For Feishu or any external channel, use an explicit delivery.channel and delivery.target rather than relying on last.
If the bundled service.json still points to a placeholder domain such as *.example.com, that is an operator packaging problem, not an end-user setup problem. In that case:
service.jsonservice.json or run configure-serviceThe bundled service endpoint is stored in:
service.jsonThe skill stores local state in:
~/.follow_scoutx/
Important files:
profile.jsonstate.jsonprompt_sync_state.jsonservice.json in ~/.follow_scoutx/ for local endpoint overrideprompts/digest_intro.mdprompts/summarize_content.mdprompts/summarize_tweets.mdprompts/summarize_podcast.mdprompts/translate.mdRun:
python3 scripts/follow_scoutx.py configure
This creates the local directory and syncs bundled prompt files into the local prompt directory.
If an older bundled prompt already exists locally, the script updates it automatically and stores a backup under ~/.follow_scoutx/prompts/backups/.
If the user has manually customized a local prompt after a previous sync, keep that customized file instead of overwriting it.
Ask only for the user-facing preferences:
In OpenClaw, assume delivery is the current chat channel unless the user explicitly asks for a different target.
If the user wants Feishu delivery, save the exact channel and target:
python3 scripts/follow_scoutx.py configure \
--delivery-channel feishu \
--delivery-target "ou_xxx"
Translate conversational answers into the helper script arguments.
Use:
python3 scripts/follow_scoutx.py configure ...
Examples:
python3 scripts/follow_scoutx.py configure \
--frequency daily \
--time 09:00 \
--language zh-CN \
--source-mode scoutx \
--delivery-channel in_chat \
--topics "AI Agent,编程工具" \
--keywords-include "OpenAI,Anthropic,Cursor" \
--max-items 8 \
--max-scoutx-items 8 \
--length short
python3 scripts/follow_scoutx.py configure \
--frequency weekly \
--days mon,thu \
--time 09:00 \
--language bilingual \
--source-types "scoutx,x,podcast" \
--delivery-channel feishu \
--delivery-target "ou_xxx" \
--topics "AI Agent,模型发布" \
--max-items 10 \
--max-first-party-items 6 \
--max-scoutx-items 4
First-party only example:
python3 scripts/follow_scoutx.py configure \
--source-mode first_party \
--topics "AI Agent,模型发布"
Use:
python3 scripts/follow_scoutx.py show-profile
Use:
python3 scripts/follow_scoutx.py show-service
This is for debugging or operator verification, not for normal end-user setup.
Use only when the current installation needs a specific feed endpoint, such as a temporary public IP before the final domain is ready.
python3 scripts/follow_scoutx.py configure-service \
--feed-url "https://input.reai.group/v1/public/feed" \
--meta-url "https://input.reai.group/v1/public/meta"
This writes the endpoint override into:
~/.follow_scoutx/service.json
Do not ask normal users to do this unless you are acting as the operator of that OpenClaw installation.
Use:
python3 scripts/follow_scoutx.py preview
If the backend feed is not available yet, explain that setup is complete but the central feed endpoint is not reachable.
If the configured endpoint is obviously still a placeholder, explain that the package was shipped without a real Follow ScoutX feed address and escalate to the operator. Do not turn this into a question asking the end user for the feed URL.
When the result should be remixed by the agent with stable prompt control, use:
python3 scripts/follow_scoutx.py prepare-digest
This returns one JSON payload containing:
Use this path when OpenClaw should produce the final message text with LLM help.
Even on this path, every selected item must still render as its own numbered entry; do not collapse item 4..n into "more updates" style placeholders.
When the result is meant to be sent back to the current OpenClaw chat channel, use:
python3 scripts/follow_scoutx.py deliver
This returns a deterministic plain-text digest directly from the selected ScoutX items.
Important behavior:
failed_source_types plus errors; use FOLLOW_SCOUTX_ALLOW_PARTIAL_FEEDS=0 or omit partial mode only when you explicitly want hard failure behaviormax_items is still split logically across message groups; use --max-first-party-items and --max-scoutx-items when the user wants separate capsWhen the user asks to validate, inspect, or accept a digest run, prefer the raw JSON outputs:
python3 scripts/follow_scoutx.py preview --json
python3 scripts/follow_scoutx.py deliver --json
For validation, only rely on raw fields such as:
profile.preferencesgroups[*].group_idgroups[*].item_countstats.group_countsitems[*].titleitems[*].source_typedelivery.message_count or the returned messages array lengtherrorsDo not invent secondary labels or content judgments such as:
AI相关: ✅/⚠️/❌边界内容每日热点导览当前无 AI 相关内容If the user explicitly asks for an acceptance verdict, derive it only from the raw counts, titles, and delivery results. Do not replace the script's output with your own semantic classifier.
If status is partial or errors is non-empty, report that the run degraded and name the failed sources; do not misreport it as a clean filtering result.
When the user wants recurring delivery in OpenClaw, use:
python3 scripts/follow_scoutx.py show-openclaw-cron
This prints a recommended openclaw cron add command derived from:
profile.jsondelivery.channel and delivery.target~/.follow_scoutx/service.jsonIf the installation still relies on a temporary public IP, first run configure-service, then use show-openclaw-cron.
Once setup is confirmed, you can create the OpenClaw cron job directly:
python3 scripts/follow_scoutx.py install-openclaw-cron
python3 scripts/follow_scoutx.py install-openclaw-cron --apply
python3 scripts/follow_scoutx.py install-openclaw-cron --replace-existing --apply
Without --apply, the command returns a dry-run JSON payload for inspection. Check delivery_diagnostics.stable before applying. The default stable path requires an explicit Feishu target. If the user wants current-chat delivery, use --main-session-system-event so OpenClaw routes through the main session instead of relying on --channel last.
Use this after:
configure-service is correct for the current installationconfigure--delivery-channel feishu --delivery-target ou_xxx, unless the user explicitly chooses the main-session system event path for current-chat deliveryFor OpenClaw recurring delivery, prefer the native channel flow instead of shell cron + inbox.
Use the deterministic deliver --json path by default for English or when the output can safely stay close to the source text.
If the user's preferred language is zh-CN or bilingual and first-party sources (x or podcast) are enabled, prefer prepare-digest so the agent can generate localized summaries that actually respect config.language.
For OpenClaw, delivery.method=stdout is a local skill preference: it means follow_scoutx.py deliver writes the digest to stdout. It is not the Feishu transport. Feishu transport still requires OpenClaw cron delivery via --announce --channel feishu --to .
Do not use delivery.mode=session with --session isolated for Feishu delivery. Isolated sessions do not have a previous chat channel to inherit, and this can fail with "Channel is required".
Stable target shape for the current chat:
openclaw cron add \
--name "follow-scoutx-daily" \
--cron "0 9 * * *" \
--agent main \
--session main \
--system-event "Run `python3 scripts/follow_scoutx.py deliver --json`, then send each returned message chunk in order without rewriting. Use the last chunk as your final answer." \
--exact \
--timeout-seconds 120
Target shape for Feishu:
openclaw cron add \
--name "follow-scoutx-daily" \
--cron "0 9 * * *" \
--session isolated \
--agent main \
--message "Run `FOLLOW_SCOUTX_FEED_URL=https://input.reai.group/v1/public/feed FOLLOW_SCOUTX_DELIVERY_CHANNEL_HINT=feishu python3 /root/work/follow-scoutx/scripts/follow_scoutx.py deliver --json`, then send each returned message chunk in order without rewriting. Use the last chunk as your final answer." \
--announce \
--channel feishu \
--to "ou_xxx" \
--best-effort-deliver \
--exact \
--timeout-seconds 180
If the user wants Chinese output for first-party sources, the generated cron command should switch from deliver --json to prepare-digest and instruct the agent to write the final digest in config.language rather than returning raw source text.
Important:
install-openclaw-cron --main-session-system-event --apply so OpenClaw sends a system event to the main session instead of hard-coding a targetdelivery.channel=feishu, do not use --main-session-system-event; Feishu delivery must use explicit --channel feishu --to install-openclaw-cron --apply refuses channel=last by default; use --allow-channel-last only for internal compatibility testing after manually verifying this OpenClaw installation can reliably route last--channel feishu --to with a raw ou_... user open_id or oc_... group chat_idshow-openclaw-cron and install-openclaw-cron should still default to one cron job; the digest body should use grouped sections instead of separate jobsinstall-openclaw-cron --replace-existing --apply, which lists jobs with openclaw cron list --json and removes matching generated names by id before creating the replacementdeliver as the default recurring delivery path for English or near-source deterministic outputlanguage is zh-CN or bilingual and first-party sources are enabled, prefer prepare-digest so first-party summaries are localized instead of staying in raw Englishlanguage=zh-CN and prepare-digest is used, localize first-party item titles and summary paragraphs into Chinese instead of only translating section labelsprepare-digest only when you explicitly need prompt-controlled LLM remixing and have confirmed the platform path does not re-parse or rewrite the resultprepare-digest is used, keep one numbered entry per selected item and never fold trailing items into catch-all text such as 更多动态install-openclaw-cron --apply instead of asking the user to copy a cron command manuallypreview --json / deliver --json and quote raw fields instead of adding your own AI相关-style annotations/follow-scoutx Setup FlowWhen the user enters /follow-scoutx or asks to enable the Follow ScoutX skill, use this flow:
configureconfigure-serviceinstall-openclaw-cron first and inspect delivery_diagnosticsinstall-openclaw-cron --applyinstall-openclaw-cron --main-session-system-event --applyinstall-openclaw-cron --replace-existing --apply, or manually use openclaw cron list --json to find the matching job id and openclaw cron rm before adding the replacementRecommended setup questions:
Do not ask the user for:
If preview or delivery cannot proceed because the packaged service endpoint is still placeholder-only, tell the user the installation is not fully configured by the operator yet. Do not ask the user to supply that address manually.
If the user asks to change tone or style in a durable way:
length or tone~/.follow_scoutx/prompts/show my settings, read show-profile and summarize it naturally.make it shorter, update --length short.只看一手信息源, update --source-mode first_party.只看 X 平台, update --source-types x.切回 ScoutX 优质媒体源, update --source-mode scoutx.一手信息源最多 N 条, update --max-first-party-items N.ScoutX 优质自媒体最多 N 条, update --max-scoutx-items N.focus more on builders shipping products, add that preference to the local prompt file instead of inventing backend settings.共 1 个版本