|
| 1 | +--- |
| 2 | +name: manifest-creator |
| 3 | +description: Create manifest files for AI coding tools by extracting information from their websites |
| 4 | +--- |
| 5 | + |
| 6 | +# Manifest Creator Skill |
| 7 | + |
| 8 | +Automatically create manifest JSON files for AI coding tools, models, providers, and vendors by intelligently extracting information from their websites. |
| 9 | + |
| 10 | +## Overview |
| 11 | + |
| 12 | +This skill automates the creation of manifest files in the `manifests/` directory. It uses web scraping and AI to extract structured information from product websites, following the project's JSON schema requirements. |
| 13 | + |
| 14 | +## Usage |
| 15 | + |
| 16 | +To create a new manifest, provide: |
| 17 | + |
| 18 | +1. **Manifest type**: cli, extension, ide, model, provider, or vendor |
| 19 | +2. **Product name**: The filename to create (without .json extension) |
| 20 | +3. **Website URL**: The official website URL (becomes the `websiteUrl` field) |
| 21 | + |
| 22 | +**Example:** |
| 23 | + |
| 24 | +``` |
| 25 | +Create a manifest for: |
| 26 | +- Type: cli |
| 27 | +- Name: copilot-cli |
| 28 | +- URL: https://github.com/github/copilot-cli |
| 29 | +``` |
| 30 | + |
| 31 | +## How It Works |
| 32 | + |
| 33 | +The skill follows this workflow: |
| 34 | + |
| 35 | +### 1. Schema Validation |
| 36 | + |
| 37 | +First, it identifies the correct JSON schema based on the manifest type: |
| 38 | + |
| 39 | +- `cli` → `manifests/schemas/clis.schema.json` |
| 40 | +- `extension` → `manifests/schemas/extensions.schema.json` |
| 41 | +- `ide` → `manifests/schemas/ides.schema.json` |
| 42 | +- `model` → `manifests/schemas/models.schema.json` |
| 43 | +- `provider` → `manifests/schemas/providers.schema.json` |
| 44 | +- `vendor` → `manifests/schemas/vendors.schema.json` |
| 45 | + |
| 46 | +### 2. Web Content Extraction |
| 47 | + |
| 48 | +The skill uses the WebFetch tool to: |
| 49 | + |
| 50 | +- Visit the provided website URL |
| 51 | +- Extract text content and structure |
| 52 | +- Identify key information (description, version, pricing, etc.) |
| 53 | +- Follow relevant links to find additional details |
| 54 | + |
| 55 | +**Important Rules:** |
| 56 | + |
| 57 | +- The `description` field MUST be summarized from actual website content |
| 58 | +- Never generate descriptions - always extract from the source |
| 59 | +- If information isn't found on the main page, the skill will explore subpages |
| 60 | + |
| 61 | +### 3. Platform URL Discovery |
| 62 | + |
| 63 | +For models and providers, the skill will search for third-party platform URLs: |
| 64 | + |
| 65 | +- **HuggingFace**: Search for model/org pages on huggingface.co |
| 66 | +- **Artificial Analysis**: Search for performance benchmarks |
| 67 | +- **OpenRouter**: Search for model availability |
| 68 | + |
| 69 | +Each platform URL is discovered using the WebSearch tool. |
| 70 | + |
| 71 | +### 4. Manifest Generation |
| 72 | + |
| 73 | +The skill creates a complete JSON manifest file with: |
| 74 | + |
| 75 | +- All required fields from the schema |
| 76 | +- Properly formatted URLs (HTTPS only) |
| 77 | +- Validated structure |
| 78 | +- Appropriate null values for unavailable fields |
| 79 | + |
| 80 | +### 5. File Output |
| 81 | + |
| 82 | +The manifest is written to: `manifests/<type>/<name>.json` |
| 83 | + |
| 84 | +### 6. Validation |
| 85 | + |
| 86 | +After creating the manifest file, the skill **MUST** run validation: |
| 87 | + |
| 88 | +```bash |
| 89 | +node scripts/validate-manifests.mjs |
| 90 | +``` |
| 91 | + |
| 92 | +This validation script will: |
| 93 | +- Check schema compliance |
| 94 | +- Verify all required fields are present |
| 95 | +- Validate field formats (URLs, enums, etc.) |
| 96 | +- Ensure filename matches the `id` field |
| 97 | +- Report any errors with detailed messages |
| 98 | + |
| 99 | +**If validation fails**, the errors must be fixed before completing the task. |
| 100 | + |
| 101 | +## Supported Manifest Types |
| 102 | + |
| 103 | +### CLI Tools |
| 104 | + |
| 105 | +**Schema**: Extends app.schema.json (product → vendor-entity → entity) |
| 106 | + |
| 107 | +**Key Fields**: |
| 108 | +- Basic: id, name, description, websiteUrl, docsUrl |
| 109 | +- Vendor: vendor |
| 110 | +- Product: latestVersion, githubUrl, license, pricing, resourceUrls, communityUrls, relatedProducts |
| 111 | +- App: platforms (macOS, Windows, Linux with install/launch commands) |
| 112 | + |
| 113 | +**Example**: `manifests/clis/claude-code.json` |
| 114 | + |
| 115 | +### Extensions |
| 116 | + |
| 117 | +**Schema**: Extends product.schema.json + supportedIdes |
| 118 | + |
| 119 | +**Key Fields**: |
| 120 | +- Same as CLI (except platforms) |
| 121 | +- Additional: supportedIdes (array with ideId, marketplaceUrl, installUri) |
| 122 | + |
| 123 | +**Example**: `manifests/extensions/claude-code.json` |
| 124 | + |
| 125 | +### IDEs |
| 126 | + |
| 127 | +**Schema**: Extends app.schema.json (same as CLI) |
| 128 | + |
| 129 | +**Key Fields**: |
| 130 | +- Identical to CLI structure |
| 131 | +- Focuses on IDE-specific features |
| 132 | + |
| 133 | +**Example**: `manifests/ides/cursor.json` |
| 134 | + |
| 135 | +### Models |
| 136 | + |
| 137 | +**Schema**: Extends vendor-entity.schema.json |
| 138 | + |
| 139 | +**Key Fields**: |
| 140 | +- Basic: id, name, description, websiteUrl, docsUrl, vendor |
| 141 | +- Model-specific: size, totalContext, maxOutput, tokenPricing (input, output, cache) |
| 142 | +- platformUrls: huggingface, artificialAnalysis, openrouter |
| 143 | + |
| 144 | +**Example**: `manifests/models/claude-sonnet-4-5.json` |
| 145 | + |
| 146 | +### Providers |
| 147 | + |
| 148 | +**Schema**: Extends vendor-entity.schema.json |
| 149 | + |
| 150 | +**Key Fields**: |
| 151 | +- Basic: id, name, description, websiteUrl, docsUrl, vendor |
| 152 | +- Provider-specific: type (foundation-model-provider | model-service-provider), applyKeyUrl |
| 153 | +- platformUrls, communityUrls |
| 154 | + |
| 155 | +**Example**: `manifests/providers/openrouter.json` |
| 156 | + |
| 157 | +### Vendors |
| 158 | + |
| 159 | +**Schema**: Extends entity.schema.json |
| 160 | + |
| 161 | +**Key Fields**: |
| 162 | +- Basic: id, name, description, websiteUrl, docsUrl |
| 163 | +- Additional: communityUrls |
| 164 | + |
| 165 | +**Example**: `manifests/vendors/anthropic.json` |
| 166 | + |
| 167 | +## Field Extraction Guidelines |
| 168 | + |
| 169 | +### Description Field |
| 170 | + |
| 171 | +**CRITICAL**: Never generate descriptions. Always extract from website content. |
| 172 | + |
| 173 | +- Must be concise (max 200 characters) |
| 174 | +- Summarize the product's key features |
| 175 | +- Use content from the homepage or about page |
| 176 | +- Keep original tone and terminology |
| 177 | + |
| 178 | +### URLs |
| 179 | + |
| 180 | +All URLs must: |
| 181 | +- Use HTTPS protocol |
| 182 | +- Be valid and accessible |
| 183 | +- Match schema patterns (e.g., GitHub URLs must start with `https://github.com/`) |
| 184 | + |
| 185 | +### Pricing |
| 186 | + |
| 187 | +For products (CLI, IDE, Extension): |
| 188 | +- Extract actual pricing tiers |
| 189 | +- Include: name, value (number or null), currency, per (billing period), category |
| 190 | +- Use null for custom/enterprise pricing |
| 191 | + |
| 192 | +For models: |
| 193 | +- Extract token pricing ($/M tokens) |
| 194 | +- Include: input, output, cache (null if not applicable) |
| 195 | + |
| 196 | +### Platform URLs |
| 197 | + |
| 198 | +Use WebSearch to find: |
| 199 | +- HuggingFace: Model or organization page |
| 200 | +- Artificial Analysis: Benchmark/comparison page |
| 201 | +- OpenRouter: Model availability page |
| 202 | + |
| 203 | +Set to null if not found. |
| 204 | + |
| 205 | +### Community URLs |
| 206 | + |
| 207 | +Search for official social media presence: |
| 208 | +- LinkedIn (company page) |
| 209 | +- Twitter/X |
| 210 | +- GitHub (organization) |
| 211 | +- YouTube (channel) |
| 212 | +- Discord (server invite) |
| 213 | +- Reddit (official subreddit) |
| 214 | +- Blog (official blog) |
| 215 | + |
| 216 | +Set to null if not found. |
| 217 | + |
| 218 | +## Workflow Example |
| 219 | + |
| 220 | +**User Request:** |
| 221 | +``` |
| 222 | +Create a manifest for the Cursor IDE |
| 223 | +URL: https://cursor.sh |
| 224 | +``` |
| 225 | + |
| 226 | +**Skill Actions:** |
| 227 | + |
| 228 | +1. Identify schema: `manifests/schemas/ides.schema.json` |
| 229 | +2. Fetch main page: Extract name, description, key features |
| 230 | +3. Search for documentation: Find docs URL |
| 231 | +4. Search for GitHub: Find repository URL |
| 232 | +5. Extract version: Check for latest release |
| 233 | +6. Find pricing: Navigate to pricing page |
| 234 | +7. Gather community URLs: Search for social media links |
| 235 | +8. Generate manifest: Create `manifests/ides/cursor.json` |
| 236 | +9. **Run validation**: `node scripts/validate-manifests.mjs` |
| 237 | +10. Fix any validation errors if found |
| 238 | + |
| 239 | +## File Structure |
| 240 | + |
| 241 | +``` |
| 242 | +.claude/skills/manifest-creator/ |
| 243 | +├── SKILL.md # This documentation |
| 244 | +└── scripts/ |
| 245 | + └── create.mjs # Main creation script |
| 246 | +``` |
| 247 | + |
| 248 | +## Important Notes |
| 249 | + |
| 250 | +1. **Never Auto-Generate Content**: Always extract from actual website sources |
| 251 | +2. **Verify URLs**: All URLs should be tested for accessibility |
| 252 | +3. **Follow Schema**: Strictly adhere to the JSON schema for each type |
| 253 | +4. **Use Null Appropriately**: Set unavailable fields to null (not empty string) |
| 254 | +5. **ID Format**: Always use lowercase-with-hyphens (e.g., `claude-code`, not `Claude Code`) |
| 255 | +6. **Verified Field**: Default to `false` unless explicitly verified by maintainers |
| 256 | +7. **ALWAYS Validate**: Run `node scripts/validate-manifests.mjs` after creating any manifest file |
| 257 | + |
| 258 | +## Error Handling |
| 259 | + |
| 260 | +If the skill cannot find required information: |
| 261 | +- Ask the user for manual input |
| 262 | +- Suggest alternative URLs to search |
| 263 | +- Provide partial manifest for user completion |
| 264 | +- Log missing fields clearly |
| 265 | + |
| 266 | +## Contributing |
| 267 | + |
| 268 | +When improving this skill: |
| 269 | +- Update schema mappings if new manifest types are added |
| 270 | +- Enhance web scraping patterns for better extraction |
| 271 | +- Add more platform URL sources |
| 272 | +- Improve description summarization |
| 273 | + |
| 274 | +## License |
| 275 | + |
| 276 | +This skill is part of the AI Coding Stack project and follows the project's license. |
0 commit comments