mikehostetler

mikehostetler

Jido - A SDK for Building Autonomous Agent Systems

I’m excited to announce Jido, a framework providing foundational primitives for building autonomous agent systems in Elixir. While developing agent-based architectures, I found existing tools lacked the right abstractions for building truly autonomous systems that could evolve and adapt at runtime.

Core Architecture

Jido’s architecture is built around four core primitives that map directly to key patterns in autonomous systems:

Actions provide a composable unit of work with rich metadata, enabling agents to introspect capabilities and combine them in novel ways at runtime. Unlike traditional functions, Actions include schemas and metadata that support dynamic reasoning and composition.

Workflows extend beyond traditional sequential chains to support dynamic composition patterns. Building on Elixir’s strengths, workflows can be constructed to handle conditional paths, error recovery, and compensation seamlessly.

Agents maintain schema-validated state while planning and executing workflows. Through directives, agents can modify their own capabilities at runtime - such as enqueueing additional instructions to perform.

Sensors operate as independent processes, providing real-time environmental awareness through standardized signals. The exist to support Agents by monitoring external events.

SDK & Extension

Jido is designed as an SDK for building agent-based systems. The core framework provides the runtime primitives, while the companion jido_ai package offers integrations with LLM providers like Anthropic’s Claude through the instructor_ex package. Teams building with Jido can easily integrate any LLM into Jido via a custom Action.

Current Status

Version 1.0.0 provides production-ready implementations of all core primitives. Work is underway on enhanced Agent Server and Supervisor capabilities for 1.1. We’re actively using Jido in production and welcome feedback from teams building autonomous systems.

Resources

https://github.com/agentjido/jido

We look forward to seeing what the Elixir community builds with Jido!

Thanks!

Most Liked

mikehostetler

mikehostetler

Great question - This whole space is evolving quickly and has been a fantastic mental challenge to shed my old habits of how these apps get built - so this is my current perspective.

The “use an LLM assistant to execute a tool” trend of late benefits one party - LLM API providers. I’ve read over a LOT of repo’s, and have played with a lot of toys.

That’s why this foundational repo has ZERO LLM or AI code in it. At this foundational layer, LLM tool calling as a first class citizen didn’t feel right.

Don’t get me wrong, I wrote this to integrate with LLM’s - but the Elixir way is to build with pure data structures and minimal dependencies on OTP. That’s the purpose of this package.

As a sneak peek - here’s a Jido Action which implements a call to Anthropic Claude using instructor_ex to fetch a “Chat Completion” - aka agent chatting: https://github.com/agentjido/jido_ai/blob/main/lib/jido_ai/anthropic.ex#L6

Agents as GenServers is implemented and tested. I’m not entirely happy with the API yet so I didn’t include it in this official release. They each spin up a DynamicSupervisor and can manage delegating tasks to other agents, starting and stopping Signals and doing all sorts of other cool things.

I see a future where we each have thousands of Agents working for us constantly - like a swarm of ants. No other framework or platform comes close to making this happen - so I started from first principles with Elixir.

Enjoy!

EDIT: There will be many examples coming soon to demonstrate the scope of what Agents with Jido are capable of.

11
Post #6
mikehostetler

mikehostetler

Correct - the foundational library can be used without LLM’s. During planning, I felt it was important to simplify down to the base data structures and interaction patterns - get those correct - and then build LLM interaction patterns on top of that.

You can see an initial implementation of a Jido.Action that calls an LLM in the jido_ai package here: https://github.com/agentjido/jido_ai/blob/main/lib/examples/politician.ex

This example uses instructor_ex - but langchain or any other Elixir AI package could easily be integrated for an LLM response.

Yes, exactly - or even Broadway. This problem space of data transformation pipelines has a lot of solutions.

Each solution has it’s strengths. I love and have used each of these tools many times.

Jido won’t be the best at raw throughput as it does not use GenStage - like Broadway or Flow. Jido does not assume a database, if you need a database backed Job Processing system, you should use Oban.

Jido is aimed at the space where a particular agent (or queue?) is built to facilitate a wide variety of output - because a LLM is typically involved. Low throughput, high variety.

