活动栏压缩 / Activity List Optimizer
把学生写好的活动描述压进 Common App 的字符限额,并保住其中真正有信息量的部分。
两件事必须分清楚:
把学生已经写出来的内容压短,是编辑。在空白处替他写,是代写。
这个 skill 做前者,不做后者。
何时使用 / When to use
- 学生在填 Common App 活动栏,有内容但超字数
- 学生想知道自己写的这几条在限额上还剩多少空间
- 有一批活动描述要统一过一遍
不适用于 / Not for:
- 活动经历还没整理过 —— 先用
activity-profile-builder 建档
- 想知道这些活动够不够、招生官怎么看 —— 那是
admissions-reader
- 写主文书或补充文书 —— 不是本 skill 的范围
需要的输入 / Inputs
| 输入 | 必填 | 说明 |
|---|
| 学生写的原文 | 是 | 职位 / 组织 / 描述三栏中要处理的那些。没有原文就没有可压缩的东西 |
| 已有长期事项 | 否 | 学生说"就用我系统里那几条"时读出来当原料 |
学生只给了活动名字、没有描述时:不要替他写第一版。
让他先用大白话说清楚做了什么,哪怕三百字也行——压缩需要有东西可压。
这是本 skill 唯一必须停下来等的情况,因为缺的不是偏好而是原料。
限额 / Limits
| 栏位 | 上限 |
|---|
| Position/Leadership description | 50 字符 |
| Organization Name | 100 字符 |
| Please describe this activity | 150 字符 |
| 活动条数 | 10 条 |
易变规则:上表最后核对于 2026-08-21。权威来源是 Common App 官方申请表
https://apply.commonapp.org/(需登录;以申请人当季界面显示的 maxlength 和条目上限为准)。
每个申请季首次使用本 skill 时,以及用户界面与上表不一致时,都要重新核对;不得把这里的历史值当成永久规则。
同时确认 check_activity_limits 使用的上限与当季表单一致。若工具仍是旧值,明确报告配置过期,
在更新工具前不要声称文案已满足当季限制。
待核实(2026-09-26 记):有二手资料称 2026-27 申请季活动栏的栏位是否必填、栏位与版块名称有调整,
还没有对照官方表单核实,所以上表没改。下次核对时逐项确认这几点,确认后再改表并更新核对日期;
核实之前不要把这些说法当成已确定的事实告诉学生。
是字符不是词。 表单按 UTF-16 计(同 HTML 的 maxlength),
所以 emoji 一个通常占 2 格——学生肉眼数出来 149,表单可能判 152。
有 check_activity_limits 就由它算;没有时跑下文「没有这些工具时(降级)」里的命令,结果标「降级计算」。
哪种情况都不要凭眼睛数。
流程 / Process
-
拿原文:学生贴进来,或从长期事项里读出来。
-
一次量完:把所有条目一起传给 check_activity_limits,看每条超了多少、哪一栏超。
不要一条一调,也不要量一条改一条再问一句。
-
直接给出全部压缩版,按这个优先级砍:
- 先砍虚词:
Responsible for、Worked to、Helped to、In charge of 直接删,动词开头
- 再砍形容词:
very、successfully、significant 几乎都不承载信息
- 保住数字:
18 人、从 12 提到 34、三所学校 —— 这些是最贵的字符,最后才动
- 保住具体名词:技术名、赛事名、职位名
砍虚词和形容词不需要问,直接做,在"砍掉了"那一行写明。
-
改完重量:再调一次 check_activity_limits。
每一版都要重新量。 你数不准字符数,这不是谨慎是事实。
-
只有砍到实质内容时才问:虚词形容词砍完还超,说明装不下的是信息本身。
这时用 ask_user 一次问完(每条一问,最多 4 条一批):
「机器人社这条砍完虚词还差 22 格,下面哪个可以不要?」
拿奖那句 / 带了几个新人那句 / 具体做的技术那句
别自己挑一个砍掉再告诉他。这是他的材料,取舍是他的。
-
(可选)存回去:学生要求把压缩版写回长期事项时,用 propose_events 出确认卡。
不主动做这一步——活动栏文案和系统里的记录用途不同,多数学生会想分开。
条数超过 10 时,把这件事单独提出来:列出哪几条最弱、为什么,
用 ask_user 多选让学生自己决定砍哪几条。
输出格式 / Output
## <活动名>
**描述**(原 <N> 字符 → 现 <M> 字符,限 150)
原文:<原文>
压缩:<压缩版>
砍掉了:<具体砍了什么,一句话>
全部处理完给一个总览:几条、几条还超、还差几格。
没有这些工具时(降级) / Without these tools (degraded mode)
上面的流程按 nestudy 的工具写。在 Claude Code 或其他没有这些工具的环境里,流程、输出格式和边界都不变,
只把工具换成下表的做法,并在回复开头写明「降级:没有 nestudy 工具,字符数由本地命令计算」。
| 工具 | 没有时怎么做 |
|---|
check_activity_limits | 跑下面的命令,每一栏跑一次,同一栏的所有条目一次量完。流程里每一处"调 check_activity_limits"都换成它,改完之后的重量也一样;报出的数字标「降级计算」 |
get_events | 请学生把原文直接贴进来,不假装读到了他系统里的记录 |
ask_user | 在对话里直接问:同样攒成一条消息、每问给选项,然后停下等他回答 |
propose_events | 把要存回去的压缩版写成一张 Markdown 卡片(活动名、压缩后的描述),请学生自己保存,不说"已存入" |
一行一条,末尾的参数是这一栏的上限(按上面「限额」表,并先照「易变规则」确认当季值)。
命令先去掉首尾空白,再按 UTF-16 码元计数,与表单同一口径;"码点"是逐个字符数出来的个数,
普通文字和单个 emoji 跟肉眼数一致,两个数不相等就是有占 2 格的字符。
python3 -c 'import sys
lim = int(sys.argv[1])
rows = [s.strip() for s in sys.stdin.read().splitlines() if s.strip()]
for i, s in enumerate(rows, 1):
n = len(s.encode("utf-16-le")) // 2
print(f"{i}: 表单计 {n} / 码点 {len(s)} / 限 {lim} / " + (f"超 {n - lim}" if n > lim else f"剩 {lim - n}"))
print(f"共 {len(rows)} 条" + (",超过 10 条槽位" if len(rows) > 10 else ""))' 150 <<'EOF'
<第一条原文>
<第二条原文>
EOF
一条 149 个字符、结尾带 3 个 emoji 的描述,输出是 1: 表单计 152 / 码点 149 / 限 150 / 超 2。
连命令也跑不了时,把这条命令交给学生在自己电脑上跑,或者请他看表单上的计数器。
拿到数字之前不说"已在限制内",也不凭眼睛估一个数给他。
边界 / Boundaries
- 不代写:空白栏位不替学生填。他没说过的经历、成果、数字,一个字都不能出现。
- 不加料:压缩过程中不许"顺便润色得更有冲击力"。
原文里没有的成果不能加,模糊的表述不能替他变确定("参与"不能改成"主导")。
- 不凭感觉数字符:每一版都过
check_activity_limits(没有这个工具就跑降级命令)。说"这样应该在限制内了"就是失职。
- 砍内容要经确认:砍虚词和形容词直接做;砍到实质内容时用
ask_user 让他选,不要替他决定。
- 不替学生决定留哪十条:条数超限时给判断依据,让他自己勾。
- 不承诺效果:不说"这样写招生官会更喜欢"。没人知道,说了就是编。
Token 控制 / Token discipline
- 一次把所有要处理的条目传给
check_activity_limits,不要一条一调
- 每轮只输出改动的那几条,不重复贴全部原文
- 要问就把多条的取舍攒成一张卡问完;运行时对连续追问有硬上限
- 一条改两三版还压不进去,说明信息量确实超了,交回学生取舍,不要自己反复试
变更记录 / Changelog
| 版本 | 日期 | 变更 | 类型 |
|---|
| 0.2.2 | 2026-09-26 | 声明兼容 claude-code 却没有降级路径:补「没有这些工具时(降级)」,无 check_activity_limits 时用 python3 -c 按 UTF-16 码元计数并标「降级计算」,"不要自己数"改为有工具用工具、无工具跑命令;记下 2026-27 季栏位变化待核实;补配置过期与降级两个用例 | patch |
| 0.2.1 | 2026-09-11 | 为 Common App 易变限额补充核对日期、官方来源与每申请季复核要求;上游限额变化时发布 PATCH | patch |
| 0.2.0 | 2026-08-04 | 转向先产出:一次量完所有条目并直接给出全部压缩版;砍实质内容改用 ask_user 一批问完,不再逐条来回 | minor |
| 0.1.0 | 2026-08-04 | 初始草稿 | minor |