# `Jido.AI.Skill.Spec`
[🔗](https://github.com/agentjido/jido_ai/blob/v2.4.0/lib/jido_ai/skill/spec.ex#L1)

Specification struct for skills, supporting compile-time modules,
runtime-loaded SKILL.md files, and host-supplied runtime specs.

Follows the agentskills.io spec with Jido-specific extensions.

# `body_ref`

```elixir
@type body_ref() :: {:file, String.t()} | {:inline, String.t()} | nil
```

# `source`

```elixir
@type source() :: {:module, module()} | {:file, String.t()}
```

# `t`

```elixir
@type t() :: %Jido.AI.Skill.Spec{
  actions: [module()],
  allowed_tools: [String.t()],
  body_ref: body_ref(),
  compatibility: String.t() | nil,
  description: String.t(),
  diagnostics: Jido.AI.Skill.Diagnostics.t() | nil,
  license: String.t() | nil,
  metadata: map() | nil,
  name: String.t(),
  plugins: [module()],
  source: source() | nil,
  tags: [String.t()],
  vsn: String.t() | nil
}
```

# `validate_manifest`

```elixir
@spec validate_manifest(t()) :: :ok | {:error, term()}
```

Validates the strict manifest fields shared by filesystem and runtime specs.

# `validate_runtime`

```elixir
@spec validate_runtime(t(), keyword()) :: {:ok, t()} | {:error, term()}
```

Validates a runtime-provided skill spec for Agent Skills integration.

Runtime specs must use `source: nil` and carry their body inline so Agent
Skills can preserve the host-provided manifest without discovering, reading,
or listing from the filesystem.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
