This skill should be used when the user asks to "update TBC schemas", "regenerate schemas from kicker", "sync schemas with new TBC version", "extract schemas from kicker-aggregated.json", "update template schemas", or mentions "schema update", "schema regeneration", "kicker update", or "new TBC release".
/plugin marketplace add rafaelcalleja/claude-market-place/plugin install gitlab-tbc@claude-market-placeThis skill inherits all available tools. When active, it can use any tool Claude has access to.
references/kicker-structure.mdscripts/extract-schemas.pyThis skill manages the extraction and regeneration of JSON schemas from the TBC Kicker source, keeping the validation schemas synchronized with new To-Be-Continuous releases.
The TBC Kicker skill uses JSON schemas to validate .gitlab-ci.yml inputs against real template variables. When TBC releases new versions with updated variables, features, or templates, regenerate the schemas to keep validation accurate.
Before regenerating schemas, ensure the kicker source is available:
# Clone kicker repository if not present
git clone https://gitlab.com/to-be-continuous/kicker.git /tmp/kicker
# Or update existing clone
cd /tmp/kicker && git pull
The source file is located at:
/tmp/kicker/src/assets/kicker-aggregated.json
Check that the kicker source is up to date:
cd /tmp/kicker
git log -1 --oneline
Execute the extraction script:
cd /path/to/gitlab-tbc/skills/tbc-kicker
python3 scripts/extract-schemas.py \
--input /tmp/kicker/src/assets/kicker-aggregated.json \
--output-dir schemas/
Check the generated schemas:
# Count schemas (should be ~50)
ls schemas/*.json | wc -l
# Verify a specific schema
python3 scripts/validate-inputs.py --list-valid aws
Run validation on existing examples:
for f in examples/*.yml; do
python3 scripts/validate-inputs.py "$f"
done
The scripts/extract-schemas.py script handles:
AWS_CLI_IMAGE → cli-imagex-feature metadatax-variant metadatatemplate_path (base + variants)python3 scripts/extract-schemas.py --help
Options:
--input, -i Path to kicker-aggregated.json
--output-dir, -o Output directory for schemas
--template, -t Extract only a specific template
To extract or update a single template:
python3 scripts/extract-schemas.py \
--input /tmp/kicker/src/assets/kicker-aggregated.json \
--output-dir schemas/ \
--template python
Each generated schema follows this structure:
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Template Name",
"description": "to-be-continuous/project-path",
"type": "object",
"properties": {
"inputs": {
"type": "object",
"properties": {
"input-name": {
"type": "string",
"description": "...",
"default": "...",
"x-feature": "Feature Name",
"x-variant": "Variant Name",
"x-advanced": true
}
},
"additionalProperties": false
}
},
"_meta": {
"prefix": "PREFIX_",
"kind": "build|hosting|analysis",
"features": ["Feature1", "Feature2"],
"variants": ["Variant1", "Variant2"],
"variable_count": 25
}
}
When TBC adds new templates:
The validate-inputs.py script performs 3-level validation:
| Level | What it validates | Error example |
|---|---|---|
| Component | Name exists (gitlab-ci-{name} or gitlab-ci-{name}-{variant}) | Component 'aws' not found |
| Version | Exists in project.tags | Version '99' not found |
| Inputs | Exist in schema properties | 'region' is not valid |
to-be-continuous/{project}/{component}@{version}project.path in _meta.jsoncomponents[]project.tags[]If validation reports "No schema found for template":
schemas/ directoryThe script transforms variable names:
PYTHON_IMAGE → imageIMAGE → imageBUILD_SYSTEM → build-systemIf mismatch occurs, check the _meta.prefix in schema.
Features and variants are extracted from the kicker JSON. If missing:
references/kicker-structure.md - Structure of kicker-aggregated.jsonscripts/extract-schemas.py - Main extraction script (shared with tbc-kicker)The extraction script generates schemas/_meta.json with template metadata:
{
"generated_from": "/tmp/kicker/src/assets/kicker-aggregated.json",
"template_count": 50,
"templates": {
"python": {
"name": "Python",
"project": {
"path": "to-be-continuous/python",
"tag": "7.5.2",
"tags": ["7.5.2", "7.5", "7", ...]
},
"variable_count": 48,
"components": ["gitlab-ci-python", "gitlab-ci-python-vault", "gitlab-ci-python-gcp"]
}
}
}
| Field | Description |
|---|---|
project.path | GitLab project path |
project.tag | Latest version |
project.tags | All available versions |
components | Valid component names (base + variants) |
Component names are extracted from template_path:
templates/gitlab-ci-python.yml → gitlab-ci-pythontemplates/gitlab-ci-python-vault.yml → gitlab-ci-python-vaultThe validation script uses this to verify component names in .gitlab-ci.yml:
# Correct format
- component: $CI_SERVER_FQDN/to-be-continuous/python/gitlab-ci-python@7
# NOT: python/python@7 (missing gitlab-ci- prefix)
git pull in /tmp/kickerThis skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.