Core identity model
SourceUuidis the stable source identity. Builtins use00000000-0000-4b11-8111-000000000001; conventional project-local.rkat/skillsuses00000000-0000-4b11-8111-000000000002.SkillNameis a lowercase dash-separated slug ([a-z0-9-], no leading/trailing dash, no--).SkillKey { source_uuid, skill_name }is the canonical skill identity across runtime, RPC, REST, SDK, CLI, and tool surfaces.SkillRefis the wire wrapper for per-turn refs. It currently has one tagged form:
preload_skills carries plain SkillKey objects; skill_refs carries tagged SkillRef objects. Legacy string refs are rejected.
Source Identity
Each source has aSourceIdentityRecord:
source_uuiddisplay_nametransport_kind:embedded,filesystem,git,http, orstdiofingerprintstatus:active,disabled, orretired
SkillKeyRemap entries where the event needs per-skill coverage.
Shadowing is keyed by the full SkillKey, not by skill_name alone. Two sources can both contain email-extractor; they are distinct skills unless their source_uuid is also the same.
Source Transports
| Transport | Configuration shape | Notes |
|---|---|---|
| Embedded | component crate registration | Builtin skills registered through inventory. |
| Filesystem | type = "filesystem", path = "..." | Recursively discovers directories containing SKILL.md. |
| Git | type = "git", url, git_ref, ref_type | Uses local cache and refresh TTL for branch refs. |
| HTTP | type = "http", url, auth fields | Requires the HTTP skills feature. |
| Stdio | type = "stdio", command, args | External skill source process. |
Companion Skill Convention
Meerkat-owned nontrivial agent-facing tool families use embedded companion skills as their operating manuals. A companion skill is a normal skill:- source: embedded builtin source
- identity: normal
SkillKey { source_uuid, skill_name } - gating:
requires_capabilities - activation:
preload_skills,skill_refs, orload_skill
Activation paths
- Preload at session creation:
preload_skills: SkillKey[]; content is resolved into the system prompt before the first turn. - First-turn or per-turn injection:
skill_refs: SkillRef[]; content is injected for that turn. - CLI preload convenience:
rkat run --skill <skill-name>resolves a runtime-local slug to a builtin-source key.
Discovery tools
Agent-facing discovery tools use typed key fields:| Tool | Key fields | Purpose |
|---|---|---|
browse_skills | optional source_uuid filter | List active skills, optionally filtered by source UUID or search query. |
load_skill | source_uuid, skill_name | Load a skill’s full instructions into the conversation. |
skill_list_resources | source_uuid, skill_name | List skill-owned resources/artifacts. |
skill_read_resource | source_uuid, skill_name, resource path | Read a specific skill-owned resource. |
skill_invoke_function | source_uuid, skill_name, function name, arguments | Invoke a skill-defined structured function. |
Rendering
Flat inventory renders full key IDs:source_uuid and instructs the agent to use browse_skills and load_skill. Injection blocks are size-limited to 32 KiB and rendered as <skill id="source_uuid/skill_name">...</skill>.
Public Introspection
Current public introspection surfaces:| Surface | Operation |
|---|---|
| CLI | rkat skill list [--json] |
| CLI inspect | rkat skill inspect <skill-name> --source-uuid <uuid> [--json] |
| RPC | skills/list |
| REST | GET /skills |
| MCP list | meerkat_skills with action: "list" |
| MCP inspect | meerkat_skills with action: "inspect", typed skill_key, and optional source UUID |
key, source, is_active, and optional shadowed_by provenance.
Inspect responses include the same typed identity and provenance plus body.
