Changelog¶
All notable changes to Stromboli will be documented here.
[Unreleased]¶
Added¶
Lifecycle Hooks¶
- OnCreateCommand: Run commands once when session is first created (e.g.,
pip install) - PostCreate: Run commands after OnCreateCommand completes (e.g., build steps)
- PostStart: Run commands on every container start (e.g., start background services)
- Hooks Timeout: Configurable timeout for hook execution (
hooks_timeout) - Hooks are chained with fail-fast behavior - if any hook fails, execution stops
- Shell escaping for all hook arguments to prevent injection attacks
- Documentation: Lifecycle Hooks Guide
Compose Environments¶
- Multi-service environments: Run Claude agents in Docker/Podman Compose stacks
- Service selection: Specify which service Claude runs in via
environment.service - Health check waiting: Stromboli waits for all services to become healthy
- Stack lifecycle management: Automatic cleanup on session destroy or TTL expiry
- Security validation: Blocks privileged containers, host network, and dangerous configurations
- Configuration options:
allow_privileged,allow_host_network,allow_host_volumes - Timeout configuration:
build_timeout,health_timeout,stack_ttl - Documentation: Compose Environments Guide
Image Discovery API¶
- GET /images: List all local images sorted by compatibility rank
- GET /images/:name: Inspect a specific image with detailed metadata
- GET /images/search: Search container registries (Docker Hub, etc.)
- POST /images/pull: Pull an image from a registry
- Compatibility ranking system (1-4) to identify Claude-compatible images
Security¶
- Compose file validation with security checks for dangerous configurations
- Lifecycle hooks validation with length limits and shell escaping
- TOCTOU protection for compose file parsing
[0.3.0-alpha] - 2026-01-31¶
Changed¶
- BREAKING: Renamed
workspacetoworkdir: workdirsets the working directory inside the container (e.g.,/workspace)- Use
podman.volumesto mount host directories into the container -
Example migration:
-
BREAKING: Default-deny volume security: When
allowed_volumesis empty, all volume mounts are now DENIED by default (was: allow all). SetSTROMBOLI_AGENT_ALLOW_ALL_VOLUMES=truefor development. -
Agent entrypoint simplified: Removed
claudefrom entrypoint command. The runner now always prependsclaudewhenMOUNT_CLAUDE_CLI=true.
Added¶
- Workdir auto-creation: If
workdirdoesn't exist in the container, it's automatically created (configurable viaSTROMBOLI_AGENT_WORKDIR_AUTO_CREATE) - Volume validation: Volume host paths are validated against
allowed_volumesallowlist (STROMBOLI_AGENT_ALLOWED_VOLUMES) - Sessions host path: New
STROMBOLI_AGENT_SESSIONS_HOST_DIRconfig for containerized deployments where Stromboli runs inside a container - Symlink bypass prevention: Host paths are resolved via
filepath.EvalSymlinks()before validation - Container path blocklist: Sensitive container paths are blocked (
/etc,~/.claude,~/.ssh,~/.aws, etc.) - Mount options validation: Only safe mount options allowed (
ro,rw,z,Z,noexec,nosuid,nodev, etc.) - Workdir character validation: Workdir paths validated for shell-safe characters only
Security¶
- Defense-in-depth volume validation with multiple security layers
- Explicit error messages for security rejections (e.g., "Alpine/musl-based images not supported")
[0.2.0-alpha] - 2026-01-30¶
Added¶
Release & Distribution¶
- Cross-platform binaries: Linux, macOS, Windows (amd64 + arm64)
- Docker images: Published to
ghcr.io/tomblancdev/stromboli - Agent image: Separate
ghcr.io/tomblancdev/stromboli-agentwith Claude CLI - Native cross-compilation: Fast ARM64 builds (no QEMU emulation)
Image Architecture¶
- CLI image auto-pull: Automatically pulls Claude CLI image on startup if missing
- Dynamic image support: Mount Claude CLI into any glibc-based container (Python, Node, Go, etc.)
- Image compatibility checking: Warns about incompatible Alpine/musl images
Documentation¶
- Examples & Use Cases: Multi-language API clients (Python, JavaScript, Go, curl)
- CI/CD Integration: Service container approach for full codebase access
- Security Guide: Threat model, TLS setup, audit logging, production checklist
- Troubleshooting Guide: Error reference, debugging tips, FAQ
- OpenAPI Reference: Interactive Swagger UI, ReDoc, downloadable specs
- Contributing Guide: Code architecture, request flow diagrams, testing patterns
- Mermaid diagrams: Visual architecture and flow diagrams
Changed¶
- Configuration: All settings now documented with environment variables
- Install files: Comprehensive docker-compose.yml and stromboli.example.yaml
CI/CD¶
- Release workflow: Automated binary + Docker builds on version tags
- Agent image workflow: Auto-builds when Dockerfile.claude-cli changes
- OpenAPI validation: Ensures specs are up-to-date
- Versioned documentation: Each release has frozen docs + OpenAPI specs
Fixed¶
- Docker ARM64 build performance (was 15-20 min, now ~2 min)
- Documentation link validation
[0.1.5-alpha] - 2025-01-26¶
Added¶
- Credentials Sync: Automatic synchronization of Claude credentials with Podman secrets
- Generic Secrets Injection: Mount Podman secrets as environment variables via
secrets_env - Input Validation: Comprehensive validation for secrets environment variables
- /secrets Endpoint: List available Podman secrets via API
Security¶
- Block dangerous environment variables (LD_PRELOAD, LD_LIBRARY_PATH)
- Environment variable name validation (must match
^[a-zA-Z_][a-zA-Z0-9_]*$) - Maximum 50 secrets per request
[0.1.4-alpha] - 2025-01-25¶
Added¶
- Dynamic Container Images: Support for multiple container images with pattern allowlist
- Version Info:
/versionendpoint and startup version logging - Container Naming: Unique container names with
stromboli-prefix - Orphan Cleanup: Automatic cleanup of orphaned containers on startup
Fixed¶
- Version injection into Docker server image during build
[0.1.3-alpha] - 2025-01-24¶
Added¶
- Initial public release
- Core API for running Claude Code agents
- Session management (create, resume, destroy)
- Async job execution with polling
- Workspace mounting with allowlist security
- JWT authentication support
- Rate limiting middleware
- Health check endpoint
Security¶
- Container isolation via Podman
- Workspace allowlist validation
- Read-only credential mounting