当用户明确要求“写/生成 NSFC 预算说明书”“写预算说明”“生成 budget.tex / budget.pdf”“写国自然预算 justification”时使用。基于用户标书正文或补充材料,输出一份可提交的预算说明书 LaTeX 项目并渲染 `budget.pdf`。若用户未指定工作目录,必须暂停并先要求其指定。⚠️ 不适用:用户只是想了解预算原则;用户仅要预算表数字而不写说明书;或用户是 2026 青年 A/B/C 默认包干制且无需预算说明书的场景。
80%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./skills/nsfc-budget/SKILL.md优先让用户按 skills/nsfc-budget/references/info_form.md 提供。最少要拿到:
general | local | youth若用户没给全,按下面规则处理:
config.yaml:defaults.total_budget_wan 取默认值。config.yaml:defaults.target_chars 推荐区间执行。config.yaml:defaults.per_section_max_chars。config.yaml:defaults.template_id。config.yaml:rules.budget_modes。config.yaml:rules.budget_scopes。按用户请求和配置文件提供必要输入;缺失信息应明确列出并停止依赖该输入的步骤。
bensz-collect-bugs 按规范记录到 ~/.bensz-skills/bugs/,严禁直接修改用户本地 Claude Code / Codex 中已安装的 skill 源码。gh 与 bensz-collect-bugs,仅上传新增 bug 到 huangwb8/bensz-bugs;不要 pull / clone 整个 bug 仓库。目标:基于标书正文与补充材料,写出一份“经得起财务与学术双重审视”的预算说明书,并交付可编辑 LaTeX 项目与 budget.pdf。
先创建隐藏工作区与 budget_spec.json 骨架:
python3 skills/nsfc-budget/scripts/init_budget_run.py \
--workdir <workdir> \
--project-type <general|local|youth> \
--template-id 01如用户已给材料路径,可追加多个 --material <path>。脚本会把材料快照复制到 .bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/nsfc-budget/{yyyy-mm-dd-hh-mm}/input/materials/。
若同一分钟重复初始化,脚本会自动追加后缀避让目录名冲突,避免 run 目录互相污染。
读取正文与补充材料后,先在隐藏工作区内形成内部判断,再填写 budget_spec.json:
写作原则见:skills/nsfc-budget/references/budget-writing-rules.md。
budget_spec.json脚本生成的 budget_spec.json 是唯一结构化中间稿。至少补齐:
meta:项目题目、项目类型、预算模式、工作目录、输出目录、模板 ID、字数目标budget:总预算口径、直接费用总额(若已知)、设备/业务/劳务/合作转拨/其他来源金额sections:五个部分的正文段落(数组)evidence:关键测算依据、必要假设、待确认点要求:
设备费 + 业务费 + 劳务费 = 直接费用总额(若你已明确直接费用口径)budget.*_wan 与 sections.*.amount_wan 必须保持一致,避免出现两份金额源漂移。合作研究转拨资金 不能与前三项形成逻辑冲突其他来源资金 必须写明来源与用途;若无,则显式写“无”用脚本把 JSON 渲染为 LaTeX 项目,并把校验报告与编译日志留在隐藏目录:
python3 skills/nsfc-budget/scripts/render_budget_project.py \
--spec <workdir>/.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/nsfc-budget/{yyyy-mm-dd-hh-mm}/budget_spec.json脚本会:
<workdir>/<output_dirname>/extraTex/*.texbudget_spec.json 是否仍位于 <workdir>/.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/nsfc-budget/,保证隐藏工作区承诺不被破坏%、#、&、_),减少自然语言正文导致的编译失败validation_report.md/jsonvalidation_report.md 路径budget.pdf如校验失败,先修 budget_spec.json 再重新运行脚本,直到通过。
交付前必须至少复核这些点:
默认采用以下结构化策略:
总述从严:先交代预算遵循政策相符性、目标相关性、经济合理性。
逐项落地:每节至少讲清“用途 + 测算 + 必要性 + 依据”。
少说空话:不要写“为保证项目顺利开展”“具有重要意义”这类无信息量句子,除非后面紧跟具体任务与支出。
金额服务任务:说明书不是“财务散文”,每一段都要能回到研究方案。
宁缺毋滥:缺材料时,先保守、先追问、先明确边界;不要补脑。
skills/nsfc-budget/references/info_form.md
skills/nsfc-budget/references/budget-writing-rules.md
skills/nsfc-budget/scripts/init_budget_run.py
skills/nsfc-budget/scripts/render_budget_project.py
skills/nsfc-budget/models/01/.template.yaml
最终输出必须同时包含:
<workdir>/<output_dirname>/:完整 LaTeX 项目<workdir>/<output_dirname>/budget.pdf中间过程保留在:
<workdir>/.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/nsfc-budget/{yyyy-mm-dd-hh-mm}/本 Skill 的新任务中间文件统一写入 ./.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/{skill名}/input|output|log/。同一任务复用一个任务根目录;多 Skill 协作才创建 shared/。正式交付物不写入该目录,历史隐藏目录只允许显式兼容读取、迁移或清理。
完成后执行 Skill 已有的静态检查、脚本验证或人工复核,并记录通过标准。
保留错误证据和已完成产物;仅在输入、环境或外部依赖恢复后从最近的失败步骤重试。
<workdir>/.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/nsfc-budget/。<workdir>/<output_dirname>/(默认值见 config.yaml:defaults.output_dirname)。template_id、output_dirname、.template.yaml 里的 section_files/latex_entry/pdf_name 都必须是相对安全路径;不得包含绝对路径、. / .. 越界段。output_dirname 不得指向工作目录根路径,也不得与隐藏工作区 <workdir>/.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/nsfc-budget/ 重叠。./.bensz-api/task-{yyyymmdd-hhmm}-{简短描述}/ 根目录;共享材料放入 shared/,Skill 专属材料放入该 Skill 的 input/、output/、log/。config.yaml:skill_info.version;公开 API、协议、目录或配置变更同步文档与 CHANGELOG.md。bensz-collect-bugs;先脱敏写入 ~/.bensz-skills/bugs/,当前任务不中断,只有用户明确要求才公开上报,禁止直接修改用户已安装的 Skill 源码。不得超出本 Skill description 和上方流程所声明的范围;不将未验证的信息伪装成确定结论。
huangwb8/ChineseResearchLaTeX
9f3332f
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.