This repository contains a build system for packaging a single Temporal skill with multiple SDK resources for Claude Cloud upload.
# Build the skill package
./build-skill-package.sh
# Build without URL validation (faster)
./build-skill-package.sh --skip-url-checkThe build process creates a single skill package with all SDK resources:
dist/
├── temporal-skill-YYYYMMDD_HHMMSS.zip # Timestamped package
├── temporal-skill-latest.zip # Symlink to latest
└── build-report.txt # Build validation report
The skill package includes:
- temporal.md - Main skill file with core Temporal concepts
- sdks/ - SDK-specific resources
- java/java.md - Java SDK resource
- java/references/ - Java-specific guides
- (Future SDKs will be added here)
- skill-metadata.json - Metadata for Cloud skill management
- README.md - Installation and usage instructions
The packaged skill has the following structure (source files are in src/ in the repository but packaged without the src/ prefix):
temporal-skill/
├── temporal.md # Main skill file
├── sdks/
│ └── java/
│ ├── java.md # Java SDK resource
│ └── references/
│ ├── samples.md
│ └── spring-boot.md
├── skill-metadata.json # Metadata (auto-generated)
└── README.md # Package documentation
The build script performs these steps:
- Validation - Checks skill file format and content
- Structure Creation - Creates proper package directory layout
- SDK Resources Copy - Includes all SDK resources from
sdks/ - Metadata Generation - Extracts metadata from skill file
- URL Validation - Verifies all links are accessible (optional)
- Packaging - Creates timestamped zip file
- Report Generation - Creates detailed build report
- File exists and is not empty
- Contains markdown headers
- Contains documentation URLs
- Tests all URLs in all markdown files
- Verifies HTTP status codes (200-399)
- Reports any broken links
- Can be skipped with
--skip-url-check
./build-skill-package.shOutput:
╔════════════════════════════════════════════════╗
║ Temporal Skill Package Builder ║
╚════════════════════════════════════════════════╝
[15:07:11] Cleaning build directories...
✓ Build directories cleaned
[15:07:11] Validating skill file: temporal.md
✓ Skill file validated (8218 bytes)
[15:07:11] Creating package structure...
✓ Copied main skill file
✓ Copied SDK resources
✓ Included 1 SDK resource(s)
✓ Generated metadata file
✓ Created package README
✓ Package structure created
[15:07:11] Validating URLs in skill package...
✓ [200] https://docs.temporal.io/
...
✓ All 45 URLs validated successfully
[15:07:15] Creating zip package...
✓ Created zip package: temporal-skill-20251129_150711.zip (120K)
╔════════════════════════════════════════════════╗
║ BUILD COMPLETED SUCCESSFULLY! ║
╚════════════════════════════════════════════════╝
Next steps:
• Upload to Cloud: dist/temporal-skill-latest.zip
• View report: dist/build-report.txt
• Test locally: Copy temporal.md and sdks/ to .claude/skills/
./build-skill-package.sh --skip-url-checkSkips URL validation for faster iteration during development.
-
Build the package:
./build-skill-package.sh
-
Upload to Claude Cloud:
dist/temporal-skill-latest.zip -
Activate in your Cloud project
Extract and copy to your skills directory:
# Extract the package
unzip dist/temporal-skill-latest.zip
cd temporal-skill
# Copy to Claude Code skills directory
cp temporal.md ~/.claude/skills/
cp -r sdks ~/.claude/skills/
# Or copy directly from source (for development)
cp temporal.md ~/.claude/skills/
cp -r sdks ~/.claude/skills/To add a new SDK resource:
-
Create SDK directory:
mkdir -p src/sdks/newsdk
-
Create the resource file:
# Must be named <sdk>.md touch src/sdks/newsdk/newsdk.md -
(Optional) Add references:
mkdir -p src/sdks/newsdk/references
-
Update
src/temporal.mdto mention the new SDK -
Build:
./build-skill-package.sh
The build system automatically includes all SDKs in the src/sdks/ directory.
All build artifacts are gitignored:
build/- Temporary build directory (cleaned each run)dist/- Distribution packages (preserved across builds)*.zip- All zip files
See .gitignore for details.
Some URLs may be temporarily unavailable. Options:
- Wait and retry
- Use
--skip-url-checkto skip validation - Fix broken URLs in the skill or SDK resource files
Ensure temporal.md exists in the repository root.
Make the script executable:
chmod +x build-skill-package.shVerify zip contents:
unzip -l dist/temporal-skill-latest.zipUse the automated test suite (Java SDK):
cd test/java/skill-integration
./run-integration-test.sh# Extract to test location
unzip dist/temporal-skill-latest.zip
cd temporal-skill
# Copy to test Claude Code installation
cp temporal.md test-dir/.claude/skills/
cp -r sdks test-dir/.claude/skills/
# Test with Claude Code
cd test-dir
# Ask Claude to create a Temporal applicationEach build generates a detailed report in dist/build-report.txt containing:
- Build timestamp and package details
- List of all files included
- Package size and location
- Skill metadata
- SDK resources included
- Installation instructions
- Always validate URLs before uploading to Cloud
- Test the package with integration test suite
- Review the build report for any warnings
- Version your releases with git tags
- Keep metadata accurate in skill files
- Test SDK resources individually
For issues with:
- Skill content: Edit
temporal.mdorsdks/<sdk>/<sdk>.md - Build process: Check this BUILD.md or the build script
- Package format: Review Cloud skill documentation
- Integration tests: See
sdks/<sdk>/test/skill-integration/README.md