Skip to content

[Feature] Opt-in multi-agent chat with bundled human approval#1326

Merged
MODSetter merged 97 commits intoMODSetter:devfrom
CREDO23:feature/multi-agent
May 5, 2026
Merged

[Feature] Opt-in multi-agent chat with bundled human approval#1326
MODSetter merged 97 commits intoMODSetter:devfrom
CREDO23:feature/multi-agent

Conversation

@CREDO23
Copy link
Copy Markdown
Contributor

@CREDO23 CREDO23 commented Apr 30, 2026

For testing. Toggle MULTI_AGENT_CHAT_ENABLED.

High-level PR Summary

This PR introduces a multi-agent chat architecture for SurfSense, implementing a supervisor-expert pattern where a central orchestrator delegates domain-specific tasks to specialized subagents. The architecture partitions tools by capability (research, memory, deliverables) and integrations (Gmail, Calendar, Slack, Linear, etc.), with each expert agent having domain-specific prompts and structured JSON output contracts. The system includes MCP tool partitioning logic, connector availability gating, middleware stack parity with single-agent chat, and is toggled via MULTI_AGENT_CHAT_ENABLED environment variable. Additionally, it adds Linear and Slack specialist subagents to the existing single-agent stack with approval-gated mutations and read-only tool policies.

⏱️ Estimated Review Time: 1-3 hours

