portfolio-kup 是做什么的?
从实际证据创建用户个人档案,并生成双语(泰文/英文)单页网站。 对用户用泰文回复,技术术语保留英文。
步骤
按顺序执行 · 所有需要用户决策的问题使用 AskUserQuestion · 信息量大的内容先在聊天中总结,再放入页面。
1. 收集数据
- 询问是否有其他使用 Claude Code 的机器(ssh
user@host) · 如果用户在请求中已提供,则无需询问。 - 在每台机器上运行脚本(仅输出数字,无提示信息、无密钥):
S=~/.claude/skills/portfolio-kup/scripts; D=<scratchpad>/pk; mkdir -p $D python3 $S/collect.py > $D/local.json ssh -o BatchMode=yes user@host python3 - < $S/collect.py > $D/host1.json python3 $S/merge.py $D/*.json > $D/metrics.json # 汇总表输出至 stderr - 自行阅读 prompt 内容以进行定性评估(
~/.claude/history.jsonl的display、project字段) · 随机抽样,覆盖所有项目/月份 · 不要将发现的任何 key/token/密码复制到回复或网页中,仅统计数量。
必须告知用户的限制:
history.jsonl仅统计用户输入时的数据 · 长时间让 agent 自动运行的时段不会被统计。- transcript(
~/.claude/projects/**/*.jsonl)在超过cleanupPeriodDays(默认 30 天)后被删除 · 因此 token 和 AI 工作时间仅覆盖近期。 - 对于 prompt 数量 < 100(
enough_data: false)的月份,数据波动大,禁止用于比较。 - 行为统计基于关键词匹配,用于指示趋势,并非精确测量。
2. 评估(在聊天中回复)
- 可能的职业 · 级别(Junior / Mid / Senior) · 优势、劣势,附证据。
- 直截了当,不夸大 · 区分“因为擅长控制 AI 而能交付”与“本身理解基础”。
- 如果历史记录中发现 key/secret → 立即提醒轮换(说明类型,不显示值)。
3. 测试(如果用户想知道自己是否真的薄弱)
- 2 轮,每轮 4 题,通过
AskUserQuestion进行 · 题目基于用户实际工作中的场景(使用其技术栈)。 - 混合两种题型:看到症状 → 说明原因 与 解释底层机制 · 选项长度相近,不暗示答案。
- 说明规则:禁止询问 AI · 不知道则回答“不知道”。
- 每题给出简短解释和答案,然后总结模式(例如,症状 4/4,机制 0/4)。
4. 薪资与职业方向
- 使用
WebSearch的extended模式,同时进行多个搜索词(泰文 + 英文,当前年份) · 每次都要注明来源。 - 区分 AI/ML 工程师(做模型)与 AI 应用工程师(将 AI 用于应用中) · 两者薪资差异巨大。
- 先广泛考虑:列出 8-10 个符合技能 + 性格 + 成长的职业(不只技术方向,如顾问、售前、教育者、EdTech 产品、自由职业) · 然后筛选出最合适的 3 个方向 + 最多 5 个副职业标签 · 可以在聊天中提及“还不适合”的职业,但不要放入页面。
- 必须有一个明确的推荐,指出应该走哪条路(基于面试中确定的目标),并附上 3 阶段计划。
- 在网页中,薪资默认显示为
*,仅当用户请求时才显示具体数字。
5. 面试
调用 grilling 技能(或 grill-me),通过 AskUserQuestion 分轮提问:
选择该方向的原因 · 在聊天之外的与人/客户打交道的经验 · 时间框架 · 拥有的项目(个人或公司) ·
每周空闲时间 · 成功的定义 · 继续/停止的标准
- 如果答案矛盾或答非所问 → 重复提问。
- 直接指出观察到的模式(例如,不强迫选择时会回答“都可以”) · 不同意的地方要说明,但最终由用户决定。
- 以总结共识结束,然后等待用户确认后再放入页面。
6. 制作网页
- 将
templates/onepage.html复制到 scratchpad,然后修改仅<script id="profile">中的 JSON · 所有文本为{"th":…,"en":…}。 Artifact→quickstart(intentother)首次创建,然后发布 · iconprofile。- 根据反馈通过 Edit + 发布同一文件(同一 URL)进行修改。
设计规则(来自用户实际反馈 · 禁止违反)
| 主题 | 做 | 不做 |
|---|---|---|
| 页面布局 | 单列自上而下阅读 · 自我 → 01 技能 → 02 工作方式 → 03 成长 → 04 前进方向 · 宽度自适应,最大 1600px | 侧栏 · 与其他板块颜色差异大的深色面板 · 固定窄宽度 |
| 前进方向 (04) | "推荐" 框:1 条建议 + 1 句理由 + 3 阶段计划 · 3 个方向的卡片,仅包含 准备程度 / 适合原因 / 需补充 · 选中卡片右上角 ★ 推荐标签 · "也能做" 为单行标签 · "先做什么" 不超过 4 项 | 长职业表格 · 卡片中的步骤/第一步/薪资标签 · 与 3 阶段计划重复的信息(用户说“杂乱”) |
| 颜色 | 所有面板使用同一色系(白底、细边框) · 蓝色 = 温和/改善 · 金色 = 困难/目标 · 红色 = 需警惕/当前 | 多种色调混合 |
| 数据来源警告 | 顶部框,说明所有数据来源 + 未统计的内容 + "AI 评估,非专业认证" | 将来源隐藏在页面末尾 |
| 语言 | 默认泰文 + 泰文/英文切换按钮 · 英文中使用 they/them 或避免代词 | 根据名字猜测性别 |
| 外人需能理解 | 通俗语言 · 使用 "一半" "一倍" "三分之一" 等类比 | 内部项目名 · 面试题号(Q20) · 无单位的原始数字("43 次", prompt 数量) · 纯术语如 "502 Traefik" |
| 技能 | radar 图 + 3 级标签(突出/一般/需补充)放在技能部分 · 软技能与硬技能并列,列表带 01- 编号和证据标签 · 硬技能包含工具名称 | 性格旁的进度条/等级条(用户看不懂满格代表什么) · 卡片高度不一 |
| 性格 | 以 HR 使用的软技能命名 · 一个 persona 名称 + 一句话描述 · 风格为两极条 · "需注意的性格" 单独框 | 将测试结果作为板块放入页面(用户要求移除) |
| 工作时间 | 小时图 从 06:00 开始 · 工作日显示为占总工作量的百分比,并附解释行说明 % 的含义 | 次数坐标轴 |
| 成长 | 可逐级点击的阶梯 · 高度 = 能力级别(柱子上有级别名称) · 标签 "▼ 当前在此级别" · 每级:能做到 / 仍会出错 / 转折点 · "与前一级比较" 仅限数据充足的月份 · token 仅限有 transcript 的级别 · 最后一级为目标(金色虚线) | 每月 prompt 数量的图表(用户看不懂) · 所有级别的细节同时展示 |
| 薪资 | * + 警告框和页面底部的说明 | 未经请求显示具体数字 |
| 隐私 | 无 key、IP、主机名、电子邮件 · 负面数字以不点名方式描述("曾将 key 放在不该放的地方") | 未经询问将真实个人档案页面 publish/push 到公共环境 |
技能中的文件
scripts/collect.py· 收集单台机器的数据(每月 prompt、行为、小时/天、token、时间戳) · 不输出文本。scripts/merge.py· 合并多台机器 →metrics.json(每月数据、enough_data、%小时从 06:00 开始、%工作日、自主操作小时 vs AI 工作小时、token)。templates/onepage.html· 从单个 JSON 渲染的网页 · 文件中的数据为虚构示例。
metrics 到页面内容的映射
| metrics.json | 使用位置 |
|---|---|
hours_pct_from_6am[].pct | hoursPctFrom6am(24 个值,从 06:00 开始) |
weekday_pct | weekdayPct |
late_night_pct | hoursNote,例如 "近三分之一的工作发生在晚上 9 点后" |
monthly[*] 且 enough_data | stages[i].compare.items(与前一阶段比较) · stages[i].peak/hot 最忙碌的月份 |
tokens[*] | stages[i].tokens(仅限有数据的月份) · 说明 cache read 比例 |
hands_on_hours / ai_working_hours | 在聊天中总结 "自主操作 ~X 小时/周 · AI 辅助 ~Y 小时/周" |
secrets_pasted > 0 | 在聊天中提醒 + "需注意的性格" + acts 的第一项 |
模板中 04 部分的 JSON
rec·title、reason、phases[](when、t、d)推荐 3 阶段。paths[]· 3 个方向:tag、title、ready(0–100)、fits、gap、pick: true推荐方向、gold: true创业/创始人方向。also[]· 副职业名称,≤5 个(纯文本)。acts[]· ≤4 项(t、d)。