Remove the SubagentRole abstraction. After migrating roles to skills (t-313), the only subagent that provides real value is Coder (because of its programmatic harness). Everything else is just prompt customization that's now handled by skills and roles.
1. SubagentRole type - Remove WebCrawler, CodeReviewer, DataExtractor, Researcher, General, CustomRole 2. modelForRole - Remove 3. toolsForRole - Remove 4. systemPromptForRole - Remove 5. roleDescription - Remove 6. loadSystemPromptForRole - Remove
1. Move Omni/Agent/Subagent/Coder.hs → Omni/Agent/Coder.hs
2. Keep Omni/Agent/Subagent/Jobs.hs if still used by Telegram, or move appropriately
3. Keep Omni/Agent/Subagent/Worker.hs if still used, or remove
4. Delete Omni/Agent/Subagent/ directory after moving files
Keep the async spawning infrastructure if Telegram still uses it for Coder:
spawnSubagentAsyncSubagentHandleSubagentResultSubagentStatusBut simplify - it should only know about Coder, not multiple roles.
If the only subagent is Coder, maybe the spawning infrastructure should just be part of Coder.hs itself. Evaluate whether Subagent.hs adds value or just indirection.
The Telegram bot uses subagent tools. Update to:
skill tool, not subagent roles1. Move Coder.hs to Omni/Agent/Coder.hs 2. Update imports throughout codebase 3. Remove role-related code from Subagent.hs 4. Simplify or merge Subagent.hs 5. Update Telegram.hs to only use Coder 6. Remove Omni/Agent/Subagent/ directory 7. Test that Coder spawning still works