{"id":23986849,"url":"https://github.com/agentjido/jido","last_synced_at":"2025-05-15T14:02:27.657Z","repository":{"id":268330077,"uuid":"903999320","full_name":"agentjido/jido","owner":"agentjido","description":"🤖 Autonomous agent framework for Elixir. Built for distributed, autonomous behavior and dynamic workflows.","archived":false,"fork":false,"pushed_at":"2025-04-08T12:37:26.000Z","size":1226,"stargazers_count":380,"open_issues_count":0,"forks_count":16,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-04-11T21:13:08.813Z","etag":null,"topics":["agent","ai","artificial-intelligence","elixir","event-driven-architecture","functional-programming","orchestration","workflow"],"latest_commit_sha":null,"homepage":"https://hexdocs.pm/jido/getting-started.html","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/agentjido.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-16T03:57:55.000Z","updated_at":"2025-04-11T19:42:42.000Z","dependencies_parsed_at":null,"dependency_job_id":"698fd56a-6a85-49b4-bda9-dbef9aa649eb","html_url":"https://github.com/agentjido/jido","commit_stats":null,"previous_names":["agentjido/jido"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agentjido%2Fjido","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agentjido%2Fjido/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agentjido%2Fjido/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/agentjido%2Fjido/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/agentjido","download_url":"https://codeload.github.com/agentjido/jido/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248480430,"owners_count":21110937,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agent","ai","artificial-intelligence","elixir","event-driven-architecture","functional-programming","orchestration","workflow"],"created_at":"2025-01-07T16:00:37.643Z","updated_at":"2025-04-11T21:13:13.062Z","avatar_url":"https://github.com/agentjido.png","language":"Elixir","funding_links":[],"categories":["High-Level Agent Frameworks","4. Agentic AI \u0026 Multi-Agent Systems","Elixir","Repos","Artificial Intelligence","Agent Frameworks","Generative AI"],"sub_categories":["How to Join","Agent Frameworks"],"readme":"# Jido (自動)\n\nJido is a toolkit for building autonomous, distributed agent systems in Elixir.\n\nThe name \"Jido\" (自動) comes from the Japanese word meaning \"automatic\" or \"automated\", where 自 (ji) means \"self\" and 動 (dō) means \"movement\".\n\n[![Hex Version](https://img.shields.io/hexpm/v/jido.svg)](https://hex.pm/packages/jido)\n[![Hex Docs](http://img.shields.io/badge/hex.pm-docs-green.svg?style=flat)](https://hexdocs.pm/jido)\n[![Mix Test](https://github.com/agentjido/jido/actions/workflows/elixir-ci.yml/badge.svg)](https://github.com/agentjido/jido/actions/workflows/elixir-ci.yml)\n[![Coverage Status](https://coveralls.io/repos/github/agentjido/jido/badge.svg?branch=main)](https://coveralls.io/github/agentjido/jido?branch=main)\n[![Apache 2 License](https://img.shields.io/hexpm/l/jido)](https://opensource.org/licenses/Apache-2.0)\n\n## 🚨 Important Notice\n\nAs of March 3rd, 2025, I'm working out a few final issues in prep for the v1.1 release. The `main` branch will always represent the latest release - but it may have a few quality issues that don't represent the final release. I welcome input and contributions!  You can find me in the usual Elixir community locations.\n\n## Overview\n\nJido provides the foundation for building autonomous agents that can plan, execute, and adapt their behavior in distributed Elixir applications. Think of it as a toolkit for creating smart, composable workflows that can evolve and respond to their environment.\n\nThis package is geared towards Agent builders. It contains the basis building blocks for creating advanced agentic systems. This is why there's no AI baked into the core of this framework.\n\nTo see demo's and examples, check out our [Jido Workbench](https://github.com/agentjido/jido_workbench). It includes many examples of agents and workflows, including:\n\n- Agents with Tools\n- ChatBots\n- Agents acting as a Team\n- Multi-modal input \u0026 output\n- ... and many more examples\n\nJido Workbench relies on the following packages to extend Jido's capabilities:\n\n- [`jido_ai`](https://github.com/agentjido/jido_ai) package for the AI capabilities.\n- [`jido_chat`](https://github.com/agentjido/jido_chat) package for the chat capabilities.\n- [`jido_memory`](https://github.com/agentjido/jido_memory) package for the memory capabilities.\n\n## Key Features\n\n- 📦 **State Management**: Core state primitives for agents\n- 🧩 **Composable Actions**: Build complex behaviors from simple, reusable actions\n- 🤖 **Agent Data Structures**: Stateless agentic data structures for planning and execution\n- 🔥 **Agent GenServer**: OTP integration for agents, with dynamic supervisors\n- 📡 **Real-time Sensors**: Event-driven data gathering and monitoring\n- 📨 **Signal System**: Comprehensive system for agent and external communication\n- 🧠 **Skills**: Reusable, composable behavior modules - Plugins for agents\n- ⚡ **Distributed by Design**: Built for multi-node Elixir clusters\n- 🧪 **Testing Tools**: Rich helpers for unit and property-based testing\n\n## Installation\n\nAdd Jido to your dependencies:\n\n```elixir\ndef deps do\n  [\n    {:jido, \"~\u003e 1.1.0\"}\n  ]\nend\n```\n\n## Core Concepts\n\n### Actions\n\nActions are the fundamental building blocks in Jido. Each Action is a discrete, reusable unit of work with a clear interface:\n\n```elixir\ndefmodule MyApp.Actions.FormatUser do\n  use Jido.Action,\n    name: \"format_user\",\n    description: \"Formats user data by trimming whitespace and normalizing email\",\n    schema: [\n      name: [type: :string, required: true],\n      email: [type: :string, required: true]\n    ]\n\n  def run(params, _context) do\n    {:ok, %{\n      formatted_name: String.trim(params.name),\n      email: String.downcase(params.email)\n    }}\n  end\nend\n\n# Execute a single Action via the Workflow system\n{:ok, result} = Jido.Workflow.run(FormatUser, %{name: \"John Doe\", email: \"john@example.com\"})\n```\n\n[Learn more about Actions →](guides/actions/overview.md)\n\n### Agents\n\nAgents are stateful entities that can plan and execute Actions. They maintain their state through a schema and can adapt their behavior:\n\n```elixir\ndefmodule MyApp.CalculatorAgent do\n  use Jido.Agent,\n    name: \"calculator\",\n    description: \"An adaptive calculating agent\",\n    actions: [\n      MyApp.Actions.Add,\n      MyApp.Actions.Multiply,\n      Jido.Actions.Directives.RegisterAction\n    ],\n    schema: [\n      value: [type: :float, default: 0.0],\n      operations: [type: {:list, :atom}, default: []]\n    ]\nend\n\n# Start the agent\n{:ok, pid} = MyApp.CalculatorAgent.start_link()\n\n# Synchronous call\n{:ok, result} = MyApp.CalculatorAgent.call(pid, Signal.new!(%{type: \"add\", data: %{a: 1, b: 2}}))\n\n# Asynchronous call\n{:ok, response_ref} = MyApp.CalculatorAgent.cast(pid, Signal.new!(%{type: \"add\", data: %{a: 1, b: 2}}))\n```\n\n[Learn more about Agents →](guides/agents/overview.md)\n\n### Sensors\n\nSensors provide real-time monitoring and data gathering for your agents:\n\n```elixir\ndefmodule MyApp.Sensors.OperationCounter do\n  use Jido.Sensor,\n    name: \"operation_counter\",\n    description: \"Tracks operation usage metrics\",\n    schema: [\n      emit_interval: [type: :pos_integer, default: 1000]\n    ]\n\n  def mount(opts) do\n    {:ok, Map.merge(opts, %{counts: %{}})}\n  end\n\n  def handle_info({:operation, name}, state) do\n    new_counts = Map.update(state.counts, name, 1, \u0026 \u00261 + 1)\n    {:noreply, %{state | counts: new_counts}}\n  end\nend\n```\n\n[Learn more about Sensors →](guides/sensors/overview.md)\n\n## Running in Production\n\nStart your agents under supervision:\n\n```elixir\n# In your application.ex\nchildren = [\n  # Agents fit into your existing supervision tree\n  # Specify an id to always uniquely identify the agent\n  {MyApp.CalculatorAgent, id: \"calculator_1\"}\n]\n\nSupervisor.start_link(children, strategy: :one_for_one)\n```\n\n## Documentation\n\n- [📘 Getting Started Guide](guides/getting-started.livemd)\n- [🧩 Actions \u0026 Workflows](guides/actions/overview.md)\n- [🤖 Building Agents](guides/agents/overview.md)\n- [📡 Sensors \u0026 Monitoring](guides/sensors/overview.md)\n- [🔄 Agent Directives](guides/agents/directives.md)\n\n## Contributing\n\nWe welcome contributions! Here's how to get started:\n\n1. Fork the repository\n2. Run tests: `mix test`\n3. Run quality checks: `mix quality`\n4. Submit a PR\n\nPlease include tests for any new features or bug fixes.\n\nSee our [Contributing Guide](CONTRIBUTING.md) for detailed guidelines.\n\n## Testing\n\nJido is built with a test-driven mindset and provides comprehensive testing tools for building reliable agent systems. Our testing philosophy emphasizes:\n\n- Thorough test coverage for core functionality\n- Property-based testing for complex behaviors\n- Regression tests for every bug fix\n- Extensive testing helpers and utilities\n\n### Testing Utilities\n\nJido provides several testing helpers:\n\n- `Jido.TestSupport` - Common testing utilities\n- Property-based testing via StreamData\n- Mocking support through Mimic\n- PubSub testing helpers\n- Signal assertion helpers\n\n### Running Tests\n\n```bash\n# Run the test suite\nmix test\n\n# Run with coverage reporting\nmix test --cover\n\n# Run the full quality check suite\nmix quality\n```\n\nWhile we strive for 100% test coverage, we prioritize meaningful tests that verify behavior over simple line coverage. Every new feature and bug fix includes corresponding tests to prevent regressions.\n\n## License\n\nApache License 2.0 - See [LICENSE.md](LICENSE.md) for details.\n\n## Support\n\n- 📚 [Documentation](https://hexdocs.pm/jido)\n- 💬 [GitHub Discussions](https://github.com/agentjido/jido/discussions)\n- 🐛 [Issue Tracker](https://github.com/agentjido/jido/issues)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagentjido%2Fjido","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fagentjido%2Fjido","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fagentjido%2Fjido/lists"}