Class: SignalWire::Skills::Builtin::ClaudeSkillsSkill
- Inherits:
-
SkillBase
- Object
- SkillBase
- SignalWire::Skills::Builtin::ClaudeSkillsSkill
show all
- Defined in:
- lib/signalwire/skills/builtin/claude_skills.rb
Overview
Loads Claude SKILL.md files as agent tools.
Instance Attribute Summary
Attributes inherited from SkillBase
#agent, #logger, #params, #swaig_fields
Instance Method Summary
collapse
Methods inherited from SkillBase
#cleanup, #get_global_data, #get_param, #initialize, #required_env_vars, #version
Instance Method Details
#description ⇒ Object
12
|
# File 'lib/signalwire/skills/builtin/claude_skills.rb', line 12
def description; 'Load Claude SKILL.md files as agent tools'; end
|
#get_hints ⇒ Object
46
47
48
|
# File 'lib/signalwire/skills/builtin/claude_skills.rb', line 46
def get_hints
@discovered.flat_map { |s| s[:name].split(/[-_]/) }.uniq
end
|
#get_parameter_schema ⇒ Object
56
57
58
59
60
61
62
63
64
|
# File 'lib/signalwire/skills/builtin/claude_skills.rb', line 56
def get_parameter_schema
{
'skills_path' => { 'type' => 'string', 'required' => true },
'include' => { 'type' => 'array' },
'exclude' => { 'type' => 'array' },
'skill_descriptions' => { 'type' => 'object' },
'tool_prefix' => { 'type' => 'string', 'default' => 'claude_' }
}
end
|
#get_prompt_sections ⇒ Object
50
51
52
53
54
|
# File 'lib/signalwire/skills/builtin/claude_skills.rb', line 50
def get_prompt_sections
@discovered.map do |skill|
{ 'title' => "Claude Skill: #{skill[:name]}", 'body' => skill[:content][0, 200] }
end
end
|
#instance_key ⇒ Object
29
|
# File 'lib/signalwire/skills/builtin/claude_skills.rb', line 29
def instance_key; "claude_skills_#{@skills_path}"; end
|
#name ⇒ Object
11
|
# File 'lib/signalwire/skills/builtin/claude_skills.rb', line 11
def name; 'claude_skills'; end
|
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/signalwire/skills/builtin/claude_skills.rb', line 31
def register_tools
@discovered.map do |skill|
{
name: "#{@tool_prefix}#{skill[:safe_name]}",
description: @descriptions[skill[:name]] || "Execute Claude skill: #{skill[:name]}",
parameters: {
'arguments' => { 'type' => 'string', 'description' => 'Arguments for the skill' }
},
handler: lambda { |args, _raw_data|
Swaig::FunctionResult.new("Skill #{skill[:name]} instructions:\n\n#{skill[:content]}")
}
}
end
end
|
#setup ⇒ Object
15
16
17
18
19
20
21
22
23
24
25
26
27
|
# File 'lib/signalwire/skills/builtin/claude_skills.rb', line 15
def setup
@skills_path = get_param('skills_path')
@tool_prefix = get_param('tool_prefix', default: 'claude_')
@include = get_param('include') @exclude = get_param('exclude') @descriptions = get_param('skill_descriptions') || {}
return false unless @skills_path && !@skills_path.empty?
return false unless File.directory?(@skills_path)
@discovered = discover_skills
true
end
|
#supports_multiple_instances? ⇒ Boolean
13
|
# File 'lib/signalwire/skills/builtin/claude_skills.rb', line 13
def supports_multiple_instances?; true; end
|