.claude/skills/schema-creator/SKILL.md
Creates JSON Schema validation files for skills, agents, hooks, workflows, and data structures. Ensures type safety and input validation across the framework.
npx skillsauth add oimiragieo/agent-studio schema-creatorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
WARNING: DO NOT WRITE DIRECTLY TO .claude/schemas/
Schema files are protected by
unified-creator-guard.cjs(Gate 4 in CLAUDE.md). Direct writes bypass post-creation steps (catalog updates, consumer assignment, integration verification). Always use theschema-creatorskill workflow for creating schemas. Direct writes create "invisible artifacts" that no validator or agent can discover.
Creates JSON Schema validation files for the Claude Code Enterprise Framework. Schemas enforce type safety, input validation, and structural consistency across skills, agents, hooks, workflows, and custom data structures.
After creating ANY schema, you MUST:
Verification:
# Verify schema is valid JSON
node -e "JSON.parse(require('fs').readFileSync('.claude/schemas/<schema-name>.json'))"
# Check schema exists
ls .claude/schemas/<schema-name>.json || ls .claude/skills/<skill>/schemas/<schema-name>.json
WHY: Invalid schemas cause silent validation failures. Unregistered schemas are never used.
Schemas provide structured validation for:
| Type | Location | Purpose |
| ------------------- | -------------------------------------------------- | -------------------------------- |
| Skill Input | .claude/skills/{name}/schemas/input.schema.json | Validate skill invocation inputs |
| Skill Output | .claude/skills/{name}/schemas/output.schema.json | Validate skill execution outputs |
| Agent Definition | .claude/schemas/agent-definition.schema.json | Validate agent YAML frontmatter |
| Skill Definition | .claude/schemas/skill-definition.schema.json | Validate skill YAML frontmatter |
| Hook Definition | .claude/schemas/hook-definition.schema.json | Validate hook configuration |
| Workflow Definition | .claude/schemas/workflow-definition.schema.json | Validate workflow structure |
| Custom | .claude/schemas/{name}.schema.json | Project-specific validation |
Use .claude/schemas/agent-definition.schema.json as the canonical reference schema.
Before finalizing any schema, compare against reference:
After creating a schema, update CLAUDE.md if the schema enables new capabilities:
Verification:
grep "schema-name" .claude/CLAUDE.md || echo "WARNING: Schema not registered in CLAUDE.md"
BLOCKING: Schema without documentation may not be discovered by other agents.
BEFORE creating ANY schema, invoke research-synthesis:
Skill({ skill: 'research-synthesis' });
Research Requirements:
.claude/schemas/ for patterns.claude/context/artifacts/catalogs/schema-catalog.mdWhy: Research-synthesis ensures schemas follow industry best practices and maintain consistency with existing framework schemas.
BEFORE creating any schema file, check if it already exists:
Check if schema already exists:
test -f .claude/schemas/<schema-name>.json && echo "EXISTS" || echo "NEW"
If schema EXISTS:
DO NOT proceed with creation
Invoke artifact-updater workflow instead:
Skill({
skill: 'artifact-updater',
args: {
name: '<schema-name>',
changes: '<description of requested changes>',
justification: 'Update requested via schema-creator',
},
});
Return updater result and STOP
If schema is NEW:
Before proceeding with creation, run the 3-layer duplicate check:
const { checkDuplicate } = require('.claude/lib/creation/duplicate-detector.cjs');
const result = checkDuplicate({
artifactType: 'schema',
name: proposedName,
description: proposedDescription,
keywords: proposedKeywords || [],
});
Handle results:
EXACT_MATCH: Stop creation. Route to schema-updater skill instead: Skill({ skill: 'schema-updater' })REGISTRY_MATCH: Warn user — artifact is registered but file may be missing. Investigate before creating. Ask user to confirm.SIMILAR_FOUND: Display candidates with scores. Ask user: "Similar artifact(s) exist. Continue with new creation or update existing?"NO_MATCH: Proceed to next step.Override: If user explicitly passes --force, skip this check entirely.
Before proceeding with creation, run the ecosystem companion check:
companion-check.cjs from .claude/lib/creators/companion-check.cjscheckCompanions("schema", "{schema-name}") to identify companion artifactsThis step is informational (does not block creation) but ensures the full artifact ecosystem is considered.
Before creating a schema, understand:
1. WHAT data structure are you validating?
- Skill input/output
- Agent/skill/hook/workflow definition
- Custom data format
2. WHERE should the schema live?
- Global: .claude/schemas/ (framework-wide)
- Local: .claude/skills/{skill}/schemas/ (skill-specific)
3. WHAT are the required vs optional fields?
- Required: Must be present for valid data
- Optional: Enhance but not required
4. WHAT are the validation rules?
- Types (string, number, boolean, object, array)
- Patterns (regex for strings)
- Ranges (min/max for numbers)
- Enums (allowed values)
- Lengths (min/max for strings/arrays)
| Creating For | Schema Location | Example |
| ------------------ | --------------------------------------------------- | -------------------------- |
| New skill inputs | .claude/skills/{skill}/schemas/input.schema.json | tdd skill parameters |
| New skill outputs | .claude/skills/{skill}/schemas/output.schema.json | tdd skill results |
| Global definition | .claude/schemas/{name}.schema.json | test-results.schema.json |
| Reusable component | .claude/schemas/components/{name}.schema.json | task-status.schema.json |
Examine existing data or specify expected structure:
// Example: Analyzing skill output structure
const exampleOutput = {
success: true,
result: {
filesCreated: ['src/test.ts'],
testsGenerated: 5,
coverage: 85.2,
},
metadata: {
duration: 1234,
skill: 'test-generator',
},
};
// Extract schema from example:
// - success: boolean (required)
// - result: object (optional)
// - metadata: object (optional)
Use the schema template and customize:
{
"$schema": "https://json-schema.org/draft-07/schema#",
"$id": "https://claude.ai/schemas/{schema-name}",
"title": "{Schema Title}",
"description": "{What this schema validates}",
"type": "object",
"required": ["field1", "field2"],
"properties": {
"field1": {
"type": "string",
"description": "Description of field1",
"minLength": 1,
"maxLength": 100
},
"field2": {
"type": "number",
"description": "Description of field2",
"minimum": 0,
"maximum": 100
},
"optionalField": {
"type": "boolean",
"description": "Optional boolean field",
"default": false
}
},
"additionalProperties": false
}
Every property MUST have a description:
{
"properties": {
"name": {
"type": "string",
"description": "The unique identifier for the resource in lowercase-with-hyphens format",
"pattern": "^[a-z][a-z0-9-]*$",
"examples": ["my-skill", "test-generator", "code-reviewer"]
}
}
}
Add top-level examples:
{
"examples": [
{
"name": "example-skill",
"description": "An example skill for demonstration",
"version": "1.0.0"
}
]
}
Write a simple test to verify the schema works:
// validate-schema-test.cjs
const Ajv = require('ajv');
const schema = require('./.claude/schemas/my-schema.schema.json');
const ajv = new Ajv({ allErrors: true });
const validate = ajv.compile(schema);
// Test valid data
const validData = {
/* valid example */
};
console.log('Valid:', validate(validData));
// Test invalid data
const invalidData = {
/* invalid example */
};
console.log('Invalid:', validate(invalidData));
console.log('Errors:', validate.errors);
This step is CRITICAL. After creating the schema artifact, you MUST register it in the schema discovery system.
Phase 1 Context: Phase 1 is responsible for discovering and cataloging schemas for validation. Schemas created without registration are invisible to validators and other systems that need them for data validation.
After schema file is written and validated:
Create/Update Schema Registry Entry in appropriate location:
If registry doesn't exist, create .claude/context/artifacts/schema-catalog.md:
{
"schemas": [
{
"name": "{schema-name}",
"id": "{schema-name}",
"$id": "https://claude.ai/schemas/{schema-name}",
"type": "{input|output|definition|global|component}",
"description": "{What this schema validates}",
"version": "1.0.0",
"filePath": ".claude/schemas/{schema-name}.schema.json",
"validatesFor": ["{artifact-type-1}", "{artifact-type-2}"],
"relatedSchemas": [],
"usedBy": ["{validator-hook}", "{creator-skill}"]
}
]
}
Register with Validators:
Update any validation hooks that should use this schema:
.claude/hooks/validation/ for relevant validatorsExample:
const schemaMap = {
'.claude/agents/': '.claude/schemas/agent-definition.schema.json',
'.claude/schemas/{schema-name}.schema.json': require('./.claude/schemas/{schema-name}.schema.json'),
};
Document in .claude/context/artifacts/catalogs/schema-catalog.md:
Add entry to the schema catalog:
### {Schema Title} (`{schema-name}.schema.json`)
**$id:** `https://claude.ai/schemas/{schema-name}`
**Purpose:** {Detailed description of what this schema validates}
**Used by:**
- {Validator/hook 1}
- {Creator skill 1}
**Root properties:**
- {property-1}: {description}
- {property-2}: {description}
**Example valid data:**
```json
{
"example": "value"
}
```
Required fields: {List required fields}
Validation: When data matches this schema, {describe what is validated}
Update .claude/CLAUDE.md if Schema Enables New Capabilities:
If this schema supports new artifact types or validation:
Example entry:
| `{schema-name}` | `.claude/schemas/` | {Purpose} |
Update Memory:
Append to .claude/context/memory/learnings.md:
## Schema: {schema-name}
- **Type:** {input|output|definition|global|component}
- **Validates:** {What artifact/data type}
- **Purpose:** {Detailed purpose}
- **$id:** https://claude.ai/schemas/{schema-name}
- **Validators:** {Which hooks/validators use it}
- **Related Schemas:** {Any $ref references}
Why this matters: Without schema registration:
Phase 1 Integration: Schema registry is the discovery mechanism for Phase 1, enabling validators to find and apply schemas consistently across the system.
Before marking schema creation complete, verify ALL items:
[ ] Schema file created in correct location
[ ] Schema is valid JSON (parseable)
[ ] Schema has $schema, $id, title, description
[ ] All required fields defined in "required" array
[ ] All properties have descriptions
[ ] Examples included for complex schemas
[ ] Schema registry entry created (Step 7)
[ ] Validators registered with schema (if applicable)
[ ] SCHEMA_CATALOG.md updated (Step 7)
[ ] Related documentation updated
Verification Commands:
# Validate JSON syntax
node -e "JSON.parse(require('fs').readFileSync('.claude/schemas/{name}.schema.json'))"
# Check required fields
node -e "const s = require('.claude/schemas/{name}.schema.json'); console.log('title:', s.title); console.log('description:', s.description);"
# Check schema registry
grep "{schema-name}" .claude/context/artifacts/schema-catalog.md
# List all schemas
ls -la .claude/schemas/*.schema.json
BLOCKING: If any item fails, schema creation is INCOMPLETE. All items must pass.
After creating a schema, complete ALL of the following:
.claude/hooks/ if schema affects validationschemaMap in relevant validators.claude/docs/ if schema documents new patternVerification Checklist:
# Check CLAUDE.md registration
grep "{schema-name}" .claude/CLAUDE.md
# Check for $ref usage in other schemas
grep -r "{schema-name}" .claude/schemas/
# Verify no duplicate $id
grep -h "\$id" .claude/schemas/*.json | sort | uniq -d
BLOCKING: Schema creation is NOT complete until all impact analysis items are verified.
{
"$schema": "https://json-schema.org/draft-07/schema#",
"$id": "https://claude.ai/schemas/skill-name-input",
"title": "Skill Name Input Schema",
"description": "Input validation schema for skill-name skill",
"type": "object",
"required": [],
"properties": {
"target": {
"type": "string",
"description": "Target file or directory path"
},
"options": {
"type": "object",
"description": "Optional configuration",
"properties": {
"verbose": {
"type": "boolean",
"default": false
}
}
}
},
"additionalProperties": false
}
{
"$schema": "https://json-schema.org/draft-07/schema#",
"$id": "https://claude.ai/schemas/skill-name-output",
"title": "Skill Name Output Schema",
"description": "Output validation schema for skill-name skill",
"type": "object",
"required": ["success"],
"properties": {
"success": {
"type": "boolean",
"description": "Whether the skill executed successfully"
},
"result": {
"type": "object",
"description": "The skill execution result",
"additionalProperties": true
},
"error": {
"type": "string",
"description": "Error message if execution failed"
}
},
"additionalProperties": false
}
{
"$schema": "https://json-schema.org/draft-07/schema#",
"$id": "https://claude.ai/schemas/entity-definition",
"title": "Entity Definition Schema",
"description": "Schema for validating entity definition files",
"type": "object",
"required": ["name", "description"],
"properties": {
"name": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]*$",
"description": "Entity name in lowercase-with-hyphens format"
},
"description": {
"type": "string",
"minLength": 20,
"maxLength": 500,
"description": "Clear description of the entity purpose"
},
"version": {
"type": "string",
"pattern": "^\\d+\\.\\d+(\\.\\d+)?$",
"default": "1.0.0",
"description": "Semantic version number"
}
},
"additionalProperties": true,
"examples": [
{
"name": "my-entity",
"description": "A sample entity for demonstration purposes",
"version": "1.0.0"
}
]
}
{
"kebab-case": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]*$"
},
"semver": {
"type": "string",
"pattern": "^\\d+\\.\\d+(\\.\\d+)?$"
},
"file-path": {
"type": "string",
"pattern": "^[\\w./-]+$"
},
"email": {
"type": "string",
"format": "email"
},
"url": {
"type": "string",
"format": "uri"
}
}
{
"model": {
"type": "string",
"enum": ["sonnet", "opus", "haiku", "inherit"]
},
"priority": {
"type": "string",
"enum": ["lowest", "low", "medium", "high", "highest"]
},
"status": {
"type": "string",
"enum": ["pending", "in_progress", "completed", "failed", "blocked"]
}
}
{
"tools": {
"type": "array",
"items": { "type": "string" },
"minItems": 1,
"uniqueItems": true,
"description": "List of available tools"
},
"skills": {
"type": "array",
"items": { "type": "string", "pattern": "^[a-z][a-z0-9-]*$" },
"description": "List of skill names"
}
}
{
"config": {
"type": "object",
"additionalProperties": false,
"properties": {
"enabled": { "type": "boolean", "default": true },
"timeout": { "type": "integer", "minimum": 0 }
}
},
"metadata": {
"type": "object",
"additionalProperties": true,
"description": "Arbitrary metadata"
}
}
{
"if": {
"properties": {
"type": { "const": "mcp" }
}
},
"then": {
"required": ["server", "command"]
},
"else": {
"required": ["handler"]
}
}
{
"$defs": {
"namePattern": {
"type": "string",
"pattern": "^[a-z][a-z0-9-]*$",
"description": "Lowercase with hyphens"
},
"toolsList": {
"type": "array",
"items": { "type": "string" },
"minItems": 1
}
},
"properties": {
"name": { "$ref": "#/$defs/namePattern" },
"tools": { "$ref": "#/$defs/toolsList" }
}
}
# Create skill input schema
node .claude/skills/schema-creator/scripts/main.cjs \
--type input \
--skill my-skill
# Create skill output schema
node .claude/skills/schema-creator/scripts/main.cjs \
--type output \
--skill my-skill
# Create global schema
node .claude/skills/schema-creator/scripts/main.cjs \
--type global \
--name my-data-format
# Create definition schema
node .claude/skills/schema-creator/scripts/main.cjs \
--type definition \
--entity workflow
# Validate a schema file
node .claude/skills/schema-creator/scripts/main.cjs \
--validate .claude/schemas/my-schema.schema.json
# Validate data against schema
node .claude/skills/schema-creator/scripts/main.cjs \
--validate-data data.json \
--schema .claude/schemas/my-schema.schema.json
# Generate schema from JSON example
node .claude/skills/schema-creator/scripts/main.cjs \
--from-example example.json \
--output .claude/schemas/generated.schema.json
const Ajv = require('ajv');
const addFormats = require('ajv-formats');
const ajv = new Ajv({ allErrors: true });
addFormats(ajv);
// Load and compile schema
const schema = require('./.claude/schemas/skill-definition.schema.json');
const validate = ajv.compile(schema);
// Validate data
function validateSkillDefinition(data) {
const valid = validate(data);
if (!valid) {
return {
valid: false,
errors: validate.errors.map(e => `${e.instancePath} ${e.message}`),
};
}
return { valid: true };
}
// .claude/hooks/schema-validator.js
const fs = require('fs');
const path = require('path');
const Ajv = require('ajv');
const schemaMap = {
'.claude/agents/': '.claude/schemas/agent-definition.schema.json',
'.claude/skills/': '.claude/schemas/skill-definition.schema.json',
'.claude/hooks/': '.claude/schemas/hook-definition.schema.json',
};
function validateFile(filePath) {
// Find matching schema
for (const [pattern, schemaPath] of Object.entries(schemaMap)) {
if (filePath.includes(pattern)) {
const schema = JSON.parse(fs.readFileSync(schemaPath));
const ajv = new Ajv();
const validate = ajv.compile(schema);
// Parse and validate file
// ...
}
}
}
This skill is part of the unified artifact lifecycle. For complete multi-agent orchestration:
Router Decision: .claude/workflows/core/router-decision.md
Artifact Lifecycle: .claude/workflows/core/skill-lifecycle.md
External Integration: .claude/workflows/core/external-integration.md
This skill is part of the Creator Ecosystem. Use companion creators for related artifacts:
| Gap Discovered | Required Artifact | Creator to Invoke | When |
| ---------------------------------------- | ----------------- | -------------------------------------- | --------------------------------- |
| Domain knowledge needs a reusable skill | skill | Skill({ skill: 'skill-creator' }) | Gap is a full skill domain |
| Existing skill has incomplete coverage | skill update | Skill({ skill: 'skill-updater' }) | Close skill exists but incomplete |
| Capability needs a dedicated agent | agent | Skill({ skill: 'agent-creator' }) | Agent to own the capability |
| Existing agent needs capability update | agent update | Skill({ skill: 'agent-updater' }) | Close agent exists but incomplete |
| Domain needs code/project scaffolding | template | Skill({ skill: 'template-creator' }) | Reusable code patterns needed |
| Behavior needs pre/post execution guards | hook | Skill({ skill: 'hook-creator' }) | Enforcement behavior required |
| Process needs multi-phase orchestration | workflow | Skill({ skill: 'workflow-creator' }) | Multi-step coordination needed |
| Artifact needs structured I/O validation | schema | Skill({ skill: 'schema-creator' }) | JSON schema for artifact I/O |
| User interaction needs a slash command | command | Skill({ skill: 'command-creator' }) | User-facing shortcut needed |
| Repeated logic needs a reusable CLI tool | tool | Skill({ skill: 'tool-creator' }) | CLI utility needed |
| Narrow/single-artifact capability only | inline | Document within this artifact only | Too specific to generalize |
[SKILL-CREATOR] Creating new skill with validation...
-> Calls schema-creator for input/output schemas
-> Schemas created in .claude/skills/{skill}/schemas/
[AGENT-CREATOR] Creating agent with strict validation...
-> Agent uses agent-definition.schema.json for self-validation
-> Agent validates inputs using custom schemas
[WORKFLOW-CREATOR] Creating workflow with typed steps...
-> Each step output validates against schema
-> Workflow uses workflow-definition.schema.json
Total Active Schemas: 27 (25 archived - see .claude/schemas/_archive/)
Actively Validated (Ajv): 8 schemas with runtime validation
Documentation Reference: 16 schemas as structural templates
Optional Validation: 3 schemas with paths defined but validation skipped
Complete catalog: .claude/context/artifacts/catalogs/schema-catalog.md
| Schema | Wiring Status | Consumer |
| ----------------------- | ------------- | ----------------------- |
| agent-capability-card | WIRED | generate-agent-registry |
| agent-config | WIRED | agent-config.cjs |
| agent-definition | WIRED | agent-parser.cjs |
| agent-identity | WIRED | agent-parser.cjs |
| agent-spawn-params | DOCS ONLY | Spawn prompt reference |
| Schema | Wiring Status | Consumer |
| -------------------------------- | ------------- | ------------------------ |
| skill-definition | WIRED | skill-creator/create.cjs |
| skill-diagram-generator-output | SOFT-WIRED | diagram-generator skill |
| skill-repo-rag-output | SOFT-WIRED | repo-rag skill |
| skill-test-generator-output | SOFT-WIRED | test-generator skill |
| Schema | Wiring Status | Consumer |
| --------------------- | ------------- | --------------------------- |
| workflow-definition | DOCS ONLY | No workflow-creator scripts |
| hook-definition | DOCS ONLY | No hook-creator scripts |
| Schema | Wiring Status | Consumer |
| ----------------- | ------------- | -------------------------- |
| evolution-state | WIRED | self-healing/validator.cjs |
| track-metadata | DOCS ONLY | TaskCreate metadata field |
| Schema | Wiring Status | Consumer |
| --------------- | ------------- | --------------------------- |
| tool-manifest | WIRED | generate-tool-manifest.cjs |
| presets | WIRED | spawn/prompt-assembler.cjs |
| adr-template | DOCS ONLY | ADR documentation structure |
| Schema | Wiring Status | Consumer |
| ---------------------- | ------------- | ------------------------ |
| plan | DOCS ONLY | Planning phase reference |
| implementation-plan | DOCS ONLY | Implementation planning |
| phase-models | DOCS ONLY | Phase planning reference |
| product_requirements | DOCS ONLY | Requirements gathering |
| project_brief | DOCS ONLY | Project initialization |
| Schema | Wiring Status | Consumer |
| -------------- | ------------- | ----------------------- |
| test_plan | DOCS ONLY | Test planning reference |
| test-results | DOCS ONLY | Test execution output |
| Schema | Wiring Status | Consumer |
| ------------------------ | ------------- | -------------------------- |
| specification-template | DOCS ONLY | Specification documents |
| system_architecture | DOCS ONLY | Architecture documentation |
| ux_spec | DOCS ONLY | UX specification documents |
| Schema | Wiring Status | Consumer |
| ------------------ | ------------- | ----------------------- |
| project-analysis | DOCS ONLY | Project analyzer output |
Note: All schemas located at .claude/schemas/ unless otherwise specified. See schema catalog for full details on consumers, validation methods, and integration status.
This skill outputs to: .claude/schemas/
For skill-specific schemas: .claude/skills/<skill-name>/schemas/
Schema naming convention:
<name>.schema.jsoninput.schema.jsonoutput.schema.jsoncomponents/<name>.schema.json.claude/docs/FILE_PLACEMENT_RULES.md.claude/docs/DEVELOPER_WORKFLOW.md.claude/docs/ARTIFACT_NAMING.md.claude/rules/workspace-conventions.md (output placement, naming, provenance)File placement is enforced by file-placement-guard.cjs hook.
Invalid placements will be blocked in production mode.
Before starting:
cat .claude/context/memory/learnings.md
Check for:
After completing:
.claude/context/memory/learnings.md.claude/context/memory/issues.md.claude/context/memory/decisions.mdASSUME INTERRUPTION: Your context may reset. If it's not in memory, it didn't happen.
These rules are INVIOLABLE. Breaking them causes validation failures.
1. NO SCHEMA WITHOUT $schema FIELD
- Every schema MUST declare its JSON Schema version
- Use draft-07 or later: "$schema": "https://json-schema.org/draft-07/schema#"
2. NO SCHEMA WITHOUT title AND description
- Every schema MUST be self-documenting
- title: Short name of what it validates
- description: Detailed explanation of purpose
3. NO PROPERTY WITHOUT description
- Every property MUST have a description
- Readers should understand field purpose without external docs
4. NO REQUIRED FIELD WITHOUT DEFINITION
- If field is in "required" array, it MUST be in "properties"
- Undefined required fields cause silent validation failures
5. NO ADDITIONALPROPERTIES: true WITHOUT REASON
- Default to additionalProperties: false for strict validation
- Only allow additional properties when explicitly needed
6. NO SCHEMA WITHOUT VALIDATION TEST
- Test schema with valid AND invalid examples
- Schema that passes everything validates nothing
7. NO CREATION WITHOUT SYSTEM IMPACT ANALYSIS
- Check if related validators need updating
- Check if documentation needs updating
- Check if related schemas need cross-references
8. NO SCHEMA WITHOUT CLAUDE.MD REGISTRATION
- If schema enables new capabilities, update CLAUDE.md
- Section 4 (Self-Evolution) for agent/skill/workflow schemas
- Verify with: grep "schema-name" .claude/CLAUDE.md
9. IRON LAW II: TYPED TOOL CALLING (MODEL-AGNOSTIC INTERFACE)
- Every tool-facing schema MUST include "description" on every property
- This is Typed Tool Calling: the model resolves parameters from a typed
JSON Schema contract instead of inferring from free-form markdown prose
- Benefit: Reduces model hallucination by 40-60% vs. untyped instructions
- Every required field must have: "type", "description", and where applicable "enum"
- Use snake_case for property names for cross-framework compatibility
- For schemas consumed by AI agents, add a Google Dork to your research:
"$schema" "type": "object" "properties" filetype:json ("tool" OR "skill") [Domain]
- additionalProperties MUST be false unless explicitly justified
# Verify schema is valid JSON
node -e "JSON.parse(require('fs').readFileSync('.claude/schemas/{name}.schema.json'))"
# Check required fields exist
node -e "const s = require('.claude/schemas/{name}.schema.json'); console.log('Has $schema:', !!s.\$schema); console.log('Has title:', !!s.title); console.log('Has description:', !!s.description);"
# Check all required properties are defined
node -e "const s = require('.claude/schemas/{name}.schema.json'); const r = s.required || []; const p = Object.keys(s.properties || {}); console.log('Missing:', r.filter(x => !p.includes(x)));"
# List all schemas
ls -la .claude/schemas/*.schema.json
Completion Checklist (all must be checked):
[ ] Schema file created with .schema.json extension
[ ] $schema field present (draft-07 or later)
[ ] title and description present
[ ] All properties have descriptions
[ ] required array matches defined properties
[ ] examples included for complex schemas
[ ] Schema validated with test data
[ ] System impact analysis completed
[ ] CLAUDE.md updated if schema enables new capabilities
[ ] Related schemas updated if needed ($ref links)
BLOCKING: If ANY item fails, schema creation is INCOMPLETE. All items must pass before proceeding.
This creator skill is part of a coordinated creator ecosystem. Any schema created here must align with related creators:
agent-creator for ownership and execution pathsskill-creator for capability packaging and assignmenthook-creator for enforcement and guardrailsworkflow-creator for orchestration and phase gatingtemplate-creator for standardized scaffoldscommand-creator for user/operator command UXtool-creator for executable automation surfacesBefore completion, verify all relevant handshakes:
.claude/CLAUDE.md and related routing docs.validate-integration.cjs passes for the created artifact.For new schema patterns, research is mandatory:
mcp__Exa__web_search_exa({ query: '<topic> JSON Schema 2025 best practices' })mcp__Exa__get_code_context_exa({ query: '<topic> schema validation examples' })mcp__Exa__web_search_exa({ query: 'site:arxiv.org <topic> 2024 2025' })WebFetch({ url: 'https://arxiv.org/search/?query=<topic>&searchtype=all&start=0' })arXiv is mandatory (not fallback) when topic involves: AI agents, LLM evaluation, orchestration, memory/RAG, security, or any emerging methodology.
After creation completes, run the ecosystem integration checklist:
runIntegrationChecklist(artifactType, artifactPath) from .claude/lib/creators/creator-commons.cjsqueueCrossCreatorReview(artifactType, artifactPath) from .claude/lib/creators/creator-commons.cjsmustHave items before marking task completeshouldHave items as follow-up tasksIntegration verification:
Schema artifacts are deterministic and structurally verifiable — the Step 7 validation tests in this skill's workflow (AJV compilation, $id uniqueness check, required-field coverage, test-data round-trip) serve as the primary quality gate and provide stronger signal than LLM-as-judge scoring. For schemas that feed agent or hook output contracts, also validate against skill-evaluation-output.schema.json to ensure downstream evaluators can parse the results. Full evaluation protocol and grader/analyzer agent usage is documented in .claude/skills/skill-creator/EVAL_WORKFLOW.md.
tools
Comprehensive biosignal processing toolkit for analyzing physiological data including ECG, EEG, EDA, RSP, PPG, EMG, and EOG signals. Use this skill when processing cardiovascular signals, brain activity, electrodermal responses, respiratory patterns, muscle activity, or eye movements. Applicable for heart rate variability analysis, event-related potentials, complexity measures, autonomic nervous system assessment, psychophysiology research, and multi-modal physiological signal integration.
tools
Comprehensive toolkit for creating, analyzing, and visualizing complex networks and graphs in Python. Use when working with network/graph data structures, analyzing relationships between entities, computing graph algorithms (shortest paths, centrality, clustering), detecting communities, generating synthetic networks, or visualizing network topologies. Applicable to social networks, biological networks, transportation systems, citation networks, and any domain involving pairwise relationships.
data-ai
Molecular featurization for ML (100+ featurizers). ECFP, MACCS, descriptors, pretrained models (ChemBERTa), convert SMILES to features, for QSAR and molecular ML.
development
Run Python code in the cloud with serverless containers, GPUs, and autoscaling. Use when deploying ML models, running batch processing jobs, scheduling compute-intensive tasks, or serving APIs that require GPU acceleration or dynamic scaling.