Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.
Quelldateien prüfen
Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Ein direkter Befehl überspringt den Prüf-Prompt. Prüfen Sie die Quelle, bevor Sie ihn ausführen.
// ✅ RIGHT - key registered in package.json or wrapped in try-catch
try
await
workspace
getConfiguration
'alex.skillRecommendations'
update
'code-review.accepted'
1
ConfigurationTarget
Global
catch
console
log
`Skip tracking: ${error}`
Audit Pattern:
# Find all config.update() calls
grep -r "getConfiguration.*\.update\(" src/
# Cross-reference with package.json properties section# Each update() key must exist in "configuration.properties"
2. Command Registration Validation
Check: All commands.registerCommand() calls match declared commands in manifest.
// Code registration
vscode.commands.registerCommand('alex.validateHeir', async () => {...});
// Must have package.json declaration
{
"contributes": {
"commands": [{
"command": "alex.validateHeir",
"title": "Validate as Heir Project"
}]
}
}
Audit Pattern:
# Find all command registrations
grep -r "registerCommand\(['\"]alex\." src/
# Extract command names and verify each exists in package.json
3. Configuration Read Validation
Check: All getConfiguration().get() calls match registered properties.
// This config read should have a registered propertyconst enabled = vscode.workspace.getConfiguration('alex.voice').get('enabled', false);
// Check package.json has "alex.voice.enabled"
Warning Pattern: Configuration reads with no defaults are risky:
// ⚠️ No fallback - will be undefined if not registeredconst value = config.get('someKey');
// ✅ Better - always provide defaultconst value = config.get('someKey', defaultValue);
4. Error Handling Patterns
For Dynamic Configuration Keys (skill recommendations, user preferences):
// Pattern: Essential config must be registeredawait vscode.workspace.getConfiguration('alex.globalKnowledge')
.update('remoteRepo', repo, ConfigurationTarget.Global);
// No try-catch - failure should bubble up
Validation Checklist
Pre-Publish Review
Search code for getConfiguration().update() calls
Verify each updated key exists in package.json properties OR has try-catch
Search for registerCommand() calls
Verify each command exists in contributes.commands
Check for dynamic config patterns (user tracking, etc.)
Apply graceful degradation pattern for non-critical features
Automated Audit Script
Pseudocode: validate-manifest
1. Search src/**/*.ts for getConfiguration('section').update('key') calls
2. Load contributes.configuration.properties from package.json
3. For each config update found in source code:
If the full key (section.key) is NOT in package.json properties:
Flag as unregistered config write (potential runtime error)
4. Report all mismatches
$issues += "⚠️ $fullKey - not registered (verify try-catch exists)"
## Common Pitfalls
1. **Dynamic Configuration Keys**: User preferences, tracking counters
- **Solution**: Either register dynamic schema or use try-catch pattern
2. **Namespaced Configuration**: `alex.skill.subkey.value`
- **Solution**: Register full dotted path: `"alex.skill.subkey.value": {...}`
3. **Multi-Target Updates**: Workspace vs Global vs WorkspaceFolder
- **Solution**: Test configuration across all scopes
4. **Configuration Migration**: Deprecated settings
- **Solution**: Use `deprecationMessage` in property definition
## Real-World Example: Skill Recommendations
**Problem**: Tracking skill usage without bloating package.json with hundreds of dynamic keys.
**Solution**: Graceful degradation pattern
```typescript
async function trackRecommendation(skillId: string, accepted: boolean) {
try {
const context = 'alex.skillRecommendations';
const key = `${skillId}.${accepted ? 'accepted' : 'dismissed'}`;
const current = vscode.workspace.getConfiguration(context).get<number>(key, 0);
await vscode.workspace.getConfiguration(context).update(
key,
current + 1,
vscode.ConfigurationTarget.Global
);
} catch (error) {
// Feature degrades gracefully - recommendations still work
console.log(`[Alex] Skipping recommendation tracking: ${error}`);
}
}
Why This Works:
Feature works with or without tracking
No user-facing error for unregistered config
Logging helps debug if tracking is important
Simple implementation vs complex dynamic schema
Integration with Existing QA
### Configuration Validation
Before each release:
1. Run `scripts/validate-manifest.ps1`2. Review any warnings for try-catch coverage
3. Test configuration updates in clean VS Code instance
4. Verify error messages are user-friendly