For the full guide, see Skills.
List available skills
Discover all skills from every source (project, user, git, HTTP, embedded) with provenance and shadowing info.
CLI
JSON-RPC
REST
MCP
Python
TypeScript
Rust
# Human-readable table
rkat skills list
# Machine-readable JSON
rkat skills list --json
{
"jsonrpc": "2.0", "id": 1,
"method": "skills/list",
"params": {}
}
curl http://127.0.0.1:8080/skills
{
"name": "meerkat_skills",
"arguments": { "action": "list" }
}
skills = client.list_skills()
for s in skills:
print(f"{s.id}: {s.name} (source={s.source})")
const skills = await client.listSkills();
for (const s of skills) {
console.log(`${s.id}: ${s.name} (source=${s.source})`);
}
let entries = skill_runtime
.list_all_with_provenance(&SkillFilter::default())
.await?;
for entry in &entries {
println!("{}: active={}", entry.descriptor.id, entry.is_active);
}
Inspect a skill
View the full body and metadata of a specific skill. Use --source to inspect a shadowed version.
CLI
JSON-RPC
REST
MCP
Python
TypeScript
Rust
# Inspect the active version
rkat skills inspect task-workflow
# Inspect a shadowed version from a specific source
rkat skills inspect task-workflow --source company --json
{
"jsonrpc": "2.0", "id": 1,
"method": "skills/inspect",
"params": {
"id": "task-workflow",
"source": "company"
}
}
# Active version
curl http://127.0.0.1:8080/skills/task-workflow
# From a specific source
curl http://127.0.0.1:8080/skills/task-workflow?source=company
{
"name": "meerkat_skills",
"arguments": {
"action": "inspect",
"skill_id": "task-workflow",
"source": "company"
}
}
skill = client.inspect_skill("task-workflow", source="company")
print(skill.body)
const skill = await client.inspectSkill("task-workflow", {
source: "company",
});
console.log(skill.body);
let doc = skill_runtime
.load_from_source(&"task-workflow".into(), Some("company"))
.await?;
println!("{}", doc.body);
Inject skills on session create
Pass skill_references to resolve and inject skill content into the system prompt when a session starts.
CLI
JSON-RPC
REST
MCP
Python
TypeScript
Rust
rkat run "Extract emails" --skill-refs "/email-extractor" "/formatting/markdown"
{
"jsonrpc": "2.0", "id": 1,
"method": "session/create",
"params": {
"prompt": "Extract emails",
"skill_references": ["/email-extractor", "/formatting/markdown"]
}
}
curl -X POST http://127.0.0.1:8080/sessions \
-H "Content-Type: application/json" \
-d '{
"prompt": "Extract emails",
"skill_references": ["/email-extractor", "/formatting/markdown"]
}'
{
"name": "meerkat_run",
"arguments": {
"prompt": "Extract emails",
"skill_references": ["/email-extractor", "/formatting/markdown"]
}
}
result = client.create_session(
"Extract emails",
skill_refs=["/email-extractor", "/formatting/markdown"],
)
const result = await client.createSession({
prompt: "Extract emails",
skillRefs: ["/email-extractor", "/formatting/markdown"],
});
let request = CreateSessionRequest {
model: "claude-sonnet-4-5".into(),
prompt: "Extract emails".into(),
system_prompt: None,
max_tokens: None,
event_tx: None,
skill_references: Some(vec![
"/email-extractor".parse()?,
"/formatting/markdown".parse()?,
]),
initial_turn: InitialTurnPolicy::RunImmediately,
build: None,
labels: None,
};
let result = service.create_session(request).await?;
Preload skills
Preloaded skills are resolved and injected into the system prompt before the first turn runs. Unlike skill_references, these are loaded eagerly at session creation.
CLI
JSON-RPC
REST
MCP
Python
TypeScript
Rust
rkat run "Help me deploy" --preload-skills "deployment-guide" "shell-patterns"
{
"jsonrpc": "2.0", "id": 1,
"method": "session/create",
"params": {
"prompt": "Help me deploy",
"preload_skills": ["deployment-guide", "shell-patterns"]
}
}
curl -X POST http://127.0.0.1:8080/sessions \
-H "Content-Type: application/json" \
-d '{
"prompt": "Help me deploy",
"preload_skills": ["deployment-guide", "shell-patterns"]
}'
{
"name": "meerkat_run",
"arguments": {
"prompt": "Help me deploy",
"preload_skills": ["deployment-guide", "shell-patterns"]
}
}
result = client.create_session(
"Help me deploy",
preload_skills=["deployment-guide", "shell-patterns"],
)
const result = await client.createSession({
prompt: "Help me deploy",
preloadSkills: ["deployment-guide", "shell-patterns"],
});
let build_opts = SessionBuildOptions {
preload_skills: Some(vec![
"deployment-guide".into(),
"shell-patterns".into(),
]),
..Default::default()
};
Per-turn skill injection
Inject skills into a specific turn on an existing session. The skill content is added to the context for that turn only.
CLI
JSON-RPC
REST
MCP
Python
TypeScript
Rust
rkat resume <session-id> "Now format the output" \
--skill-refs "/formatting/markdown"
{
"jsonrpc": "2.0", "id": 2,
"method": "turn/start",
"params": {
"session_id": "019467d9-7e3a-7000-8000-000000000000",
"prompt": "Now format the output",
"skill_references": ["/formatting/markdown"]
}
}
curl -X POST http://localhost:8080/sessions/019467d9-7e3a.../messages \
-H "Content-Type: application/json" \
-d '{
"prompt": "Now format the output",
"skill_references": ["/formatting/markdown"]
}'
{
"name": "meerkat_resume",
"arguments": {
"session_id": "019467d9-7e3a-7000-8000-000000000000",
"prompt": "Now format the output",
"skill_references": ["/formatting/markdown"]
}
}
result = session.turn(
"Now format the output",
skill_refs=["/formatting/markdown"],
)
const result = await session.turn("Now format the output", {
skillRefs: ["/formatting/markdown"],
});
let result = service.start_turn(&session_id, StartTurnRequest {
prompt: "Now format the output".into(),
system_prompt: None,
render_metadata: None,
handling_mode: HandlingMode::Queue,
event_tx: None,
skill_references: Some(vec!["/formatting/markdown".parse()?]),
flow_tool_overlay: None,
additional_instructions: None,
}).await?;
Skill sources
Skills are discovered from multiple sources in precedence order. The first source providing a given skill ID wins.
| Priority | Source | Location |
|---|
| 1 | Project | .rkat/skills/ in the project root |
| 2 | User | ~/.rkat/skills/ |
| 3 | Git | Cloned repositories (configured in config.toml) |
| 4 | HTTP | Remote skill servers (configured in config.toml) |
| 5 | Embedded | Built-in skills from component crates |
A project skill with the same ID as a built-in skill overrides the built-in. Use rkat skills list --json to see shadowing details.