#!/bin/bash # OpenRewrite Recipe Writing Skill - Upload Script # This script creates or updates the skill in Claude's Skills API # # Usage: # Option 1: Use anthropic.key file (recommended) # echo "your-api-key" > anthropic.key # ./upload-skill.sh # # Option 2: Export environment variable # export ANTHROPIC_API_KEY="your-api-key-here" # ./upload-skill.sh set -e # Exit on error # Change to script directory cd "$(dirname "$0")" # Try to load API key from anthropic.key file if it exists and ANTHROPIC_API_KEY is not set if [ -z "$ANTHROPIC_API_KEY" ] && [ -f "anthropic.key" ]; then echo "Loading API key from anthropic.key file..." ANTHROPIC_API_KEY=$(cat anthropic.key | tr -d '[:space:]') fi # Check if API key is set if [ -z "$ANTHROPIC_API_KEY" ]; then echo "Error: ANTHROPIC_API_KEY not found" echo "" echo "Usage (option 1 - recommended):" echo " echo 'your-api-key' > anthropic.key" echo " ./upload-skill.sh" echo "" echo "Usage (option 2):" echo " export ANTHROPIC_API_KEY='your-api-key-here'" echo " ./upload-skill.sh" exit 1 fi # Check if skill ID file exists SKILL_ID_FILE="skill-id.txt" if [ -f "$SKILL_ID_FILE" ]; then SKILL_ID=$(cat "$SKILL_ID_FILE" | tr -d '[:space:]') ACTION="update" HTTP_METHOD="PATCH" echo "Found existing skill ID: $SKILL_ID" echo "Updating OpenRewrite Recipe Writing skill..." else ACTION="create" HTTP_METHOD="POST" echo "No existing skill ID found." echo "Creating new OpenRewrite Recipe Writing skill..." fi echo "" # Skill directory name (must match 'name' field in SKILL.md) SKILL_DIR="openrewrite-recipe-writer" # Build curl command based on action if [ "$ACTION" = "create" ]; then # Create new skill response=$(curl -s -w "\n%{http_code}" https://api.anthropic.com/v1/skills \ -X POST \ -H "x-api-key: $ANTHROPIC_API_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "anthropic-beta: skills-2025-10-02" \ -F "display_title=OpenRewrite Recipe Writing" \ -F "files[]=@SKILL.md;filename=$SKILL_DIR/SKILL.md" \ -F "files[]=@template-imperative-recipe.java;filename=$SKILL_DIR/template-imperative-recipe.java" \ -F "files[]=@template-declarative-recipe.yml;filename=$SKILL_DIR/template-declarative-recipe.yml" \ -F "files[]=@template-recipe-test.java;filename=$SKILL_DIR/template-recipe-test.java" \ -F "files[]=@example-say-hello-recipe.java;filename=$SKILL_DIR/example-say-hello-recipe.java" \ -F "files[]=@example-scanning-recipe.java;filename=$SKILL_DIR/example-scanning-recipe.java" \ -F "files[]=@example-declarative-migration.yml;filename=$SKILL_DIR/example-declarative-migration.yml" \ -F "files[]=@checklist-recipe-development.md;filename=$SKILL_DIR/checklist-recipe-development.md") else # Update existing skill response=$(curl -s -w "\n%{http_code}" https://api.anthropic.com/v1/skills/$SKILL_ID \ -X PATCH \ -H "x-api-key: $ANTHROPIC_API_KEY" \ -H "anthropic-version: 2023-06-01" \ -H "anthropic-beta: skills-2025-10-02" \ -F "files[]=@SKILL.md;filename=$SKILL_DIR/SKILL.md" \ -F "files[]=@template-imperative-recipe.java;filename=$SKILL_DIR/template-imperative-recipe.java" \ -F "files[]=@template-declarative-recipe.yml;filename=$SKILL_DIR/template-declarative-recipe.yml" \ -F "files[]=@template-recipe-test.java;filename=$SKILL_DIR/template-recipe-test.java" \ -F "files[]=@example-say-hello-recipe.java;filename=$SKILL_DIR/example-say-hello-recipe.java" \ -F "files[]=@example-scanning-recipe.java;filename=$SKILL_DIR/example-scanning-recipe.java" \ -F "files[]=@example-declarative-migration.yml;filename=$SKILL_DIR/example-declarative-migration.yml" \ -F "files[]=@checklist-recipe-development.md;filename=$SKILL_DIR/checklist-recipe-development.md") fi # Extract HTTP status code (last line) http_code=$(echo "$response" | tail -n1) # Extract response body (everything except last line) body=$(echo "$response" | sed '$d') # Check status code if [ "$http_code" -eq 200 ]; then if [ "$ACTION" = "create" ]; then echo "✓ Success! Skill created successfully." echo "" echo "Response:" echo "$body" | jq '.' 2>/dev/null || echo "$body" echo "" # Extract and save skill ID new_skill_id=$(echo "$body" | jq -r '.id' 2>/dev/null) if [ -n "$new_skill_id" ] && [ "$new_skill_id" != "null" ]; then echo "$new_skill_id" > "$SKILL_ID_FILE" echo "Skill ID saved to $SKILL_ID_FILE for future updates." echo "" echo "Your skill is now available! Use it with:" echo " - Claude API (automatically activates for OpenRewrite recipe questions)" echo " - Claude.ai web interface" else echo "Warning: Could not extract skill ID from response." echo "You may need to save it manually from the response above." fi else echo "✓ Success! Skill updated successfully." echo "" echo "Response:" echo "$body" | jq '.' 2>/dev/null || echo "$body" echo "" echo "The skill has been updated to a new version." fi else echo "✗ Error: $ACTION failed with status code $http_code" echo "" echo "Response:" echo "$body" exit 1 fi