skills/43-wentorai-research-plugins/skills/research/funding/grant-writing-guide/SKILL.md
Write competitive research proposals with clear objectives and budgets
npx skillsauth add brycewang-stanford/Awesome-Agent-Skills-for-Empirical-Research grant-writing-guideInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A skill for preparing competitive research grant proposals. Covers proposal structure, writing strategies, budget preparation, and common evaluation criteria used by major funding agencies (NSF, NIH, ERC, NSFC).
Most funding agencies require these core components:
1. Cover Page / Project Summary (1 page)
- Title (concise, descriptive, no jargon)
- PI name, institution, co-PIs
- Total budget and duration
- Abstract (250 words)
- Keywords (5-8)
2. Project Description / Research Plan (10-15 pages typically)
a. Introduction and Background
b. Specific Aims / Research Questions
c. Research Design and Methods
d. Timeline and Milestones
e. Expected Outcomes and Significance
f. Broader Impacts (NSF) / Societal Relevance
3. Literature Cited / References
4. Budget and Budget Justification
5. Biographical Sketches / CVs
6. Data Management Plan
7. Facilities and Equipment
8. Supplementary Materials (letters of support, etc.)
The specific aims page is the most important page of any NIH-style proposal. Reviewers often form their opinion based on this page alone.
def specific_aims_template(project_info: dict) -> str:
"""
Generate a specific aims page structure.
Args:
project_info: Dict with 'problem', 'gap', 'approach', 'aims', 'impact'
"""
template = f"""
SPECIFIC AIMS
[Opening paragraph: The big picture problem]
{project_info['problem']}
[Gap paragraph: What is unknown/unsolved]
{project_info['gap']}
[Approach paragraph: What will you do and why]
{project_info['approach']}
The long-term goal of this research is [long-term vision].
The objective of this proposal is [specific objective].
The central hypothesis is [testable hypothesis],
based on [preliminary data / rationale].
The following specific aims will test this hypothesis:
Aim 1: {project_info['aims'][0]['title']}
{project_info['aims'][0]['description']}
Hypothesis: {project_info['aims'][0]['hypothesis']}
Aim 2: {project_info['aims'][1]['title']}
{project_info['aims'][1]['description']}
Hypothesis: {project_info['aims'][1]['hypothesis']}
[Impact paragraph]
{project_info['impact']}
"""
return template
def create_budget(personnel: list[dict], equipment: list[dict],
travel: list[dict], other: list[dict],
indirect_rate: float = 0.55,
years: int = 3) -> dict:
"""
Create a research budget with indirect costs.
Args:
personnel: List of {'role', 'salary', 'effort_pct', 'fringe_rate'}
equipment: List of {'item', 'cost'}
travel: List of {'purpose', 'cost_per_year'}
other: List of {'item', 'cost_per_year'}
indirect_rate: F&A rate (decimal)
years: Project duration in years
"""
budget = {'years': {}}
for year in range(1, years + 1):
year_budget = {'categories': {}}
# Personnel (with annual salary increases of 3%)
personnel_total = 0
for person in personnel:
salary = person['salary'] * (1.03 ** (year - 1))
cost = salary * person['effort_pct'] / 100
fringe = cost * person['fringe_rate']
personnel_total += cost + fringe
year_budget['categories']['personnel'] = round(personnel_total)
# Equipment (Year 1 only for major items)
equip_total = sum(e['cost'] for e in equipment) if year == 1 else 0
year_budget['categories']['equipment'] = equip_total
# Travel
travel_total = sum(t['cost_per_year'] for t in travel)
year_budget['categories']['travel'] = travel_total
# Other direct costs
other_total = sum(o['cost_per_year'] for o in other)
year_budget['categories']['other'] = other_total
# Modified total direct costs (MTDC excludes equipment >$5000)
mtdc = personnel_total + travel_total + other_total
if equip_total < 5000:
mtdc += equip_total
# Indirect costs
indirect = mtdc * indirect_rate
year_budget['categories']['indirect'] = round(indirect)
year_budget['direct_total'] = round(
personnel_total + equip_total + travel_total + other_total
)
year_budget['total'] = round(
year_budget['direct_total'] + indirect
)
budget['years'][year] = year_budget
budget['grand_total'] = sum(y['total'] for y in budget['years'].values())
return budget
# Example budget
budget = create_budget(
personnel=[
{'role': 'PI', 'salary': 120000, 'effort_pct': 20, 'fringe_rate': 0.30},
{'role': 'Postdoc', 'salary': 56000, 'effort_pct': 100, 'fringe_rate': 0.25},
{'role': 'PhD Student', 'salary': 34000, 'effort_pct': 50, 'fringe_rate': 0.10}
],
equipment=[{'item': 'GPU server', 'cost': 15000}],
travel=[{'purpose': 'Conference attendance', 'cost_per_year': 3000}],
other=[
{'item': 'Publication charges', 'cost_per_year': 2000},
{'item': 'Cloud computing', 'cost_per_year': 5000}
],
indirect_rate=0.55,
years=3
)
| Criterion | Weight | Key Questions | |-----------|--------|---------------| | Intellectual Merit | ~50% | Does it advance knowledge? Is the approach sound? | | Broader Impacts | ~50% | Societal benefit? Education? Diversity? Infrastructure? |
| Criterion | Key Questions | |-----------|---------------| | Significance | Does it address an important problem? | | Investigator(s) | Are PI and team qualified? | | Innovation | Novel approaches or concepts? | | Approach | Is the strategy well-reasoned and feasible? | | Environment | Does the institution support the work? |
def create_project_timeline(aims: list[dict], total_months: int = 36) -> list[dict]:
"""Create a project timeline for a grant proposal."""
timeline = []
for aim in aims:
for task in aim['tasks']:
timeline.append({
'aim': aim['name'],
'task': task['name'],
'start_month': task['start'],
'end_month': task['end'],
'milestone': task.get('milestone', ''),
'deliverable': task.get('deliverable', '')
})
return timeline
development
Conduct rigorous thematic analysis (TA) of qualitative data following Braun and Clarke's (2006) six-phase framework. Use whenever the user mentions 'thematic analysis', 'TA', 'Braun and Clarke', 'qualitative coding', 'identifying themes', or asks for help analysing interviews, focus groups, open-ended survey responses, or transcripts to identify patterns. Also trigger for questions about inductive vs theoretical coding, semantic vs latent themes, essentialist vs constructionist epistemology, building a thematic map, or writing up a qualitative findings section. Covers all six phases, the four upfront analytic decisions, the 15-point quality checklist, and the five common pitfalls. Produces a Word document write-up and an annotated thematic map. Does NOT cover IPA, grounded theory, discourse analysis, conversation analysis, or narrative analysis — use a different method for those.
development
Guide users through writing a systematic literature review (SLR) following the PRISMA 2020 framework. Use this skill whenever the user mentions 'systematic review', 'systematic literature review', 'SLR', 'PRISMA', 'PRISMA 2020', 'PRISMA flow diagram', 'PRISMA checklist', or asks for help writing, structuring, or auditing a literature review that follows reporting guidelines. Also trigger when the user asks about inclusion/exclusion criteria for a review, search strategies for databases like Scopus/WoS/PubMed, study selection processes, risk of bias assessment, or narrative synthesis for a review paper. This skill covers the full PRISMA 2020 checklist (27 items), produces a Word document manuscript in strict journal article format, generates an annotated PRISMA flow diagram, and enforces APA 7th Edition referencing throughout. It does NOT cover meta-analysis or statistical pooling. By Chuah Kee Man.
testing
Performs placebo-in-time sensitivity analysis with hierarchical null model and optional Bayesian assurance. Use when checking model robustness, verifying lack of pre-intervention effects, or estimating study power.
data-ai
Fit, summarize, plot, and interpret a chosen CausalPy experiment. Use after the causal method has been selected, including when configuring PyMC/sklearn models and scale-aware custom priors.