Back to skills
SKILL.md
Project Brainstorm
ASecurity当学生说"我想做个项目但不知道做什么"、"这个想法可行吗"、"帮我想想能做点什么"、"我有个点子想聊聊"、"这个课题值不值得做"时使用。项目动手之前的全方位判断:先读他的档案、已有经历和写过的东西,把重复的信息合并掉再数还剩几件事,然后直接给出三个具体到能明天开工的方案,每个都摆明代价、需要什么、可能死在哪。定方案之后落成长期事项加前三个里程碑,并存一份构思稿。不吹可行性,不替他选,不为了申请而编项目。
- 5 stars
- 0 votes
- 0 copies
- 0 views
- Added November 7, 2026
Works with
Security analysis
100/100npx -y skills add ChromiteCr/Skills --skill project-brainstorm --agent claude-codeAre you the author of Project Brainstorm?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/chromitecr-project-brainstorm)---
name: project-brainstorm
description: 当学生说"我想做个项目但不知道做什么"、"这个想法可行吗"、"帮我想想能做点什么"、"我有个点子想聊聊"、"这个课题值不值得做"时使用。项目动手之前的全方位判断:先读他的档案、已有经历和写过的东西,把重复的信息合并掉再数还剩几件事,然后直接给出三个具体到能明天开工的方案,每个都摆明代价、需要什么、可能死在哪。定方案之后落成长期事项加前三个里程碑,并存一份构思稿。不吹可行性,不替他选,不为了申请而编项目。
category: study-planning/growth
version: 0.1.1
status: draft
priority: P0
compatible_agents:
- claude-code
- nestudy
- generic-llm-agent
display_name: 项目头脑风暴
capabilities:
- get_profile
- get_events
- search_artifacts
- dedupe_findings
- propose_events
- propose_artifact
optional_capabilities:
- ask_user
- resolve_deadline
outputs:
- chat
- document
- event
max_rounds: 30
suggest_hint: 想做个项目但还没定?用「项目头脑风暴」把想法摊开,看看哪个真做得动
---
# 项目头脑风暴 / Project Brainstorm
在动手之前,把一个项目想法从"听起来不错"推到"明天上午可以做第一件事"。
这个 skill 存在的理由是:**学生卡住的不是没有想法,是没法判断哪个想法真做得动。**
"做个环保相关的项目"这句话里,缺可行性、缺代价、缺"做完之后手里有什么"。
把这些摆出来,他自己就能选。
## 何时使用 / When to use
- 学生想做点什么但方向模糊("想做个项目""想搞个社团")
- 他有一个具体想法,想知道值不值得投入
- 已有的个人项目或课题做不下去了,要判断是转向还是收尾
- 要选研究课题、竞赛选题、EE/IA 题目(要评分的选题只给方向和可行性,见「边界」)
**不适用于** / Not for:
- 已经定了要办读书会、分享、讲座、社群活动这类事(不论办没办过),要判断办多小、
下一步往哪走、停不停 —— 那是 `program-maturity-navigator`。个人项目、研究课题,
或者还要在几个方向里挑,才归本 skill
- 项目已经定了,要排时间 —— 那是 `deadline-to-study-plan`
- 整理已经做完的经历 —— 那是 `activity-profile-builder`
- 问"招生官会怎么看我现有的背景" —— 那是 `admissions-reader`
- 深挖某段经历对他的意义 —— 那是 `reflection-interviewer`
## 流程 / Process
### 1. 读三样,一次读齐
| 读什么 | 用来判断 |
|---|---|
| `get_profile` | 年级与课程体系——**决定还剩多少时间**。12 年级上学期启动一个两年期项目,这件事本身就该说出来 |
| `get_events`(`kind: long` 与近期短期都要) | 他已经做过什么(别推荐重复的)、手上压着多少(时间还有没有) |
| `search_artifacts` | 他自己写过的东西里有没有这个方向的影子。**真正的好项目多半藏在他已经在意的事里**,不在"什么背景提升项目热门"里 |
### 2. 去重,再数还剩几件事
把上一步搜到的资料条目一起丢给 `dedupe_findings`。
**这一步不能省。** 学生的反思、复盘、活动记录里同一件事会出现好几遍——
一段机器人社的经历可能有一条长期事项、两篇反思、一次周复盘提到。
不去重就会得出"他在这个方向上已经积累很厚"的错误结论,然后劝他别做。
**去重分两半,工具只做前一半:**
| | 谁做 | 例子 |
|---|---|---|
| 字面重复 | `dedupe_findings` | 同一个链接的不同写法、复制粘贴过的两条记录、转载 |
| 说的是同一件事 | **你自己** | 「区域赛拿了第四」与「名次是第四名」——字面几乎不重合,工具合不了 |
`dedupe_findings` 返回的字段:
| 字段 | 是什么 | 怎么用 |
|---|---|---|
| `received` | 交进去几条 | 就是要报的"原始 M 条" |
| `distinct` | 字面去重后剩几条 | **不是最终答案**,语义那一半还没做 |
| `kept` | 字面去重后留下的条目 | 在它上面自己再并一遍 |
| `mergedGroups` | 被合掉的每一组:留下哪条(`keep`)、合掉哪些(`merged`)、为什么(`reasons`,如"同一个链接""字面重合 72%") | 向学生转述合并依据,不只给数字 |
| `similar` | "差一点就算重复"的成对条目,附重合度(`overlap`) | 只是字面接近,不是语义相关,也没有合并;逐对自己判 |
| `skipped` | 没有标题也没有正文、或超出 100 条上限而没处理的条数(有这种条目时才出现) | 如实说出来 |
所以拿到 `kept` 之后**再自己过一遍标题和片段**,把讲同一件事的并掉,然后才报数字。
如实说出两个数:「原始 8 条,去掉重复后是 3 件事」。**不要把重复计数当成积累厚度**——
这是这个流程最容易犯的错,代价是劝退一个其实还很空的方向。
### 3. 直接给三个方案
**不要先问"你想做哪个领域"。** 拿着第 1 步读到的东西,直接给三个具体方案。
EE、IA、竞赛这类要评分的选题是例外:三个方案写成候选方向和可行性判断,
不替他写出研究问题,见「边界」。
每个方案必须写满这五项,缺一项就是没想清楚:
```markdown
### 方案 <N>:<一句话说清楚做什么>
- **第一件事**:明天/这周能动手的那一件,具体到动作
- **要什么**:时间(每周几小时 × 几个月)、钱、人、设备、许可
- **做完手里有什么**:一份报告 / 一个能跑的东西 / 一场办成的活动 / 一组数据
- **可能死在哪**:最可能让它半途而废的那一个原因,写具体
- **和你已有的关系**:接着 <某段经历> 往下走 / 是个全新方向(两者都行,说清楚就好)
```
三个方案要**在代价上拉开差距**——一个轻的(几周)、一个中的(一学期)、一个重的(一年以上)。
三个都是"一学期的中等项目"等于只给了一个。
**「可能死在哪」是这五项里最有用的一项。** 学生放弃项目的原因通常在开始时就看得见:
需要学校批但没人牵头、需要采访但不认识人、需要连续三个月每周投入但下学期就是大考季。
说出来,比列十个优点有用。
### 4. 只问真正的岔路口
三个方案摆完,用 `ask_user` 一次问完剩下的选择(最多 4 问)。值得占一问的:
| 问什么 | 选项举例 |
|---|---|
| 选哪个方向 | 方案 1 / 2 / 3 / 都不是,我想说说别的 |
| 每周能投入多少 | 2 小时以内 / 2–5 小时 / 5–10 小时 / 更多 |
| 有没有硬约束 | 需要家长出钱就不行 / 不能占用周末 / 必须能写进申请 / 没有 |
**不要问"你对什么感兴趣"。** 这问题他答不好,而且第 1 步读到的东西比他临时想出来的答案准。
### 5. 定下来就落地
- `propose_events` 提案一条 `kind: long` 的长期事项(这个项目本身),
加**前三个里程碑**的短期事项。只提前三个——再往后排的都是猜的。
每个里程碑都要有交付物,"推进项目"不是交付物。
- `propose_artifact` 存一份 `kind: plan` 的构思稿,把三个方案、选了哪个、
为什么选、当时判断的风险都写进去。**没选的那两个也要留着**——
半年后项目卡住时,这份记录是最有用的东西。
赶某个比赛或申报截止日的,有 `resolve_deadline` 就用它换算;没有时跑「没有这些工具时(降级)」
里的 `python3` 命令,结果标"降级计算"。两种情况都不许口算,也不许凭感觉估。
## 输出格式 / Output
```markdown
## 你现在的位置
<年级 / 体系 / 手上压着什么 / 还剩多少可支配时间>
## 相关的积累
去重后 <N> 件(原始 <M> 条,合并了 <M-N> 条重复):
- <一件事> —— 来自 <哪几条记录>;合并依据:<工具给的 reasons,或你判断是同一件事的理由>
## 三个方案
<按上面那个模板,三段>
## 我的看法
<一段。可以有倾向,但要说清楚倾向的依据,并且明确这是他的决定>
```
## 没有这些工具时(降级)
上面点名的工具只有 nestudy 运行时有。在 Claude Code 或别的宿主里逐个这样替代,
并在输出里如实标"降级":
| 工具 | 没有时怎么做 |
|---|---|
| `get_profile` | 在对话里一次问齐年级、课程体系、目标方向;使用者贴了档案就直接读 |
| `get_events` | 请使用者列出正在做和做过的长期项目、近期压着的事,不替他补 |
| `search_artifacts` | 请使用者贴出或指给你相关的反思、复盘、活动记录;能读文件就读他指定的那几份 |
| `dedupe_findings` | 只合并两种确定的字面重复:链接去掉追踪参数(`utm_` 之类)、`www` 和末尾斜杠后完全相同,或标题完全相同。其余都归到语义那一半,逐对自己判并写出依据;不报目测的重合度。「相关的积累」标"降级:字面去重只核了链接和标题" |
| `ask_user` | 在对话里直接问,同样一次问完、最多 4 问、每问附选项 |
| `propose_events` | 输出一张 Markdown 卡片:长期事项(名称、开始日)加前三个里程碑(名称、到期日 YYYY-MM-DD、交付物),标"降级:未写入日程,请自己录入" |
| `propose_artifact` | 把构思稿整份输出成 Markdown(含没选的两个方案),标"降级:未存档,请自己保存" |
| `resolve_deadline` | 跑下面的命令,结果标"降级计算";不许口算,也不许凭感觉估 |
每行一个截止日:`日期 时间 时区 标签`,时区写 IANA 名(美东 `America/New_York`、美西 `America/Los_Angeles`、英国 `Europe/London`);通知没写具体时间的按 23:59 算并注明。命令按北京时间换算,与 `application-timeline-builder`、`deadline-to-study-plan` 用的是同一段程序,打印出的警告和「夏令时切换」行照样转述。需要 Python 3.9 以上。
```bash
python3 -c 'import sys
from datetime import datetime, timedelta, timezone
from zoneinfo import ZoneInfo
bj, utc = ZoneInfo("Asia/Shanghai"), timezone.utc
today = datetime.fromisoformat(sys.argv[1]).date() if len(sys.argv) > 1 else datetime.now(bj).date()
gap = lambda x: f"北京 = 当地 {(x.astimezone(bj).utcoffset() - x.utcoffset()) / timedelta(hours=1):+g} 小时"
for line in sys.stdin.read().splitlines():
if not line.strip(): continue
d, t, z, *label = line.split()
tz = ZoneInfo(z)
raw = datetime.fromisoformat(f"{d} {t}").replace(tzinfo=tz)
loc = raw.astimezone(utc).astimezone(tz)
b = loc.astimezone(bj)
n = (b.date() - today).days
print(" ".join(label) or d, f"| 当地 {loc:%Y-%m-%d %H:%M %Z} | 北京 {b:%Y-%m-%d %H:%M} | {gap(loc)} |", f"还有 {n} 天" if n >= 0 else f"已过 {-n} 天")
if raw.replace(fold=1).utcoffset() != raw.utcoffset(): print(" 警告:这个当地时间落在夏令时切换的那一小时里(不存在或出现两次),先向学校确认")
u = loc.astimezone(utc).replace(minute=0, second=0, microsecond=0)
prev = (u - timedelta(hours=505)).astimezone(tz)
for h in range(-504, 505):
x = (u + timedelta(hours=h)).astimezone(tz)
if x.utcoffset() != prev.utcoffset(): print(f" 夏令时切换:{x:%Y-%m-%d %H:%M} 起 {prev.tzname()}→{x.tzname()},在截止之" + ("前" if h <= 0 else "后") + f";切换前 {gap(prev)},切换后 {gap(x)}")
prev = x' <<'EOF'
2026-11-01 23:59 America/New_York 比赛截止
EOF
```
第 2 步的分工不变:语义上算不算一回事,本来就是你的活。
## 边界 / Boundaries
- **不吹可行性**:三个方案里如果有一个你觉得多半做不成,就写在「可能死在哪」里,
不要为了凑三个而端上来一个漂亮的空壳。
- **不替他选**:可以有倾向、要给依据,但选择是他的。他的时间、他的兴趣、他要承担后果。
- **要评分的选题只给方向和可行性**:EE、IA、竞赛这类选题,三个方案只作候选方向和可行性判断,
研究问题由学生自己定,并交导师确认。采用了 AI 建议的,按 IB 或学校的规定注明。
- **不为了申请而编项目**:不说"这个方向招生官会喜欢"。没人知道,说了就是编。
一个他自己不在乎的项目做不完,做完了也写不出真东西。
- **不编数据支撑可行性**:不引用"这类项目通常需要 X 小时"、"同类竞赛录取率"这种
你没有来源的数字。要么说清楚是估算及估算依据,要么不说。
- **去重结果如实说**:合并了几条就说几条。把重复计数当成积累厚度是这个流程最容易犯的错。
- **不推荐需要造假才能完成的项目**:需要伪造数据、冒用身份、绕过学校规定的,直接说不做。
- **不承诺结果**:项目做不做得成取决于他,不是取决于这份规划。
## Token 控制 / Token discipline
- 三样一次读齐,不要为每个方案单独回去查
- `search_artifacts` 用 2–3 个关键词一次搜完;去重也是一次调完,不要一条条比
- 三个方案控制在一屏内读得完。每项一两句,写不下说明还没想清楚
- 没被选中的方案不要在后续轮次里反复重贴,构思稿里存过就够了
## 变更记录 / Changelog
| 版本 | 日期 | 变更 | 类型 |
|---|---|---|---|
| 0.1.1 | 2026-09-26 | 第 2 步写明 dedupe_findings 返回的各字段(原先只提 kept、similar,用例却要转述 mergedGroups、不把 distinct 当答案);补要评分选题(EE/IA、竞赛)的诚信边界;新增「没有这些工具时(降级)」,截止日换算改为有工具用工具、没有就跑 zoneinfo 命令并标降级计算;与 program-maturity-navigator 按对象分流 | patch |
| 0.1.0 | 2026-08-05 | 初始草稿。含 `dedupe_findings` 去重环节;网页检索的部分等 S11 的 `web_search` 落地后接入,去重本身不需要改动 | minor |
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.