Problem
There are currently two separate task-like capabilities with overlapping functionality:
SubagentTools.task (src/agentpool_toolsets/builtin/subagent_tools.py) — based on FunctionToolsetCapability, supports team execution (parallel/sequential), list_available_nodes discovery, runtime_registry, model_id propagation.
BackgroundTaskCapability._task (src/agentpool/capabilities/background_task/capability.py) — based on AbstractCapability, supports background_output, background_cancel, steer_task, NotificationBatcher, SessionTaskState, after_node_run / get_model_settings lifecycle hooks, load_skills / expected_output / title params.
They cannot simply be merged into one because their base classes (FunctionToolsetCapability vs AbstractCapability) provide different capability boundaries.
Proposed Direction
The correct consolidation path is to port SubagentTools specific features into BackgroundTaskCapability, then retire SubagentTools:
Background
This was discussed in PR #345 (comment: #345 (comment)). Consensus was to keep them separate for the migration PR and address the consolidation as a follow-up (per analysis: #345 (comment)).
Out of Scope
BackgroundTaskCapability specific features (background_output, cancel, steer, notification, lifecycle hooks) — these are the reason AbstractCapability is the right base.
- ToolDisplayCapability or other unrelated capabilities.
Problem
There are currently two separate
task-like capabilities with overlapping functionality:SubagentTools.task(src/agentpool_toolsets/builtin/subagent_tools.py) — based onFunctionToolsetCapability, supports team execution (parallel/sequential),list_available_nodesdiscovery,runtime_registry,model_idpropagation.BackgroundTaskCapability._task(src/agentpool/capabilities/background_task/capability.py) — based onAbstractCapability, supportsbackground_output,background_cancel,steer_task,NotificationBatcher,SessionTaskState,after_node_run/get_model_settingslifecycle hooks,load_skills/expected_output/titleparams.They cannot simply be merged into one because their base classes (
FunctionToolsetCapabilityvsAbstractCapability) provide different capability boundaries.Proposed Direction
The correct consolidation path is to port
SubagentToolsspecific features intoBackgroundTaskCapability, then retireSubagentTools:SubagentTools._run_sync/_resolve_node_configruntime_registryintegration for agent config discoverymodel_idpropagation from agent configlist_available_nodeswas already removed (PR feat(capabilities): add QuestionCapability and migrate BackgroundTaskCapability from xeno-agent #346) — agents list is now injected via system promptSubagentToolsetConfig.get_provider()to returnBackgroundTaskCapabilityinsteadSubagentTools/SubagentToolsetConfigtypeBackground
This was discussed in PR #345 (comment: #345 (comment)). Consensus was to keep them separate for the migration PR and address the consolidation as a follow-up (per analysis: #345 (comment)).
Out of Scope
BackgroundTaskCapabilityspecific features (background_output, cancel, steer, notification, lifecycle hooks) — these are the reason AbstractCapability is the right base.