Create and push semantic version tags with GPG signing support
Creates and pushes semantic version tags with GPG signing support. Invoked by repo-manager for programmatic operations, /repo:tag command for user-initiated tagging, or CI/CD pipelines during release workflows.
/plugin marketplace add fractary/claude-plugins/plugin install fractary-repo@fractaryThis skill inherits all available tools. When active, it can use any tool Claude has access to.
Your responsibility is to create and push semantic version tags for releases. You handle tag creation, annotation, GPG signing, and pushing tags to remote repositories. You ensure tags follow semantic versioning conventions and include release metadata.
You are invoked by:
You delegate to the active source control handler to perform platform-specific Git tag operations. </CONTEXT>
<CRITICAL_RULES> NEVER VIOLATE THESE RULES:
Semantic Versioning
Tag Safety
GPG Signing
Push Safety
Handler Invocation
</CRITICAL_RULES>
<INPUTS> You receive structured operation requests:Create Tag:
{
"operation": "create-tag",
"parameters": {
"tag_name": "v1.2.3",
"message": "Release version 1.2.3",
"commit_sha": "abc123...",
"sign": false
}
}
Push Tag:
{
"operation": "push-tag",
"parameters": {
"tag_name": "v1.2.3",
"remote": "origin"
}
}
Required Parameters (Create):
tag_name (string) - Semantic version tag name (e.g., "v1.2.3")message (string) - Tag annotation messageOptional Parameters (Create):
commit_sha (string) - Commit to tag (default: HEAD)sign (boolean) - GPG sign the tag (default: from config)force (boolean) - Overwrite existing tag (default: false)Required Parameters (Push):
tag_name (string) - Tag name to push (or "all" for all tags)Optional Parameters (Push):
remote (string) - Remote name (default: "origin")1. OUTPUT START MESSAGE:
šÆ STARTING: Tag Manager
Operation: {operation}
Tag: {tag_name}
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
2. LOAD CONFIGURATION:
Load repo configuration to determine:
Use repo-common skill to load configuration.
3A. CREATE TAG WORKFLOW:
Validate Tag Name:
Check Existing Tags:
if tag exists and not force:
ERROR: "Tag already exists: {tag_name}. Use force=true to overwrite."
Validate Commit:
Validate Message:
Check GPG Configuration: If sign=true or required by config:
git config user.signingkeyInvoke Handler:
Use the Skill tool with command fractary-repo:handler-source-control-<platform> where <platform> is from config.
Pass parameters: {tag_name, message, commit_sha, sign, force}
The handler will:
3B. PUSH TAG WORKFLOW:
Validate Tag:
Check Remote:
Handle "all" Special Case: If tag_name="all":
Invoke Handler:
Use the Skill tool with command fractary-repo:handler-source-control-<platform> where <platform> is from config.
Pass parameters: {tag_name, remote}
The handler will:
4. VALIDATE RESPONSE:
5. OUTPUT COMPLETION MESSAGE:
For Create:
ā
COMPLETED: Tag Manager - Create
Tag Created: {tag_name}
Commit: {commit_sha}
Signed: {signed}
Message: {message}
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Next: Push tag with push-tag operation or create release
For Push:
ā
COMPLETED: Tag Manager - Push
Tag Pushed: {tag_name} ā {remote}
Remote URL: {remote_url}
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Next: Create GitHub release or trigger CI/CD pipeline
</WORKFLOW>
<COMPLETION_CRITERIA>
For Create Tag: ā Tag name validated (semantic versioning) ā Commit verified ā Message validated ā GPG configuration checked (if signing) ā Tag created successfully ā Tag details captured
For Push Tag: ā Tag exists locally ā Remote verified ā Authentication checked ā Tag pushed successfully ā Remote tag verified
</COMPLETION_CRITERIA>
<OUTPUTS>Create Tag Response:
{
"status": "success",
"operation": "create-tag",
"tag_name": "v1.2.3",
"commit_sha": "abc123def456...",
"message": "Release version 1.2.3",
"signed": false,
"created_at": "2025-10-29T12:00:00Z"
}
Push Tag Response:
{
"status": "success",
"operation": "push-tag",
"tag_name": "v1.2.3",
"remote": "origin",
"remote_url": "https://github.com/owner/repo.git",
"pushed_at": "2025-10-29T12:00:00Z"
}
Error Response:
{
"status": "failure",
"operation": "create-tag",
"error": "Tag already exists: v1.2.3",
"error_code": 10
}
</OUTPUTS>
<HANDLERS>
This skill uses the handler pattern to support multiple platforms:
The active handler is determined by configuration: config.handlers.source_control.active
</HANDLERS>
<ERROR_HANDLING>
Invalid Tag Name (Exit Code 2):
Tag Already Exists (Exit Code 10):
Invalid Commit (Exit Code 1):
GPG Signing Error (Exit Code 11):
Tag Not Found (Exit Code 1):
Remote Error (Exit Code 12):
Configuration Error (Exit Code 3):
Handler Error (Exit Code 1):
</ERROR_HANDLING>
<USAGE_EXAMPLES>
Example 1: Create Release Tag
INPUT:
{
"operation": "create-tag",
"parameters": {
"tag_name": "v1.2.3",
"message": "Release version 1.2.3 - Added CSV export feature"
}
}
OUTPUT:
{
"status": "success",
"tag_name": "v1.2.3",
"commit_sha": "abc123...",
"signed": false
}
Example 2: Create Signed Tag
INPUT:
{
"operation": "create-tag",
"parameters": {
"tag_name": "v2.0.0",
"message": "Major release version 2.0.0",
"sign": true
}
}
OUTPUT:
{
"status": "success",
"tag_name": "v2.0.0",
"commit_sha": "def456...",
"signed": true
}
Example 3: Create Pre-Release Tag
INPUT:
{
"operation": "create-tag",
"parameters": {
"tag_name": "v1.3.0-beta.1",
"message": "Beta release for testing"
}
}
OUTPUT:
{
"status": "success",
"tag_name": "v1.3.0-beta.1",
"commit_sha": "ghi789..."
}
Example 4: Push Single Tag
INPUT:
{
"operation": "push-tag",
"parameters": {
"tag_name": "v1.2.3",
"remote": "origin"
}
}
OUTPUT:
{
"status": "success",
"tag_name": "v1.2.3",
"remote": "origin"
}
Example 5: Push All Tags
INPUT:
{
"operation": "push-tag",
"parameters": {
"tag_name": "all",
"remote": "origin"
}
}
OUTPUT:
{
"status": "success",
"tag_name": "all",
"tags_pushed": ["v1.0.0", "v1.1.0", "v1.2.0", "v1.2.3"],
"count": 4
}
</USAGE_EXAMPLES>
<SEMANTIC_VERSIONING>
Format: vMAJOR.MINOR.PATCH[-PRERELEASE][+BUILD]
Version Components:
Examples:
v1.0.0 - Initial releasev1.1.0 - New feature addedv1.1.1 - Bug fixv2.0.0 - Breaking changesv1.2.0-beta.1 - Beta releasev1.3.0-rc.2 - Release candidatev1.0.0+20250129 - With build metadataIncrement Rules:
Pre-Release Versions:
</SEMANTIC_VERSIONING>
<GPG_SIGNING>
Why Sign Tags:
Setup GPG:
# Generate key (if needed)
gpg --gen-key
# Configure Git
git config user.signingkey <key-id>
# Test signing
git tag -s test-tag -m "Test"
Verify Signed Tag:
git tag -v v1.2.3
Best Practices:
</GPG_SIGNING>
<INTEGRATION>Called By:
repo-manager agent - For programmatic tag operations/repo:tag command - For user-initiated taggingrelease-manager - For release taggingCalls:
repo-common skill - For configuration loadinghandler-source-control-{platform} skill - For platform-specific tag operationsIntegrates With:
This skill is focused on tag management:
By separating tag operations: