Communitygithub.com

Neckkup/portfolio-kup

从 Claude Code 的使用记录(本机及通过 SSH 的远程机器)生成单页个人档案,展示用户技能、性格、成长历程及职业方向,并包含测试与面试环节。

portfolio-kup 是什么?

这是一个专为 Claude Code 设计的 AI 助手技能,能从用户在实际开发环境中的行为数据(包括本机及通过 SSH 连接的远程机器上的 Claude Code 使用记录)提取洞察,自动生成个性化的单页个人档案(支持泰文/英文双语)。该技能首先收集和分析用户的历史交互数据(如 prompt 频率、行为模式、工作时间分布),进行定性和定量评估,然后根据评估结果发起情境化测试和模拟面试,最后结合网络搜索的薪资行情,给出职业方向建议和 3 阶段发展计划。整个流程严格遵循用户反馈优化的设计规则,确保档案内容客观、隐私保护、视觉清晰。支持多种触发方式,例如“查看我的职业和水平”、“生成我的档案/个人简介”、“我该拿多少薪资”、“我该往哪个方向发展”或直接输入 /portfolio-kup。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Neckkup/portfolio-kup/tree/HEAD

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

portfolio-kup 是做什么的?

从实际证据创建用户个人档案,并生成双语(泰文/英文)单页网站。 对用户用泰文回复,技术术语保留英文。

步骤

按顺序执行 · 所有需要用户决策的问题使用 AskUserQuestion · 信息量大的内容先在聊天中总结,再放入页面。

1. 收集数据

  1. 询问是否有其他使用 Claude Code 的机器(ssh user@host) · 如果用户在请求中已提供,则无需询问。
  2. 在每台机器上运行脚本(仅输出数字,无提示信息、无密钥):
    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
    
  3. 自行阅读 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. 制作网页

  1. 将 templates/onepage.html 复制到 scratchpad,然后修改仅 <script id="profile"> 中的 JSON · 所有文本为 {"th":…,"en":…}。
  2. Artifact → quickstart(intent other)首次创建,然后发布 · icon profile。
  3. 根据反馈通过 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[].pcthoursPctFrom6am(24 个值,从 06:00 开始)
weekday_pctweekdayPct
late_night_pcthoursNote,例如 "近三分之一的工作发生在晚上 9 点后"
monthly[*] 且 enough_datastages[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)。

相关技能