# Slop Check

> Run an adversarial slop review over a deck spec or a finished .pptx, returning severity-ranked findings.

- **Type:** Skill
- **Install:** `agentstack add skill-jameshemson-slides-slop-check`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [jameshemson](https://agentstack.voostack.com/s/jameshemson)
- **Installs:** 0
- **Category:** [Agent Skills](https://agentstack.voostack.com/c/agent-skills)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [jameshemson](https://github.com/jameshemson)
- **Source:** https://github.com/jameshemson/slides/tree/main/source/skills/slop-check

## Install

```sh
agentstack add skill-jameshemson-slides-slop-check
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

## MANDATORY PREPARATION

Load the `presentation-craft` skill. Read its [SKILL.md](../presentation-craft/SKILL.md).

Read [slop.md](../presentation-craft/reference/slop.md) in full: the three layers, the banned phrases and structures, the emotion line, and the score. This skill runs that detector standalone. Read [ai-voice.md](../presentation-craft/reference/ai-voice.md) too — it holds Layer 3, the AI-voice tells.

---

$ARGUMENTS

You run an adversarial slop review. The job is to catch generic, AI-flavoured slop in a deck before it ships, and to say where it is and how bad it is. You return findings, not a verdict.

If the user did not name a file, ask for the deck spec or the `.pptx` to review.

## Step 1: Read the deck

The skill takes either form.

**A deck spec (`.deck.md`).** Read the Markdown directly. You see the slide structure, the field text, the speaker notes, and the `Visual:` descriptions.

**A finished `.pptx`.** Read it with `python-pptx`. Run `python3 -c "import pptx"` first; if it fails, tell the user to `pip install python-pptx` (on a managed macOS Python, `pip install --break-system-packages python-pptx` or a virtualenv). Then pull each slide's text (drawn or placeholder), its role, and the speaker notes. A script-built deck's field text sits in shapes named `slides-field:` or `slides-lead:`, which the inline script below reads the same way as any other text frame:

```
python3 -c "
from pptx import Presentation
p = Presentation('deck.pptx')
for i, s in enumerate(p.slides, 1):
    role = s.name if (s.name or '').startswith('slides-role:') else s.slide_layout.name
    print(f'--- slide {i}: {role} ---')
    for sh in s.shapes:
        if sh.has_text_frame and sh.text_frame.text.strip():
            print(repr(sh.text_frame.text))
    if s.has_notes_slide:
        print('notes:', repr(s.notes_slide.notes_text_frame.text))
"
```

## Step 2: Run all three layers of the detector

Work through `slop.md` end to end.

**Layer 1, presentation slop.** Check every slide for: the tacked-on strapline, the slide as a document, the slide as a script, bullet soup, title and body restating each other, the deck being about the presenter or the product, facts with no story, unearned hype and ad-copy voice, decoration that does not clarify, register mismatch, leftover scaffolding, and the device reflex — a hero number, a dumbbell, or a big-text line reached for by default rather than earned by the beat (flag the reflex, not the device: each is right when the content earns it).

**Layer 2, prose slop.** Check the speaker notes and any prose against the banned phrases and banned structures: throat-clearing openers, emphasis crutches, business jargon, adverbs, filler, binary contrasts, negative listing, dramatic fragmentation, passive voice, em dashes, lazy extremes.

**Layer 3, AI-voice tells.** Scan notes and slide text against `ai-voice.md`: the Claudism catalogue (performative pushback, reframe announcements, naming the move, structural metaphor, the antithesis flip, false candor, the aphoristic closer, false universals, the clean mental model, the colon reveal, the conditions checklist, and the rest), the AI vocabulary watchlist, assistant-artifact slop (a trailing offer or model self-reference fails the draft outright, like an em dash), and uniform rhythm.

Hold the emotion line. Earned emotion, grounded in something true and concrete, passes. Flag only the unearned kind.

**Chart figures match the words.** When a slide carries a `Chart:` block, check its numbers against the figures in the Body and the Notes. A chart that shows one figure while the prose claims another is a trust break: flag it and name both numbers. (A finished `.pptx` holds the chart as an image, so run this check on the deck spec, where the chart data is readable.)

**One device, deck-wide.** Read the deck as a set, not only slide by slide. If one device carries most of the content slides — a run of hero-number slides, a wall of dumbbells, five near-identical stat rows — flag it even when each slide reads clean alone; a deck of one device reads as a template, not an argument. Name the device and the slides it repeats on. (`build-deck` flags this mechanically for named composed devices; here you also catch the ones it cannot count — repeated hand-drawn dumbbells, a repeated freeform treatment.)

## Step 3: Score

Rate the deck's written content 1 to 10 on each dimension from `slop.md`: Directness, Rhythm, Trust, Authenticity, Density. Report the five numbers and the total out of 50. Below 35, the deck needs a revision pass.

## Step 4: Report findings

Return a list of findings ranked by severity. For each finding:

- **Where.** The slide number and field, or the line of notes.
- **What.** The slop pattern, named from `slop.md`.
- **The quote.** The offending text, so the user sees it.
- **The fix.** What to write instead, concrete.

Rank highest severity first: absolute bans (the tacked-on strapline, leftover scaffolding, unearned emotion) at the top, then the rest.

Do not return a pass-or-fail verdict. A deck with two minor prose tics and a deck with a strapline on every slide are not the same, and one label would hide that. Give the user the ranked findings and the score, and let them decide what to fix.

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [jameshemson](https://github.com/jameshemson)
- **Source:** [jameshemson/slides](https://github.com/jameshemson/slides)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-jameshemson-slides-slop-check
- Seller: https://agentstack.voostack.com/s/jameshemson
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