💡 Review Order Suggestion
Order File Path
1 surfsense_backend/.env.example
2 surfsense_backend/app/config/__init__.py
3 surfsense_backend/app/agents/multi_agent_chat/core/registry/categories.py
4 surfsense_backend/app/agents/multi_agent_chat/core/mcp_partition.py
5 surfsense_backend/app/agents/multi_agent_chat/routing/domain_routing_spec.py
6 surfsense_backend/app/agents/multi_agent_chat/core/delegation/child_task.py
7 surfsense_backend/app/agents/multi_agent_chat/core/invocation/output.py
8 surfsense_backend/app/agents/multi_agent_chat/core/prompts/load.py
9 surfsense_backend/app/agents/multi_agent_chat/core/agents/domain_graph.py
10 surfsense_backend/app/agents/multi_agent_chat/core/bindings/binding.py
11 surfsense_backend/app/agents/multi_agent_chat/core/registry/dependencies.py
12 surfsense_backend/app/agents/multi_agent_chat/core/registry/subset.py
13 surfsense_backend/app/agents/multi_agent_chat/expert_agent/builtins/research/domain_prompt.md
14 surfsense_backend/app/agents/multi_agent_chat/expert_agent/builtins/research/slice_tools.py
15 surfsense_backend/app/agents/multi_agent_chat/expert_agent/builtins/research/agent.py
16 surfsense_backend/app/agents/multi_agent_chat/expert_agent/builtins/memory/domain_prompt.md
17 surfsense_backend/app/agents/multi_agent_chat/expert_agent/builtins/memory/slice_tools.py
18 surfsense_backend/app/agents/multi_agent_chat/expert_agent/builtins/memory/agent.py
19 surfsense_backend/app/agents/multi_agent_chat/expert_agent/builtins/deliverables/domain_prompt.md
20 surfsense_backend/app/agents/multi_agent_chat/expert_agent/builtins/deliverables/slice_tools.py
21 surfsense_backend/app/agents/multi_agent_chat/expert_agent/builtins/deliverables/agent.py
22 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/gmail/domain_prompt.md
23 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/gmail/slice_tools.py
24 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/gmail/agent.py
25 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/calendar/domain_prompt.md
26 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/calendar/slice_tools.py
27 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/calendar/agent.py
28 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/discord/domain_prompt.md
29 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/discord/slice_tools.py
30 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/discord/agent.py
31 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/teams/domain_prompt.md
32 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/teams/slice_tools.py
33 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/teams/agent.py
34 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/notion/domain_prompt.md
35 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/notion/slice_tools.py
36 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/notion/agent.py
37 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/confluence/domain_prompt.md
38 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/confluence/slice_tools.py
39 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/confluence/agent.py
40 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/google_drive/domain_prompt.md
41 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/google_drive/slice_tools.py
42 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/google_drive/agent.py
43 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/dropbox/domain_prompt.md
44 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/dropbox/slice_tools.py
45 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/dropbox/agent.py
46 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/onedrive/domain_prompt.md
47 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/onedrive/slice_tools.py
48 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/onedrive/agent.py
49 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/luma/domain_prompt.md
50 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/luma/slice_tools.py
51 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/luma/agent.py
52 surfsense_backend/app/agents/multi_agent_chat/expert_agent/mcp_bridge/linear_domain.md
53 surfsense_backend/app/agents/multi_agent_chat/expert_agent/mcp_bridge/slack_domain.md
54 surfsense_backend/app/agents/multi_agent_chat/expert_agent/mcp_bridge/jira_domain.md
55 surfsense_backend/app/agents/multi_agent_chat/expert_agent/mcp_bridge/clickup_domain.md
56 surfsense_backend/app/agents/multi_agent_chat/expert_agent/mcp_bridge/airtable_domain.md
57 surfsense_backend/app/agents/multi_agent_chat/expert_agent/mcp_bridge/generic_mcp_domain.md
58 surfsense_backend/app/agents/multi_agent_chat/expert_agent/mcp_bridge/agent.py
59 surfsense_backend/app/agents/multi_agent_chat/routing/from_domain_agents.py
60 surfsense_backend/app/agents/multi_agent_chat/routing/route_connector_gate.py
61 surfsense_backend/app/agents/multi_agent_chat/routing/supervisor_routing.py
62 surfsense_backend/app/agents/multi_agent_chat/supervisor/supervisor_prompt.md
63 surfsense_backend/app/agents/multi_agent_chat/supervisor/prompt_assembly.py
64 surfsense_backend/app/agents/multi_agent_chat/supervisor/graph.py
65 surfsense_backend/app/agents/multi_agent_chat/middleware/supervisor_stack.py
66 surfsense_backend/app/agents/multi_agent_chat/integration/create_multi_agent_chat.py
67 surfsense_backend/app/agents/multi_agent_chat/core/__init__.py
68 surfsense_backend/app/agents/multi_agent_chat/core/agents/__init__.py
69 surfsense_backend/app/agents/multi_agent_chat/core/bindings/__init__.py
70 surfsense_backend/app/agents/multi_agent_chat/core/delegation/__init__.py
71 surfsense_backend/app/agents/multi_agent_chat/core/invocation/__init__.py
72 surfsense_backend/app/agents/multi_agent_chat/core/prompts/__init__.py
73 surfsense_backend/app/agents/multi_agent_chat/core/registry/__init__.py
74 surfsense_backend/app/agents/multi_agent_chat/expert_agent/__init__.py
75 surfsense_backend/app/agents/multi_agent_chat/expert_agent/builtins/__init__.py
76 surfsense_backend/app/agents/multi_agent_chat/expert_agent/builtins/deliverables/__init__.py
77 surfsense_backend/app/agents/multi_agent_chat/expert_agent/builtins/memory/__init__.py
78 surfsense_backend/app/agents/multi_agent_chat/expert_agent/builtins/research/__init__.py
79 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/__init__.py
80 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/calendar/__init__.py
81 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/confluence/__init__.py
82 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/discord/__init__.py
83 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/dropbox/__init__.py
84 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/gmail/__init__.py
85 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/google_drive/__init__.py
86 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/luma/__init__.py
87 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/notion/__init__.py
88 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/onedrive/__init__.py
89 surfsense_backend/app/agents/multi_agent_chat/expert_agent/connectors/teams/__init__.py
90 surfsense_backend/app/agents/multi_agent_chat/expert_agent/mcp_bridge/__init__.py
91 surfsense_backend/app/agents/multi_agent_chat/integration/__init__.py
92 surfsense_backend/app/agents/multi_agent_chat/middleware/__init__.py
93 surfsense_backend/app/agents/multi_agent_chat/routing/__init__.py
94 surfsense_backend/app/agents/multi_agent_chat/supervisor/__init__.py
95 surfsense_backend/app/agents/multi_agent_chat/__init__.py
96 surfsense_backend/app/tasks/chat/stream_new_chat.py
97 surfsense_backend/app/agents/new_chat/subagents/constants.py
98 surfsense_backend/app/agents/new_chat/subagents/providers/linear.py
99 surfsense_backend/app/agents/new_chat/subagents/providers/slack.py
100 surfsense_backend/app/agents/new_chat/subagents/config.py
101 surfsense_backend/app/agents/new_chat/subagents/__init__.py
102 surfsense_backend/app/services/mcp_oauth/registry.py
103 surfsense_backend/app/agents/new_chat/feature_flags.py
104 surfsense_backend/app/agents/new_chat/chat_deepagent.py
105 surfsense_backend/app/agents/new_chat/system_prompt.py
106 surfsense_backend/app/agents/new_chat/prompts/base/tool_routing_private.md
107 surfsense_backend/app/agents/new_chat/prompts/base/tool_routing_team.md
108 surfsense_backend/app/agents/new_chat/prompts/routing/linear.md
109 surfsense_backend/app/agents/new_chat/prompts/routing/slack.md
110 surfsense_backend/tests/unit/agents/new_chat/test_specialized_subagents.py

Need help? Join our Discord

CREDO23 added 30 commits April 28, 2026 15:35
CREDO23 added 25 commits May 1, 2026 20:30
… dedup, and decision-envelope normalization.
@CREDO23 CREDO23 changed the title WIP: multi-agent chat [Feature] Opt-in multi-agent chat with bundle human approval May 4, 2026
@CREDO23 CREDO23 marked this pull request as ready for review May 4, 2026 23:50
@CREDO23 CREDO23 changed the title [Feature] Opt-in multi-agent chat with bundle human approval [Feature] Opt-in multi-agent chat with bundled human approval May 4, 2026
@MODSetter MODSetter merged commit 7c00840 into MODSetter:dev May 5, 2026
10 of 18 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants