testing skill
Verifies bundle-plugin projects through local environment generation, hook smoke tests, component discovery, and cross-platform readiness validation.
- GitHub stars
- 225
- Files
- 2
- Last commit
- Apr 27, 2026
- License
- Apache-2.0
- Allowed tools
- —
What does the testing skill do?
testing verifies bundle-plugin projects through local environment generation, hook smoke tests, component discovery, and cross-platform readiness validation.
Summary generated from the skill's SKILL.md.
About the testing skill
Verifying bundle-plugin projects through runtime validation is what this skill enables for developers preparing for a release. It moves beyond the static analysis provided by bundles-forge:auditing to ensure that components actually function within a live environment. An agent should load this skill when working with a local bundle-plugin project that contains a package.json and a skills directory, as it requires a local working directory rather than remote URLs.
The process involves generating temporary dev-marketplace environments for Claude Code, setting up local paths for Cursor, or configuring symlinks for Codex and OpenCode. It executes hook smoke tests to confirm scripts like SessionStart exit correctly and performs component discovery to validate that skills and agents meet specific structural requirements. Finally, it checks cross-platform readiness by verifying platform-specific constraints, such as ESM usage in OpenCode or context file requirements in Gemini CLI. The skill produces a detailed test report saved in the .bundles-forge/audits/ directory.
What an agent can do with it
- 1Validate local plugin installationGenerate a temporary dev-marketplace to test how a plugin installs and reloads locally.
- 2Verify hook executionRun hook smoke tests to ensure session-start and custom hooks execute without errors.
- 3Confirm component discoveryCheck that all declared skills and agents are correctly formatted and discoverable by the host platform.
- 4Check cross-platform compatibilityRun a checklist to ensure the plugin adheres to specific limitations for platforms like Claude Code or Gemini CLI.
Written from the skill's SKILL.md. Every use case is checked against a quote from it.
How to install the testing skill
Each command copies the skill folder into the client's skills directory. Restart the client or start a new session to load it.Install the testing skill in Plugin
/plugin marketplace add OdradekAI/bundles-forge /plugin install bundles-forge@bundles-forge-dev
Install the testing skill in Claude Code
~/.claude/skills/testing/SKILL.md
$ npx degit OdradekAI/bundles-forge/skills/testing ~/.claude/skills/testingInstall the testing skill in Claude Code (project)
.claude/skills/testing/SKILL.md
$ npx degit OdradekAI/bundles-forge/skills/testing .claude/skills/testingInstall the testing skill in Codex
~/.agents/skills/testing/SKILL.md
$ npx degit OdradekAI/bundles-forge/skills/testing ~/.agents/skills/testingInstall the testing skill in Gemini CLI
~/.gemini/skills/testing/SKILL.md
$ npx degit OdradekAI/bundles-forge/skills/testing ~/.gemini/skills/testingInstall the testing skill in Claude.ai
npx degit OdradekAI/bundles-forge/skills/testing testing && zip -r testing.zip testing # claude.ai → Customize → Skills → + → Create skill → Upload a skill → testing.zip
SKILL.md
View on GitHubTesting Bundle-Plugins
Overview
Dynamic verification of a bundle-plugin project: install it locally, confirm components are discoverable, validate hooks fire correctly, and run cross-platform smoke tests. Complements bundles-forge:auditing (static analysis) with runtime validation.
Core principle: Audit tells you if the structure is correct; testing tells you if it actually works.
Skill type: Flexible — adapt the test scope based on target platforms and project maturity.
Announce at start: "I'm using the testing skill to verify this plugin works correctly."
Step 1: Resolve Input & Detect Scope
Input Normalization
The target must be a local bundle-plugin project (has package.json + skills/). Remote URLs and archives are not supported — testing requires a local working directory.
Scope Detection
| Target | Mode |
|---|---|
| Project root with multiple platforms | Full testing — all 5 test phases |
| Project root with single platform | Platform testing — phases 1-4 for the target platform |
| Single skill directory | Skill-only testing — phase 3 (component discovery) only |
Phase 1: Local Test Environment
Generate a temporary dev-marketplace for local installation testing.
For Claude Code
- Create
../dev-marketplace/adjacent to the project directory - Generate
.claude-plugin/marketplace.jsonpointing to the project:
{
"name": "<project-name>-dev",
"owner": { "name": "dev" },
"plugins": [
{
"name": "<project-name>",
"source": "../<project-directory-name>"
}
]
}
- Instruct the user:
Dev marketplace created at ../dev-marketplace/
To install locally:
/plugin marketplace add ./dev-marketplace
/plugin install <project-name>@<project-name>-dev
To reload after changes:
/plugin marketplace update <project-name>-dev
To clean up when done:
/plugin marketplace remove <project-name>-dev
For Cursor
Cursor plugins are installed from local paths directly:
To test locally in Cursor:
1. Open Cursor Settings → Extensions → Install from Path
2. Select the project root directory
3. Reload Cursor to pick up changes
For Other Platforms
- Codex: Symlink
skills/into~/.agents/skills/per INSTALL.md - OpenCode: Register the plugin path in
.opencode/plugins/ - Gemini CLI: Point the extension config to the local directory
See references/platform-test-guides.md for platform-specific setup instructions.
Phase 2: Hook Smoke Tests
Verify hooks execute without errors by running them directly.
SessionStart Hook
bash hooks/session-start
Expected: Exits 0, prints a one-line prompt containing the project name and available skills. No stderr output.
Verify output format:
- If
CLAUDE_PLUGIN_ROOTis set: valid JSON withhookSpecificOutput.additionalContext - If
CURSOR_PLUGIN_ROOTis set: valid JSON withadditional_context - Neither: plain text
Custom Hooks (if configured)
If the project defines PreToolUse or PostToolUse hooks in hooks.json, run each referenced script directly and verify:
- PreToolUse scripts: exit 0 on a valid project, exit 2 to block writes on critical issues
- PostToolUse scripts: always exit 0, warnings go to stderr
OpenClaw Hook-Pack (if present)
Verify hooks/openclaw-bootstrap/HOOK.md has valid YAML frontmatter with events declaration, and handler.js uses ESM export default.
Phase 3: Component Discovery
Verify that all declared components can be found by the host platform.
Skills
For each directory under skills/:
- Contains
SKILL.md - Frontmatter has
nameanddescription -
namematches directory name -
descriptionstarts with "Use when..."
Agents
For each .md file under agents/:
- Has YAML frontmatter
- Body has 5+ non-empty lines (self-contained protocol)
Platform Manifests
For each target platform:
- Manifest file exists and is valid JSON
- Paths in manifest resolve to existing files/directories
- Version matches
package.jsonversion
Phase 4: Cross-Platform Readiness
Generate a platform-specific test checklist based on references/platform-test-guides.md and known limitations from bundles-forge:scaffolding — references/platform-adapters.md.
Known Limitations to Verify
| Platform | Limitation | Test |
|---|---|---|
| Claude Code | Plugin caching breaks ../ paths |
Verify no ../ in hook commands or manifest paths |
| Cursor | Bootstrap lost after /clear |
Verify session-start runs independently of prior context |
| Codex | No hook bootstrap | Verify AGENTS.md or INSTALL.md has manual setup instructions |
| OpenCode | Plugin JS must use ESM | Verify export default in .opencode/plugins/*.js |
| Gemini CLI | Extension needs contextFileName |
Verify gemini-extension.json has contextFileName field |
| OpenClaw | Hook-pack wiring uncertain | Document as known risk in test report |
Phase 5: Test Report
Generate a test report summarizing all findings.
Report Structure
# Test Report: <project-name>
**Date:** YYYY-MM-DD
**Scope:** [Full / Platform / Skill-only]
**Platforms tested:** [list]
## Results
| Phase | Status | Details |
|-------|--------|---------|
| 1. Local Environment | PASS/FAIL/SKIP | ... |
| 2. Hook Smoke Tests | PASS/FAIL/SKIP | ... |
| 3. Component Discovery | PASS/FAIL/SKIP | N skills, K agents |
| 4. Cross-Platform | PASS/FAIL/SKIP | ... |
## Issues Found
### Critical
- (blocks release)
### Warnings
- (should fix before release)
## Recommendations
- ...
Report location: .bundles-forge/audits/<timestamp>-test-report.md
Integration with Releasing
In the releasing pipeline, testing runs after auditing and before version bump:
audit → test → version bump → publish
If testing reveals critical issues, the release pipeline is blocked until they are resolved.
Common Mistakes
| Mistake | Fix |
|---|---|
| Skipping local install test | Always test with a real dev-marketplace — file discovery differs from file existence |
| Testing only on one platform | Run cross-platform checklist for every target platform |
| Ignoring hook exit codes | Hooks must exit 0 to avoid blocking the host; test all code paths |
| Not cleaning up dev-marketplace | Always remove dev-marketplace after testing |
| Testing after version bump | Test before bumping — avoid releasing a broken version |
Inputs
project-directory(required) — bundle-plugin project root
Outputs
test-report— comprehensive test results written to.bundles-forge/audits/dev-marketplace(temporary) — local marketplace directory for installation testing
Integration
Called by:
- bundles-forge:releasing — pre-release dynamic verification (after audit, before version bump)
- User directly — standalone local testing during development
Calls:
- (none — testing is a pure executor, does not dispatch other skills)
Files in this skill
2testing skill questions
How do I install the testing skill in Claude Code?
Run npx degit OdradekAI/bundles-forge/skills/testing ~/.claude/skills/testing. Claude Code loads skills from ~/.claude/skills (all projects) or .claude/skills (one project) and uses a skill when its description matches the task.
Which clients can use the testing skill?
Any client that reads the Agent Skills format: Claude Code, Codex, Gemini CLI and claude.ai (upload as a ZIP). Scripts in the skill run only where the client allows code execution.
What is the difference between auditing and testing in this context?
Auditing performs static analysis to check if the structure is correct, while testing performs runtime validation to ensure the plugin actually works.
Can I test remote URLs or archives?
No, testing requires a local working directory containing a package.json and a skills/ directory.
How do I test a plugin locally for Claude Code?
You must create a ../dev-marketplace/ directory adjacent to your project and generate a .claude-plugin/marketplace.json file pointing to your project.