grant-writer
1. Overview
grant-writer drafts competitive NSFC grant proposals and general research proposals. Three modes: section mode drafts one section (rationale, innovation, methods, or budget); full mode drafts all sections sequentially; review mode evaluates a draft against NSFC criteria. When upstream modules (literature-reviewer, research-gap-finder) have run, grant-writer inherits their key_findings and summary automatically — no re-collection needed.
2. Parameters
Required
| Parameter | Values | Description |
|---|---|---|
grant_type |
nsfc_general | nsfc_young | nsfc_key | general_proposal |
Grant program type. Determines format rules, character limits, and eligibility constraints. |
section |
rationale | innovation | methods | budget | full | review |
Which section to draft, or full to generate all sections sequentially, or review to evaluate an existing draft. |
Optional
| Parameter | Values | Description |
|---|---|---|
domain |
tcm | bioinformatics | clinical | pharmacology |
Research domain. If not provided by the user, load from context_output.parameters.domain if available. |
research_area |
string | Brief description of the research topic (1–2 sentences). If upstream summary is available, that is used as the basis — confirmed with user before drafting. |
target_amount |
string | Requested funding amount (e.g., "580,000 RMB" for NSFC general). Used to calibrate budget section proportions. |
duration |
string | Project duration (e.g., "4 years"). Affects budget annualization and methods timeline. |
language |
en | zh (default: zh) |
Output language. Grant proposals submitted to NSFC are typically in Chinese. |
prior_work |
string | Brief description of the applicant's preliminary data. Used to strengthen the rationale and methods feasibility. |
Parameter collection rule
If required parameters are missing and cannot be inherited from upstream context, ask one at a time: grant_type first, then section. Do not ask for optional parameters unless the user has mentioned them or they are needed for the current section.
3. Workflow
Step 1 — Check upstream context.
Inspect context_output before asking anything. Extract as already-provided: domain, key_findings, summary, parameters.target_journal, language, all parameters.*. If upstream status is failed, halt and inform the user.
Step 2 — Collect missing required parameters.
Identify which required parameters (grant_type, section) are absent. Ask for each one at a time: grant_type first, then section. Wait for the user's answer before asking for the next.
Step 3 — Collect optional context.
Ask for research_area and prior_work only if not inferable from upstream context. If upstream summary from literature-reviewer or research-gap-finder is available, present it to the user as the proposed research_area basis and ask for confirmation before proceeding. Do not ask for domain if it is already present in context_output.parameters.domain.
Step 4 — Load reference files. Load the reference files appropriate for the requested section:
- All sections → load
references/nsfc-format.mdfor format constraints and character limits. section: rationaleorsection: innovation→ also loadreferences/significance-innovation.md.section: budget→ also loadreferences/budget-guidelines.md.section: full→ load all three reference files.section: review→ loadreferences/nsfc-format.mdandreferences/significance-innovation.mdfor review criteria.
Step 5 — Draft the requested section.
Compose the grant text using structural frameworks from loaded references, content from upstream key_findings and summary, and the user-provided research_area and prior_work.
- Rationale (立项依据): Background → current research status → gaps → how this project addresses gaps → expected significance.
- Innovation (创新性): 3–5 numbered points. Each: [研究角度/技术方法/理论框架] + [what is new] + [comparison to prior approaches]. Apply taxonomy from
references/significance-innovation.md. - Methods (研究方案): Hypothesis → specific aims → design per aim → expected results → contingency plans.
- Budget: 劳务费 → 设备费 → 耗材费 → 国际合作与交流费 → 出版/文献/信息费 → 间接费用. Apply constraints from
references/budget-guidelines.md. Present as a table. - Full: Execute rationale → innovation → methods → budget sequentially, each within character limits. Output all four sections in one continuous response, separated by
---horizontal rules and bold section headers (立项依据, 创新性, 研究方案, 经费预算). Issue the iteration prompt (Step 7) once at the end. - Review: Evaluate draft against four NSFC criteria (科学意义 20%, 创新性 30%, 研究方案可行性 30%, 申请人研究基础 20%). Rate each ✅ / ⚠️ / ❌ with specific revision suggestions. Check for: (a) missing/thin Paragraph 3 (gap statement), (b) reference count <5, (c) missing Paragraph 5 impact statement, (d) innovation points with no comparison to existing approaches, (e) missing contingency plans in 研究方案.
Step 6 — Apply character limits and language.
For Chinese grants (language: zh), output in Chinese using correct NSFC terminology. Verify the drafted text against character limits from references/nsfc-format.md:
nsfc_general: 立项依据 ≤3000 characters, 研究方案 ≤8000 characters.nsfc_young: 立项依据 ≤2000 characters, 研究方案 ≤6000 characters.nsfc_key: 立项依据 ≤5000 characters, 研究方案 ≤12000 characters. Show character count at the end of each section draft.
Step 7 — Present draft and offer iteration. After presenting the draft, ask: "Would you like me to expand, compress to the word limit, translate to English for collaborators, or move to the next section?"
4. Output Format
Header line on every output:
[Grant: <grant_type_label> | Section: <section_label> | Language: <ZH|EN>]
For Chinese output (language: zh):
- Section heading in Chinese (e.g., 二、立项依据, 三、创新性)
- Paragraph text in Chinese following the structural framework
For innovation section — numbered list with bold aspect labels:
**创新点1:[研究视角的创新]**
本研究首次…现有研究多采用…本研究通过…
**创新点2:[方法学创新]**
…
For budget section — table format:
| 经费类别 | 金额(元) | 数量依据 |
|---------|----------|--------|
| 劳务费 | … | … |
Character count shown at section end:
[字符数: 1847/3000]
For section: review — four-criterion assessment block, each with ✅ / ⚠️ / ❌ rating, followed by a ranked improvement list.
5. context_output
Reads from upstream
| Field | Source | Usage |
|---|---|---|
parameters.domain |
any upstream module | Domain-specific terminology and framing |
parameters.target_journal |
any upstream module | Maps to grant funding body context |
key_findings |
literature-reviewer, research-gap-finder | Content basis for rationale section |
summary |
literature-reviewer, research-gap-finder | Proposed research_area — confirmed with user before use |
raw_text |
any upstream module | Additional content context if provided |
Writes to output
{
"module": "grant-writer",
"summary": "NSFC general grant innovation section drafted, 3 innovation points",
"raw_text": "<drafted grant section(s)>",
"parameters": {
"grant_type": "<collected>",
"section": "<collected>",
"language": "<collected>"
},
"status": "success | partial | failed",
"error_message": null
}
Downstream readers of raw_text: chinese-polisher, english-polisher (if translation requested).
6. References
See references/ for:
nsfc-format.md— Grant type comparison, character limits, review criteria weights, common rejection reasons, and format requirementssignificance-innovation.md— 立项依据 structural framework, innovation point structure and taxonomy, strength/weakness indicator phrasesbudget-guidelines.md— NSFC budget category breakdown, sample budget table, justification rules, and common budget mistakes