agentleFS
XuHo-ITXuHo-IT/Content-Agent-Kit/skills/review-gate/SKILL.md

review-gate

Skill3 starsChanged 3 months agoMITView on GitHub

Independently review one generated content item before it is published, for an agent built with content-agent-kit. Use during a daily run before publishing each item, or when the user asks to "review this item / check before posting". Returns a pass/fail verdict with specific issues.

20 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use workflow-router, security-review and 1 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • parcadeiSkill

    workflow-router

    Goal-based workflow orchestration - routes tasks to specialist agents based on user goals

    Also in 3 projects that use this

  • SentrySkill

    security-review

    Finds exploitable application security vulnerabilities in code changes. Use for Warden security scans, appsec review, OWASP-style checks, authentication or authorization bugs, injection, XSS, SSRF, path traversal, secrets, unsafe crypto, webhook verification, open redirects, or sensitive data exposure.

    Also in 4 projects that use this

  • MicrosoftSkill

    diagnose

    Use to systematically diagnose why scenarios fail — identifies root causes by analyzing agent traces, codebase, and behavioral patterns

    Also in 3 projects that use this

The file

We split this skill into the rules it gives an agent

11 rules. 0 are common, 7 are distinctive, and 4 are very specific to this project.

  • 0

    Common

    Most of the 17 edited versions we read keep these.

  • 7

    Distinctive

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Craft comes first: If the project has a WRITING_CRAFT.md, score its §7 rubric before anything else — those criteria are measurable, so …

    line 11
  2. Distinctive:

    Every issue must quote the offending sentence.

    line 28
  3. Distinctive:

    Never return vague feedback like "make the prose better".

    line 29
  4. Distinctive:

    Not reused: if the item has multiple images (e.g.

    line 33
  5. Distinctive:

    Run the machine checks yourself before judging by eye:

    line 38
  6. Distinctive:

    Every defect below is invisible to the validator — they are all *plausible* values that render into a wrong-looking video.

    line 67
  7. Distinctive:

    No machine-translation artifacts or mixed scripts in the title/body.

    line 87
  8. Very specific:

    Not a duplicate (cross-check history.json).

    line 88
  9. Distinctive:

    Every referenced id (nextId, answerId, revealsIds, …) points to something that exists.

    line 91
  10. Very specific:

    Social text is plain text: Run node scripts/social/validate-post.mjs <file> --strict.

    line 99
  11. Very specific:

    If the item is a forbidden type or uses a removed feature (per PLAYBOOK "never do") → ok:false, issue "forbidden output — reject", do NOT …

    line 105

“Common” is measured: kept by at least 6 in 10 of the 17 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Review gate (independent, pre-publish)

You are a SEPARATE reviewer from whoever generated the item. Be strict. Grade against this checklist and return { ok: true|false, issues: [...], fixes: [...] }.

Craft comes first. If the project has a WRITING_CRAFT.md, score its §7 rubric before anything else — those criteria are measurable, so count them:

#CriterionFAIL threshold
1Cliché phrases from the banned list (§4)> 1 per 1000 words
2Consecutive paragraphs opening with the same structure> 2
3Concrete sensory details per major scene< 3
4POV / forms of addresschanges mid-piece
5Peak momentstold (stated emotion) instead of shown
6Character voicesmain characters sound identical
7Cheap transitions ("suddenly"…)> 2 per 1000 words
8Register hard rule (e.g. mystery fair-play: every clue needed for the solution appears in the body)violated

FAIL IMMEDIATELY on: register hard rule violated · POV/address broken · cliché density at double threshold · nothing shown, only told.

Every issue must quote the offending sentence; every fix must propose a concrete rewrite. Never return vague feedback like "make the prose better".

Images

  • Correct subject + on-topic + not distorted / not offensive.
  • Not reused: if the item has multiple images (e.g. one per entity), each is distinct.
  • Complete: no required image is missing.

Video (items with a script.json — score the project's VIDEO_CRAFT.md §7 rubric)

Run the machine checks yourself before judging by eye:

node scripts/video/validate-script.mjs <dir>/script.json --strict
#CriterionFAIL threshold
1Validatorany error → fail immediately; any warning at --strict
2Hookfirst sentence is context or a greeting instead of the surprise
3Pacingany body scene outside 25–40 words
4Total lengthoutside 270–360 words (≈90–120s)
5Narration cleanany digit, emoji, URL or → & % $ # + = in voiceText → fail immediately
6Numbers spokenread each voiceText aloud — any figure that comes out wrong
7Template varietyone template used > 2×
8Template fita list scene not on a list template; a 2-way compare not on the comparison template
9On-screen textany inputs field over its limit in video-templates/CATALOG.md
10Outrowrong brand / wrong URL / not the last scene → fail immediately

Also check the rendered file when one exists: video.mp4 is 1080×1920, its duration is roughly voice.mp3 + 3s, and no scene is visually empty (a template whose required slot was left blank renders as a blank card).

Look at the frames. This is not optional.

node scripts/video/contact-sheet.mjs <dir>/video.mp4

One labelled thumbnail per scene, with * marking the ones carrying footage or a screenshot. Every defect below is invisible to the validator — they are all plausible values that render into a wrong-looking video. Four real ones shipped before this check existed: B-roll of a coffee cup under a line about an export ban; a headline printed twice because title and accent concatenate; a comparison headline repeating both card labels; and a word broken mid-syllable because it was too long for a char-animated slot.

#CriterionFails when
aB-roll matches the linethe clip shows something unrelated to what is being said → fail immediately
bText readable over footagea bright clip swallows the headline
cScreenshot is evidencea generic homepage instead of the page actually being cited
dScreenshot is cleana cookie/consent wall in frame, or the page headline cropped away → fail immediately
eNo B-roll under a statistica scene whose point is a number uses frame-broll
fFootage is seasoningmore than a third of scenes are B-roll — it stops being a news video
gText fits its slotany word wrapped or clipped, especially in char-animated slots
hMedia host is durablemedia-lock.json or the post points at catbox → the link will die → fail immediately
imedia-lock.json committedmissing → the video cannot be reproduced anywhere else

Content

  • Coherent, correct length, target language with correct diacritics.
  • No machine-translation artifacts or mixed scripts in the title/body.
  • Not a duplicate (cross-check history.json).

Logic (for structured items — puzzles, cases, multi-part):

  • Every referenced id (nextId, answerId, revealsIds, …) points to something that exists.
  • The answer is derivable from the given information (no guessing, no dead ends).
  • 🔴 No internal-id leak: no logic id (q1, o2, n3, s1…) appears in any reader-visible text (content/revealText/titles/labels), even as (q1)/[o2]. Scan for ([a-z]\d+) tokens → any hit is ok:false (see docs/03-conventions.md).

SEO / metadata

  • Title + subtitle/description are compelling and accurate; slug/tags sane.
  • Social text is plain text. Run node scripts/social/validate-post.mjs <file> --strict. Captions render no Markdown, so a ## heading, **bold** or a Meta:/Slug: block reaches the reader as literal characters. make-post.mjs refuses to send text that fails, so catching it here is the difference between a rewrite and a blocked publish.

Policy

  • If the item is a forbidden type or uses a removed feature (per PLAYBOOK "never do") → ok:false, issue "forbidden output — reject", do NOT attempt to fix.

Verdict

  • ok:true → clear to publish.
  • ok:false → return specific, actionable issues so the generator can fix. Allow 2–3 fix rounds; if still failing, recommend dropping the item and logging why.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.