| name | team-discuss |
| description | team-discuss |
Team-Discuss Skill
Multi-agent collaborative discussion tool for efficient collaboration and alignment.
Features
- Multi-round discussions: Automatic progression until consensus or round limit
- Dialectical logic: Automatic citation detection, fallacy identification, argument quality assessment
- Random speaking order: Eliminates first-mover advantage
- Shared state: File-based persistence with concurrent access support
- Real agent integration: Call real sub-agents via sessions_spawn
Use Cases
- Technology selection discussions - SQLite vs PostgreSQL, React vs Vue, etc.
- Architecture design reviews - Multi-role collaboration (architect, frontend, backend, tester)
- Product decision making - Feature prioritization, UX trade-offs
- Philosophical debates - Free will vs determinism, ethics in AI, consciousness theories
- Scientific controversies - Interpretations of quantum mechanics, origins of life
- Policy analysis - Economic strategies, environmental policies, social reforms
- Creative collaborations - Story plot decisions, character development, artistic direction
- Any topic requiring multi-perspective analysis
Quick Start
1. Create Discussion
from core import SharedStore, DiscussionOrchestrator
from models import Discussion, DiscussionConfig, Participant, AgentRole
store = SharedStore(base_dir="./discussions")
orchestrator = DiscussionOrchestrator(store)
discussion = Discussion(
id="my-discussion-001",
topic="Which storage layer should we use?",
description="SQLite vs PostgreSQL technology selection",
max_rounds=3,
config=DiscussionConfig(consensus_threshold=0.75),
participants=[
Participant(agent_id="architect", role_id=AgentRole.ARCHITECT),
Participant(agent_id="backend", role_id=AgentRole.DEVOPS),
]
)
store.create_discussion(discussion)
2. Define Agent Callbacks
async def agent_callback(discussion_id, round_num, previous_messages):
prompt = build_prompt(round_num, previous_messages)
response = await sessions_spawn(
runtime="subagent",
agentId="architect",
mode="run",
task=prompt
)
return response, MessageType.PROPOSAL
callbacks = {
"architect": agent_callback,
"backend": agent_callback,
}
3. Run Discussion
result = await orchestrator.run_discussion(discussion.id, callbacks)
print(f"Status: {result.status}")
print(f"Rounds: {result.current_round}")
print(f"Consensus: {result.consensus_level}")
Dialectical Logic
Automatic Detection
from core import DialecticEngine
dialectic = DialecticEngine()
analysis = dialectic.analyze_message(message, previous_messages)
print(f"Quality: {analysis.quality}")
print(f"Score: {analysis.score}")
print(f"Citation: {analysis.has_citation}")
print(f"Fallacies: {analysis.fallacies}")
Detected Fallacy Types
ad_hominem - Personal attack
straw_man - Straw man fallacy
false_dichotomy - False dilemma
hasty_generalization - Hasty generalization
appeal_to_authority - Appeal to authority
slippery_slope - Slippery slope
Bias Prevention Mechanisms
1. Random Speaking Order
order = coordinator.determine_speaking_order(
participants,
SpeakingOrder.ROUND_ROBIN
)
2. Mandatory Citation
From round 2, agents must cite opponent's original words:
I disagree with @architect's view:
> "Choosing PostgreSQL is not premature optimization"
This statement is misleading...
3. Devil's Advocate
Assign an agent to play devil's advocate:
Project Structure
team-discuss/
โโโ src/
โ โโโ core/
โ โ โโโ shared_store.py # Shared state storage
โ โ โโโ orchestrator.py # Multi-round orchestrator
โ โ โโโ dialectic.py # Dialectical logic engine
โ โ โโโ coordinator.py # Coordinator logic
โ โโโ agents/
โ โ โโโ bridge.py # Agent bridge
โ โโโ models.py # Data models
โโโ examples/
โ โโโ run_real_discussion.py # Real discussion example
โโโ tests/
โโโ test_integration.py # Integration tests
Configuration Options
DiscussionConfig
DiscussionConfig(
max_rounds=5,
min_rounds_before_consensus=2,
consensus_threshold=0.75,
token_budget=50000,
)
Speaking Order
SpeakingOrder.FREE
SpeakingOrder.ROUND_ROBIN
SpeakingOrder.ROLE_BASED
Examples
Technology Selection Discussion
cd /root/.openclaw/workspace/data/projects/team-discuss
python3 examples/run_real_discussion.py
Philosophical Debate Example
discussion = Discussion(
id="philosophy-debate-001",
topic="Does free will exist, or is everything determined?",
description="Philosophical debate on free will vs determinism",
max_rounds=3,
participants=[
Participant(agent_id="philosopher1", role_id=AgentRole.REVIEWER),
Participant(agent_id="scientist", role_id=AgentRole.ARCHITECT),
Participant(agent_id="skeptic", role_id=AgentRole.TESTER),
]
)
Philosophical debates benefit from:
- Dialectical logic - Detects logical fallacies common in abstract reasoning
- Mandatory citation - Ensures philosophers engage with specific arguments
- Multi-round structure - Allows deep exploration of complex concepts
Sample output:
๐ Round 1 started
๐ฌ @architect (Architect):
I support using PostgreSQL...
๐ Quality: moderate (70.0 points)
๐ฌ @backend (Backend Dev):
I support using SQLite...
๐ Quality: moderate (60.0 points)
โ
Round 1 ended
๐ Round 2 started
๐ฌ @architect:
Responding to @backend:
> "Premature optimization is the root of all evil"
This statement confuses...
๐ Quality: strong (85.0 points)
๐ Citation: โ
โ
Round 2 ended
โ Discussion completed!
Final status: max_rounds_reached
Consensus level: partial
Best Practices
1. Topic Design
- Clear, specific, debatable
- Avoid overly broad topics (e.g., "what's the best technology")
- Provide necessary context
2. Agent Selection
- Cover different perspectives (architecture, dev, test, product)
- Avoid homogeneity (don't use all backend devs)
- Consider adding Devil's Advocate
3. Round Settings
- Simple topics: 2-3 rounds
- Complex topics: 5 rounds
- Set
min_rounds_before_consensus to prevent premature convergence
4. Result Interpretation
CONSENSUS_REACHED - Consensus reached, can execute directly
MAX_ROUNDS_REACHED - Requires human judgment
COMPLETED - Discussion ended naturally
Troubleshooting
Agent Not Responding
orchestrator = DiscussionOrchestrator(
store=store,
response_timeout=180
)
Version Conflicts
Shared storage uses optimistic locking, automatically retries on conflict.
Storage Location
store = SharedStore(base_dir="/path/to/discussions")
Extension Development
Custom Agent Bridge
class MyAgentBridge:
async def generate_response(self, ...):
pass
Custom Dialectic Rules
class MyDialecticEngine(DialecticEngine):
def _detect_fallacies(self, content):
pass
Related Links
- Project path:
/root/.openclaw/workspace/data/projects/team-discuss
- Example code:
examples/run_real_discussion.py
- Integration tests:
tests/test_integration.py
Version History
- v0.1.0 - Basic features: shared storage, multi-round orchestration, dialectical logic
- v0.2.0 - Real agent integration (sessions_spawn)
- v0.3.0 - CLI interface, Web UI (planned)
Roadmap
Coming Soon
| Feature | Status | Description |
|---|
| Devil's Advocate | ๐ง In Development | Auto-assign minority role, ensure opposition voices heard |
| Stance Change Rewards | ๐ง In Development | Reward agents for rationally changing position |
| CLI Interface | ๐ Planned | Command-line tool for creating/viewing/managing discussions |
| REST API | ๐ Planned | HTTP API for remote calls |
| Web UI | ๐ Planned | Visual discussion dashboard |
Release Plan
- v0.2.1 - Devil's Advocate + Stance Change Rewards
- v0.3.0 - CLI Interface + REST API
- v0.4.0 - Web UI Dashboard
๐ฆ Published to clawhub.com
ไธญๆ็ฎไป
Team-Discuss ๆฏไธไธชๅค Agent ๅไฝ่ฎจ่ฎบๅทฅๅ
ท๏ผๆฏๆๅค่ฝฎ่ฟญไปฃใ่พฉ่ฏ้ป่พๅๆใ้ๆบๅ่จ้กบๅบ็ญ็นๆง๏ผๅธฎๅฉๅข้้ซๆๅฏน้ฝๆนๆกใ
ๆ ธๅฟๅ่ฝ
- โ
ๅค่ฝฎ่ฎจ่ฎบ๏ผ่ชๅจๆจ่ฟ
- โ
่พฉ่ฏ้ป่พ๏ผๆฃๆต่ฎบ่ฏ่ดจ้
- โ
้ๆบๅ่จ้กบๅบ๏ผๆถ้คๅๅๆง
- โ
ๅ
ฑไบซ็ถๆ๏ผๆไน
ๅๅญๅจ
- โ
็ๅฎ Agent ้ๆ
ๅฟซ้ๅผๅง
cd /root/.openclaw/workspace/data/skills/team-discuss
python3 example.py
้กน็ฎ่ทฏๅพ
/root/.openclaw/workspace/data/projects/team-discuss/
ๅณๅฐๅๅธ
- ๐ง Devil's Advocate ๆบๅถ
- ๐ง ็ซๅบๅๆดๅฅๅฑ
- ๐ CLI ๆฅๅฃ
- ๐ REST API
- ๐ Web UI ไปช่กจ็
๐ฆ ๅทฒๅๅธๅฐ clawhub.com