Jido.AI.Skill.Activation (Jido AI v2.2.0)

Copy Markdown View Source

First-class activation API for skills.

Manages skill activation lifecycle:

  • Prevents duplicate activation (idempotent within session)
  • Returns activation context for host/client injection
  • Tracks activated skills for session management

Activation Context

The context returned on activation includes:

  • skill - The full Jido.AI.Skill.Spec
  • skill_body - The rendered skill body text
  • root_dir - Skill root directory for resource resolution
  • resources - Bounded listing of bundled resources

Usage

# Activate by name (looks up in discovery and registry)
{:ok, context} = Jido.AI.Skill.Activation.activate("code-review")

# Activate a spec directly
{:ok, spec} = Jido.AI.Skill.Discovery.find("code-review") |> Jido.AI.Skill.Discovery.to_spec()
{:ok, context} = Jido.AI.Skill.Activation.activate(spec)

# Check if already activated
Jido.AI.Skill.Activation.activated?("code-review")

Summary

Functions

Activates a skill by name, spec, or module.

Activates a skill, raising on error.

Activates multiple skills in a batch.

Returns true if the named skill is activated in the current session.

Returns the activation context for a skill without activating it.

Lists all currently activated skills.

Types

activation_context()

@type activation_context() :: %{
  skill: Jido.AI.Skill.Spec.t(),
  skill_body: String.t(),
  root_dir: String.t() | nil,
  resources: Jido.AI.Skill.Resources.resource_listing()
}

Functions

activate(name)

@spec activate(String.t() | Jido.AI.Skill.Spec.t() | module()) ::
  {:ok, activation_context()} | {:error, term()}

Activates a skill by name, spec, or module.

Returns activation context for use in host/client injection. Prevents duplicate activation within the same session.

Returns

  • {:ok, context} - Skill activated (or was already active)
  • {:error, reason} - Activation failed

Examples

{:ok, context} = Jido.AI.Skill.Activation.activate("code-review")
IO.puts(context.skill_body)

activate!(skill)

@spec activate!(String.t() | Jido.AI.Skill.Spec.t() | module()) ::
  activation_context()

Activates a skill, raising on error.

activate_batch(skills)

@spec activate_batch([String.t() | Jido.AI.Skill.Spec.t() | module()]) :: [
  ok: activation_context(),
  error: term()
]

Activates multiple skills in a batch.

Returns results for each activation, with :ok or :error tuples.

Examples

results = Jido.AI.Skill.Activation.activate_batch(["code-review", "testing"])
# Returns: [{:ok, context1}, {:ok, context2}] or with errors

activated?(name)

@spec activated?(String.t()) :: boolean()

Returns true if the named skill is activated in the current session.

Examples

Jido.AI.Skill.Activation.activated?("code-review")

get_context(name)

@spec get_context(String.t()) ::
  {:ok, activation_context()} | {:error, :not_activated}

Returns the activation context for a skill without activating it.

Returns

  • {:ok, context} - Skill is activated, context returned
  • {:error, :not_activated} - Skill not activated

Examples

{:ok, context} = Jido.AI.Skill.Activation.get_context("code-review")

list_activated()

@spec list_activated() :: [String.t()]

Lists all currently activated skills.

Examples

["code-review", "testing"] = Jido.AI.Skill.Activation.list_activated()