activity-profile-builder

当学生说"我参加过一些活动但没整理过"、"帮我把经历录进去"、"我的活动档案是空的"时使用。让学生一口气把记得的活动说出来,直接把这段话拆成结构化的长期事项(角色、组织、起止时间、做了什么、结果、级别),说不清的字段留空标"待补"而不是编,再用一张选择题卡把级别判定与是否重复这类关键项一次问完,然后提案入库。只记录学生真正说出口的内容,级别按事实判定,绝不往高了写。

SKILL.md

GitHub

活动经历建档 / Activity Profile Builder

把学生记在脑子里的活动经历,整理成结构化的长期事项并存下来。

难点不在存,在于信息是零碎的。学生说"我在机器人社待过两年", 这句话里缺角色、缺时间、缺具体做了什么、缺结果。

以前的做法是一条一条追问到齐。那样问一段经历要来回七八轮, 多数学生问到第三条就走了。现在的做法是:先把他说的一次性拆成表格, 缺的字段明写「待补」,让他对着表格补——看着空格填,比凭空回想容易得多。

拆解不等于补全。留空是这个 skill 的核心动作,不是失败。

何时使用 / When to use

  • 学生的长期事项是空的或只有零星几条
  • 学生刚结束一段经历,想趁记得清楚录下来:这段经历还没进长期事项,要存的是角色、时间、成果这些事实。 已经录过、想聊它对自己的影响,转 reflection-interviewer
  • 学生说"我好像做过挺多事但说不上来"

不适用于 / Not for:

  • 点评这些经历够不够、招生官怎么看 —— 那是 admissions-reader
  • 把活动描述压到 Common App 的字符限制内 —— 那是 activity-list-optimizer
  • 深挖某一段经历对人的影响 —— 那是 reflection-interviewer

需要的输入 / Inputs

输入 必填 说明
已有长期事项 是 先读。避免把同一段经历录两遍
学生的口述 是 全部内容都来自这里。一段话就行,不必按字段说
学生档案 否 年级用来校验时间跨度是否说得通(10 年级学生说的"三年前"要问清楚)

流程 / Process

  1. 读已有:取回现有的长期事项,避免重复录入。

  2. 让他一次说完:请他把记得的活动一口气说出来,想到什么说什么, 不用管顺序也不用管完整度。不要给他一张字段清单让他照着填——那是表格不是对话。

  3. 直接拆成表格:把他那段话拆进下面六个字段,有什么填什么,没有的写「待补」:

    • 角色:具体职位。"成员"也是有效答案,不要引导他说成"负责人"
    • 组织:哪个社团、学校、机构、公司
    • 起止时间:到月份即可;还在进行的就留空结束时间
    • 做了什么:具体动作,不是职责描述
    • 结果:拿了什么奖、做出什么东西、影响了多少人。没有就写没有
    • 级别:校级 / 地区级 / 国家级 / 国际级 —— 按下一节的规则先判一个并写出依据
  4. 一次问完关键项:调 ask_user(最多 4 问),只问会改变入库结果的:

    什么时候问 怎么问
    级别拿不准 「机器人社那个比赛是哪一级?」校内 / 市级或省级 / 全国 / 国际
    疑似与已有记录重复 「这段和你已有的『X』是同一件事吗?」是同一件 / 是两件
    时间跨度对不上年级 「说的三年前,是 8 年级那会儿吗?」给具体年份选项

    「待补」的描述与成果不用问。 那些留空入库就行,学生日后想起来再补, 或者交给 reflection-interviewer 慢慢挖。逼他现在编一个出来才是真的损失。

  5. 提案:propose_events 逐条提案为 kind: long 的长期事项。 多条一起提,不要每整理完一条就出一张卡。

输出格式 / Output

拆完直接给表格,同一轮附上问题卡:

按你说的整理成这样,空着的是我不知道的,你有空再补:

**<活动名>**
角色:<role> · 组织:<organization> · <startDate> 至 <endDate 或"至今">
做了什么:<description 或「待补」>
成果:<achievements 或「暂无」>
级别:<level>(依据:<一句话>)

级别的判定依据要写出来,学生才有机会纠正。

级别判定 / Level

这是最容易虚高的一项,按事实判定:

  • 只在本校范围内 → 校级
  • 参加了市/省/赛区层面的比赛或活动 → 地区级
  • 全国性赛事、全国性组织 → 国家级
  • 跨国赛事、国际组织 → 国际级

学生说"我们那个比赛挺大的"不构成升级依据。拿不准就按低的记,并在问题卡里问清楚。

没有这些工具时(降级) / Without these tools (degraded mode)

上面的流程按 nestudy 的工具写。在 Claude Code 或其他没有这些工具的环境里,流程、输出格式和边界都不变, 只把工具换成下表的做法,并在回复开头写明「降级:没有 nestudy 工具,整理好的档案要你自己保存」。

工具 没有时怎么做
get_events 读不到已有记录:照常拆,同一轮的问题里加一问"这些里有没有你已经录过的",卡片上注明「未核对是否与已有记录重复」
get_profile 从对话里取年级;没有就跳过时间跨度的校验,不为此追问
ask_user 在对话里直接问:同样最多 4 问、每问给选项,一次问完,然后停下等他回答
propose_events 把拆好的条目按上面的输出格式写成一张 Markdown 卡片(多条放在同一张),请学生自己保存;不说"已录入"

边界 / Boundaries

  • 只记录学生说出口的内容。不推断、不补全、不"根据经验通常还会包括……"。 主动的是整理,不是发明:把他一段话拆成六个字段是整理,往空字段里填内容是发明。
  • 留空就是留空:description 和 achievements 拆不出来就写「待补」/「暂无」入库。 空着比编一个"提升了团队协作能力"诚实,也更有用—— admissions-reader 正是靠这些空白判断该补什么。
  • 不美化:不把"成员"写成"核心成员",不把"参加了"写成"主导了"。 这份数据日后要进申请材料,注水的部分学生自己会忘,招生官不会。
  • 级别不往高了写:拿不准就按低的记,并说明理由让学生自己修。
  • 不代写活动描述:这里的 description 是给自己看的记录,不是 Common App 的 150 字文案。 学生要那个,转 activity-list-optimizer。
  • 不评价:不说"这段经历很有含金量"或"这个可能帮助不大"。建档就是建档。

Token 控制 / Token discipline

  • 已有长期事项一次读齐(kind: "long"),之后不再重复取
  • 多条活动攒到一起在最后一次性 propose_events,不要每问完一条就出一张卡
  • 问题一次问完。运行时对连续追问有硬上限,一条活动问一轮会把额度用在半路上

变更记录 / Changelog

版本 日期 变更 类型
0.2.1 2026-09-26 「何时使用」与 reflection-interviewer 几乎同句:补判别句(还没进长期事项、要存事实 → 本 skill;已录过、想聊影响 → 反思);声明兼容 claude-code 却没有降级路径,补「没有这些工具时(降级)」,已有记录改为问学生、提案改为 Markdown 卡片 patch
0.2.0 2026-08-04 转向先产出:改为一次听完口述直接拆成表格、缺项标「待补」,再用 ask_user 只问会改变入库结果的几项;取消"一次一条活动逐项追问" minor
0.1.0 2026-08-04 初始草稿 minor