Where the Agent space gets crazy-weird is when you let the LLM pick the next action. It’s not random … but it’s not idempotent either. Jido agents natively support a list of “allowed” actions (Agents — Jido v2.3.2) for this reason - it provides a small level of control over this use case.

I purpose built Directives to help provide some control over these advanced use cases.

This space evolves weekly - and I’m constantly learning and evolving my thinking here as well.

mikehostetler

mikehostetler

The primitives share similarities with Oban - but the use-cases are different.

Agent techniques like “Chain of Thought” (Chain-of-Thought Prompting | Prompt Engineering Guide<!-- -->) string together several actions with an LLM’s response deciding which next-action to choose. This simulates human reasoning leading to higher-quality outputs.

Jido was tailored towards these use cases. But, as I explained above, as I worked through my own prompting pipelines, I got annoyed with LLM’s being slow an flaky. When I set out to build Jido, I wanted to ensure the building blocks didn’t make assumptions about LLM’s being involved, but also supported classical AI planning algorithms - a currently neglected sector of artificial intelligence research.

Think about video game NPC’s - the AI used to power them are most often things like Behavior trees or Zipper trees.

Elixir has a solid base of these algorithms available as Hex packages now and there was even a talk at ElixirConf about them in 2018

A lot of the latest AI research focus has gone towards LLM’s lately, but I find algorithms like behavior trees to be more practical in the real-world because they are more reliable in several ways.

Really appreciate the questions here- I’m adding clarifications to the README along the way to hopefully answer some of these questions for others in the future.

Where Next?

Popular in Announcing Top

danschultzer
None of the current solutions worked well for me, so I went ahead and built a user management system from scratch. This project took far...
548 29377 241
New
danschultzer
In short Plug n’ play OAuth 2.0 provider library. Just set up a resource owner schema with Ecto (your user schema), install the dependen...
New
pkrawat1
Presenting Aviacommerce, open source e-commerce platform in Elixir Aviacommerce is an open source e-commerce platform in Elixir. We at...
New
bryanjos
Hi, I just published version 0.23.0 of Elixirscript. https://github.com/bryanjos/elixirscript/blob/master/CHANGELOG.md Most of the chan...
New
maltoe
Hello! Came here to announce ChromicPDF, a pet project PDF generator I’ve been working on for the past few months. Why another PDF gener...
New
zorbash
I created Kitto a framework for dashboards inspired by Dashing. The distributed characteristics of Elixir and the low memory footprint...
New
oltarasenko
Dear Elixir community, After a year of development, bug fixes, and improvements, we are proudly ready to share the release of Crawly 0.1...
New
MRdotB
I needed to reuse React components from my Chrome extension in my Phoenix/LiveView backend. I noticed that for Svelte/Vue, there are live...
New
hpopp
After just over two years in development, this latest version of Pigeon is what I finally consider done in regards to my original vision ...
New
anshuman23
Hello all, I have been working on my proposed project called Tensorflex as part of Google Summer of Code 2018.. Tensorflex can be used f...
New

Other popular topics Top

mcarvalho
What is the difference between System.get_env and Application.get_env? For example, what are best practices to use one versus another.
New
lessless
I believe there are people here who are dealing with CSV files import on the daily basis, and since Excel is a really popular tool there ...
New
johnnyicon
Hi all, I’ve just started learning Elixir and Phoenix Framework, so please pardon my n00bness at this stage. I’m trying to use Postgres...
New
JakeBecker
TL;DR: I’ve just released an implementation of Microsoft’s IDE-independent Language Server Protocol for Elixir. It adds language support ...
1144 53690 245
New
josevalim
Hi everyone, One of the features added to Elixir early on to help integration with Erlang code was the idea of overridable function defi...
New
aalberti333
As the title describes, I’m trying to run Enum.map() over a list of key/value pairs, where the value is a map. My data looks like this: ...
New
klo
Got a question about when to concat vs. prepending items to list then reversing to achieve appending. So i know lists boil down to [1 | ...
New
axelson
This post is a wiki (feel free to hit the edit button near the bottom right of this post to add your own changes!) This post collects co...
239 47930 226
New
openscript
Hello! Sorry for this astonishing simple question, but I’m really stuck. I try to set up the intellij-elixir plugin, but I don’t know ho...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New

We're in Beta

About us Mission Statement