I needed to run AI agent workflows locally, in TypeScript, with real permission enforcement. I spent time with the obvious options — n8n, OpenClaw, Hermes — and none of them quite fit. So I built skelm . This post is about what specifically didn't fit, what skelm does differently, and one concrete example of why the difference matters. What the existing tools get wrong (for my use case) n8n n8n is a genuinely great tool. But it's built around visual flows and a node-graph model. I want to write real .ts modules, use the full TypeScript type system, run vitest , and check my workflows into git like any other code. I don't want a JSON config I can't diff cleanly or a canvas I need a browser to edit. OpenClaw OpenClaw is excellent for personal assistant use cases — chat routing, multi-channel, agent conversations. But it's fundamentally a messaging framework. I needed pipeline primitives: branch , parallel , forEach , loop , wait . Composable, testable, deterministic.…