module LittleGhost::Agent::Delegation::ClassMethods
Exposes delegation declarations on agent classes. These methods become inheritable DSL entries when the capability is included.
Public Instance Methods
# File lib/little_ghost/agent/delegation.rb, line 96 def agent_as_tool(agent_class, name: nil, description: nil, model: nil, tools: nil, preserve_context: false) validate_delegated_tools!(tools) declaration = { agent: agent_class, name: (name || agent_class.agent_id).to_s, description: description || agent_class.description, model:, tools:, preserve_context: } self.agent_tool_declarations_value = [*agent_tool_declarations, declaration] end
Exposes agent_class as one ordinary tool.
Pass preserve_context: true to retain the delegated agentโs conversational history between calls to that tool instance.
# File lib/little_ghost/agent/delegation.rb, line 111 def agents_as_tools(*agent_classes, **options) agent_classes.each { |agent_class| agent_as_tool(agent_class, **options) } agent_tool_declarations end
Exposes several agent classes as ordinary tools with shared options.
# File lib/little_ghost/agent/delegation.rb, line 67 def subagent(agent_class, kind: nil, description: nil, model: nil, tools: nil, factory: nil, persist: true) validate_delegated_tools!(tools) declaration = { agent: agent_class, kind: (kind || agent_class.agent_id).to_s, description: description || agent_class.description, model:, tools:, factory:, persist: } self.subagent_declarations_value = [*subagent_declarations, declaration] end
Adds agent_class as an available managed subagent.
kind defaults to the agent ID and description defaults to the agent description. Conversations persist when a session store exists; pass persist: false for invocation-local work.
subagent ResearchAgent, kind: "research"
# File lib/little_ghost/agent/delegation.rb, line 47 def subagent_long_poll_duration(*values) return subagent_long_poll_duration_value if values.empty? timeout = Float(values.fetch(0)) unless timeout.positive? && timeout.finite? raise ConfigurationError, "subagent_long_poll_duration must be a positive finite number" end self.subagent_long_poll_duration_value = timeout rescue ArgumentError, TypeError raise ConfigurationError, "subagent_long_poll_duration must be a positive finite number" end
The maximum long-poll duration used by subagent wait tools.
The default comes from Subagents::Manager. Values must be positive, finite numbers and are normalized to Float.
# File lib/little_ghost/agent/delegation.rb, line 82 def subagents(*agent_classes, **options, &resolver) agent_classes.each { |agent_class| subagent(agent_class, **options) } self.subagent_resolvers_value = [*subagent_resolvers, resolver] if resolver subagent_declarations end
Adds several static subagents and an optional dynamic definition resolver.