Tracking issue: #285 · Milestone: Agent Hub Platform [OSS] · Status: DraftThis spec defines the architecture and integration model for skills. The
on-disk
SKILL.md schema (full field reference, permission grammar, tier
promotion) lives in Skill Format — this document builds
on it rather than repeating it.Problem
A GAIA agent’s capabilities are compiled in. Tools arrive through hardcoded mixins (RAGToolsMixin, ShellToolsMixin, …) wired into the agent class and
shipped inside the wheel. A user who wants a new capability — a domain checklist,
a wrapper around an internal API, a specialized procedure — has no path short of
forking the agent or editing AMD source.
Meanwhile the wider ecosystem has converged on a portable format for exactly
this: the Agent Skills open standard, used by Claude
Code and a growing set of agent runtimes. A skill is a folder with a SKILL.md
that the agent loads only when relevant, so a library of capabilities costs
almost nothing until used.
Goal
GAIA agents compose skills at runtime the same way they compose tools today — declaratively, per-agent, least-privilege — and the format is the Agent Skills open standard so the existing ecosystem of skills works in GAIA unchanged. A plain Claude Code skill drops into~/.gaia/skills/ and runs; a GAIA skill adds
typed tools, a permission model, and security tiers on top of that baseline.
Skill vs Tool vs Agent
These three are layered, not interchangeable. The distinction is the foundation of everything below.
The one-line model: a tool is a function, a skill is a packaged capability an
agent composes, an agent is the loop that decides when to use it.
Anatomy of a skill
A GAIA skill is a directory whose only required file isSKILL.md. Everything
else is optional and loaded on demand.
- Instructional skill (standard)
- Tool skill (GAIA extension)
Frontmatter + Markdown body, no code. The body is context, not a function —
a procedure, checklist, or domain knowledge injected into the agent when the
skill triggers. This is the plain Agent Skills
shape and is byte-for-byte compatible with Claude Code skills.
tools block (and its
backing code) is present.
Manifest format
The baseline is the Agent Skills standard:name and description are the only
required frontmatter fields, and description is the trigger signal the model
reads to decide relevance. GAIA layers a superset on top — version, permissions,
typed tools, security tier, requirements — defined in full in
Skill Format. The mapping:
GAIA-specific fields are nested under
metadata.gaia so a standard runtime
ignores them losslessly — the full grammar is in
Skill Format. The standard’s
optional compatibility and allowed-tools keys are not part of GAIA’s
adopted base (they overlap metadata.gaia); a skill using them still parses, and
GAIA ignores them.
The compatibility rule: GAIA reads a bare standard SKILL.md as a valid
instruction-only skill. Missing GAIA fields take conservative defaults —
security_tier: experimental (sandboxed, explicit opt-in), no tools, no
permissions. A skill author adopts GAIA features incrementally; nothing is
required to make an existing standard skill load.
Division of authority: this spec owns the integration surface (discovery,
scoping, progressive disclosure); Skill Format owns the
field grammar (the
SKILL.md schema, permission grammar, tiers). Both adopt
Agent Skills (agentskills.io, as implemented by
Claude Code) as the base standard, and treat Hermes and OpenClaw as compatible
third-party formats nested under metadata.<vendor>.Discovery, loading, and scoping
Discovery locations
Skills are discovered from these roots, highest precedence first. A later root never overrides a skill of the samename found earlier.
Roots 1–4 are native GAIA. Root 5 lets an existing Claude Code skill library
work in GAIA with zero migration (see Compatibility).
Progressive disclosure
A skill is loaded in three levels, mirroring the standard — long reference material costs nothing until it’s actually needed:1
Metadata (always in context)
name + description of every discovered, in-scope skill are listed for the
model. This is the only always-resident cost — a few tokens per skill.2
Body (on trigger)
When the model judges a skill relevant (its
description matches the task) or
the user invokes it explicitly, the SKILL.md Markdown body is injected and the
skill’s declared tools are registered into the agent’s tool registry.3
Resources (on demand)
Files the body references (scripts, reference docs, templates) load only when the
agent reads or executes them — not at trigger time.
Scoping into an agent
A skill is never globally active. It is scoped to an agent two ways:- Declared — the agent’s
gaia-agent.yamllists askills:block. These are available to every session of that agent. - Granted — a skill carrying permissions must be granted to the agent, reusing the per-agent grant model from the connectors framework. An agent only ever sees skills explicitly in scope (least privilege); discovery does not imply activation.
load_skill resolves the directory by precedence, validates the manifest against
its security tier, registers any tools under a <skill-name>/<tool> namespace to
avoid collisions, and makes the body available to the disclosure pipeline. A
manifest whose declared tools don’t match its tools.py, or whose permissions
exceed its tier ceiling, fails loudly — it does not load with a subset.
Invocation
Once a skill is in scope, it is triggered either by the model (description match — automatic) or explicitly by the user (/web-research, or
load_skill in code). This matches Claude Code’s dual-invocation model. The
standard’s allowed-tools/disallowed-tools keys are parsed but not used as
a permission mechanism (see Skill Format) —
GAIA’s permissions come from metadata.gaia.
Permission & security model
Instruction-only skills carry no code, but they are not free of risk — a body is injected into the model’s context and can attempt prompt injection. Tool skills carry the full risk of the code they run. The model gates both. Security tiers gate what a skill may do. Every skill resolves to one ofverified / community / experimental (defaulting to experimental). The
tier sets the permission ceiling and the grant behavior — auto-grant, prompt at
install, or sandboxed — exactly as defined in
Skill Format → Permission model and Security tiers.
Highlights as they apply at the agent boundary:
This ties the skill layer to the broader
security model: skills are a grant surface, audited and
scoped per agent, not a global capability.
Agent Hub integration
Skills are first-class Agent Hub artifacts, distributed and versioned alongside agent packages from the Agent Hub Restructure. Distribution. A skill ships one of two ways:- Standalone in the skill registry — installed with
gaia skill install <name>, lock-tracked in~/.gaia/skills/skill-lock.json. The CLI is specified in Skill Format → CLI; the registry/marketplace is downstream (#647). - Bundled inside an agent package’s
skills/directory — version-pinned to that agent, no separate install.
gaia-agent.yaml link. An agent declares the skills it composes. This
extends the manifest from the restructure spec with a skills: block:
skills: block at install time the way dependencies:
resolves agent-to-agent links today: topological install order, highest version
satisfying all constraints, fail-loud on conflict or circular dependency.
Agent Skills / Claude Code compatibility
GAIA implements the Agent Skills open standard as its baseline format, so reuse is bidirectional and lossless for the common case. Standard skill → GAIA. A folder with aname/description SKILL.md loads
as an instruction-only skill with no changes. Claude Code skill libraries in
.claude/skills/ are discovered directly (read-only import root). gaia skill import <path> copies one into ~/.gaia/skills/ and stamps it
experimental for explicit promotion.
GAIA skill → standard runtime. A GAIA skill degrades gracefully: the
frontmatter name/description and Markdown body are standard, so the
instructions work anywhere. Bundled scripts run if the host can execute them.
GAIA-specific frontmatter (permissions, security_tier, typed tools) is
ignored by runtimes that don’t understand it rather than breaking the parse.
What each side adds:
The principle: be a strict superset of the open standard. Anything that runs
as an Agent Skills skill runs in GAIA; GAIA adds the enforcement and typing the
standard intentionally leaves open.
Non-goals
- Not a new format. GAIA does not invent a skill format; it adopts Agent Skills and extends the frontmatter. A competing schema is explicitly out of scope.
- Not a replacement for tools or mixins. Inline
@toolfunctions and framework mixins remain valid for agent-specific, non-distributable capability. Skills are for the reusable, portable middle layer. - Not autonomous. Skills add capability to an agent’s loop; they do not run their own loop or make their own model calls.
Open questions
- Tool-skill execution in foreign runtimes. How much of a GAIA tool skill should degrade vs. fail when run by a host that can’t enforce its permissions?
- Body-injection trust. Static scanning of instruction bodies for injection
patterns at import — required for
community+, advisory forexperimental? - Versioning of bundled vs standalone. Reconciling an agent-pinned bundled
skill with a newer standalone install of the same
name.
Related
- Skill Format —
SKILL.mdschema, permission grammar, tiers, CLI - Agent Hub Restructure —
gaia-agent.yaml, packaging, distribution - Agent Hub — marketplace vision
- Security Model — grants, audit trail, sandboxing
- Agent Skills standard · Claude Code skills