Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Reddit moderation via PRAW: fetch modqueue, classify reports, take actions.
.claude/skills/notque-reddit-moderate/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 56% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 195% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 48% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 45% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 51% | 0% |
On-demand Reddit community moderation powered by PRAW. Fetches your modqueue, classifies content against subreddit rules and author history using LLM-powered report classification, and executes mod actions you confirm.
| Mode | Invocation | Behavior | |------|-----------|----------| | Interactive | /reddit-moderate | Fetch queue, classify, present with analysis, you confirm actions | | Auto | /loop 10m /reddit-moderate --auto | Fetch queue, classify, auto-action high-confidence items, flag rest | | Dry-run | /reddit-moderate --dry-run | Fetch queue, classify, show recommendations without acting |
| Signal | Load These Files | Why | |---|---|---| | Classifying items, category definitions, confidence thresholds | classification-prompt.md | Routes to the matching deep reference | | Prompt template, untrusted content handling, prompt injection defense | classification-prompt.md | Routes to the matching deep reference | | Action mapping by confidence level, config.json format | classification-prompt.md | Routes to the matching deep reference | | Per-item classification steps, repeat offender check, mass-report detection | classification-prompt.md | Routes to the matching deep reference | | Script subcommands, flags, usage examples | script-commands.md | Routes to the matching deep reference | | Exit codes, error troubleshooting | script-commands.md | Routes to the matching deep reference | | Scan commands, setup commands, queue/report commands | script-commands.md | Routes to the matching deep reference | | Subreddit data directory structure, file purposes | context-loading.md | Routes to the matching deep reference | | Setup flow for new subreddits, bootstrapping | context-loading.md | Routes to the matching deep reference | | Credentials, prerequisites, dry-run default | context-loading.md | Routes to the matching deep reference | | Context loading sequence, missing file handling | context-loading.md | Routes to the matching deep reference |
Phase 1: FETCH -- Get the modqueue with classification prompts.
bashpython3 skills/content/reddit-moderate/scripts/reddit-mod.py queue --json --limit 25 | python3 skills/content/reddit-moderate/scripts/reddit-mod.py classify
This pipes modqueue items through the classify subcommand, which loads subreddit context from reddit-data/{subreddit}/ and assembles a classification prompt for each item. The output is a JSON array where each result contains item metadata, heuristic flags (mass_report_flag, repeat_offender_count), and a prompt field with the fully rendered classification prompt.
The classify subcommand is a prompt assembler only; it does not call any LLM. Fields classification, confidence, and reasoning are null/empty placeholders for the LLM to fill in Phase 2.
Read the output. For each item, read the prompt field and classify it.
Phase 2: CLASSIFY -- For each item, read the rendered classification prompt and assign a classification. The prompt contains all subreddit context, rules, author history, and report signals. Classify as one of: FALSE_REPORT, VALID_REPORT, MASS_REPORT_ABUSE, SPAM, BAN_RECOMMENDED, NEEDS_HUMAN_REVIEW.
Assign a confidence score (0-100) and one-sentence reasoning for each item.
> Load references/classification-prompt.md for category definitions, the full > prompt template, per-item classification steps, and confidence thresholds.
Phase 3: PRESENT -- For each modqueue item, present a summary grouped by classification. Include the classification label and confidence:
Item 1: [t3_abc123] "Post title here"
Author: u/username (score: 5, reports: 2)
Report reasons: "spam", "off-topic"
Body: [first 200 chars of content]
Classification: VALID_REPORT (confidence: 92%)
Reasoning: Author history shows 5 promotional posts in 7 days with no
community engagement. Violates subreddit rules against self-promotion.
Recommendation: REMOVE (reason: Rule 3)
Item 2: [t1_def456] "Comment text here"
Author: u/other_user (score: 12, reports: 1)
Report reason: "rude"
Classification: FALSE_REPORT (confidence: 88%)
Reasoning: Sarcastic but within community norms. Report appears frivolous.
Recommendation: APPROVEPhase 4: CONFIRM -- Ask the user to confirm or override recommendations. Wait for user input. Wait for explicit user confirmation before proceeding.
Phase 5: ACT -- Execute confirmed actions:
bashpython3 skills/content/reddit-moderate/scripts/reddit-mod.py approve --id t1_def456 python3 skills/content/reddit-moderate/scripts/reddit-mod.py remove --id t3_abc123 --reason "Rule 3: Self-promotion"
Report results after each action.
> Load references/script-commands.md for all subcommand flags and examples.
When invoked with --auto argument or when the user says "auto mode":
bash python3 skills/content/reddit-moderate/scripts/reddit-mod.py queue --auto --since-minutes 15 --json | python3 skills/content/reddit-moderate/scripts/reddit-mod.py classify
prompt field and classify it usingthe categories and confidence scoring from references/classification-prompt.md.
FALSE_REPORT / MASS_REPORT_ABUSE => approveSPAM => remove as spamVALID_REPORT => remove with generated reasonBAN_RECOMMENDED => always skip (requires human review regardless of confidence)Critical auto-mode rules:
Scan recent posts/comments for rule violations that were not reported:
bashpython3 skills/content/reddit-moderate/scripts/reddit-mod.py scan --json --classify --limit 50 --since-hours 24
With --classify, the scan output includes classification prompts. Read each prompt and classify the item. Items with scan_flags (job_ad_pattern, training_vendor_pattern, possible_non_english) have heuristic signals that supplement the LLM classification.
Same confidence thresholds and safety rules as auto mode apply.
Load these references when the task matches the signal:
| Signal / Task | Reference File | |---------------|----------------| | Classifying items, category definitions, confidence thresholds | references/classification-prompt.md | | Prompt template, untrusted content handling, prompt injection defense | references/classification-prompt.md | | Action mapping by confidence level, config.json format | references/classification-prompt.md | | Per-item classification steps, repeat offender check, mass-report detection | references/classification-prompt.md | | Script subcommands, flags, usage examples | references/script-commands.md | | Exit codes, error troubleshooting | references/script-commands.md | | Scan commands, setup commands, queue/report commands | references/script-commands.md | | Subreddit data directory structure, file purposes | references/context-loading.md | | Setup flow for new subreddits, bootstrapping | references/context-loading.md | | Credentials, prerequisites, dry-run default | references/context-loading.md | | Context loading sequence, missing file handling | references/context-loading.md |
This skill uses these shared patterns:
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 6,382 | 5,758 | -10% | 1 | 1 | 0% | 936 | 2,301 | +146% | 0 | 0 | — |
case-02 | fail→fail | 12,430 | 6,701 | -46% | 1 | 1 | 0% | 2,083 | 2,427 | +17% | 0 | 0 | — |
case-03 | fail→fail | 14,594 | 5,749 | -61% | 1 | 1 | 0% | 2,508 | 2,339 | -7% | 0 | 0 | — |
case-04 | fail→fail | 3,165 | 5,384 | +70% | 1 | 1 | 0% | 322 | 2,236 | +594% | 0 | 0 | — |
case-05 | fail→fail | 4,967 | 6,941 | +40% | 1 | 1 | 0% | 755 | 2,230 | +195% | 0 | 0 | — |
case-06 | fail→pass | 10,442 | 2,215 | -79% | 1 | 1 | 0% | 1,458 | 2,271 | +56% | 0 | 0 | — |
case-07 | fail→pass | 5,397 | 2,427 | -55% | 1 | 1 | 0% | 775 | 2,287 | +195% | 0 | 0 | — |
case-08 | pass→pass | 7,596 | 2,081 | -73% | 1 | 1 | 0% | 1,184 | 2,326 | +96% | 0 | 0 | — |
case-09 | pass→pass | 8,246 | 3,969 | -52% | 1 | 1 | 0% | 1,287 | 2,614 | +103% | 0 | 0 | — |
case-10 | fail→fail | 6,108 | 2,862 | -53% | 1 | 1 | 0% | 956 | 2,445 | +156% | 0 | 0 | — |
case-11 | fail→pass | 9,875 | 1,790 | -82% | 1 | 1 | 0% | 1,523 | 2,253 | +48% | 0 | 0 | — |
case-12 | fail→pass | 9,155 | 1,535 | -83% | 1 | 1 | 0% | 1,478 | 2,147 | +45% | 0 | 0 | — |
case-13 | fail→pass | 10,503 | 2,370 | -77% | 1 | 1 | 0% | 1,530 | 2,304 | +51% | 0 | 0 | — |
case-14 | fail→fail | 10,273 | 4,028 | -61% | 1 | 1 | 0% | 1,392 | 2,622 | +88% | 0 | 0 | — |
case-15 | fail→pass | 10,112 | 3,371 | -67% | 1 | 1 | 0% | 1,540 | 2,517 | +63% | 0 | 0 | — |
case-16 | fail→pass | 11,922 | 2,599 | -78% | 1 | 1 | 0% | 1,814 | 2,362 | +30% | 0 | 0 | — |
case-17 | pass→pass | 7,983 | 2,308 | -71% | 1 | 1 | 0% | 1,145 | 2,297 | +101% | 0 | 0 | — |
case-18 | fail→pass | 8,121 | 1,565 | -81% | 1 | 1 | 0% | 1,399 | 2,183 | +56% | 0 | 0 | — |
case-19 | fail→pass | 11,690 | 2,486 | -79% | 1 | 1 | 0% | 1,108 | 2,273 | +105% | 0 | 0 | — |
case-20 | pass→pass | 12,514 | 8,500 | -32% | 1 | 1 | 0% | 2,348 | 3,496 | +49% | 0 | 0 | — |
case-21 | pass→pass | 13,550 | 6,801 | -50% | 1 | 1 | 0% | 1,372 | 3,123 | +128% | 0 | 0 | — |
case-22 | pass→pass | 8,383 | 8,292 | -1% | 1 | 1 | 0% | 1,238 | 3,177 | +157% | 0 | 0 | — |
case-23 | pass→pass | 8,642 | 7,231 | -16% | 1 | 1 | 0% | 1,363 | 3,074 | +126% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 18 counted toward the lift figure. The other 5 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +39 percentage points is the difference between those two pass rates over the 18 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.