Skip to content
Back to skills

Xin Ideas

ASecurity

灵感收集与多维度体检 + 可落地拆解工具。当用户抛出新想法/灵感、希望先记录并评估(而非立即实现)时使用:对想法做十维评价(解决的问题/目标用户/实用性/市场价值/竞品分析/变现可能/技术方案/可扩展性/实现计划/实现可行性)并 1-10 打分。其中「解决的问题」须明确是真实痛点还是想象问题;「市场价值」须论述市场运营与推广的可行性、难度与代价;「实现可行性」要求客观列出落地所需的技术能力与配套资源(硬件/数据/资质/渠道/人力),并明确成本与代价依据;同时给出好处/坏处、可能遇到的问题与应对、分阶段落地路线图、要避免的坑、成功失败判据与成本投入,生成精美 HTML 详情页(.xin-ideas/ideas/idea_<时间戳>.html)与卡片列表页(.xin-ideas/index.html,支持搜索、排序、点击跳转)。**默认对每个灵感都做完整十维打分**,不做区分;只有用户明确说「不要打分」「先记着」「只记一下」时才走轻量记录(不打分)。触发词与场景:「收集灵感」「记个想法」「灵感库」「xin-ideas」「记一笔」「做个灵感评估」「把想法存一下」「给这个想法打个分」。本...

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 23, 2026
ai-agentspythongobashnodegit

Security analysis

A100/100

Pro scans all 9 files and shows the line behind each finding

Scanned September 23, 2026

