@gasserane/proposal

Score a written grant proposal against the donor''s published award criteria (SCORE mode), or compare that scoring against the donor''s own Evaluation Summary Report (CALIBRATE mode). Use when Ane asks how a donor would score an application, whether it passes the threshold, where points would be lost, or hands over a call document plus a submitted proposal. Distinct from /proposal (writes proposals TO donors), procurement-offer-review and tor-procurement (the buying side, supplier offers against a ToR), accreditation-desk-review (MAs against IPPF standards), and check-deliverable (a QA gate, not a scored assessment).

View in AI SkillSafe app
Scanned · no findings
0 downloads
0 stars
0 demos
SKILL.md
nameproposal
descriptionGenerate a donor proposal pack (CERV first) with the full MEL stack: intake, a fixed roster delegated to Vi (evidence-synthesis, toc-builder, indicator-designer, the gender and safeguarding lens specialists, proposal-architect), then the seven-artefact branded pack with the AI-disclosure colophon. Use when Ane builds a grant proposal or runs ''/proposal --donor cerv''; donor is an argument so Gates/OSF/UN are later --donor values. Does not fill Part A portal forms, submit, or sign off finance/legal. Distinct from donor-proposal-scoring (scores a written proposal) and implementation-pack (post-award).
modelopus

/proposal — donor proposal pack generator

You generate a fundable, donor-faithful proposal pack and hand standalone IPPF-branded artefacts to a project manager who owns them with no AI dependency. You are the Ann-style front-half: intake, roster, delegation. Vi executes.

Arguments

  • --donor <name> (default cerv). Maps to ane_package/proposals/donor_profiles/<name>.json.
  • Optional concept-brief path. If given, read it. If absent, run the intake below.

Step 1 — Load the donor profile

Run the profile loader (do not hand-parse the JSON):

from ane_package.proposals.config import load_profile
profile = load_profile("cerv")  # or the --donor value

State the locked parameters back to Ane: page limit, award-criteria split, funding type, indirect rate, co-financing rate.

Step 2 — Intake (hybrid; never invent)

If a concept-brief path was supplied, read it. Otherwise ask Ane, in one batched message, for the real inputs: project objective and needs; target call ID; partners/consortium; work-package outline; duration; any known indicators or ToC. Do NOT invent any project-specific value. If Ane cannot supply a value, it stays [PM: insert X] in the pack (factual-reliability rule).

Step 3 — Build the fixed CERV roster and delegate to Vi

Hand Vi this fixed roster (the CERV flow is deterministic; the roster does not vary by run):

  1. evidence-synthesis — needs analysis and justification (Relevance).
  2. toc-builder — the change pathway.
  3. indicator-designer — the indicator set.
  4. gender-transformative-assessor — gender findings (always spawned; scores in Quality/Impact).
  5. safeguarding-reviewer — do-no-harm gate (always spawned).
  6. proposal-architect — draft MEL sections, coherence check, criteria map, lens integration, compliance; returns the handback JSON.
  7. qa-reviewer — final gate.

Pass Vi: the loaded profile parameters, the intake inputs, a ## Standing instructions block (audience tier, voice, visual identity, plain-language layer), and the ## P1 wiki context block if available. On the web, Vi spawns these from the committed .claude/agents/ mirror.

Step 4 — Validate the architect handback

Take proposal-architect's handback JSON. Validate and coherence-check it before building:

from ane_package.proposals.architect_io import validate_handback, check_coherence
data = validate_handback(profile, handback)        # raises HandbackError on a bad shape
report = check_coherence(data.get("logframe"), data.get("workplan"), data.get("budget"))

If validate_handback raises, or report.ok is false, send Vi back to proposal-architect once with the specific break (report.issues). Do not build an incoherent pack.

Step 5 — Emit the pack

from ane_package.proposals.pack import build_pack
manifest = build_pack(profile, out_dir, data=data)

The pack carries the seven artefacts plus a README control sheet, all IPPF-branded. Apply mel_wiki/wiki/concepts/edit-preservation-protocol.md when target file exists — if the output folder already holds an edited pack, treat Ane's content as canonical and edit scope-bounded, do not regenerate from scratch.

Step 6 — Disclosure and scope boundary

  • Add the AI-disclosure colophon per mel_wiki/wiki/concepts/ai-use-in-publications.md. AI is never an author.
  • State the scope boundary explicitly to Ane: Part A portal forms are filled in-portal; submission, binding co-financing, final budget sign-off, and legal eligibility/PIC-PADOR registration are owned by finance, legal, and the authorising officer — not by this skill.

Output

Return the pack folder path, the manifest, the coherence report, the criteria-coverage map, and the compliance findings. Surface any [PM: insert X] count so Ane sees what the PM must still complete.

Embed badges

Add these to your README to show the skill's verification status.

SkillSafe verified badge
Verified badge
[![SkillSafe verified badge](https://api.skillsafe.ai/v1/badge/@gasserane/proposal/verified)](https://skillsafe.ai/skill/@gasserane/proposal/)
Installs badge
Installs badge
[![Installs badge](https://api.skillsafe.ai/v1/badge/@gasserane/proposal/installs)](https://skillsafe.ai/skill/@gasserane/proposal/)
Scan badge
Scan badge
[![Scan badge](https://api.skillsafe.ai/v1/badge/@gasserane/proposal/scan)](https://skillsafe.ai/skill/@gasserane/proposal/)
Eval pass rate badge
Eval pass rate
[![Eval pass rate badge](https://api.skillsafe.ai/v1/badge/@gasserane/proposal/eval)](https://skillsafe.ai/skill/@gasserane/proposal/)