testing-prpm-cli
About
This skill helps developers test PRPM CLI commands locally by building the package, setting up the environment, and executing workflows against a local registry. It includes contract testing to verify documented behavior matches implementation and comprehensive cross-format conversion testing. Use it for debugging CLI behavior, testing new features, or validating format converters before committing changes.
Documentation
Testing PRPM CLI
Overview
Test PRPM CLI commands against a local registry by building the package, setting the registry URL, and invoking the CLI directly. Includes comprehensive cross-format conversion testing patterns and contract testing to verify documented behavior matches implementation.
When to Use
- Testing new CLI commands or features
- Debugging CLI behavior
- Verifying CLI changes before committing
- Testing against local registry data
- Validating cross-format conversions
- Testing new format converters
- Contract testing: verifying documented behavior matches implementation
Quick Reference
| Step | Command |
|---|---|
| Build CLI | npm run build --workspace=packages/cli |
| Start local registry | npm run dev --workspace=packages/registry |
| Set local registry | export PRPM_REGISTRY_URL=http://127.0.0.1:3111 |
| Run CLI directly | node /Users/khaliqgant/Projects/prpm/app/packages/cli/dist/index.js <command> |
| Run via npm link | prpm <command> (after linking) |
Workflow
1. Build the CLI (Required First Step)
Always rebuild before testing to ensure you're testing current code:
npm run build --workspace=packages/cli
2. Start Local Registry
Start the registry server in background:
npm run dev --workspace=packages/registry &
sleep 3
lsof -i :3111 # Verify it's running
3. Configure Local Registry
Point CLI to local registry instead of production:
export PRPM_REGISTRY_URL=http://127.0.0.1:3111
Verify it's set:
echo $PRPM_REGISTRY_URL
4. Run CLI Commands
Option A: Direct invocation (recommended for testing)
node /Users/khaliqgant/Projects/prpm/app/packages/cli/dist/index.js search typescript
node /Users/khaliqgant/Projects/prpm/app/packages/cli/dist/index.js install some-package
Option B: npm link (for interactive testing)
cd packages/cli
npm link
prpm search typescript
Comprehensive Conversion Testing
Use Self-Improving Skill to Find Test Packages
Before testing conversions, use the self-improving skill to download a diverse set of packages:
# Search for packages of different types
node $CLI search "claude" --limit 10
node $CLI search "cursor" --limit 10
node $CLI search "agent" --limit 10
node $CLI search "skill" --limit 10
Create Test Directory and Install Diverse Packages
mkdir -p /tmp/prpm-conversion-tests
cd /tmp/prpm-conversion-tests
export PRPM_REGISTRY_URL=http://127.0.0.1:3111
CLI="/Users/khaliqgant/Projects/prpm/app/packages/cli/dist/index.js"
# Install packages of different subtypes
node $CLI install @prpm/agent-builder-skill --as claude # Skill
node $CLI install @prpm/creating-cursor-rules --as cursor # Cursor Rule
node $CLI install @camoneart/context-engineering-agent --as claude # Agent
Supported Formats (CLI_SUPPORTED_FORMATS)
Test conversions across ALL supported formats:
| Format | Description |
|---|---|
| cursor | Cursor IDE rules (.mdc) |
| claude | Claude Code (skills, agents, commands) |
| windsurf | Windsurf rules |
| continue | Continue rules |
| copilot | GitHub Copilot instructions |
| kiro | Kiro steering files |
| agents.md | Agents.md format |
| gemini | Gemini CLI extensions |
| ruler | Ruler format |
| zed | Zed editor extensions |
| opencode | OpenCode rules |
| aider | Aider conventions |
| trae | Trae rules |
| replit | Replit agent rules |
| zencoder | ZenCoder rules |
| droid | Factory/Droid rules |
Conversion Test Matrix
Run comprehensive conversion tests:
cd /tmp/prpm-conversion-tests
mkdir -p /tmp/conversions
CLI="/Users/khaliqgant/Projects/prpm/app/packages/cli/dist/index.js"
# Claude Skill → All formats
for format in cursor windsurf kiro gemini zed continue copilot opencode aider trae replit zencoder droid; do
node $CLI convert .claude/skills/*/SKILL.md --to $format -o /tmp/conversions/skill-to-$format.md 2>&1
done
# Cursor Rule → Multiple formats
for format in claude windsurf gemini zed; do
node $CLI convert .cursor/rules/*.mdc --to $format -o /tmp/conversions/cursor-to-$format.md 2>&1
done
# Claude Agent → Multiple formats
for format in cursor gemini windsurf; do
node $CLI convert .claude/agents/*.md --to $format -o /tmp/conversions/agent-to-$format.md 2>&1
done
Round-Trip Testing
Verify content preservation through round-trip conversions:
# Claude → Cursor → Claude
node $CLI convert .claude/skills/*/SKILL.md --to cursor -o /tmp/conversions/step1-cursor.mdc
node $CLI convert /tmp/conversions/step1-cursor.mdc --to claude -o /tmp/conversions/step2-claude.md
# Compare file sizes (expect some reduction but not dramatic)
wc -c .claude/skills/*/SKILL.md /tmp/conversions/step1-cursor.mdc /tmp/conversions/step2-claude.md
Validation Checklist
For each conversion, verify:
- Command succeeds - Exit code 0, no errors
- Output file created - File exists at specified path
- Content preserved - Core markdown structure intact
- Format-specific frontmatter - Correct fields for target format
- File size reasonable - Not truncated (compare with source)
Expected File Sizes
| Conversion Type | Expected Size Ratio |
|---|---|
| Claude → Cursor | ~95-100% |
| Claude → Windsurf | ~95-100% |
| Claude → Gemini | ~95-100% |
| Claude → OpenCode | May be smaller (format limits) |
| Claude → Droid | May be smaller (format limits) |
| Round-trip | ~50-70% (metadata loss expected) |
Test Report Template
Document results in this format:
## Conversion Test Report
### Test Setup
- Registry: Local (port 3111)
- Test packages: [list installed packages]
### Results
| Source | Target | Status | Output Size |
|--------|--------|--------|-------------|
| Claude Skill | Gemini | Pass/Fail | X bytes |
| ... | ... | ... | ... |
### Observations
- [Note any issues, truncations, or unexpected behavior]
Contract Testing (CRITICAL)
Contract testing ensures documented behavior matches implementation. This is the most important type of testing for features with configurable behavior.
Why Contract Testing Matters
The eager/lazy loading bug is a case study: documentation described a precedence chain (CLI > file > package > default), but implementation only handled CLI flags. Tests passed because they only tested the CLI flag path. Contract testing would have caught this.
Contract Testing Principles
- Test EVERY documented behavior path, not just the happy path
- Test precedence chains completely - if docs say "A > B > C > default", test all 4 cases
- Test behavior WITHOUT flags - verify defaults and configuration-driven behavior
- Test WITH and WITHOUT explicit settings - don't assume flag presence
Contract Testing Checklist
For ANY feature with documented behavior:
- Read the documentation first - what does it claim to do?
- List all behavior paths - every if/else/default mentioned
- Create test for each path - one test per documented behavior
- Test WITHOUT user flags - verify package/config defaults work
- Test precedence - verify higher-priority overrides lower
- Verify error messages match - documented errors should occur
Example: Eager/Lazy Loading Contract Tests
Documentation states: "Precedence: CLI flag > package-level > default (lazy)"
Required tests:
# Setup test directory
mkdir -p /tmp/prpm-contract-tests
cd /tmp/prpm-contract-tests
export PRPM_REGISTRY_URL=http://127.0.0.1:3111
CLI="/Users/khaliqgant/Projects/prpm/app/packages/cli/dist/index.js"
# Test 1: CLI --eager flag (highest priority)
rm -rf .openskills AGENTS.md
node $CLI install @prpm/some-skill --as agents.md --eager
# VERIFY: AGENTS.md contains activation="eager" or priority="0"
grep -q 'activation="eager"\|priority="0"' AGENTS.md && echo "PASS: CLI --eager works" || echo "FAIL: CLI --eager"
# Test 2: CLI --lazy flag overrides package eager
rm -rf .openskills AGENTS.md
# Install a package that has eager:true in prpm.json with --lazy flag
node $CLI install @prpm/eager-package --as agents.md --lazy
# VERIFY: Should be lazy despite package setting
grep -q 'activation="lazy"\|priority="1"' AGENTS.md && echo "PASS: CLI --lazy overrides" || echo "FAIL: CLI --lazy"
# Test 3: Package-level eager (NO CLI flag) - THIS IS THE BUG THAT WAS MISSED
rm -rf .openskills AGENTS.md
# Install a package that has eager:true in its prpm.json WITHOUT --eager flag
node $CLI install @prpm/eager-package --as agents.md
# VERIFY: Should be eager based on package setting
grep -q 'activation="eager"\|priority="0"' AGENTS.md && echo "PASS: Package eager works" || echo "FAIL: Package eager"
# Test 4: Default (lazy) when no flags and no package setting
rm -rf .openskills AGENTS.md
node $CLI install @prpm/normal-skill --as agents.md
# VERIFY: Should be lazy by default
grep -q 'activation="lazy"\|priority="1"' AGENTS.md && echo "PASS: Default lazy works" || echo "FAIL: Default"
Contract Test Template
For any new feature, create tests in this format:
## Contract Tests for [Feature Name]
### Documentation Claims:
1. [Claim 1 from docs]
2. [Claim 2 from docs]
3. [Precedence/default behavior from docs]
### Test Cases:
| # | Documented Behavior | Test Setup | Expected Result | Pass/Fail |
|---|--------------------|-----------| ----------------|-----------|
| 1 | [Claim 1] | [How to test] | [What to verify] | |
| 2 | [Claim 2] | [How to test] | [What to verify] | |
| 3 | Default behavior | [No flags/config] | [Default result] | |
### Results:
- All tests must pass before feature is considered complete
- Document any deviations between docs and implementation
Anti-Patterns to Avoid
| Anti-Pattern | Why It Fails | Correct Approach |
|---|---|---|
| Only testing with flags | Misses config/default paths | Test without flags first |
| Assuming documentation is implementation | Docs may describe intent, not reality | Verify each claim with test |
| Testing happy path only | Misses precedence bugs | Test all documented paths |
| Skipping default behavior test | Defaults often broken | Always test "no config" case |
| Not reading docs before testing | Miss documented behaviors | Read docs, list claims, test each |
Common Mistakes
| Mistake | Symptom | Fix |
|---|---|---|
| Forgetting to build | Old behavior, changes not reflected | Run npm run build --workspace=packages/cli |
| Missing registry env | Commands hit production registry | Set PRPM_REGISTRY_URL before running |
| Stale npm link | Wrong version running | Re-run npm link after rebuilding |
| Local registry not running | Connection refused errors | Start registry: npm run dev --workspace=packages/registry |
| Testing single format only | Miss format-specific bugs | Test ALL formats in CLI_SUPPORTED_FORMATS |
| No round-trip testing | Miss content loss bugs | Always verify round-trip preservation |
| No contract testing | Docs ≠ implementation | Test EVERY documented behavior |
| Only testing with CLI flags | Miss config/default bugs | Test without flags to verify defaults |
One-Liner Setup
npm run build --workspace=packages/cli && export PRPM_REGISTRY_URL=http://127.0.0.1:3111
Then test commands:
node packages/cli/dist/index.js --help
Unit Test Commands
Run converter unit tests:
# All converter tests
npm run test --workspace=packages/converters
# Specific test files
npm run test --workspace=packages/converters -- --testPathPattern="file-references"
npm run test --workspace=packages/converters -- --testPathPattern="security"
npm run test --workspace=packages/converters -- --testPathPattern="cross-format"
npm run test --workspace=packages/converters -- --testPathPattern="zed"
Quick Install
/plugin add https://github.com/pr-pm/prpm/tree/main/testing-prpm-cliCopy and paste this command in Claude Code to install this skill
GitHub 仓库
Related Skills
sglang
MetaSGLang is a high-performance LLM serving framework that specializes in fast, structured generation for JSON, regex, and agentic workflows using its RadixAttention prefix caching. It delivers significantly faster inference, especially for tasks with repeated prefixes, making it ideal for complex, structured outputs and multi-turn conversations. Choose SGLang over alternatives like vLLM when you need constrained decoding or are building applications with extensive prefix sharing.
evaluating-llms-harness
TestingThis Claude Skill runs the lm-evaluation-harness to benchmark LLMs across 60+ standardized academic tasks like MMLU and GSM8K. It's designed for developers to compare model quality, track training progress, or report academic results. The tool supports various backends including HuggingFace and vLLM models.
llamaguard
OtherLlamaGuard is Meta's 7-8B parameter model for moderating LLM inputs and outputs across six safety categories like violence and hate speech. It offers 94-95% accuracy and can be deployed using vLLM, Hugging Face, or Amazon SageMaker. Use this skill to easily integrate content filtering and safety guardrails into your AI applications.
langchain
MetaLangChain is a framework for building LLM applications using agents, chains, and RAG pipelines. It supports multiple LLM providers, offers 500+ integrations, and includes features like tool calling and memory management. Use it for rapid prototyping and deploying production systems like chatbots, autonomous agents, and question-answering services.
