Tobias Krug

engineer, lifelong student, human

I'm a software engineer in Munich. More than a decade of my work has been in automotive and connected systems. Since 2025 I run CronAI, a founder-led software company: senior engineering, architecture and AI consulting, and a few products of our own. Here I write about building them, about cryptography, and about tools worth knowing.

Now · October 2026

  • Working on cronai.app: scheduled AI workflows that report what ran, when, and how it ended. It is in alpha, with a waitlist.
  • Shipping small tools under CronAI Labs: schriftsatz, OKF Vault Kit and VaultOre.
  • Writing here more often: field notes, finds, and the occasional essay.

Ventures

  • CronAICompany

    A founder-led software company, founded in Munich in 2025: senior engineering, architecture and AI consulting, and products of our own.

  • cronai.appAlpha · waitlist

    Scheduled AI workflows that report what ran, when, and how it ended.

  • schriftsatzShipped · v0.3.0

    Markdown to print-ready PDF through pandoc and XeLaTeX. MIT licensed.

  • OKF Vault KitAlpha · v0.1.0

    An Obsidian vault that is also an OKF bundle, with on-device search and a local model over MCP. Designed to run locally.

  • VaultOreWorking v0.1 · pre-release

    A Markdown-native workflow engine for Obsidian.

Latest writing

  1. Stacked pull requests: one push, one CI run, and issues that close themselves

    What merging a six-PR stack did to main, CI and the release, and why linked issues closed, or stayed open, when I didn't expect it.

    Note, 7 min read

  2. A CI gate that is silently off: MegaLinter's FAIL_IF_UPDATED_SOURCES

    MegaLinter's FAIL_IF_UPDATED_SOURCES fires only when its value ends up as the exact string "true". How it stays off without a word, a config that holds, and a pull request that proves it.

    Note, 5 min read

  3. Every job failed in seconds and the logs were empty: it was billing

    When every GitHub Actions job fails in one to three seconds with no log, GitHub has usually refused the run over billing. The reason sits in a check-run annotation. Where to find it, and what to do.

    Note, 3 min read

All writing

Finds

Short notes on tools and projects worth knowing.

Contact

GitHub
hashkode