{"slug": "say-goodbye-to-it-works-on-my-machine-why-i-built-a-new-task-runner", "title": "Say Goodbye to \"It Works on My Machine\": Why I Built a New Task Runner 🚀", "summary": "A developer built Lask, an open-source task runner that embeds the execution environment directly into task syntax, using containers to ensure reproducibility across machines. The tool aims to solve the 'It works on my machine' problem by letting developers define environments inline, such as running builds inside a Go 1.22 container or AWS CLI commands in a specific container.", "body_md": "Have you ever spent hours—or even days—debugging a failed build or deployment, only to realize the issue was a slight difference in local environments?\n\nMaybe your colleague had Go 1.21 installed instead of Go 1.22. Maybe they were on Windows while you were on a Mac. Or maybe their AWS CLI version was slightly outdated.\n\nWe've all been there. It's the classic \"It works on my machine\" problem.\n\nTo solve this, I built [Lask](https://github.com/lask-task-runner/lask), a task runner that eliminates environment discrepancies by embedding the execution environment directly into the syntax. Here is why I built it and how it works.\n\n🛑 **The limitations of current solutions**\n\nWhen trying to standardize tasks, teams usually lean on two approaches:\n\nI wanted a tool that combines the reproducibility of CI/CD with the speed and convenience of local execution.\n\n✨ **Enter: Lask**\n\nLask is an open-source task runner designed around three core principles: Reproducibility, Portability, and Ease of Execution.\n\nInstead of relying on whatever tools are installed on your host machine, Lask lets you define the execution environment inline, right next to your command.\n\nHere is what a `publish`\n\ntask looks like in Lask:\n\n```\n// main.lask\npublish(--var: String = \"1.0.0\") = do {\n  // Run inside a Go 1.22 container\n  $[#golang:1.22] GOOS=linux GOARCH=arm64 go build -o bootstrap ./cmd/lambda\n\n  // Run inside a Zip container\n  $[#zip:latest] zip function.zip bootstrap\n\n  // Run inside an AWS CLI container\n  $[#aws-cli:2.36] aws lambda update-function-code \\\n    --function-name my-function \\\n    --zip-file fileb://function.zip\n}\n```\n\nBy simply typing lask run publish in your terminal, Lask uses containers under the hood to execute each step in its exact required environment.\n\nWhy this changes the game:\n\n``` bash\n$ lask repl\nlask> $[#rancher/cowsay] cowsay \"Hello, Lask!\"\n```\n\n🤝 **I'd love your feedback!**\n\nLask is completely open-source and actively being developed. If you are tired of debugging local environment issues, I would be thrilled if you gave it a try or checked out the code.\n\n⭐ GitHub: [lask-task-runner/lask](https://github.com/lask-task-runner/lask)\n\nWhat tools do you currently use to keep dev environments in sync across your team? Let me know in the comments below! 👇", "url": "https://wpnews.pro/news/say-goodbye-to-it-works-on-my-machine-why-i-built-a-new-task-runner", "canonical_source": "https://dev.to/torudev/say-goodbye-to-it-works-on-my-machine-why-i-built-a-new-task-runner-3mi9", "published_at": "2026-08-19 12:00:46+00:00", "updated_at": "2026-08-19 12:12:21.136311+00:00", "lang": "en", "topics": ["developer-tools"], "entities": ["Lask", "GitHub", "Go", "AWS CLI"], "alternates": {"html": "https://wpnews.pro/news/say-goodbye-to-it-works-on-my-machine-why-i-built-a-new-task-runner", "markdown": "https://wpnews.pro/news/say-goodbye-to-it-works-on-my-machine-why-i-built-a-new-task-runner.md", "text": "https://wpnews.pro/news/say-goodbye-to-it-works-on-my-machine-why-i-built-a-new-task-runner.txt", "jsonld": "https://wpnews.pro/news/say-goodbye-to-it-works-on-my-machine-why-i-built-a-new-task-runner.jsonld"}}