social-sbti
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSocial-SBTI(向导剧本)
Social-SBTI(Wizard Script)
这份 SKILL.md 是对话剧本。每个阶段都给你明确的台词、输入解析、要跑的命令和 失败分支。严格按阶段顺序执行,不要跳步。
This SKILL.md is a dialogue script. Each stage provides you with clear lines, input parsing, commands to run, and failure branches. Strictly follow the stage order, do not skip steps.
阶段 0 · 定位 skill 根目录(第一件事)
Phase 0 · Locate Skill Root Directory (First Thing)
被触发时你必须先定位自己,跑这段:
bash
SBTI_HOME="$(
for d in "$HOME/.claude/skills/social-sbti" \
"$(pwd)/.claude/skills/social-sbti" \
"$(pwd)/skills/social-sbti" \
"$HOME/.claude/plugins/social-sbti/social-sbti"; do
[ -f "$d/SKILL.md" ] && echo "$d" && break
done
)"
export SBTI_HOME
echo "SBTI_HOME=$SBTI_HOME"如果输出为空,告诉用户 skill 安装位置非标准,让他们给你路径,然后手工 。
export SBTI_HOME=<路径>之后所有命令都通过 ,不要用相对路径。
"$SBTI_HOME/bin/sbti" <subcmd>When triggered, you must first locate yourself by running this:
bash
SBTI_HOME="$(
for d in "$HOME/.claude/skills/social-sbti" \
"$(pwd)/.claude/skills/social-sbti" \
"$(pwd)/skills/social-sbti" \
"$HOME/.claude/plugins/social-sbti/social-sbti"; do
[ -f "$d/SKILL.md" ] && echo "$d" && break
done
)"
export SBTI_HOME
echo "SBTI_HOME=$SBTI_HOME"If the output is empty, tell the user that the skill is installed in a non-standard location, ask them to provide the path, then manually run .
export SBTI_HOME=<path>All subsequent commands must use , do not use relative paths.
"$SBTI_HOME/bin/sbti" <subcmd>阶段 1 · 欢迎 + 选平台
Phase 1 · Welcome + Platform Selection
台词(原样输出,合规提示必须保留):
🎭 Social-SBTI 人格画像(仅供娱乐 · 只分析本人或公开公众人物)
请选择要分析的平台:
1. 即刻
2. X (Twitter)等用户输入: / / / /
12即刻XTwitter解析:
- /
1/即刻→jikePLATFORM=jike - /
2/x/X→twitterPLATFORM=x
如果用户输入的是对象名而不是平台选择: 你可以从对象里推测平台(例如 像是 X, 像是即刻),然后确认一次:"我理解你要分析 X 上的 @sama,对吗?"
@samaAI产品黄叔下一步: 阶段 2
Lines (output as-is, compliance notice must be retained):
🎭 Social-SBTI Personality Profile (For entertainment only · Only analyze yourself or fully public figures)
Please select the platform to analyze:
1. Jike
2. X (Twitter)Wait for user input: / / / /
12JikeXTwitterParsing:
- /
1/Jike→jikePLATFORM=jike - /
2/x/X→twitterPLATFORM=x
If user inputs a target name instead of platform selection: You can infer the platform from the target (e.g., looks like X, looks like Jike), then confirm once: "I understand you want to analyze @sama on X, is that correct?"
@samaAI产品黄叔Next step: Phase 2
阶段 2 · 要对象
Phase 2 · Request Target
台词(即刻):
好的,分析即刻用户。请贴一下对方的即刻主页 URL 或 username。
示例:
https://web.okjike.com/u/E272054E-D904-4F13-A7EC-9ABD2CBF209E
或直接 username台词(X):
好的,分析 X 用户。请贴一下对方的 X handle / 主页 URL / user id。
示例:
@sama
https://x.com/elonmusk
44196397 (user id,最稳,不怕改名)等用户输入: 任意字符串
保存:
TARGET=<用户输入>合规确认(重要): 拿到对象后,问一句:
确认一下,这是你自己的账号,或者是完全公开的公众人物吗? 本工具不分析前任、同事、面试官、投资人、相亲对象。
如果用户明确是前任/同事/私人对象 → 立即拒绝,停在此处,引导他们换对象或放弃。
下一步: 阶段 3
Lines (Jike):
Got it, analyzing Jike user. Please paste the user's Jike homepage URL or username.
Examples:
https://web.okjike.com/u/E272054E-D904-4F13-A7EC-9ABD2CBF209E
Or directly usernameLines (X):
Got it, analyzing X user. Please paste the user's X handle / homepage URL / user id.
Examples:
@sama
https://x.com/elonmusk
44196397 (user id, most stable, not affected by name changes)Wait for user input: Any string
Save:
TARGET=<user input>Compliance confirmation (important): After getting the target, ask:
Confirm, is this your own account, or a fully public figure? This tool does not analyze ex-partners, colleagues, interviewers, investors, or blind date partners.
If user clearly indicates it's an ex-partner/colleague/private target → Reject immediately and stop here, guide them to change the target or give up.
Next step: Phase 3
阶段 3 · 体检 + 自动修复
Phase 3 · Health Check + Auto Fix
跑体检:
bash
"$SBTI_HOME/bin/sbti" doctor --fix --platform "$PLATFORM"解析 doctor 输出:
- 全绿(退出码 0): 跳阶段 5(抓取)
- 缺依赖: 会自动 pip install,装完再跑一次 doctor 确认
--fix - 缺凭证: 跳阶段 4
- Python 版本过低 / 其它硬错: 告诉用户具体原因,停
不要骗自己:体检没过就不要进抓取,不然就是浪费时间。
Run health check:
bash
"$SBTI_HOME/bin/sbti" doctor --fix --platform "$PLATFORM"Parse doctor output:
- All green (exit code 0): Skip to Phase 5 (Scraping)
- Missing dependencies: will automatically run pip install, run doctor again after installation to confirm
--fix - Missing credentials: Skip to Phase 4
- Python version too low / other hard errors: Tell the user the specific reason and stop
Do not deceive yourself: Do not proceed to scraping if health check fails, otherwise it's a waste of time.
阶段 4 · 首次配置凭证(只执行一次)
Phase 4 · Initial Credential Configuration (Execute only once)
4A · 即刻分支(全程在对话里完成,不要让用户离开)
4A · Jike Branch (Complete entirely in the conversation, do not let the user leave)
jike-auth台词 1(短,给 QR 让位置):
首次扫码拿 token,马上显示二维码。执行步骤(严格按序):
① 在后台启动 jike-auth,stdout 重定向到 inbox(tokens),stderr 去后台任务
output 文件(QR + 进度):
bash
mkdir -p ~/.config/sbti && rm -f ~/.config/sbti/jike-tokens.json && \
"$SBTI_HOME/bin/sbti" jike-auth > ~/.config/sbti/jike-tokens.json⚠️ 一定要用 而不是裸的 。后者在 macOS Homebrew
Python 下通常不在 PATH 里 —— 会把二进制扔到
,而这个目录默认没被 shell 拾到。
会自己定位到正确的二进制再 execv 过去,不依赖 PATH。
sbti jike-authjike-authpip install --user~/Library/Python/3.x/binsbti jike-auth调用 Bash 工具时务必传 ,记下返回的 task id 和
output 文件路径。
run_in_background: true② 等 2-3 秒让 jike-auth 把 QR 打出来,然后用 工具读 output 文件。
你会看到类似:
Read[+] Session: 642d995d-31a6-...
▄▄▄▄▄▄▄ ▄▄▄▄ ▄▄▄▄ ▄▄ ▄ ▄▄ ▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄▄▄
█ ▄▄▄ █ █ ██▀ ▀█▄▄█▀▀▀▀▄█ █▄███ ▄▄█▀▄█▀▄▀█ █ ▄▄▄ █
...约 25 行 QR...
▄█▀█▀▄▄ ▄▄ █▄█ ▀▀▄▄▀▀▄█ ▀ ▀▀▄▄▀▀▀▀██▀█▄▀▀▀▀█ █▄▀
[*] Waiting for scan...如果还没看到 ,再等 1 秒重读。
Waiting for scan...③ 把整段 QR 原样贴到对话里(从 那行开始到 之前的
所有块字符行)。用代码块包起来,前后加空行:
[+] Session:Waiting for scan<原样粘贴 stderr 内容>然后紧跟一句:
👆 请用即刻 App 扫上面这个二维码。扫完我这里会自动继续,不用切回来告诉我。
④ 等后台任务结束。两种方式:
- 调 工具
TaskOutput(给用户 2 分钟扫码)block: true, timeout: 120000 - 或者每 3 秒 一次
Read,文件一旦存在且非空 就说明扫完了~/.config/sbti/jike-tokens.json
⑤ 确认 tokens 到位:
bash
"$SBTI_HOME/bin/sbti" config jike --from-inbox这会把 jike-tokens.json 吸入 config.json 并删掉原文件。输出应该是
。
✓ 即刻 tokens 已从 inbox 导入⑥ 回阶段 3 重跑一次 doctor 确认凭证已 ✓,进阶段 5。
失败分支:
| 症状 | 处理 |
|---|---|
| 等了 2 分钟没扫 → 任务退出 1 | 告诉用户"扫码超时了,要不要再试一次?",确认后回步骤 ① |
jike-tokens.json 存在但 | jike-auth 中途挂了, |
| 后台任务 output 文件迟迟没有 QR 块字符 | jike-auth 可能卡在网络, |
⚠️ 不要退化成"请用户开另一个终端跑 jike-auth"。这个 skill 承诺全流程在
对话里完成,后台 + QR 回显是标准路径。
jike-authLine 1 (short, make space for QR):
First scan to get token, QR code will be displayed shortly.Execution steps (strictly in order):
① Start jike-auth in the background, redirect stdout to inbox (tokens), stderr to background task output file (QR + progress):
bash
mkdir -p ~/.config/sbti && rm -f ~/.config/sbti/jike-tokens.json && \
"$SBTI_HOME/bin/sbti" jike-auth > ~/.config/sbti/jike-tokens.json⚠️ Must use instead of bare . The latter is usually not in PATH under macOS Homebrew Python — puts binaries in , which is not picked up by the shell by default. will locate the correct binary itself and execv it, independent of PATH.
sbti jike-authjike-authpip install --user~/Library/Python/3.x/binsbti jike-authWhen calling Bash tools, Be sure to pass , note down the returned task id and output file path.
run_in_background: true② Wait 2-3 seconds for jike-auth to output the QR code, then use the tool to read the output file. You will see something like:
Read[+] Session: 642d995d-31a6-...
▄▄▄▄▄▄▄ ▄▄▄▄ ▄▄▄▄ ▄▄ ▄ ▄▄ ▄▄▄ ▄▄▄▄▄ ▄▄▄▄▄▄▄
█ ▄▄▄ █ █ ██▀ ▀█▄▄█▀▀▀▀▄█ █▄███ ▄▄█▀▄█▀▄▀█ █ ▄▄▄ █
...about 25 lines of QR...
▄█▀█▀▄▄ ▄▄ █▄█ ▀▀▄▄▀▀▄█ ▀ ▀▀▄▄▀▀▀▀██▀█▄▀▀▀▀█ █▄▀
[*] Waiting for scan...If you haven't seen yet, wait 1 more second and read again.
Waiting for scan...③ Paste the entire QR code as-is into the conversation (from the line to all block character lines before ). Wrap it in a code block, add blank lines before and after:
[+] Session:Waiting for scan<Paste original stderr content here>Then follow with:
👆 Please scan the above QR code with the Jike App. I will automatically continue after scanning, no need to switch back to tell me.
④ Wait for background task to end. Two ways:
- Call tool with
TaskOutput(give user 2 minutes to scan)block: true, timeout: 120000 - Or
Readevery 3 seconds, once the file exists and is not empty, it means scanning is complete~/.config/sbti/jike-tokens.json
⑤ Confirm tokens are in place:
bash
"$SBTI_HOME/bin/sbti" config jike --from-inboxThis will import jike-tokens.json into config.json and delete the original file. The output should be .
✓ Jike tokens imported from inbox⑥ Return to Phase 3 and run doctor again to confirm credentials are ✓, then proceed to Phase 5.
Failure branches:
| Symptom | Handling |
|---|---|
| No scan after 2 minutes → task exits with code 1 | Tell the user "Scan timed out, would you like to try again?", return to step ① after confirmation |
jike-tokens.json exists but | jike-auth crashed midway, |
| Background task output file has no QR block characters for a long time | jike-auth may be stuck on network, |
⚠️ Do not degrade to "ask user to run jike-auth in another terminal". This skill promises to complete the entire process in the conversation, background + QR echo is the standard path.
4B · X 分支
4B · X Branch
台词:
首次使用 X,需要从浏览器 cookies 拿两个字段:
1. 在浏览器登录 https://x.com
2. F12 打开 DevTools → Application → Cookies → https://x.com
3. 找这两个 cookie,复制它们的 Value:
- auth_token (长字符串)
- ct0 (长字符串,CSRF token)
直接贴给我,格式随意,比如:
auth_token = xxxxxx
ct0 = yyyyyy等用户回: 两个字符串
解析: 从用户消息里提取 和 的值
auth_tokenct0执行:
bash
"$SBTI_HOME/bin/sbti" config x \
--auth-token "<auth_token 值>" \
--ct0 "<ct0 值>"成功: cookies 已落到 。回阶段 3 重跑 doctor。
~/.config/sbti/x_cookies.json⚠️ 重要提示(配完后提醒用户):
X 风控很严。脚本已经内置了自限速,但建议:单次 ≤ 500 条,一天别跑超过 10 个不同用户,cookies 别 commit 进 git。如果被限流了停一天再试。
Lines:
First time using X, need to get two fields from browser cookies:
1. Log in to https://x.com in your browser
2. Press F12 to open DevTools → Application → Cookies → https://x.com
3. Find these two cookies and copy their Values:
- auth_token (long string)
- ct0 (long string, CSRF token)
Paste them directly, format doesn't matter, e.g.:
auth_token = xxxxxx
ct0 = yyyyyyWait for user reply: Two strings
Parsing: Extract the values of and from the user's message
auth_tokenct0Execution:
bash
"$SBTI_HOME/bin/sbti" config x \
--auth-token "<auth_token value>" \
--ct0 "<ct0 value>"Success: Cookies are saved to . Return to Phase 3 and run doctor again.
~/.config/sbti/x_cookies.json⚠️ Important reminder (after configuration):
X has strict risk control. The script has built-in self-rate-limiting, but it is recommended: ≤ 500 posts per run, no more than 10 different users per day, do not commit cookies to git. If rate-limited, stop and try again the next day.
阶段 5 · 抓取动态
Phase 5 · Scrape Posts
执行:
bash
"$SBTI_HOME/bin/sbti" fetch "$PLATFORM" "$TARGET" --limit 200这会把数据写到 (用户项目根下)。
./sbti-output/<name>_raw.json解析返回: fetcher 会打印最终路径,记下来叫 。
RAW_FILE如果失败:
| 错误 | 处理 |
|---|---|
| 401 / token expired | 让用户重跑 jike-auth(即刻)或重新导 cookies(X),回阶段 4 |
| 404 user not found | 让用户确认 URL / username 是否对 |
| 429 / rate limited | 停,让用户等 30 分钟再来 |
| 网络错误 | 让用户检查网络,重试 |
不要退而求其次让用户手工粘贴动态。抓取就是这个 skill 的基石。
Execution:
bash
"$SBTI_HOME/bin/sbti" fetch "$PLATFORM" "$TARGET" --limit 200This will write data to (under the user's project root).
./sbti-output/<name>_raw.jsonParse return: The fetcher will print the final path, note it as .
RAW_FILEIf failed:
| Error | Handling |
|---|---|
| 401 / token expired | Ask user to re-run jike-auth (Jike) or re-import cookies (X), return to Phase 4 |
| 404 user not found | Ask user to confirm if the URL / username is correct |
| 429 / rate limited | Stop, ask user to come back after 30 minutes |
| Network error | Ask user to check network and retry |
Do not fallback to asking user to manually paste posts. Scraping is the foundation of this skill.
阶段 6 · Claude 本人打分(这是你的核心工作)
Phase 6 · Claude's Own Scoring (This is your core work)
这一步没有命令可以调,你就是那个打分 LLM。
There are no commands to call here, you are the scoring LLM.
步骤
Steps
-
读 raw.json:工具读
Read,进入$RAW_FILE数组。posts[] -
采样 150 条:
- 总数 ≤ 150: 全读
- 总数 > 150: 近期 60%(前 90 条) + 较早 40%(后 60 条)
-
读 rubric:工具读
Read。对照每个维度的 L/M/H 锚点打分。$SBTI_HOME/docs/SCORING_RUBRIC.md -
逐条评分 15 维 (顺序固定):
S1 S2 S3 E1 E2 E3 A1 A2 A3 Ac1 Ac2 Ac3 So1 So2 So3 -
严守硬约束(摘自 rubric):
- 每维至少引 1 条真实 (必须来自 raw.json,不要编)
post_id - 有反向证据 → 降一档
- 置信度 < 0.4 或无证据 → 强制回退 M
- 每维至少引 1 条真实
-
额外产出:
- : 100-200 字整体印象
overall_impression - : 200-300 字"本人定制版"描述 —— 必须包含对象的 具体事实(职业、项目、口头禅、代表观点),不要套通用文案
personality_description - : 4-6 条真实原文引用(从 raw.json 的
quotes里抄)content
-
写 scores.json:json
{ "profile": { "screen_name": "...", "platform": "jike|x", "bio": "...", "post_count": 200 }, "personality_description": "...", "overall_impression": "...", "quotes": ["...", "...", "...", "..."], "scores": [ { "dimension": "S1", "level": "H", "confidence": 0.9, "evidence": ["<真实 post_id>", "<真实 post_id>"], "reasoning": "不超过 40 字" } // ... 共 15 条 ] }路径:(和 raw.json 同目录,同一个./sbti-output/<name>_scores.json)。<name> -
可选字段: 如果动态里非常明显地大量提"喝酒/白酒/灌杯",加, 会触发 DRUNK 彩蛋。
"drunk": true
-
Read raw.json: Usetool to read
Read, access the$RAW_FILEarray.posts[] -
Sample 150 posts:
- Total ≤ 150: Read all
- Total > 150: 60% recent (first 90 posts) + 40% older (last 60 posts)
-
Read rubric: Usetool to read
Read. Score against the L/M/H anchors for each dimension.$SBTI_HOME/docs/SCORING_RUBRIC.md -
Score 15 dimensions one by one (fixed order):
S1 S2 S3 E1 E2 E3 A1 A2 A3 Ac1 Ac2 Ac3 So1 So2 So3 -
Strictly adhere to hard constraints (from rubric):
- At least 1 real must be cited for each dimension (must come from raw.json, do not make up)
post_id - If there is contradictory evidence → lower one level
- Confidence < 0.4 or no evidence → force fallback to M
- At least 1 real
-
Additional outputs:
- : 100-200 word overall impression
overall_impression - : 200-300 word "customized" description — must include specific facts about the target (occupation, projects, catchphrases, representative views), do not use generic copy
personality_description - : 4-6 real original quotes (copied from
quotesin raw.json)content
-
Write scores.json:json
{ "profile": { "screen_name": "...", "platform": "jike|x", "bio": "...", "post_count": 200 }, "personality_description": "...", "overall_impression": "...", "quotes": ["...", "...", "...", "..."], "scores": [ { "dimension": "S1", "level": "H", "confidence": 0.9, "evidence": ["<real post_id>", "<real post_id>"], "reasoning": "No more than 40 words" } // ... total 15 entries ] }Path:(same directory as raw.json, same./sbti-output/<name>_scores.json).<name> -
Optional field: If posts clearly mention "drinking/white liquor/toasting" frequently, add, which will trigger the DRUNK easter egg.
"drunk": true
写入前自检清单
Pre-writing Self-check List
- 15 条 scores 全在,顺序正确
- 每条都有 ≥ 1 个 evidence post_id,都是 raw.json 里真实存在的
- confidence < 0.4 的已经回退到 M
- quotes 是真实原文,没编
- personality_description 带了具体事实
记下 scores.json 路径:
SCORES_FILE=./sbti-output/<name>_scores.json- All 15 scores are present and in correct order
- Each entry has ≥ 1 evidence post_id that actually exists in raw.json
- Entries with confidence < 0.4 have fallen back to M
- Quotes are real original text, not made up
- personality_description includes specific facts
Note down the scores.json path:
SCORES_FILE=./sbti-output/<name>_scores.json阶段 7 · 匹配 + 渲染
Phase 7 · Matching + Rendering
执行:
bash
"$SBTI_HOME/bin/sbti" finalize "$SCORES_FILE"这会一条龙跑完:
- → 匹配 27 人格模板,写回 scores.json 补上
match.py+patternpersonality - → 生成 HTML 卡片
make_card.py - → 用 playwright 截成 PNG(没装就跳过,会给提示)
render_png.py
如果 PNG 失败: 继续,HTML 自己就能看,也带了"📸 保存为图片"按钮。
Execution:
bash
"$SBTI_HOME/bin/sbti" finalize "$SCORES_FILE"This will complete the following in one go:
- → Match 27 personality templates, write back to scores.json with
match.py+patternpersonality - → Generate HTML card
make_card.py - → Use playwright to capture as PNG (skip if not installed, will give prompt)
render_png.py
If PNG generation fails: Continue, HTML is viewable on its own and has a "📸 Save as image" button.
阶段 8 · 展示结果
Phase 8 · Display Results
向用户展示(按这个格式):
-
主结果(ASCII 框):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🎭 <screen_name> 【<CODE>】· <中文名> <mascot> 「<标语>」 匹配度: <XX>% 模式串: <pattern> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -
15 维画像(ASCII 表格,一行一维):
自我模型 S1 自尊自信 H — <reasoning> S2 自我清晰 H — <reasoning> S3 核心价值 H — <reasoning> 情感模型 E1 依恋安全 H — <reasoning> ... -
整体印象: 复述一整段
overall_impression -
文件路径:
📁 产物: sbti-output/<name>_scores.json (完整数据) sbti-output/<name>-sbti.html (可分享卡片) sbti-output/<name>-sbti.png (截图,如果 playwright 就绪) -
打开命令:
open sbti-output/<name>-sbti.png open sbti-output/<name>-sbti.html
Show results to user (follow this format):
-
Main result (ASCII box):
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🎭 <screen_name> 【<CODE>】· <Chinese Name> <mascot> 「<Slogan>」 Matching degree: <XX>% Pattern string: <pattern> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -
15-dimensional profile (ASCII table, one dimension per line):
Self Model S1 Self-esteem & Confidence H — <reasoning> S2 Self-clarity H — <reasoning> S3 Core Values H — <reasoning> Emotional Model E1 Attachment Security H — <reasoning> ... -
Overall impression: Repeat the entireparagraph
overall_impression -
File paths:
📁 Outputs: sbti-output/<name>_scores.json (Complete data) sbti-output/<name>-sbti.html (Shareable card) sbti-output/<name>-sbti.png (Screenshot, if playwright is ready) -
Open commands:
open sbti-output/<name>-sbti.png open sbti-output/<name>-sbti.html
常见陷阱(从实战里学到的)
Common Pitfalls (Learned from Practice)
- "高执行力 ≠ 自信": Ac3 高不代表 S1 高,有些人是被死线推着走的
- "毒舌 ≠ 愤世": 中文阴阳表达,别把玩梗当 SHIT
- "社群活跃 ≠ So1 高": 要看是 ta 主动发起还是被动响应
- "转发多 ≠ 情感投入": 转发可能是信息流水
- "自嘲 ≠ 低 S1": "我真的牛 + 自嘲" 反而是 H
- M 是安全区: 不确定就打 M,别硬凑
- 证据必须是真 post_id: raw.json 里不存在的 id 不要写
- "High execution ≠ confidence": High Ac3 does not mean high S1, some people are pushed by deadlines
- "Sharp tongue ≠ cynicism": Chinese sarcastic expressions, do not take jokes as negative sentiment
- "Active in communities ≠ high So1": Need to see if they initiate actively or respond passively
- "Many reposts ≠ emotional investment": Reposts may just be information flow
- "Self-deprecation ≠ low S1": "I'm really good + self-deprecation" is actually H
- M is the safe zone: If unsure, score M, do not force it
- Evidence must be real post_id: Do not write ids that do not exist in raw.json
失败时的降级优先级
Degradation Priority When Failing
当任何一步失败,按以下优先级处理:
- 重试 — 如果是临时错误(网络、rate limit 短时)
- 修复根因 — 凭证过期、URL 错、依赖缺
- 告诉用户具体原因并停住 — 不要回退到"那我就用你粘贴的文字吧"之类
When any step fails, handle in the following priority:
- Retry — If it's a temporary error (network, short-term rate limit)
- Fix root cause — Expired credentials, wrong URL, missing dependencies
- Tell user the specific reason and stop — Do not fallback to "then I'll use the text you pasted" etc.
参考
References
- — 15 维度 L/M/H 行为锚点(打分时必读)
docs/SCORING_RUBRIC.md - — 合规/拒绝话术
docs/DISCLAIMER.md - — 唯一命令入口,子命令见
bin/sbtisbti --help - — 完整的 scores.json 格式参考
examples/huangshu_scores.json
- — 15-dimensional L/M/H behavior anchors (must read when scoring)
docs/SCORING_RUBRIC.md - — Compliance/rejection scripts
docs/DISCLAIMER.md - — Only command entry, see
bin/sbtifor subcommandssbti --help - — Complete scores.json format reference
examples/huangshu_scores.json