From 914a6ce5283549be64d39f48040238bf07f94391 Mon Sep 17 00:00:00 2001 From: Zhongwei Li Date: Sun, 30 Nov 2025 08:17:44 +0800 Subject: [PATCH] Initial commit --- .claude-plugin/plugin.json | 15 ++ README.md | 3 + commands/analyze-nft.md | 156 ++++++++++++++++++ plugin.lock.json | 85 ++++++++++ skills/skill-adapter/assets/README.md | 7 + .../skill-adapter/assets/config-template.json | 32 ++++ skills/skill-adapter/assets/skill-schema.json | 28 ++++ skills/skill-adapter/assets/test-data.json | 27 +++ skills/skill-adapter/references/README.md | 8 + .../references/best-practices.md | 69 ++++++++ skills/skill-adapter/references/examples.md | 70 ++++++++ skills/skill-adapter/scripts/README.md | 8 + .../skill-adapter/scripts/helper-template.sh | 42 +++++ skills/skill-adapter/scripts/validation.sh | 32 ++++ 14 files changed, 582 insertions(+) create mode 100644 .claude-plugin/plugin.json create mode 100644 README.md create mode 100644 commands/analyze-nft.md create mode 100644 plugin.lock.json create mode 100644 skills/skill-adapter/assets/README.md create mode 100644 skills/skill-adapter/assets/config-template.json create mode 100644 skills/skill-adapter/assets/skill-schema.json create mode 100644 skills/skill-adapter/assets/test-data.json create mode 100644 skills/skill-adapter/references/README.md create mode 100644 skills/skill-adapter/references/best-practices.md create mode 100644 skills/skill-adapter/references/examples.md create mode 100644 skills/skill-adapter/scripts/README.md create mode 100755 skills/skill-adapter/scripts/helper-template.sh create mode 100755 skills/skill-adapter/scripts/validation.sh diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json new file mode 100644 index 0000000..eee394d --- /dev/null +++ b/.claude-plugin/plugin.json @@ -0,0 +1,15 @@ +{ + "name": "nft-rarity-analyzer", + "description": "Analyze NFT rarity scores and valuations across collections", + "version": "1.0.0", + "author": { + "name": "Claude Code Plugins", + "email": "[email protected]" + }, + "skills": [ + "./skills" + ], + "commands": [ + "./commands" + ] +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..8fbf9f9 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# nft-rarity-analyzer + +Analyze NFT rarity scores and valuations across collections diff --git a/commands/analyze-nft.md b/commands/analyze-nft.md new file mode 100644 index 0000000..9c0b30c --- /dev/null +++ b/commands/analyze-nft.md @@ -0,0 +1,156 @@ +--- +description: Analyze NFT rarity and valuation metrics +shortcut: nft +--- + +# NFT Rarity Analyzer + +You are an NFT rarity analysis specialist. When this command is invoked, help users understand NFT rarity scores, trait distributions, and valuations. + +## Your Task + +Provide comprehensive rarity analysis for NFTs: + +1. **Trait Analysis**: + - Break down all traits and attributes + - Calculate rarity score for each trait + - Identify most/least common traits + - Explain trait value contribution + +2. **Rarity Scoring Methods**: + - **Statistical Rarity**: Based on trait frequency + - **Trait Normalization**: Adjusted for trait count + - **Rarity Score**: Weighted composite score + - Compare different scoring methodologies + +3. **Collection Context**: + - Total supply and minted count + - Floor price and volume metrics + - Trait distribution across collection + - Notable traits and anomalies + +4. **Valuation Estimate**: + - Compare to similar rarity NFTs + - Analyze recent sales data + - Consider floor price multiples + - Account for trait desirability + +5. **Market Insights**: + - Trading volume trends + - Holder distribution + - Listing patterns + - Price momentum + +## Output Format + +Structure your analysis as: + +```markdown +## NFT Rarity Analysis Report + +### NFT Details +- **Collection**: [Name] +- **Token ID**: [ID] +- **Rank**: [Rarity Rank] / [Total Supply] +- **Rarity Score**: [Score] + +### Trait Breakdown +| Trait Type | Value | Rarity | % of Collection | Score | +|------------|-------|--------|-----------------|-------| +| Background | Blue | Rare | 5.2% | 19.2 | +| ... | ... | ... | ... | ... | + +**Key Traits:** +- [Trait]: Ultra Rare (0.5% of collection) +- [Trait]: Rare (3.2% of collection) +- [Trait]: Common (45% of collection) + +### Rarity Scores Comparison +- **Statistical Rarity**: [Score] (Rank: [#]) +- **Trait Rarity**: [Score] (Rank: [#]) +- **OpenRarity**: [Score] (Rank: [#]) + +### Valuation Analysis +**Collection Metrics:** +- Floor Price: [X] ETH +- 7-Day Volume: [Y] ETH +- Total Supply: [N] + +**Estimated Value Range:** +- Conservative: [Min] ETH ([X]x floor) +- Fair Market: [Mid] ETH ([Y]x floor) +- Optimistic: [Max] ETH ([Z]x floor) + +**Comparable Sales:** +- Similar Rank #[N]: [Price] ETH ([Days] ago) +- Similar Rank #[M]: [Price] ETH ([Days] ago) + +### Market Insights +- [Trading activity analysis] +- [Price trend assessment] +- [Liquidity considerations] + +### Investment Perspective +**Strengths:** +- [Rare traits] +- [Market factors] + +**Considerations:** +- [Common traits] +- [Market risks] + +### Recommendation +[Buy/Hold/Sell perspective with reasoning] +``` + +## Rarity Calculation Methods + +### Statistical Rarity +``` +Trait Rarity = 1 / (Trait Count / Total Supply) +Total Rarity = Sum of all trait rarities +``` + +### Trait Normalization +``` +Normalized Score = Trait Rarity / Number of Traits +``` + +### OpenRarity Score +Uses information content and arithmetic mean of trait rarities. + +## Data to Consider + +When analyzing, reference: +- **OpenSea**: Collection stats, recent sales +- **Rarity.tools**: Rarity rankings +- **LooksRare**: Alternative marketplace data +- **Blur**: Professional trader activity +- **NFTGo**: Analytics and insights + +## Example Queries + +Users might ask: +- "Analyze Bored Ape #1234" +- "What's the rarity of CryptoPunk #5678?" +- "Compare rarity: Azuki #100 vs #200" +- "Is Doodles #999 undervalued based on rarity?" +- "Analyze my NFT: [Collection] #[TokenID]" + +## Important Notes + +- Rarity is just one factor in NFT valuation +- Aesthetic appeal and community sentiment matter +- Market conditions heavily influence prices +- Consider liquidity and holding period +- This is educational analysis, not financial advice +- Different platforms may calculate rarity differently + +## When You Need More Information + +Ask users for: +- Collection name and token ID +- Which marketplace they're viewing it on +- Their investment timeline +- Their risk tolerance +- What they plan to do (buy, sell, hold) diff --git a/plugin.lock.json b/plugin.lock.json new file mode 100644 index 0000000..ee8d218 --- /dev/null +++ b/plugin.lock.json @@ -0,0 +1,85 @@ +{ + "$schema": "internal://schemas/plugin.lock.v1.json", + "pluginId": "gh:jeremylongshore/claude-code-plugins-plus:plugins/crypto/nft-rarity-analyzer", + "normalized": { + "repo": null, + "ref": "refs/tags/v20251128.0", + "commit": "a4a93a1af9d70c31594361e75be52a65fda66d17", + "treeHash": "3deda320ec89efc95dbb4213c0608928b27b87db941571a48d8f13fce66baa79", + "generatedAt": "2025-11-28T10:18:37.082895Z", + "toolVersion": "publish_plugins.py@0.2.0" + }, + "origin": { + "remote": "git@github.com:zhongweili/42plugin-data.git", + "branch": "master", + "commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390", + "repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data" + }, + "manifest": { + "name": "nft-rarity-analyzer", + "description": "Analyze NFT rarity scores and valuations across collections", + "version": "1.0.0" + }, + "content": { + "files": [ + { + "path": "README.md", + "sha256": "b40a47a596118f886e707dcf9a7795b67740255b144509e8c317ddf09a6c5614" + }, + { + "path": ".claude-plugin/plugin.json", + "sha256": "9f21fefd78ecddad0a8242a6ad51c8dcdfba537519044a578f773a8cf7befea3" + }, + { + "path": "commands/analyze-nft.md", + "sha256": "4892f515f9bae05fc8e723bcc53783c015df7bac78c8b5e3a5820e0dfb625468" + }, + { + "path": "skills/skill-adapter/references/examples.md", + "sha256": "922bbc3c4ebf38b76f515b5c1998ebde6bf902233e00e2c5a0e9176f975a7572" + }, + { + "path": "skills/skill-adapter/references/best-practices.md", + "sha256": "c8f32b3566252f50daacd346d7045a1060c718ef5cfb07c55a0f2dec5f1fb39e" + }, + { + "path": "skills/skill-adapter/references/README.md", + "sha256": "741e5b34cf7cb3bcf0fb566c85f8e1b148eb3ec7150ef731a47d591a60373cb0" + }, + { + "path": "skills/skill-adapter/scripts/helper-template.sh", + "sha256": "0881d5660a8a7045550d09ae0acc15642c24b70de6f08808120f47f86ccdf077" + }, + { + "path": "skills/skill-adapter/scripts/validation.sh", + "sha256": "92551a29a7f512d2036e4f1fb46c2a3dc6bff0f7dde4a9f699533e446db48502" + }, + { + "path": "skills/skill-adapter/scripts/README.md", + "sha256": "dfd2f5ca026b019cbfb5834425c38c826f50a653742ed2c2cdb7671def04e224" + }, + { + "path": "skills/skill-adapter/assets/test-data.json", + "sha256": "ac17dca3d6e253a5f39f2a2f1b388e5146043756b05d9ce7ac53a0042eee139d" + }, + { + "path": "skills/skill-adapter/assets/README.md", + "sha256": "a583c717a2a1c1a0f4b7bf70d53667257c1a878cc329cefd52154ac5e2921b46" + }, + { + "path": "skills/skill-adapter/assets/skill-schema.json", + "sha256": "f5639ba823a24c9ac4fb21444c0717b7aefde1a4993682897f5bf544f863c2cd" + }, + { + "path": "skills/skill-adapter/assets/config-template.json", + "sha256": "0c2ba33d2d3c5ccb266c0848fc43caa68a2aa6a80ff315d4b378352711f83e1c" + } + ], + "dirSha256": "3deda320ec89efc95dbb4213c0608928b27b87db941571a48d8f13fce66baa79" + }, + "security": { + "scannedAt": null, + "scannerVersion": null, + "flags": [] + } +} \ No newline at end of file diff --git a/skills/skill-adapter/assets/README.md b/skills/skill-adapter/assets/README.md new file mode 100644 index 0000000..30a29a7 --- /dev/null +++ b/skills/skill-adapter/assets/README.md @@ -0,0 +1,7 @@ +# Assets + +Bundled resources for nft-rarity-analyzer skill + +- [ ] valuation_template.xlsx: Spreadsheet template for NFT valuation analysis. +- [ ] example_nft_data.json: Example JSON data for various NFTs. +- [ ] rarity_report_template.md: Markdown template for generating NFT rarity reports. diff --git a/skills/skill-adapter/assets/config-template.json b/skills/skill-adapter/assets/config-template.json new file mode 100644 index 0000000..16f1712 --- /dev/null +++ b/skills/skill-adapter/assets/config-template.json @@ -0,0 +1,32 @@ +{ + "skill": { + "name": "skill-name", + "version": "1.0.0", + "enabled": true, + "settings": { + "verbose": false, + "autoActivate": true, + "toolRestrictions": true + } + }, + "triggers": { + "keywords": [ + "example-trigger-1", + "example-trigger-2" + ], + "patterns": [] + }, + "tools": { + "allowed": [ + "Read", + "Grep", + "Bash" + ], + "restricted": [] + }, + "metadata": { + "author": "Plugin Author", + "category": "general", + "tags": [] + } +} diff --git a/skills/skill-adapter/assets/skill-schema.json b/skills/skill-adapter/assets/skill-schema.json new file mode 100644 index 0000000..8dc154c --- /dev/null +++ b/skills/skill-adapter/assets/skill-schema.json @@ -0,0 +1,28 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Claude Skill Configuration", + "type": "object", + "required": ["name", "description"], + "properties": { + "name": { + "type": "string", + "pattern": "^[a-z0-9-]+$", + "maxLength": 64, + "description": "Skill identifier (lowercase, hyphens only)" + }, + "description": { + "type": "string", + "maxLength": 1024, + "description": "What the skill does and when to use it" + }, + "allowed-tools": { + "type": "string", + "description": "Comma-separated list of allowed tools" + }, + "version": { + "type": "string", + "pattern": "^\\d+\\.\\d+\\.\\d+$", + "description": "Semantic version (x.y.z)" + } + } +} diff --git a/skills/skill-adapter/assets/test-data.json b/skills/skill-adapter/assets/test-data.json new file mode 100644 index 0000000..f0cd871 --- /dev/null +++ b/skills/skill-adapter/assets/test-data.json @@ -0,0 +1,27 @@ +{ + "testCases": [ + { + "name": "Basic activation test", + "input": "trigger phrase example", + "expected": { + "activated": true, + "toolsUsed": ["Read", "Grep"], + "success": true + } + }, + { + "name": "Complex workflow test", + "input": "multi-step trigger example", + "expected": { + "activated": true, + "steps": 3, + "toolsUsed": ["Read", "Write", "Bash"], + "success": true + } + } + ], + "fixtures": { + "sampleInput": "example data", + "expectedOutput": "processed result" + } +} diff --git a/skills/skill-adapter/references/README.md b/skills/skill-adapter/references/README.md new file mode 100644 index 0000000..c3c0a6a --- /dev/null +++ b/skills/skill-adapter/references/README.md @@ -0,0 +1,8 @@ +# References + +Bundled resources for nft-rarity-analyzer skill + +- [ ] rarity_methodologies.md: Detailed explanation of different rarity scoring methodologies (statistical, normalized, OpenRarity). +- [ ] valuation_models.md: Documentation on NFT valuation models and their assumptions. +- [ ] api_documentation.md: API documentation for OpenSea, Etherscan, and other relevant NFT data sources. +- [ ] nft_market_standards.md: Overview of NFT market standards and best practices. diff --git a/skills/skill-adapter/references/best-practices.md b/skills/skill-adapter/references/best-practices.md new file mode 100644 index 0000000..3505048 --- /dev/null +++ b/skills/skill-adapter/references/best-practices.md @@ -0,0 +1,69 @@ +# Skill Best Practices + +Guidelines for optimal skill usage and development. + +## For Users + +### Activation Best Practices + +1. **Use Clear Trigger Phrases** + - Match phrases from skill description + - Be specific about intent + - Provide necessary context + +2. **Provide Sufficient Context** + - Include relevant file paths + - Specify scope of analysis + - Mention any constraints + +3. **Understand Tool Permissions** + - Check allowed-tools in frontmatter + - Know what the skill can/cannot do + - Request appropriate actions + +### Workflow Optimization + +- Start with simple requests +- Build up to complex workflows +- Verify each step before proceeding +- Use skill consistently for related tasks + +## For Developers + +### Skill Development Guidelines + +1. **Clear Descriptions** + - Include explicit trigger phrases + - Document all capabilities + - Specify limitations + +2. **Proper Tool Permissions** + - Use minimal necessary tools + - Document security implications + - Test with restricted tools + +3. **Comprehensive Documentation** + - Provide usage examples + - Document common pitfalls + - Include troubleshooting guide + +### Maintenance + +- Keep version updated +- Test after tool updates +- Monitor user feedback +- Iterate on descriptions + +## Performance Tips + +- Scope skills to specific domains +- Avoid overlapping trigger phrases +- Keep descriptions under 1024 chars +- Test activation reliability + +## Security Considerations + +- Never include secrets in skill files +- Validate all inputs +- Use read-only tools when possible +- Document security requirements diff --git a/skills/skill-adapter/references/examples.md b/skills/skill-adapter/references/examples.md new file mode 100644 index 0000000..b1d8bd2 --- /dev/null +++ b/skills/skill-adapter/references/examples.md @@ -0,0 +1,70 @@ +# Skill Usage Examples + +This document provides practical examples of how to use this skill effectively. + +## Basic Usage + +### Example 1: Simple Activation + +**User Request:** +``` +[Describe trigger phrase here] +``` + +**Skill Response:** +1. Analyzes the request +2. Performs the required action +3. Returns results + +### Example 2: Complex Workflow + +**User Request:** +``` +[Describe complex scenario] +``` + +**Workflow:** +1. Step 1: Initial analysis +2. Step 2: Data processing +3. Step 3: Result generation +4. Step 4: Validation + +## Advanced Patterns + +### Pattern 1: Chaining Operations + +Combine this skill with other tools: +``` +Step 1: Use this skill for [purpose] +Step 2: Chain with [other tool] +Step 3: Finalize with [action] +``` + +### Pattern 2: Error Handling + +If issues occur: +- Check trigger phrase matches +- Verify context is available +- Review allowed-tools permissions + +## Tips & Best Practices + +- ✅ Be specific with trigger phrases +- ✅ Provide necessary context +- ✅ Check tool permissions match needs +- ❌ Avoid vague requests +- ❌ Don't mix unrelated tasks + +## Common Issues + +**Issue:** Skill doesn't activate +**Solution:** Use exact trigger phrases from description + +**Issue:** Unexpected results +**Solution:** Check input format and context + +## See Also + +- Main SKILL.md for full documentation +- scripts/ for automation helpers +- assets/ for configuration examples diff --git a/skills/skill-adapter/scripts/README.md b/skills/skill-adapter/scripts/README.md new file mode 100644 index 0000000..5aca487 --- /dev/null +++ b/skills/skill-adapter/scripts/README.md @@ -0,0 +1,8 @@ +# Scripts + +Bundled resources for nft-rarity-analyzer skill + +- [ ] fetch_nft_metadata.py: Fetches NFT metadata from various APIs (OpenSea, Etherscan, etc.). +- [ ] calculate_rarity.py: Calculates rarity scores using different methodologies (statistical, normalized, OpenRarity). +- [ ] compare_nfts.py: Compares rarity scores and traits between two NFTs. +- [ ] valuation_estimate.py: Estimates NFT valuation based on rarity, comparable sales, and market trends. diff --git a/skills/skill-adapter/scripts/helper-template.sh b/skills/skill-adapter/scripts/helper-template.sh new file mode 100755 index 0000000..c4aae90 --- /dev/null +++ b/skills/skill-adapter/scripts/helper-template.sh @@ -0,0 +1,42 @@ +#!/bin/bash +# Helper script template for skill automation +# Customize this for your skill's specific needs + +set -e + +function show_usage() { + echo "Usage: $0 [options]" + echo "" + echo "Options:" + echo " -h, --help Show this help message" + echo " -v, --verbose Enable verbose output" + echo "" +} + +# Parse arguments +VERBOSE=false + +while [[ $# -gt 0 ]]; do + case $1 in + -h|--help) + show_usage + exit 0 + ;; + -v|--verbose) + VERBOSE=true + shift + ;; + *) + echo "Unknown option: $1" + show_usage + exit 1 + ;; + esac +done + +# Your skill logic here +if [ "$VERBOSE" = true ]; then + echo "Running skill automation..." +fi + +echo "✅ Complete" diff --git a/skills/skill-adapter/scripts/validation.sh b/skills/skill-adapter/scripts/validation.sh new file mode 100755 index 0000000..590af58 --- /dev/null +++ b/skills/skill-adapter/scripts/validation.sh @@ -0,0 +1,32 @@ +#!/bin/bash +# Skill validation helper +# Validates skill activation and functionality + +set -e + +echo "🔍 Validating skill..." + +# Check if SKILL.md exists +if [ ! -f "../SKILL.md" ]; then + echo "❌ Error: SKILL.md not found" + exit 1 +fi + +# Validate frontmatter +if ! grep -q "^---$" "../SKILL.md"; then + echo "❌ Error: No frontmatter found" + exit 1 +fi + +# Check required fields +if ! grep -q "^name:" "../SKILL.md"; then + echo "❌ Error: Missing 'name' field" + exit 1 +fi + +if ! grep -q "^description:" "../SKILL.md"; then + echo "❌ Error: Missing 'description' field" + exit 1 +fi + +echo "✅ Skill validation passed"