plugin-testing

A testing checklist for reflection and text-to-speech plugins. Reflection checks whether an agent finished a task, while text-to-speech converts written text into spoken audio.

In plain words
What is it for?
Use it to validate code changes and run tests covering recent user input, completion handling, saved reflection records, skipped sessions, and limits on repeated attempts.
Why use it?
It turns plugin requirements into specific checks before deployment. It helps catch incorrect feedback, unwanted repeat loops, logging problems, and unsafe handling of cancelled or special sessions.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/dzianisv/opencode-plugins/plugin-testing
Any agent
npx skills add dzianisv/opencode-plugins --skill plugin-testing
Clone the repo
git clone --depth 1 https://github.com/dzianisv/opencode-plugins

Made for: Claude Code, Codex.

Per session 33 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 2,116 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00033 $0.02116
Opus 5 $0.00016 $0.01058
Sonnet 5 $0.00007 $0.00423
Haiku 4.5 $0.00003 $0.00212

Measured yesterday against content hash fabc7e54f558, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

plugin-testing scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/plugin-testing/SKILL.md · 224 lines

How it starts

The opening of the file, as written. The whole thing — 224 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Plugin Testing Checklist

Verify plugin spec requirements with actionable test cases for the reflection and TTS plugins.

Plugin Specifications

Reflection Plugin (reflection-3.ts)

Purpose

Evaluates task completion when the agent goes idle. If the task is incomplete, sends feedback to continue work.

Spec Requirements
ID Requirement Description
R1 Uses RECENT human input Extract the most recent human message as the task (not the first)
R2 Returns feedback only if INCOMPLETE Only call promptAsync() when verdict.complete === false
R3 No feedback if COMPLETE Complete tasks show toast only, no prompt (prevents infinite loop)
R4 No console.log No logging to avoid breaking CLI output
R5 Stores in .reflection/ Save reflection data (task, result, tools, prompt, verdict, timestamp) to .reflection/ directory
R6 Skip judge sessions Never reflect on judge sessions (contain "TASK VERIFICATION")
R7 Skip aborted sessions Never reflect on sessions cancelled by user (Esc key)
R8 Attempt limiting Max 3 reflection attempts per session before giving up
R9 Reset on new input Reset attempt counter when user provides new input
R10 Concurrent protection Prevent multiple simultaneous reflections on same session
Data Storage Format (.reflection/)
{
  "task": "string - the most recent human message",
  "result": "string - the assistant's response (truncated to 2000 chars)",
  "tools": "string - last 10 tool calls",
  "prompt": "string - the full judge prompt sent",
  "verdict": {
    "complete": "boolean",
    "feedback": "string"
  },
  "timestamp": "ISO 8601 timestamp"
}

TTS Plugin (tts.ts)

Purpose

Reads the agent's final response aloud when a session completes.

Spec Requirements
ID Requirement Description
T1 Default engine is Coqui loadConfig() defaults to engine: "coqui"
T2 Stores in .tts/ Save TTS data (originalText, cleanedText, spokenText, engine, timestamp) to .tts/ directory
T3 Skip judge sessions Never speak judge session responses
T4 Skip incomplete sessions Only speak when session is complete
T5 Speech lock Prevent multiple agents from speaking simultaneously
T6 Text cleaning Remove code blocks, markdown, URLs before speaking
T7 Text truncation Truncate to 1000 chars max
T8 Engine fallback Fall back to OS TTS if configured engine fails
T9 Multiple engines Support coqui, chatterbox, and os engines
T10 Server mode Keep TTS model loaded for fast subsequent requests

Read the full file on GitHub · 224 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. yesterday First seen · 224 lines · 33 tokens per session scan A fabc7e54f558

Subscribe to this mod's changes

plugin-testing is a skill published in the GitHub repository dzianisv/opencode-plugins (9 stars, last pushed 2mo ago), licensed MIT. It adds 33 tokens to every session and 2,116 once invoked, about $0.0002 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.

Related

Other skills, from other repositories

agentsop-streaming-output

Enhancement-overlay decision protocol for STREAMING the output of long-running LLM / agent runs from the backend, not just wiring a typing animation in the UI. Activates when a coder agent must stream final tokens to a chat client, surface intermediate agent steps (which tool, which node, partial reasoning), emit…

agentsope/SkillAlchemy · 140 tokens

frontend-philosophy

Visual & UI philosophy (The 5 Pillars of Intentional UI). Understand deeply to avoid "AI slop" and create distinctive, memorable interfaces.

kdcokenny/ocx · 36 tokens

motion-craft

Design GPU-accelerated animations with Web Animations API (WAAPI), Scroll-Driven Animations (ScrollTimeline/ViewTimeline), FLIP technique, easing systems, and accessibility (prefers-reduced-motion). Use when user asks to create animations, transitions, scroll effects, page transitions, or interactive motion for web…

EliasOulkadi/shokunin · 98 tokens

minimax-h3-reference-video-prompt

Default downstream MiniMax H3 specialist for every image-based request unless the user explicitly declares boundary-only first/last frames with no reusable reference role. Use the official six-section full-reference format for character/person/object consistency, scene/style/action/camera/storyboard/voice/audio…

unknowlei/minimax-h3-opencode-skills · 89 tokens

minimax-h3-text-video-prompt

Downstream MiniMax H3 specialist for professional text-to-video (T2VA) prompts using the official three-field format. Use after minimax-h3-creative-director routes a request with no image, video, or audio reference asset, or when this skill is explicitly invoked for a text-only idea, script, or storyboard requiring an…

unknowlei/minimax-h3-opencode-skills · 83 tokens

emil-design-eng

Encode Emil Kowalski's philosophy on UI polish, component design, animation decisions, and the invisible details that make software feel great. From the creator of Sonner (13M+ weekly npm downloads), Vaul, animations.dev, and Linear's web team. Use when user wants to polish UI, audit animations, review component…

EliasOulkadi/shokunin · 82 tokens