npx -y skills add oscar-wang-xin/xin-ideas --skill xin-ideas --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Xin Ideas?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Xin Ideas
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/oscar-wang-xin-xin-ideas/badge)](https://www.skillsdirectory.com/skills/oscar-wang-xin-xin-ideas)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: xin-ideas
description: 灵感收集与多维度体检 + 可落地拆解工具。当用户抛出新想法/灵感、希望先记录并评估(而非立即实现)时使用:对想法做十维评价(解决的问题/目标用户/实用性/市场价值/竞品分析/变现可能/技术方案/可扩展性/实现计划/实现可行性)并 1-10 打分。其中「解决的问题」须明确是真实痛点还是想象问题;「市场价值」须论述市场运营与推广的可行性、难度与代价;「实现可行性」要求客观列出落地所需的技术能力与配套资源(硬件/数据/资质/渠道/人力),并明确成本与代价依据;同时给出好处/坏处、可能遇到的问题与应对、分阶段落地路线图、要避免的坑、成功失败判据与成本投入,生成精美 HTML 详情页(.xin-ideas/ideas/idea_<时间戳>.html)与卡片列表页(.xin-ideas/index.html,支持搜索、排序、点击跳转)。**默认对每个灵感都做完整十维打分**,不做区分;只有用户明确说「不要打分」「先记着」「只记一下」时才走轻量记录(不打分)。触发词与场景:「收集灵感」「记个想法」「灵感库」「xin-ideas」「记一笔」「做个灵感评估」「把想法存一下」「给这个想法打个分」。本 skill 只做评估与归档,不实现想法。
---

# xin-ideas · 灵感体检与可落地拆解

把想法抛进来,先体检、后动手。**每个灵感默认都产出一份「十维评分(含「实现可行性」「目标用户」,要求客观列出落地所需技术能力与配套资源,并区分真实痛点与想象问题、论述市场推广可行性)+ 可落地拆解」的精美 HTML 详情页**——不区分、不先问、不当场省流程;并在卡片列表页形成可检索、可排序、可跳转的卡片墙。只有你明确说「不要打分」时,才只记一张「未评分」的轻量卡。

**核心原则:拆解必须具体、可落地、能量化。禁止只写方向、概念、大词。** 每一条都要能回答「具体做什么、拿什么衡量、花多少」。

## 存储结构(统一 .xin-ideas 目录,可整体备份/迁移)

所有产物都收在**一个 `.xin-ideas` 目录**里——列表页与明细页全在里面,将来整目录拷走即可备份/迁移:

```
<baseDir>/
  .xin-ideas/
    index.html               ← 卡片列表页(唯一入口,所有灵感卡片都在这)
    ideas/
      idea_<时间戳>.html      ← 每个灵感一个明细页
```

- `<baseDir>` 是**承载 `.xin-ideas` 的根目录**,记录在 **skill 根目录的 `config.json`**:`{ "baseDir": "<绝对路径>" }`。
- 时间戳格式:`YYYYMMDD_HHMMSS`(用 `date +%Y%m%d_%H%M%S` 取本地时间)。
- 明细页的 `file` 字段是**相对 `index.html` 的路径**,即 `ideas/idea_<时间戳>.html`(不再是 `.xin-ideas/idea_...`)。
- 明细页顶部「← 返回灵感库」链接指向 `../index.html`(模板已内置,无需改)。
- 当前 baseDir:见 `config.json`;`baseDir` 为空时按下面「首次使用」流程询问用户。

## 防覆盖与容错(铁律 · 2026-09-14 定)

**永远不要清空、重建、覆盖一个已经存在的灵感墙。原有灵感一条都不能丢。** 写入一律走「增量」路径,由 `scripts/upsert-idea.js` 兜底;严禁用「复制模板覆盖 index.html」这种省事做法。

三条硬规则:

1. **明细页不覆盖**:`ideas/idea_<时间戳>.html` 已存在时**拒绝写入**,改用一个新的时间戳;确需覆盖才加 `--force`,且脚本会先把旧文件备份成 `<文件>.bak`。绝不静默冲掉别人的灵感。
   - **若要「更新已有卡片」(原卡内容保留、只做增补)**:必须显式传 `--ts <该卡片文件名里的完整时间戳>` 并加 `--force`,否则**会新建一张重复卡而不是覆盖原卡**。陷阱在于 `normTs()` 只精确到分钟——`IDEA.ts = "2026-09-13 17:58"` 会被归一化成 `20260913_175800`,而实际文件名可能是 `idea_20260913_175854.html`(带秒),两者对不上。**正确做法:先 `ls ideas/` 拿到真实文件名,把 `idea_` 与 `.html` 之间的整串原样传给 `--ts`。**
   - 更新前先把原 IDEA 完整导出(`eval('('+匹配到的对象+')')` 覆盖回写会丢字段),只增补、逐字段保留原有内容;更新后核对 `index.html` 的条数**没有增加**(增加即说明误建了重复卡,应删掉新文件并从 `.bak` 恢复)。
2. **索引增量合并**:`index.html` 已存在且结构一致 → 只往 `IDEAS` 数组**追加/更新**条目,原有条目的顺序与内容保持不动(老卡片位置不变)。
3. **结构不一致 → 备份后重建**:`index.html` 存在但**不是当前模板结构**(缺 `a.c-link`,或 `IDEAS` 数组解析不出来)→ 先把原文件备份为 **`index.html.bak`**;若 `.bak` 已存在,改用 `index.html.bak.<时间戳>`,**绝不覆盖已有备份**。然后用当前模板重建索引,把旧索引能解析到的条目 **+ `ideas/` 目录下所有明细页里的灵感**全部恢复进新索引。

**为什么能保证不丢**:**明细页是权威数据源**。每个灵感的完整数据都存在自己的 `ideas/idea_<时间戳>.html` 里,`index.html` 只是它的投影。所以哪怕索引被写坏、被清空、格式不认识,也能从 `ideas/` 目录逐条扫描重建出来;索引里漏掉的明细页会被**自动补回**(回归测试第 7 项就断言了这条)。

- `index.html.bak` 是保险绳,**不要删**、不要当成正式文件。
- 每次写完后如果 `IDEAS` 条数比写入前**少**,就是丢了内容 —— 立即停下、回退,不要继续。

### 写入工具:scripts/upsert-idea.js

```bash
node scripts/upsert-idea.js --base "<baseDir>" --detail <idea.json> [--ts YYYYMMDD_HHMMSS]
node scripts/upsert-idea.js --base "<baseDir>" --entry  <entry.json>
node scripts/upsert-idea.js --base "<baseDir>" --rebuild     # 扫描 ideas/ 重建索引(不新增内容)
node scripts/upsert-idea.js --base "<baseDir>" --sync-pages  # 存量明细页对齐到当前 detail.html 模板
node scripts/upsert-idea.js --base "<baseDir>" --status      # 快速体检:列出 404 条目与孤儿明细页
node scripts/health-check.js [--baseline]                    # 完整体检(只读):结构 + 原话同步 + 字段 + 基线增量
# 通用参数:--dry-run 预览不落盘  /  --force 允许覆盖明细页(覆盖前自动备份)
```

- `--base` 省略时读 `config.json` 的 `baseDir`;两处都没有则退出码 2 并打印 `NEED_BASE_DIR` → 按下面「首次使用」流程询问用户。
- **推荐做法**:把完整 IDEA 对象写成临时 JSON,用 `--detail` 一次完成「生成明细页 + 合并索引」。脚本用 `JSON.stringify` 落盘,天然把字符串里的换行转义成 `\n`,**不会再写出裸换行导致 JS 语法错误**(历史上踩过这个坑)。
- 退出码非 0 就是没写成,别当作成功继续往下走。
- **改了 `assets/templates/detail.html` 之后,别忘了同步存量明细页**:跑 `--sync-pages`,它会用「当前模板外壳 + 本页原有 IDEA 数据」重建每个明细页,IDEA 数据逐字保留,改动前先备份为 `.bak`,已是最新的自动跳过(幂等)。索引页侧的模板改动则由 `--rebuild` 负责(同样先备份 `index.html.bak`)。

### 首次使用:位置未指定时必须弹窗询问

每次执行**先读 `config.json`**,按下面分支处理:

1. 若 `config.json` 存在且 `baseDir` 非空 → 直接用 `<baseDir>/.xin-ideas/`,**不再询问**。
2. **若 `config.json` 不存在,或 `baseDir` 为空(= 首次使用、位置未指定)→ 必须弹出提示询问用户把 `.xin-ideas` 建在哪**:
   - **提示的默认选项 = 「本 skill 安装所在目录」**(选它则灵感墙落在 `<skill 安装目录>/.xin-ideas/`)。
   - 用户也可填入任意其它目录(如某个工作区)。
   - 拿到答案后:创建 `<baseDir>/.xin-ideas/` 与 `<baseDir>/.xin-ideas/ideas/`,并把 `baseDir` 写回 `config.json`,下次不再问。
   - 用选项式询问(AskUserQuestion 或等价的确认提示),把「skill 安装目录」作为第一个(推荐)选项。

## 文件规范

- 所有产出统一 **UTF-8 + LF 换行**。宿主机是 Windows 时,写文件务必带 `newline=''`(或显式 `newline='\n'`)——Python 文本模式默认会把 `\n` 转成 CRLF,模板是 LF、产物是 CRLF,同一条链上就不一致了。
- 工作区根目录与 skill 目录各带一份 `.gitattributes`(`* text=auto eol=lf` + 二进制标记),作为 git 纳管时的兜底;新增二进制产物类型时记得往里补一行。
- 改动 `assets/templates/` 下的模板后,先跑 `node scripts/smoke-test.js` 回归:它在最小 DOM 桩上验证「字段缺失/类型不对时不崩、页面不出现 undefined」。退出码非 0 就回退,别把坏模板发出去。
- 改动 `scripts/upsert-idea.js`(写入合并器)后,跑 `node scripts/test-upsert.js` 回归:验证「不覆盖、不丢内容」——含结构不一致时的备份重建、`.bak` 不被覆盖、明细页拒绝覆盖、孤儿明细页补回、`--sync-pages` / `--sync-index` 同步后数据逐字不变等 34 项断言。两套测试都绿再交。
- **日常巡检用 `node scripts/health-check.js --baseline`(只读脚本,绝不改动任何文件)**:核对 ①明细页与索引条数 1:1 ②id 与标题互相对得上 ③无失效引用 / 孤儿 ④原话 `origin` 两侧同步 ⑤字段完整性;带 `--baseline` 时再对比工作区根目录的基线快照 `_baseline.json`,报出新增、消失、老页面被动过的条目。**注意别拿「索引 score」(录入时独立存的展示分,1 位小数)和「明细页十维均分」(原始分)硬比——差 0.05 内属正常取整,历史上据此误判过一轮。** 硬错误只看前三项。发现「索引有原话、明细页缺 origin」这类不同步时,把索引里的原话补回明细页 IDEA 即可(纯新增一行,先备份、后校验原字段逐字未变)。

## 工作流

**写入模式(2026-09-14 定)——默认全评,例外才轻量:**

| 模式 | 何时用 | 产出 |
|------|--------|------|
| **完整体检(默认)** | 只要用户没明说不要打分,一律走这条 | 十维评分(原八维 + 实现可行性 + 目标用户)+ `details` + `feasibility` 可行性专项评估 + 好处/代价 + 路线图 + 判据 + 成本;明细页出雷达图与评分卡 |
| **轻量记录(例外)** | 用户明确说「不要打分 / 先记着 / 只记一下 / 别评了」 | 只填 `title`/`ts`/`tags`/`summary`/`origin`;`scores` 留空(`{}`),其余拆解字段全部留空。明细页自动隐藏雷达图与评分卡、改为「未评分」说明;列表页该卡显示灰色「未评」徽标,不参与分数排序与统计 |

判定口诀:**「没说不要 = 要打分」**。拿不准时就按默认(打分)执行,**不要反问用户"要不要打分"**——那是把选择成本推回给他。真想省事他会自己说。

### 0. 先查重(撞车检查 · 必做,2026-09-14 定)
落新卡之前,**先读一遍墙上现有卡片的标题与摘要**(一条命令即可):

```bash
node -e "const fs=require('fs');const s=fs.readFileSync('<baseDir>/.xin-ideas/index.html','utf8');const m=s.match(/const IDEAS = (\[[\s\S]*?\n\]);/);eval('('+m[1]+')').forEach((e,i)=>console.log((i+1)+'. ['+e.id+'] '+e.score+' '+e.title+' —— '+e.summary));"
```

判断三档:

| 情况 | 处理 |
|------|------|
| **无关** | 走正常流程,新建卡 |
| **部分重叠(<50%)** | 新建卡,但在 `summary`/`details` 里点明与哪张卡相关、分工是什么 |
| **高度重合(≥50%)** | **不新建重复卡**,改为「更新已有卡」:把新增量并进去(原内容逐字保留)、必要时重评分,并**如实告知用户"这条你 X 月 X 日记过,这是同一件事的新说法,我把增量并进去了"** |

要点:**不要把用户的重复灵感和稀泥糊过去,也不要默默多挂一张卡**——墙上出现两张近似的卡,用户会怪你没查重。查出来就直接说,并给出「合并 / 分拆」的选项(默认合并)。

### 1. 接收想法
从用户消息中提取灵感核心(一句话能讲清它在解决什么)。**同时一字不差地捕获用户抛出的「构思原话」(origin)**——这是用户原话,写入 `IDEA.origin` 与 `IDEAS[].origin`,用于详情页展示、列表页悬停提示,也是下次回看时还原当时思路的锚点;若用户未给原话则留空(留空则对应板块/提示自动隐藏)。
信息不足时先复述要点并合理假设,**竞品与市场务必联网核实**(遵循「批量并行联网查、撞车即弃」原则),不凭记忆硬写。

### 2. 十维评分(默认执行 · 1-10 整数,每维附一段评价)
> 仅当用户明确说「不要打分」时才跳过本节,走「轻量记录」(`scores` 留空)。
综合评分 = 十维均值(保留一位小数)。**历史条目只有 8 或 9 维也正常**,页面自动识别、不会报「维度数异常」;新灵感一律评满 10 维。

| 维度 | 评估要点 |
|------|----------|
| 解决的问题 | 痛点是否真实、紧迫、被广泛感知;必须区分「真实痛点(用户痛到愿意付费/改变)」还是「想象的问题(自嗨、没人 Care)」,后者不给高分 |
| 实用性 | 在日常/工作场景中可被使用的程度与频率 |
| 市场价值 | 目标人群规模、付费意愿、市场阶段;并论述市场运营与推广可行性——触达渠道、冷启动/获客难度、推广代价(是否需销售体系/地推/买量、获客成本量级)、能否自传播 |
| 目标用户 | 是否清晰定义了使用/付费对象:角色、场景、规模、付费能力与决策权。画像模糊或目标用户根本不会买单,给低分 |
| 竞品分析 | 已有玩家、其短板、本想法的差异化与壁垒(空白/强壁垒给高分) |
| 变现可能 | 变现路径清晰度与可行性(订阅/一次性/渠道替卖等) |
| 技术方案 | 实现思路与关键技术选型的可行性 |
| 可扩展性 | 未来可延展的方向、复用与组合空间 |
| 实现计划 | 能否拆成 MVP→加载背书→放大 的分阶段步骤 |
| **实现可行性** | **客观评判要落地需要什么样的技术能力与配套资源(硬件/数据/资质/渠道/人力),门槛高不高、合理代价内能否做出来。这是 §2.5 结构化评估的基础,也直接决定 §3 的 `cost` 数字** |

评级:≥8.5 S / ≥7.5 A / ≥6.5 B / ≥5.5 C / 其余 D。

### 2.5 实现可行性专项评估(完整体检必填 · 结构化,2026-09-15 新增)
第 9 维「实现可行性」不能只给一个分,必须落到**客观清单**上——这也是衡量成本、实现费用与代价的重要依据。在 `IDEA.feasibility` 对象里填四项:

- **tech(所需技术能力)**:逐条列实现要会/要自研/要外采的技能栈与工具(如 Python 后端、容器化、MiniPC 硬件选型、LIMS 集成、ACMG 变异分类、OCR 模型微调)。能分清「已有 / 需学 / 需外采」最好。
- **resources(配套资源)**:硬件库存、数据集、资质证照(软著 / 医疗器械备案)、渠道、人力预算等。把「没有就做不了」的硬资源单列出来。
- **verdict(可行性结论)**:一句话——`当前可直接做` / `需先补齐某项资源` / `暂不具备条件`。
- **cost_basis(成本与代价依据)**:把上面的「能力 + 资源」折算成费用 / 人日 / 周期的逻辑(如「硬件 0.5–2 万 + 自研 15 人日 + 现成数据 ¥0 额外」)。**这一条就是 §3 `cost` 字段里精力/时间/金钱数字的来历,两者必须能互相印证,不能各写各的。**

> 写不出 tech/resources 的灵感,其「实现可行性」分数不应给高——可行性评估本身就是逼自己把「想做」和「能做」分开。

### 3. 可落地拆解(必填,全部产出)
逐项填写,标准是「照着这份拆解,另一人也能开工」:

- **pros 好处**:具体收益,尽量算账(省下多少时间/多少钱、减少多少返工、带来什么可度量的价值)。避免「提升效率」这类空话。
- **cons 坏处与代价**:真实成本与副作用(时间、金钱、精力、机会成本、维护负担、可能的负面后果),要敢说难处。
- **risks 可能遇到的问题**:每条是 `{问题, 应对}`。问题要具体到场景(如「微信对公众号正文有反爬验证」),应对要可执行(如「用 X 方案绕过 / 退而求其次抓备用源」)。
- **roadmap 落地路线图**:分阶段(如 第0步·验证 → 第1步·MVP → 第2步·自用跑通 → 第3步·加载背书/放大)。每阶段给出 `目标 goal`、`可执行动作 steps[]`、`完成标志 done`。动作要是能直接动手做的事。
- **avoid 要避免的坑**:最容易犯且代价高的错误,一条条列清(如「别一上来就追求通用,先垂直自用」)。
- **metrics 成功/失败判据**:`{指标, 成功线, 止损线}`。必须是可在过程中随时评判的量化标准(数字、时间点、完成度),让「该继续还是该停」一眼可判。
- **cost 成本投入**:`{effort:{v,n}, time:{v,n}, money:{v,n}, other}` —— 精力(人日)、时间(周期)、金钱(量级/预算)、其它代价(机会成本等)。**这些数字必须能从 §2.5 的 `feasibility.cost_basis` 里找到依据**,两者互相印证,不能各写各的。
- **prompts 参考提示词**:`[{label:"用途", text:"可直接复制的优化提示词"}]` —— 一组「想把这个 idea 更好地落地时,可以直接喂给 AI 用」的提示词:每条一个用途标签 + 一段可直接复制使用的完整提示词(含占位符,用户替换成自己的真实情况即可)。明细页会在**最后**渲染成「参考提示词」栏,每条带「复制」按钮;留空则整块隐藏。建议每条灵感补 3-4 条(如:需求拆解 / 竞品调研 / 技术选型 / 低成本验证)。

### 4. 生成明细页(增量写入:先查是否已存在)
**首选走合并器**——把完整 IDEA 对象写入临时 JSON,一次完成「生成明细页 + 合并索引」:
```bash
node scripts/upsert-idea.js --base "<baseDir>" --detail "<baseDir>/_tmp_idea.json" --ts <时间戳>
```
目标文件已存在时它会**拒绝覆盖**并退出码非 0(换个时间戳或显式 `--force`);用完删掉临时 JSON。

**脚本不可用时手工生成**(务必守住「不覆盖」):
1. 确认 `<baseDir>/.xin-ideas/ideas` 目录(不存在先建);**若 `idea_<时间戳>.html` 已存在,换一个时间戳,不要覆盖**。
2. 复制 `assets/templates/detail.html` 到该路径,只改文件末尾 `<script>` 里的 `IDEA` 对象字段(结构见模板顶部注释):
   - `title` / `ts` / `tags`(数组,如 `["工具","AI","内容线"]`)/ `summary`(一句话结论)
   - `origin`(可选):用户抛出灵感时的原话,如「我有个想法,做一个可以把灵感记录成卡片墙的页面,同时给每个灵感打分」。详情页以「你的构思原话」引用卡呈现,列表页悬停/点击展示;留空则不显示。
   - `scores`:十维分数(**默认必填**——每个灵感都评满 10 维,含第 9 维「实现可行性」与第 10 维「目标用户」;仅当用户明确说「不要打分」时才留空 `{}`;历史 8 维条目也正常,页面会自动识别);`details`:各维度评价正文(与 `scores` 维度一一对应,多段用空行 `\n\n` 分隔)
   - `feasibility`:实现可行性专项评估对象 `{tech:[], resources:[], verdict:"…", cost_basis:"…"}`(§2.5)。完整体检必填。
   - `pros` / `cons` / `avoid`:字符串数组
   - `risks` / `roadmap` / `metrics`:对象数组(字段见模板注释)
   - `cost`:`{effort,time,money,other}`(数字须与 `feasibility.cost_basis` 印证)
   - `prompts`(可选):参考提示词数组 `[{label,text}]`,明细页最后渲染成「参考提示词」栏(每条带复制按钮);留空则不显示整栏
3. 不要改动其余 CSS/JS 与渲染逻辑。缺失字段对应板块会自动隐藏。
   - 页面标题(`<title>`)由模板脚本自动取自 `IDEA.title`,**无需手工替换**,只需保证 `title` 字段填对。

### 5. 更新卡片列表页(增量,禁止覆盖)

**首选:第 4 步的 `--detail` 已经顺带做完了**(合并器内部会调用索引合并)。

需要单独更新索引时(如批量补录、修正字段):
```bash
node scripts/upsert-idea.js --base "<baseDir>" --entry <entry.json>
```

**必须手工改时(脚本不可用),严格遵守:**
- `index.html` **不存在**才复制 `assets/templates/index.html`(复制后 `IDEAS` 为空,写法示例在注释里 —— **别把示例条目留在正式文件里**,否则卡片会指向不存在的文件)。
- `index.html` **已存在 → 只在尾部 `<script>` 的 `IDEAS` 数组里追加一项,绝不重写整个文件、绝不清空数组**:
  ```js
  { id:"<时间戳>", title:"...", ts:"YYYY-MM-DD HH:MM", tags:["..."],
    score:<综合均分>, summary:"...", origin:"(可选)构思原话", file:"ideas/idea_<时间戳>.html" }
  ```
- **改前先数一遍现有 `IDEAS` 条数 N**,追加后必须是 N+1。少了就是丢了内容,立即回退重做。
- 若原 `index.html` 不是当前模板结构(无 `a.c-link`)→ **不要硬改**:先备份为 `index.html.bak`,再按新模板重建并从 `ideas/` 恢复旧条目。这一步直接交给合并器最稳:
  ```bash
  node scripts/upsert-idea.js --base "<baseDir>" --rebuild
  ```
- `score` 即步骤 2 的综合评分;`file` 为**相对 `index.html` 的路径**(同目录下 `ideas/` 子目录,即 `ideas/idea_<时间戳>.html`)。统计数字由页面脚本自动重算。

### 6. 反馈用户
告知:已归档位置、综合评分与评级、一句话结论、以及成本量级与最主要的一条判据;提示在 `.xin-ideas/index.html` 可搜索/排序/点开详情。不要替用户决定要不要做,只给体检 + 拆解报告。

### 7. 生成后自检(必做,别跳)
交付前逐条核对,不符就先修再交:
1. `scores` **维度数为 8、9 或 10**(10 = 原八维 + 实现可行性 + 目标用户;9 = 含实现可行性;8 = 历史条目,正常),且键名与模板一致;**要么整个为空**(= 用户明确要求「不打分」的轻量记录)。页面顶部出现红色「维度数异常」提示条 = 维度数既不是 8 也不是 9,或键名写错;**未评分(`scores` 为空)不该出现该提示条**,也不该显示 0.0 分。
2. 明细页文件名、`ts`、`id` 三者时间戳一致;`index.html` 里 `file` 字段与实际文件名**逐字相同**(写错就是点进去 404),且路径为 `ideas/idea_<时间戳>.html`。
3. 页面里不残留 `undefined`、`{{`、`(灵感标题)` 这类未填充痕迹。
4. `index.html` 的 `IDEAS` 里能找到这一条的 `id`,且没有重复 `id`。
5. **完整体检时**:各段 `details` 都有正文,`pros`/`cons`/`avoid` 非空,`cost` 的 effort/time/money/other 齐全;建议同时补 `prompts`(3-4 条贴合的落地提示词),明细页底部会渲染「参考提示词」栏。**轻量记录(不打分)时**:这些字段应干净地留空(页面自动隐藏对应板块),别留半截数据。
6. 明细页「← 返回灵感库」链接为 `../index.html`(相对 `ideas/` 上跳一级到列表页)。
7. **原有灵感没丢**:写入前后对比 `IDEAS` 条数 —— 追加后 = 原条数 + 1(结构重建时 ≥ 原条数)。索引里原本有的旧条目,写入后必须仍在;条数变少就是丢内容,立即回退。
8. 若发生过结构重建:确认 `index.html.bak` 已生成且非空;若原先已有 `.bak`,确认**没被覆盖**(应出现 `index.html.bak.<时间戳>` 的新备份)。
9. `ideas/` 目录与索引对得上:索引里每条 `file` 都指向真实存在的文件(不 404);目录里若有索引未收录的明细页,写入时应已被自动补回索引。
10. 交互功能没丢:明细页含 `#toTop`(返回顶部浮动按钮,可拖动)与 `#closeCard`(关闭本页);列表页卡片锚点带 `target="_blank" rel="noopener"`。改过模板时用 `node scripts/upsert-idea.js --sync-pages --dry-run` 看一眼存量页面是否落后。

## 内容质量红线(务必遵守)
- 禁止用「提升效率」「赋能」「打造闭环」等空词充当内容;每条结论都要有具体动作、数字或判据支撑。
- 成本与判据必须量化到可感知量级(人日 / 周 / 元 / 百分比 / 时间点),不接受「很快」「不多」。
- 坏处与风险要写真实的难处,不做报喜不报忧的包装。
- 拿不准的市场/竞品信息先联网查,查不到就标注「待核实」,不编造数据。

## 设计基线
详情页与列表页均为**纯静态自包含**(不依赖外部 CDN/字体),浅色现代科技风,内置双主题。**AURORA 蓝紫极光**(默认;主色 `#6C63FF`/`#3ECFCF`,圆角 + 彩色光晕)与 **ROBOT 冷白机甲**(近黑 `#14171E` + 冷蓝灰 `#7A8598` + 白,方角、细线、钢灰阶,无彩色光晕),由右上角「色调」选择器切换、选择存 `localStorage`、跨页面生效;首屏默认色由 `config.json` 的 `theme` 字段决定(当前 `robot`)。明细页含雷达图(内联 SVG+JS 绘制)、分项打分条、构思原话引用卡、好处/坏处对照、问题与应对、时间线路线图、要避的坑、判据表、成本卡。列表页含卡片墙、实时搜索、排序下拉、原话角标(桌面悬停 / 手机点击弹 tip)。

**双主题切换约定(2026-09-15 加,改模板时别弄丢):**
- 所有色值走 CSS 变量(`--primary`/`--secondary`/`--bg`/`--ink`/`--line`/`--shadow`/`--bar1a..4b` 等);切主题只换 `html[data-theme]` 属性,不复制页面逻辑。JS 里也别硬写颜色(评分条用 `var(--bar*)`)。
- 右上角「色调」选择器 `.theme-pick`:点开列两个主题(三色块 + 中文名 + 英文名 + 勾选),点选即应用并落 `localStorage`,明细页与列表页共用、切页保持一致;首屏由 `<head>` 内联脚本先应用(避免闪一下)。
- 改模板配色时:只动 `:root` 与 `html[data-theme="robot"]` 两个变量块,别在组件里写死颜色。
- 默认主题 = `config.json` 的 `theme`(缺省回退到模板内置值);要整体改默认色,改这一个字段即可,不要逐个页面硬改。`upsert-idea.js` 在生成/同步页面时会把模板内置默认色替换为该字段值。

**交互约定(2026-09-14 加,改模板时别弄丢):**
- **列表页卡片在新标签页打开**:正文锚点写作 `<a class="c-link" href="…" target="_blank" rel="noopener">`,底部提示文案 `查看详情 ↗`。
- **卡片跳转只由正文锚点 `a.c-link` 承载**,标题栏 `.c-top`(标题 + 评分 + 「原话」角标)在 `<a>` 之外 —— 点标题栏或原话角标结构上就不可能跳转;别把角标挪回锚点内。
- **明细页底部有操作区** `.foot-nav`:`← 返回灵感库` + `✕ 关闭本页`(`#closeCard`)。关闭先试 `window.close()`,浏览器不允许脚本关闭标签时兜底 `location.replace('../index.html')`,保证按钮永远有反馈。
- **明细页有「返回顶部」浮动按钮** `#toTop`:滚动超过 360px 才出现;**可拖动**(pointer 事件,`touch-action:none`),拖完把位置存进 `localStorage['xin-ideas-backtop-pos']`,刷新后仍在原处 —— 这样手机上能把它挪开、不遮内容;位移超过 4px 算拖动、否则算点击(点击回顶部)。位置始终被约束在视口内。
- 明细页与列表页都要带 `-webkit-tap-highlight-color:transparent`,去掉移动端点击时的灰色高亮块。

模板已美化并含移动端适配,改动时只动数据对象;改了模板记得跑测试并用 `--sync-pages` 同步存量页面。

## 注意事项
- 本 skill 只评估与记录,不落地实现想法(除非用户另行要求)。
- 分类标签自由,建议与灵感空间既有方向(如 工具/内容/圈层/医疗/AI)保持一致,便于检索。
- `title`/`ts`/`tags`/`score`/`summary`/`origin` 在明细页和 `index.html` 里各存一份。改这些字段时**两处同步改**,否则列表显示与明细内容会对不上。`score` 为 `number` = 已体检评分;为 `null`/缺失 = 未评分(轻量记录),列表页显示灰色「未评」、不参与分数排序与统计。
- 整个灵感墙就是一个 `.xin-ideas` 目录,**备份 / 迁移 / 换机时直接整目录拷贝**,并同步更新 `config.json` 的 `baseDir`。
- **绝对不要用「重新生成一遍」的方式更新灵感墙** —— 那会覆盖掉长期积累的内容。写入永远走增量(见「防覆盖与容错」三条硬规则)。目录里出现 `index.html.bak*` 是保险绳,保留别删。
- 用 `--detail` 时写的临时 JSON(如 `_tmp_idea.json`)在归档完成后删除,别留在 `.xin-ideas` 目录里。

Files in this skill

  • .gitattributes287 B
  • SKILL.md29 KB
  • assets/templates/detail.html51.8 KB
  • assets/templates/index.html28.1 KB
  • config.json670 B
  • scripts/health-check.js9.9 KB
  • scripts/smoke-test.js5.2 KB
  • scripts/test-upsert.js12.7 KB
  • scripts/upsert-idea.js23.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.