Repository navigation
ExAgent v2.1.0
ExAgent 2.1.0 adds skills loaded on demand and refreshes dependencies. It is additive: agents built without :skills behave as in 2.0.
Skills
Give an agent many task-specific procedures without sending them all on every request. The model sees a catalog of names and descriptions and loads a skill's instructions when a task needs them. Skills use the Agent Skills SKILL.md format shared with other agent harnesses.
skills = ExAgent.Skills.from_dir!(Application.app_dir(:my_app, "priv/skills"))
agent = ExAgent.new(model: model, instructions: "You are...", skills: skills)load_skillreturns the instructions as an ordinary tool result, so a loaded skill persists across steps,Serverturns, snapshots and continuations.read_skill_filereads a skill's own files (for examplereferences/). Paths are confined to the skill directory; hidden, binary and oversized files are rejected.- A skill can carry tools that are offered only after it is loaded (
ExAgent.Skills.Gate). ExAgent.Skills.Restorerestores loaded skills that compaction removed from the request.- Skills never grant permissions or execute scripts.
Guide: Skills.
Dependencies
req_llm ~> 1.27.0(withllm_db 2026.10.0) andjsv ~> 0.26.0. Update your application lock.- ReqLLM 1.27 returns a Finch pool queue timeout as an error tuple instead of raising.
Verification
- Offline suite: 2,283 passed, 28 excluded.
- Live OpenRouter E2E with GPT-6-Luna: smoke 23/23 and skills 4/4.
- Live OpenRouter E2E with DeepSeek V4.1 Flash: smoke 20/23 and skills 3/4. The three smoke failures reproduce identically on ReqLLM 1.26, so they come from the model or route rather than from this release.
Full details in the changelog.