Pitch deck evaluator
Skill thevibethinker/vibe-thinker-skills/pitch-deck-evaluator
Evaluate early-stage pitch decks across four investor credulity frames, stage-aware substantive rubric dimensions, optional named-POV reads, and markdown/JSON report rendering.From its SKILL.md
npx -y skills add thevibethinker/vibe-thinker-skills --skill pitch-deck-evaluatorAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.4 KB, ~1.3k tokens by cl100k_base, as published. Nobody here has run it
Pitch Deck Evaluator
Purpose
pitch-deck-evaluator evaluates pre-seed, seed, and Series A pitch decks as fundraising artifacts. It reads the deck, applies rubric/rubric_v1.md, emits four frame-distinct substantive scorecards, preserves style/substance separation, and optionally adds source-inspired named-POV reads.
Entry script
python3 Skills/pitch-deck-evaluator/scripts/evaluate.py <deck_path> [--config Skills/pitch-deck-evaluator/config/default_config.yaml] [--out evaluation.md]
Inputs
- PDF deck with a text layer.
- Plain-text or markdown deck with one slide per delimited block (
---,Slide N:, or## Slide N). - Directory bundle containing
deck.pdf,slides.md,slides.txt, or image files. - Image-only decks are detected but not scored in v1; the skill exits with
image-only deck not supported in v1; OCR or text-layer required. - Optional YAML/JSON config that tunes the analytical lens, not the company-specific answer.
Outputs
- Markdown evaluation report with:
- header/config snapshot
- executive read
- score snapshot
- F1-F4 frame scorecards
- substantive composite
- cross-frame synthesis
- optional named-POV reads
- per-slide annotations
- prioritized action list
- Optional JSON companion via
--emit-jsonor--json-out.
Config schema
Default config lives at config/default_config.yaml:
stage: pre_seed
enabled_frames: [F1, F2, F3, F4]
enabled_pov_palette: []
substantive_weight_overrides: {}
stylistic_weight_overrides: {}
register_override: auto
output_verbosity: standard
include_action_list: true
include_advisory_overall: true
model: claude-sonnet-4-6
scoring_backend: auto
emit_json: false
Key fields:
stage:pre_seed,seed, orseries_a; defaultpre_seed.enabled_frames: non-empty subset ofF1,F2,F3,F4; default all.enabled_pov_palette: opt-in named lenses; default empty to avoid named-investor cosplay.substantive_weight_overrides: per-dimension multipliers from0to3.output_verbosity:terse,standard, ordeep.
Named-POV anti-cosplay rule
Every named-POV section is prefixed with this disclaimer:
Based on public writing/interviews, this lens emphasizes certain questions and heuristics. It is not a claim to know how any named person or firm would evaluate, invest in, or pass on this company.
Named POVs are contrast lenses only. The evaluator must never claim that a real investor would invest or pass.
Standalone mode
The skill has no N5 runtime dependency. To run outside N5:
git clone <vibe-thinker-skills-repo>
cd vibe-thinker-skills
python3 -m venv .venv
. .venv/bin/activate
pip install pdfplumber pyyaml
python3 Skills/pitch-deck-evaluator/scripts/evaluate.py /path/to/deck.pdf --out evaluation.md
For tests and fixture generation, install:
pip install pytest reportlab
Examples
Default PDF evaluation:
python3 Skills/pitch-deck-evaluator/scripts/evaluate.py ~/Downloads/deck.pdf --out deck-evaluation.md
Text-deck evaluation with JSON companion:
python3 Skills/pitch-deck-evaluator/scripts/evaluate.py slides.md --out evaluation.md --emit-json
POV palette read:
enabled_pov_palette: [hustle_fund_yin_bahn, naval_ravikant]
output_verbosity: deep
Dependencies
Required runtime:
- Python 3.10+
pdfplumberpyyaml
Test-only:
pytestreportlab
The current v1 scorer defaults to a deterministic local heuristic backend, including when scoring_backend is auto. Use scoring_backend: anthropic explicitly to call the Anthropic Messages API with ANTHROPIC_API_KEY; CI and smoke tests never pay for model calls by default. The prompt boundaries and adapter protocols are present in frame_scorer.py and named_pov_scorer.py.
Script map
scripts/evaluate.py: CLI entry and pipeline wiring.scripts/deck_reader.py: PDF/text/directory ingestion.scripts/rubric_loader.py: markdown rubric parser andrubric_v1.jsoncache generator.scripts/frame_scorer.py: frame-wise substantive scoring and stage-discipline handling.scripts/named_pov_scorer.py: opt-in named-POV reads.scripts/output_renderer.py: markdown/JSON renderer.
Failure modes
- Missing path: non-zero exit with usage/error.
- Unsupported type: non-zero exit listing supported inputs.
- Empty or image-only PDF: non-zero exit with OCR/text-layer requirement.
- Invalid config: field-level error.
- Unknown POV: error with valid IDs.
- Stylistic scorer missing: evaluation continues and marks style as not scored, because D4.2 owns that adapter.
D4.2 interface contract
If present on PYTHONPATH, scripts/evaluate.py imports:
from stylistic_scorer import score_stylistic
Expected signature:
def score_stylistic(slides: list[dict], config: dict) -> dict:
return {
"stylistic_dimensions": [...],
"stylistic_composite": 3.4,
"style_substance_gap": {...},
}
D4.1 does not implement stylistic scoring.
What ships with it: 34 files
532.3 KB alongside SKILL.md, 18 of them executable
assets/
- default_config.yaml314 B
config/
- default_config.yaml314 B
references/
- CONFIG_SCHEMA.md7.5 KB
- OUTPUT_FORMAT.md6.2 KB
- rubric_v1.md38.7 KB
rubric/
- named_vc_palette.md46.4 KB
- rubric_v1.json38.8 KB
- rubric_v1.md38.7 KB
scripts/
- action_list_builder.pyruns20.7 KB
- deck_reader.pyruns8.5 KB
- evaluate.pyruns12.2 KB
- frame_scorer.pyruns22.7 KB
- INTERFACES.md3.1 KB
- named_pov_scorer.pyruns10.7 KB
- output_renderer.pyruns10.5 KB
- rubric_loader.pyruns13.4 KB
- stylistic_scorer.pyruns30.1 KB
- synthesis_renderer.pyruns9.4 KB
- voice_mode_detector.pyruns17.6 KB
tests/
- fixtures/output_renderer_golden.md1.1 KB
- fixtures/sample_seed_deck.pdf7.1 KB
- fixtures/sample_smoke_output.json157.7 KB
- fixtures/sample_smoke_output.md10.6 KB
- requirements-test.txt31 B
- test_action_list_builder.pyruns2.4 KB
- test_deck_reader.pyruns1.4 KB
- test_frame_scorer.pyruns2.9 KB
- test_output_renderer.pyruns2.0 KB
- test_rubric_loader.pyruns941 B
- test_stylistic_scorer.pyruns3.1 KB
- test_synthesis_renderer.pyruns790 B
- test_voice_mode_detector.pyruns3.0 KB
- README.md3.5 KB
- requirements.txt33 B