One of the foundational principles we learn in our first comp-sci course is modularity. In my experience, that concept gets bludgeoned by the way global state works in existing frameworks. I wanted my agents to be modular and work independently, following a more Input/Output, functional programming model where I don't have to worry about a "god object" being mutated in the background.
So I built Railtracks. It’s an open-source Python library designed to build complex agents entirely in Python. You define your flows in code, not via YAML or complex graph configs. Every component is modular with explicit typing and calls.
Beyond just the interface, I was also frustrated with what observability looks like right now. I like having my info locally and as part of my dev flow. That’s why we built local-first observability from the start. You can look at your agent runs through a UI instead of parsing through a wall of print statements.
I’m genuinely curious: what do you guys think of this approach? Am I overthinking the global state problem, or is this a pain point that's actually been solved with other tools while I wasn't looking? Also, does local-first observability actually matter to you, or are you fine with cloud-based traces?
I’d love for you to break Railtracks and tell me what’s wrong with the design.
Docs: https://railtownai.github.io/railtracks/
GitHub: https://github.com/RailtownAI/railtracks/