Skip to content

ExAgent v2.1.0

Choose a tag to compare

@kukapu kukapu released this 08 Oct 07:45
· 6 commits to main since this release

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_skill returns the instructions as an ordinary tool result, so a loaded skill persists across steps, Server turns, snapshots and continuations.
  • read_skill_file reads a skill's own files (for example references/). 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.Restore restores loaded skills that compaction removed from the request.
  • Skills never grant permissions or execute scripts.

Guide: Skills.

Dependencies

  • req_llm ~> 1.27.0 (with llm_db 2026.10.0) and jsv ~> 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.