← mittwaldCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to mittwald
Snapshot Sep 30, 2026 · 22:58 UTC · version 1.0.0
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Deploy an arbitrary application from your local machine or a Git repository to mittwald mStudio. Use when the user mentions \"deploy to Mittwald\", \"move to mStudio\", \"Container Hosting auf Mittwald\", \"stack_deploy\", or asks for help deploying a workload (K8s, Docker Compose, VPS, another hoster, another mStudio project) onto Mittwald. Source is open, target is always mStudio.",
"included_files": [
{
"relative_path": ".claude-plugin/plugin.json",
"size_in_bytes": 414
},
{
"relative_path": "playbooks/01-provision-target.md",
"size_in_bytes": 3242
},
{
"relative_path": "playbooks/02-cli-deploy-local.md",
"size_in_bytes": 4919
},
{
"relative_path": "playbooks/03-setup-github-action.md",
"size_in_bytes": 5585
},
{
"relative_path": "playbooks/04-troubleshoot-deployment.md",
"size_in_bytes": 8490
},
{
"relative_path": "playbooks/05-verify.md",
"size_in_bytes": 8486
},
{
"relative_path": "references/pitfalls.md",
"size_in_bytes": 9525
},
{
"relative_path": "references/port-configuration.md",
"size_in_bytes": 9825
},
{
"relative_path": "references/railpack-overview.md",
"size_in_bytes": 7681
},
{
"relative_path": "references/secrets-management.md",
"size_in_bytes": 9026
},
{
"relative_path": "references/when-to-escalate.md",
"size_in_bytes": 9335
}
],
"name": "mittwald-zerodeploy",
"skill_md_contents": "---\nname: mittwald-zerodeploy\ndescription: Deploy an arbitrary application from your local machine or a Git repository to mittwald mStudio. Use when the user mentions \"deploy to Mittwald\", \"move to mStudio\", \"Container Hosting auf Mittwald\", \"stack_deploy\", or asks for help deploying a workload (K8s, Docker Compose, VPS, another hoster, another mStudio project) onto Mittwald. Source is open, target is always mStudio.\n---\n\n# mittwald-zerodeploy\n\nZero-config deployment to mittwald mStudio container hosting using Railpack build inference.\n\n---\n\n## Description\n\nThis skill guides users through deploying containerized applications to mittwald mStudio **without requiring Docker knowledge**. The workflow uses Railpack to automatically detect project types and generate build plans, then deploys via the mittwald CLI or GitHub Actions.\n\n**Perfect for**: Developers who want to deploy quickly without writing Dockerfiles. \n**Not for**: DevOps teams needing explicit container definitions (use `deploy-container-action` instead).\n\n---\n\n## When to use this skill\n\nTrigger this skill when the user wants to:\n\n- Deploy an app to mittwald without writing a Dockerfile\n- Set up automated deployment with GitHub Actions to mittwald\n- Troubleshoot Railpack-based deployment failures\n- Transition from local CLI testing to CI/CD automation\n- Fix issues with faulty AI-generated Dockerfiles\n- Understand why their deployment isn't working\n\n---\n\n## Workflow\n\n### Phase 1: Local Testing (CLI)\n\n**Goal**: Validate the deployment locally before setting up automation.\n\n1. **Load** `playbooks/01-provision-target.md`\n - Verify mStudio project exists and user has API token\n - Confirm project ID is configured or can be passed explicitly\n - Check CLI is installed and authenticated\n\n2. **Load** `playbooks/02-cli-deploy-local.md`\n - Run `mw experimental deploy` from project root\n - Handle environment variables via `--env` or `--env-file`\n - Parse deployment output for URL and container ID\n - Verify the app is reachable\n\n3. **Load** `playbooks/05-verify.md`\n - Check container status in mStudio web UI\n - Test HTTP endpoints and validate responses\n - Confirm environment variables are applied correctly\n\n### Phase 2: Automation (GitHub Actions)\n\n**Goal**: Set up continuous deployment after local testing succeeds.\n\n1. **Load** `playbooks/03-setup-github-action.md`\n - Create `.github/workflows/zerodeploy.yml`\n - Configure GitHub secrets (`MITTWALD_API_TOKEN`, `MITTWALD_PROJECT_ID`)\n - Handle runtime secrets via workflow `.env` generation\n - Test with manual workflow dispatch\n\n2. **Test automated deployment**\n - Trigger workflow manually\n - Monitor workflow logs for errors\n\n3. **Load** `playbooks/05-verify.md` again\n - Confirm automated deployment produces same result as CLI\n\n### Troubleshooting (As Needed)\n\n**When deployment fails or behaves unexpectedly:**\n\n- **Load** `playbooks/04-troubleshoot-deployment.md`\n - Guide user to mStudio web UI logs\n - Identify common error patterns\n - Check for faulty Dockerfiles to delete\n - Reconfigure ports if needed\n\n**When encountering the 3 critical gotchas:**\n\n- **Load** `references/pitfalls.md`\n - Faulty pre-existing Dockerfiles\n - Hidden port configurations\n - Exotic projects that won't work with Railpack\n\n**When stuck after 2-3 attempts:**\n\n- **Load** `references/when-to-escalate.md`\n - Recognize escalation triggers\n - Document errors for handoff\n - Avoid endless iteration\n\n---\n\n## Critical References (Load on Demand)\n\n### Build & Detection Issues\n\n- `references/railpack-overview.md` - when Railpack can't detect project type or build fails\n\n### Configuration Issues\n\n- `references/secrets-management.md` - when handling API keys, database passwords, or `.env` files\n- `references/port-configuration.md` - when app won't respond on expected port or ingress issues occur\n\n### Failure Patterns\n\n- `references/pitfalls.md` - the 3 most common gotchas with solutions\n- `references/when-to-escalate.md` - when to stop iterating and hand off to DevOps\n\n---\n\n## Core Constraints\n\n### Workflow Progression\n\n- ✅ **Always test locally first** with `mw experimental deploy`\n- ✅ **Only automate when stable** - don't set up GitHub Actions until CLI works\n- ❌ **Never mix** CLI and GitHub Actions in the same project phase\n\n### Dockerfile Handling\n\n- ❌ **Never let AI generate Dockerfiles** for this workflow\n- ✅ **Delete existing Dockerfiles** if deployment fails (Railpack is bypassed when Dockerfile exists)\n- ✅ **Let Railpack infer the build** - it's smarter than most AI-generated Dockerfiles\n\n### Escalation Limits\n\n- ⚠️ **After 2-3 deployment attempts fail**, escalate to DevOps\n- ❌ **Don't deep-dive into container internals** without Docker expertise\n- ✅ **Document errors and hand off** rather than iterate endlessly\n\n---\n\n## Key Facts\n\n### Deployment Mechanics\n\n- `mw experimental deploy` auto-detects Dockerfile **OR** uses Railpack\n- `mittwald/zerodeploy-action` wraps the CLI for GitHub Actions (same behavior)\n- Ingress is **automatically configured** with default `webapp` prefix (customize via `--uri-prefix`)\n- Environment variables: `--env KEY=VALUE` or `--env-file path/to/.env`\n- Wait for completion: `--wait` flag (default 600s timeout)\n\n### Railpack Behavior\n\n- Auto-detects: Node.js, Python, PHP, Ruby, Go, static sites, and more\n- Requires: Buildpacks, build tools (npm, pip, composer, etc.)\n- Failure modes: Exotic dependencies, complex monorepos, custom build chains\n- Documentation: https://railpack.com/getting-started\n\n### mStudio Integration\n\n- **Troubleshooting happens in mStudio web UI**, not via CLI\n- Logs, port inspection, container status are all GUI-based\n- Port reconfiguration is done post-deployment in ingress settings\n- Environment variables can be edited after deployment in mStudio\n\n---\n\n## Information Sources\n\n### Official Documentation\n\n- **GitHub Actions Guide**: https://developer.mittwald.de/docs/v2/guides/deployment/container-actions/\n- **CLI Reference**: https://developer.mittwald.de/docs/v2/cli/reference/experimental/\n- **Railpack Getting Started**: https://railpack.com/getting-started\n\n### Skill Components\n\n- **Playbooks**: Step-by-step execution guides for each phase\n- **References**: Background knowledge, gotchas, and escalation criteria\n"
}SHA-256 of public snapshot: a5254e19e0fe631fd2bfbcd3cc3d2f6cd372bf08ee850af83da89e8a98dbdc85