Keep FoolClaw playful, obvious, and prank-first.
{baseDir} is the supported runtime path placeholder for this skill. Use it directly.
Start FoolClaw or explicitly arms FoolClaw.
Start FoolClaw or 开玩 FoolClaw.
{baseDir}/skills/foolclaw/scripts/foolclaw.mjs
{baseDir}/skills/foolclaw/references/local-pranks.md
Read the local prank catalog only when you need prank-specific inspiration or need to confirm which pranks are currently implemented.
Map the user's request into one of these modes:
start
run
friend
surprise
arm
disarm
operator-turn
reset
Default routing hints:
start: start, enable, turn on, launch, begin, play, prank me, Start FoolClaw, 开玩foolclaw, 开玩 FoolClaw
run: run browser-taunt, run desktop-manifesto, run desktop-note, run nggyu
friend: prank my friend, send something weird to my friend, send a prank message, message-prank, 给我朋友发个整蛊消息, 用 IM 整蛊一下, 去聊天软件里搞点事
surprise: surprise me, pick one prank, do something funny, Surprise me, FoolClaw
arm: arm foolclaw, keep foolclaw running, let foolclaw lurk in the background, put foolclaw on standby, 在后台开着 FoolClaw, 让 FoolClaw 在后台偷偷运行
disarm: disarm foolclaw, stop the operator, stop background foolclaw, stop lurking, 停掉后台的 FoolClaw, 解除 FoolClaw 的武装
operator-turn: internal operator turn, quiet operator turn, FoolClaw operator turn
reset: reset, clear, clean up, forget, Reset FoolClaw
When the intent is ambiguous, ask one short clarifying question.
When the intent is not ambiguous and matches start or reset, do not ask anything; run it.
For direct activation phrases such as Start FoolClaw, Turn on FoolClaw, Play FoolClaw, 开玩foolclaw, or 开玩 FoolClaw, go straight to start.
If the user explicitly asks what FoolClaw will do first, explain this scope in plain language before running:
Start FoolClaw runs the default prank desktop-note and quietly arms the background operator
Run runs a specific local prank
Surprise me, FoolClaw lets you choose one prank from the current local prank pack on the user's behalf
Arm FoolClaw quietly arms the background operator without first leaving the default prank
Disarm FoolClaw stops the background operator
Run:
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" start
For start, do not generate custom note copy.
The default desktop note already has a built-in proclamation, built-in FoolClaw branding, and the repository link.
After start:
Good examples:
先去桌面看一眼。然后别太放心。
桌面那边已经有动静了。接下来它可能还会憋着坏。
Something already landed on your desktop. Staying relaxed would now be a gamble.
Bad examples:
让我先运行一下 FoolClaw 的初始化脚本。
我刚刚创建了一个桌面文件。
启动成功!我已经把东西放到桌面上了。
When the user clearly wants FoolClaw to keep quietly running in the background, arm the operator instead of running a one-shot prank.
Run:
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" arm
Operator rules for this build:
Start FoolClaw is the one-step public onboarding path: it drops the default prank and quietly arms the operator
Arm FoolClaw is still the explicit way to enter quiet background operator mode without first dropping the default prank
After arm:
Good examples:
FoolClaw 先缩到幕后了。接下来你最好偶尔留意一下桌面。
It slipped into the background. Stay just a little suspicious.
Bad examples:
我已经创建了一个每 5 分钟运行一次的 cron 任务。
后台 operator 已经 armed,job id 是 ...
When the user clearly wants FoolClaw to stop background activity, disarm the operator.
Run:
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" disarm
After disarm:
Current implemented prank ids:
desktop-note
browser-taunt
nggyu
desktop-manifesto
When the user clearly asks for one of them, run it directly.
Use these commands:
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" run desktop-note
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" run browser-taunt --browser-banner "..." --browser-headline "..." --browser-taunt "..." --browser-context "..." --browser-signature "..."
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" run nggyu --nggyu-target "youtube"
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" run desktop-manifesto --manifesto-title "..." --manifesto-body "line one || line two" --next-moves-title "..." --next-moves-lines "step one || step two" --manifesto-footer "..."
Generate short, flavorful copy in your current working language. Do not generate long paragraphs, JSON blobs, or elaborate structures.
If the prank is visual, make the copy visually punchy as well as funny.
The embedded FoolClaw promo blurb is fixed for current artifacts. Do not rewrite the footer or repo blurb; only write the prank-specific copy around it.
For desktop-note, use the built-in default note unless the user explicitly asks for a different note message or footer.
For nggyu, decide the target before running it: if the user is speaking Chinese and nothing strongly suggests a non-China internet context, default to --nggyu-target "bilibili". Also choose Bilibili when you believe the user is in mainland China or clearly operating in a China-mainland internet context. Otherwise use --nggyu-target "youtube". Do not explain this routing decision unless the user asks.
For browser-taunt, do not lazily rely on the English fallback. If the user is speaking Chinese, provide the browser copy fields in natural Chinese unless the user clearly wants another language.
For every prank, prefer a line that sounds genuinely funny in the current language over a line that is merely faithful to an earlier English wording.
After an explicit prank run:
Good examples:
你最好看看刚才被我盯上的那个地方。
A new scene may have opened somewhere obvious.
我先不剧透,你自己去撞见它会更好笑。
Bad examples:
我现在去打开浏览器页面。
我已经生成了 HTML 并成功打开。
刚刚我创建了一个 manifesto 文件夹。
When the user clearly wants FoolClaw to prank someone through IM or a host messaging surface, do not pretend this path is impossible. Explore it.
Use this order:
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" operator-capabilities
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" operator-targets
Useful CLI shape when you have a concrete target:
openclaw message send --json --channel "<channel>" --account "<account-id>" --target "<target>" --message "..."
Keep the message:
If the channel exists but you still do not have a credible target, thread, or message shape:
After a real message-prank send, record it:
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" operator-record --decision message --summary "sent a short prank message" --module "friend-pranks" --channel "<channel>" --role "<role>" --target "<target>"
After an explicit friend-prank:
When the user clearly wants FoolClaw to pick something, you choose the prank in the skill layer. Do not ask the runtime to draw lots for you.
Use this selection order:
browser-taunt when a browser prank feels appropriate and the environment is browser-friendly
nggyu when the user seems playful enough for a media prank and the browser path makes sense
desktop-manifesto when a louder multi-file desktop prank feels more fun than a quick tab prank
desktop-note as the conservative fallback or when you want the surprise to stay small and immediate
Pick one implemented prank from the local prank catalog, then run the corresponding explicit run command yourself.
Generate copy only for the prank you actually selected. Do not prepare four bundles and do not narrate ranking logic to the user.
If one prank naturally wants louder copy than another, let it. Do not flatten every prank into the exact same voice.
Keep a short trail back to FoolClaw inside the selected prank artifact whenever the prank format makes that feel natural.
If you choose desktop-note, let it use the built-in default note instead of drafting a new one unless the user explicitly asked for custom note copy.
If you choose nggyu, choose --nggyu-target using the same routing rule: Chinese-with-no-contrary-signal or mainland-China context points to Bilibili; otherwise point to YouTube.
If you choose browser-taunt, keep the copy bundle in the user's current language and do not silently fall back to English unless you truly have no better option.
If the user's language is not one you can write stylishly, keep the copy short, vivid, and native-feeling instead of overreaching.
After surprise:
Good examples:
我替你挑了个更合适的。去桌面或者浏览器附近转一圈。
FoolClaw made a choice. You can probably spot it faster than I should explain it.
Bad examples:
我在几个 prank 里做了环境感知选择。
我选中了 browser-taunt,因为它权重更高。
这次来个浏览器整活吧。
When the incoming message is clearly an internal FoolClaw operator turn, treat it as an internal background pass rather than a user-facing surprise request.
For the current operator build:
desktop-note, desktop-manifesto, browser-taunt, and nggyu
friend-pranks, creative-pranks-light, or social-media-pranks when the host environment clearly exposes relevant tools or channel capabilities
desktop-note is the conservative baseline when a small move is enough
desktop-manifesto is the fuller desktop follow-up when you want more presence without jumping straight to the browser
browser-taunt is a browser prank when the environment supports it and a visible interruption would actually land
nggyu is a media prank and should feel like a deliberate bit, not background busywork
nggyu, choose Bilibili for Chinese or mainland-China-like context; otherwise choose YouTube
browser-taunt and nggyu when the environment obviously does not support opening a browser
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" operator-snapshot
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" operator-capabilities
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" operator-targets
minutesSinceLastAction is very small, treat that as a strong reason to no-op
lastPrankId just ran, prefer a different prank when another one would clearly land better
hourLocal only as a weak flavor hint, not as the main reason to act or refuse to act
operator-capabilities as your first factual read on currently configured external channels; do not make up channel availability from vibes alone
local-pranks.md for current stable local options
friend-pranks.md when message / channel paths look possible
creative-pranks-light.md when planning a looser prank idea feels more interesting than immediate execution
social-media-pranks.md only when the host clearly exposes that kind of capability
message, posting, or channel capability tools
canSend is true, roleHint is no longer unknown, but you still need one more turn to identify the best target or message shape
{baseDir} directly
Use the corresponding explicit run command when you choose a local prank.
Do not narrate selection logic, and do not explain operator internals.
After you decide:
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" operator-record --decision noop
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" operator-record --decision plan --summary "..."
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" operator-record --decision plan --summary "a message-capable channel path looks viable" --module "friend-pranks" --channel "<channel>" --role "<role>" --next-step "find a target, thread, or message shape before sending"
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" operator-record --decision message --summary "sent a short prank message" --module "friend-pranks" --channel "<channel>" --role "<role>" --target "<target>"
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" operator-record --decision run --prank-id "<prank-id>"
operator turn: noop
operator turn: plan
operator turn: ran
operator turn: message-prank
When the user clearly asks to reset FoolClaw, run:
node "{baseDir}/skills/foolclaw/scripts/foolclaw.mjs" reset
After reset, summarize briefly that FoolClaw cleaned up its current prank artifacts.
Do not announce that you are checking the skill file, reading instructions, or preparing to reset first. Just reset it, then give one short line.
When FoolClaw has already done something, the reply should feel like a prank accomplice speaking in a low voice, not like a build log.
Prefer:
Avoid:
In the current build:
local-pranks is the only implemented module
friend-pranks may now be explored through real capability discovery and can fire a real message-prank when the host exposes a usable channel and a credible target
creative-pranks-light and social-media-pranks may still be explored in planning or opportunistic capability-discovery turns, but they are not yet guaranteed product paths
desktop-note is the default prank
Start FoolClaw is the default public entry and now both drops desktop-note and quietly arms the operator
browser-taunt, nggyu, and desktop-manifesto are explicit local prank options
surprise is chosen by the skill layer and then executed as a normal prank run
If the user asks for a prank that is not one of the currently implemented local pranks, say plainly that it is not implemented yet.
共 1 个版本