Jido for Elixir
A stateful workflow and cooperative-process framework for Elixir/OTP.
- Source repo
- agentjido/jido
- Stars
- ★ 1.9k
- Last updated
- 22d ago
- License
- Apache-2.0
- Primary language
- Elixir
- FA score
- 50/100 · Major gaps
At a glance
- How it runs
- Works with
- Universal · cross-platform
- Cost
- Free, no paid service needed
- Setup effort
- Medium · a few setup steps
- You'll need
- Typical use
- An Elixir backend team needs to organize several long-lived, supervised business processes into a cooperative workflow.
- Not a fit if
- Teams outside the BEAM ecosystem needing Python or JavaScript agents
- Projects still on Elixir below 1.17 or Erlang/OTP below 26
- Teams wanting built-in LLM provider support in the core package
- Source review
- 50/100 · Major gaps
What does this agent do, and when should you use it?
Jido is an autonomous-agent framework for building workflows and multi-agent systems in Elixir. It models agents as immutable stateful structures with cmd/2; Actions do work and transform state, Signals route events into the system, and Directives describe runtime-owned external effects. Production execution uses the GenServer-based AgentServer, with supervision, parent-child lifecycle management, signal routing, instance partitions, and multi-tenant boundaries. The framework also includes Direct and FSM strategies, composable plugins, plan-based orchestration, and Pods for durable groups of agents. AI is not required by the core package; model integration is available through optional ecosystem packages such as jido_ai.
Developers define an agent with use Jido.Agent, including its name, description, schema, and signal_routes, then define work with use Jido.Action and run/2. Calling MyAgent.cmd(agent, {ActionModule, params}) executes the Action and returns an updated agent plus directives; the strategy layer applies StateOps, while the AgentServer runtime interprets directives such as Emit, SpawnAgent, Schedule, and Stop. A running server can receive a Signal through Jido.AgentServer.call(pid, Jido.Signal.new!("increment", %{amount: 10}, source: "/user")); an instance module exposes start_agent, whereis, and list_agents for process management.
- An Elixir backend team needs to organize several long-lived, supervised business processes into a cooperative workflow.
- A service needs to route CloudEvents-style messages into components with explicit state and command boundaries.
- A BEAM application needs parent-child process lifecycle handling, delayed scheduling, or runtime event emission.
- A developer wants to model a state-driven flow with the FSM strategy instead of mixing business logic into GenServer callbacks.
- A team needs logical partitions or Pods to manage multi-tenant workspaces within a shared instance.
How do you install or deploy this agent?
Run:
mix igniter.install jidoThis adds the dependency, creates MyApp.Jido, writes configuration, and adds it to the supervision tree. Alternatively, add {:jido, "~> 2.0"} to mix.exs and create:
defmodule MyApp.Jido do
use Jido, otp_app: :my_append
Configure config/config.exs:
config :my_app, MyApp.Jido, max_tasks: 1000, agent_pools: []Then add MyApp.Jido to application.ex children. The documented prerequisites are Elixir 1.17+ and Erlang/OTP 26+; no credentials are documented.
How do you use this agent?
Define an Agent and an Action, for example by giving the Agent signal_routes: [{"increment", MyApp.Actions.Increment}] and returning {:ok, %{count: current + params.amount}} from the Action's run/2. Create and execute it:
agent = MyApp.CounterAgent.new(){agent, directives} = MyApp.CounterAgent.cmd(agent, {MyApp.Actions.Increment, %{amount: 5}})
For process-based execution:
{:ok, pid} = MyApp.Jido.start_agent(MyApp.CounterAgent, id: "counter-1")
{:ok, agent} = Jido.AgentServer.call(pid, Jido.Signal.new!("increment", %{amount: 10}, source: "/user"))
The Signal type must be declared in signal_routes.
What are this agent's strengths and limitations?
- It is built on Elixir/OTP and GenServer, providing supervision and fault tolerance rather than only a chain-oriented interface.
- The cmd/2 contract returns both the updated agent and directives, separating state transitions from runtime-owned effects.
- Configurable parent-child hierarchies, instance-scoped supervision, logical partitions, and Pods suit durable cooperative-process topologies.
- Direct and FSM strategies plus plugins with merged schemas support distinct workflow-modeling approaches.
- Adoption requires Elixir 1.17+ and Erlang/OTP 26+, creating runtime and migration costs for teams outside the BEAM ecosystem.
- AI/LLM support is not part of the core package; teams needing models must evaluate and integrate ecosystem packages such as jido_ai and req_llm.
- Actions may call APIs, read files, or query databases, so applications must still design their own I/O, permission, and error-handling boundaries.
- The provided material shows the built-in runtime and ecosystem packages but does not document core-package adapters for OpenAI, Anthropic, or other named model providers.
How does this agent compare with similar options?
The README contrasts Jido with LangChain and CrewAI: it describes LangChain as Python-first and chain-based, and CrewAI as role-playing and team-based. Jido is positioned as an OTP-native agent pattern built on GenServer, emphasizing supervision trees, immutable state, and explicit Directive effect boundaries.
Key facts side by side with the most closely related agents.
| Agent | Source review | Form / cost | Stars | Updated | Language | Full support on |
|---|---|---|---|---|---|---|
| Jido for Elixir This agent | 50 · Major gaps | FrameworkFree | ★ 1.9k | 22d ago | Elixir | — |
| Lemon Persistent Coding Agent | 72 · Some gaps | CLIFree + model costs | ★ 136 | 2d ago | Elixir | OpenAI API · Claude API |
| Pi Dynamic Workflows | 72 · Some gaps | Agent plugin / skillFree + model costs | ★ 591 | 12d ago | TypeScript | — |
| Agently AI Application Runtime | 64 · Some gaps | Library / SDKFree + model costs | ★ 1.7k | 26d ago | Python | OpenAI API · Claude API |
How does FollowAgents rate this agent?
Why each dimension lost points
The README distinguishes agent decisions, Actions, and runtime directives, and says Actions may call APIs, access files, or query databases while the runtime interprets directives. That makes effect boundaries visible, but the packet does not show operation-level permission controls, sensitive-data handling, or rollback, so those criteria lose points. The release skill includes staged checks and human confirmation, but that does not establish confirmation for ordinary agent operations. Workflow permissions are visible and bounded; dependency security and publisher identity lack independent evidence.
The README describes immutable state, supervision, and explicit flows; AGENTS.md also calls for pure cmd/2 and tagged errors. However, the README says Elixir 1.17+/OTP 26+ while AGENTS.md says Elixir ~>1.18 and OTP 27+, leaving inconsistent runtime guidance. CI delegates to an external reusable workflow, and the packet does not establish its availability. The README provides timeout and signal troubleshooting, but gives limited detail on failure messages and recovery.
The materials clearly target Elixir/OTP workflows and multi-agent systems, make AI optional, and describe Direct and FSM strategies, plugins, signals, and multi-tenancy. The release skill has specific triggers. Environment guidance is incomplete because runtime prerequisites conflict.
The README organizes installation, quick start, concepts, guides, and FAQ, with both Igniter and manual setup steps. Names such as Agent, Action, Signal, and Directive are used consistently, and examples are practical. AI optionality and possible Action side effects are disclosed, but known limitations are not systematically documented. The LICENSE explicitly provides Apache-2.0 terms. A ~>2.0 dependency example is present, but no changelog is included; AGENTS.md says release notes are generated from Git history. Copyright and contribution references offer limited maintenance attribution, with no support commitment; publisher identity remains unknown.
The README gives a path from defining an Agent through running AgentServer, lists core capabilities and ecosystem packages, and helps readers assess fit. Cost and benefit discussion is broad, without resource estimates, operating costs, or migration costs compared with native OTP, so this criterion is not scored highly.
Core architecture claims can be traced to README contracts, feature descriptions, and examples; AGENTS.md independently echoes the pure-decision/runtime split and structured errors, while CI and release workflows provide configuration evidence. Reliability, performance, and production claims have no results in this packet. The documentation generally separates design claims from instructions, but conflicting runtime baselines reduce verifiability.
- Check the required Elixir and OTP versions before installation; the README and AGENTS.md list different baselines.
- Actions can access APIs, files, and databases directly. Applications should constrain those permissions and assess side effects; the packet does not show a general confirmation or rollback mechanism.
- CI and release workflows call external reusable GitHub Actions workflows; their implementations and dependency-security review are not included here.
Recent releases
Latest entries from the project's GitHub Releases. Notes are quoted from upstream as written, not rewritten or tested by FollowAgents.
-
Release notes excerpt
Breaking Changes: * agent_server: remove custom process spawn callback by mikehostetler * agent: replace supplied state fields in set by mikehostetler * agent: use DSL blocks for module definitions by mikehostetler * agent: remove redundant definition getters by mikehostetler * agent: require plain map route defaults by mikehostetler * agent: require one executable per route by mikehostetler * name route Signal helpers with as by mikehostetler * use one durable Agent identity by mikehostetler * replace Agent and Topology Builders with data constructors by mikehostetler …View on GitHub ↗ -
v2.4.0 Release v2.4.0
Release notes excerpt
Features: * agent: enforce optional state size budgets by mikehostetler Bug Fixes: * schema: preserve defaults with Zoi 0.18.11 by mikehostetler * deps: update mint for security advisory by mikehostetler * lifecycle: preserve normal owner shutdown reasons (#367) by Iulian Costan * error: preserve validation paths in transport (#336) by mikehostetlerView on GitHub ↗ -
v2.3.3 Release v2.3.3
Release notes excerpt
Bug Fixes: * deps: update Mint for CVE-2026-59249 by mikehostetler * instance-manager: fail closed on thaw errors (#316) by mikehostetler * agent-server: serialize sync call drain races (#312) by mikehostetlerView on GitHub ↗
FAQ
Does Jido require AI or an LLM?
Can directives returned by cmd/2 modify agent state again?
How are agents run in production?
How does it handle child processes and failures?
Does the core package require network, filesystem, or MCP access?
Thanks — we use this to improve the page.