Jido for Elixir
A stateful workflow and cooperative-process framework for Elixir/OTP.
- Source repo
- agentjido/jido
- Stars
- ★ 1.9k
- Last updated
- 2d ago
- License
- Apache-2.0
- Primary language
- Elixir
- FA score
- 41/100 · Major gaps
At a glance
- Works with
- Universal · cross-platform
- You'll need
- Typical use
- An Elixir backend team needs to organize several long-lived, supervised business processes into a cooperative workflow.
- Main limitation
- Adoption requires Elixir 1.17+ and Erlang/OTP 26+, creating runtime and migration costs for teams outside the BEAM ecosystem.
- Source review
- 41/100 · Major gaps 3 safety controls not found
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 | Stars | Updated | Language | Full support on |
|---|---|---|---|---|---|
| Jido for Elixir This agent | 41 · Major gaps | ★ 1.9k | 2d ago | Elixir | — |
| Pi Dynamic Workflows | 88 · Good | ★ 531 | 9d ago | TypeScript | — |
| LlamaAgents | 66 · Some gaps | ★ 452 | 3d ago | Python | — |
| Agently AI Application Runtime | 63 · Some gaps | ★ 1.7k | 11d ago | Python | OpenAI API · Claude API |
How does FollowAgents rate this agent?
Why each dimension lost points
Evidence shows the framework emphasizes explicit directives and runtime ownership, but no mechanisms for least privilege, user confirmation, or sensitive data handling are provided. Dependency security is only implied by CI and standard dependency management, with no vulnerability scanning evidence. External effects are described via directives, but no rollback mechanism is provided. Source attribution is only via license and copyright notice.
Documentation and code examples are consistent, but no detailed failure messages are provided. Dependency availability is implied by Hex and GitHub Actions, but no dependency locking or mirrors are provided.
Clearly targets Elixir developers, with multiple scenarios and guides. Capability boundaries are explained via directives and strategies, but trigger precision is not detailed. Environment fit is shown via OTP and Elixir version requirements.
Information architecture is clear, install notes are detailed, naming is stable, examples and FAQ are rich. Known limitations are not explicitly listed, license is Apache-2.0, versioning is via Hex and GitHub Actions, maintenance responsibility is via contributing guide.
Output usability is shown via clear APIs and examples, marginal value is shown via comparison to raw OTP, cost-benefit lacks performance or resource usage data.
Claims are consistent with code examples, but no independent verification is provided. Facts and inferences are not explicitly separated.
- Not found in source: confirmation before actingTurn on (or add) a confirmation step before it acts, and try it in a sandbox or test environment before real data.
- Not found in source: sensitive-data handlingUse dedicated, low-privilege, revocable API keys — never production credentials — and keep secrets out of logs.
- Not found in source: rollback or recovery pathBack up first, or work on a git branch or snapshot, so its changes can be undone.
- No least privilege or user confirmation mechanisms are provided; implement security controls yourself when deploying.
- No sensitive data handling or rollback mechanisms are provided; assess data protection needs.
- Dependency security lacks vulnerability scanning evidence; consider using dependency audit tools.
- Known limitations are not explicitly listed; assess suitability yourself.