{"id":"d9c99daa-6e0b-4f94-9fe5-bc369e5dcc5e","entityType":"agent","slug":"crewai-kksen18-collab-debate","name":"debate","canonicalUrl":"https://www.xpersona.co/agent/crewai-kksen18-collab-debate","canonicalPath":"/agent/crewai-kksen18-collab-debate","generatedAt":"2026-10-09T01:55:32.638Z","source":"GITHUB_OPENCLEW","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-05-18T06:45:32.399Z","emptyReason":null},"description":"Multi-agent debate engine powered by CrewAI — two LLM debaters argue any motion, a judge agent decides the winner. Fully autonomous. Zero human moderation. Debate — AI-Powered Debate Engine $1 An autonomous debate system built with $1 that takes any debate motion as input, generates arguments **for** and **against** it, and renders a judge's verdict — all driven by large language models with no human intervention after the motion is entered. --- Table of Contents 1. $1 2. $1 3. $1 4. $1 5. $1 6. $1 7. $1 8. $1 9. $1 10. $1 11. $1 12. $1 13. $1 --- Overview The **Debate*","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. Last updated 5/18/2026.","installCommand":"git clone https://github.com/kksen18-collab/debate.git","sourceUrl":"https://github.com/kksen18-collab/debate","homepage":null,"primaryLinks":[{"label":"View Source","url":"https://github.com/kksen18-collab/debate","kind":"source"}],"safetyScore":66,"overallRank":21.2,"popularityScore":0,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Multi-agent debate engine powered by CrewAI — two LLM debaters argue any motion, a judge agent decides the winner. Fully autonomous. Zero human moderation. Deba"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-05-18T06:45:32.399Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[{"label":"crewai","status":"self-declared"},{"label":"multi-agent","status":"self-declared"}],"verifiedCount":0,"selfDeclaredCount":3,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"},{"key":"crewai","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"},{"key":"multi-agent","type":"capability","support":"supported","confidenceSource":"profile","notes":"Declared in agent profile metadata"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile capability:crewai|supported|profile capability:multi-agent|supported|profile"}},"adoption":{"evidence":{"source":"no-adoption-signals","verified":false,"confidence":"low","updatedAt":"2026-05-18T06:45:32.399Z","emptyReason":"No source adoption metrics were available."},"stars":0,"forks":0,"downloads":null,"packageName":null,"latestVersion":null,"tractionLabel":null},"release":{"evidence":{"source":"agent-index","verified":false,"confidence":"medium","updatedAt":"2026-05-18T06:45:32.398Z","emptyReason":null},"lastUpdatedAt":"2026-05-18T06:45:32.399Z","lastCrawledAt":"2026-05-18T06:45:32.398Z","lastIndexedAt":null,"nextCrawlAt":"2026-05-25T06:45:32.398Z","lastVerifiedAt":null,"highlights":[]},"execution":{"evidence":{"source":"GITHUB OPENCLEW","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"git clone https://github.com/kksen18-collab/debate.git","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/crewai-kksen18-collab-debate/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/crewai-kksen18-collab-debate/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/crewai-kksen18-collab-debate/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/crewai-kksen18-collab-debate/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/crewai-kksen18-collab-debate/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/crewai-kksen18-collab-debate/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"GITHUB_OPENCLEW","generatedAt":"2026-10-09T01:55:32.638Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/crewai-kksen18-collab-debate/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/crewai-kksen18-collab-debate/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/crewai-kksen18-collab-debate/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/crewai-kksen18-collab-debate/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"GITHUB OPENCLEW","verified":false,"confidence":"high","updatedAt":"2026-05-18T06:45:32.399Z","emptyReason":null},"readme":"# Debate — AI-Powered Debate Engine\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\nAn autonomous debate system built with [CrewAI](https://docs.crewai.com/) that takes any debate motion as input, generates arguments **for** and **against** it, and renders a judge's verdict — all driven by large language models with no human intervention after the motion is entered.\n\n---\n\n## Table of Contents\n\n1. [Overview](#overview)\n2. [CrewAI Concepts](#crewai-concepts)\n3. [Project Architecture](#project-architecture)\n4. [Project Structure](#project-structure)\n5. [Agents](#agents)\n6. [Tasks](#tasks)\n7. [Execution Flow](#execution-flow)\n8. [Prerequisites](#prerequisites)\n9. [Installation](#installation)\n10. [Configuration](#configuration)\n11. [Running the Project](#running-the-project)\n12. [Outputs](#outputs)\n13. [Customisation](#customisation)\n\n---\n\n## Overview\n\nThe **Debate** project orchestrates a three-stage autonomous debate:\n\n| Stage | Actor | Result |\n|-------|-------|--------|\n| 1. Proposition | Debater Agent | A compelling argument **in favour** of the motion |\n| 2. Opposition | Debater Agent | A compelling argument **against** the motion |\n| 3. Judgement | Judge Agent | A verdict declaring the winning side with reasoning |\n\nEach stage is a discrete CrewAI **Task**; two specialised agents collaborate inside a single **Crew** that runs in **sequential** order — ensuring the judge always has both arguments in full before delivering a verdict.\n\n---\n\n## CrewAI Concepts\n\nUnderstanding these building blocks is essential to reading the code.\n\n### Crew\n\nA **Crew** is the top-level orchestrator. It holds references to every agent and task that belong to a run, defines the execution strategy (`sequential` or `hierarchical`), and exposes the `kickoff(inputs)` method that launches the entire pipeline. Think of it as the *director* who sits above the actors and ensures every scene is performed in order with the right context.\n\nIn code, a class decorated with `@CrewBase` and returning a `Crew` instance from a `@crew`-decorated method is a Crew.\n\n### Agent\n\nAn **Agent** is an autonomous LLM-powered worker with a defined `role`, a `goal`, and a `backstory`. These three fields are injected into the system prompt that shapes the model's persona and behaviour for the entire run. An agent can be extended with tools (web search, code execution, etc.) but the persona itself is sufficient for pure reasoning tasks like debating.\n\n| Field | Purpose |\n|-------|---------|\n| `role` | One-liner job title; anchors the persona |\n| `goal` | What the agent is ultimately trying to achieve |\n| `backstory` | Rich context that steers tone and decision-making style |\n| `llm` | The model backend in `provider/model` format (e.g. `openai/gpt-4o-mini`) |\n\nAgent definitions live in `config/agents.yaml` and are registered via the `@agent` decorator in `crew.py`.\n\n### Task\n\nA **Task** is a discrete unit of work assigned to a specific agent. It carries a `description` (the detailed prompt for this step), an `expected_output` (the acceptance criteria the model should satisfy), and an optional `output_file` path where the raw response is persisted to disk.\n\n| Field | Purpose |\n|-------|---------|\n| `description` | Full instructions for this step, interpolated with runtime inputs |\n| `expected_output` | Shape / content the agent should produce |\n| `agent` | Which agent executes this task |\n| `output_file` | Where to save the generated Markdown output |\n\nTask definitions live in `config/tasks.yaml` and are registered via the `@task` decorator in `crew.py`.\n\n### Process\n\nA **Process** defines the order in which tasks are executed:\n\n- **`Process.sequential`** *(used here)* — Tasks run one after another in declaration order. The output of every completed task is automatically passed as context to all subsequent tasks.\n- **`Process.hierarchical`** — A manager agent dynamically orchestrates sub-agents (not used in this project).\n\n### `@CrewBase` Decorator\n\nThe `@CrewBase` class decorator performs automatic wiring: it reads the YAML configuration files, discovers all methods annotated with `@agent`, `@task`, and `@crew`, and populates `self.agents` / `self.tasks` lists automatically — eliminating all manual list-management boilerplate.\n\n### Input Interpolation\n\nString placeholders in the format `{variable}` inside any YAML value are replaced at runtime by the `inputs` dictionary passed to `crew.kickoff(inputs=...)`. In this project, `{motion}` is the only input and it is wired into agent goals, backstories, and task descriptions alike.\n\n---\n\n## Project Architecture\n\n```\nUser Input (motion)\n        │\n        ▼\n┌───────────────────────────────────────────────────┐\n│                    Debate Crew                    │\n│                (Process.sequential)               │\n│                                                   │\n│  ┌─────────────────────────────────────────────┐  │\n│  │  Task 1 — propose                           │  │\n│  │  Agent  : Debater                           │  │\n│  │  Goal   : Argue FOR the motion              │  │\n│  │  Output : output/propose.md                 │  │\n│  └──────────────────┬──────────────────────────┘  │\n│                     │  output passed as context    │\n│  ┌──────────────────▼──────────────────────────┐  │\n│  │  Task 2 — oppose                            │  │\n│  │  Agent  : Debater                           │  │\n│  │  Goal   : Argue AGAINST the motion          │  │\n│  │  Output : output/oppose.md                  │  │\n│  └──────────────────┬──────────────────────────┘  │\n│                     │  both outputs passed         │\n│  ┌──────────────────▼──────────────────────────┐  │\n│  │  Task 3 — decide                            │  │\n│  │  Agent  : Judge                             │  │\n│  │  Goal   : Pick the more convincing side     │  │\n│  │  Output : output/decide.md                  │  │\n│  └─────────────────────────────────────────────┘  │\n└───────────────────────────────────────────────────┘\n        │\n        ▼\n   Final verdict printed to stdout\n```\n\nKey design decisions:\n- The **same `debater` agent** is reused for both proposition and opposition — the task description alone redirects its stance, keeping the agent pool minimal.\n- **Sequential context chaining** means the judge never operates blind; it always reads complete, model-generated arguments before ruling.\n- Each task writes its own **Markdown output file**, giving a clean, human-readable audit trail of the full debate.\n\n---\n\n## Project Structure\n\n```\ndebate/\n├── pyproject.toml              # Project metadata, dependencies, entry-point scripts\n├── README.md                   # This file\n│\n├── output/                     # Auto-generated at runtime — one file per task\n│   ├── propose.md              # Proposition argument (Task 1 output)\n│   ├── oppose.md               # Opposition argument (Task 2 output)\n│   └── decide.md               # Judge's verdict     (Task 3 output)\n│\n└── src/\n    └── debate/\n        ├── __init__.py\n        ├── crew.py             # @CrewBase class — agents, tasks, and crew assembly\n        ├── main.py             # CLI entry point — reads motion, calls crew.kickoff()\n        └── config/\n            ├── agents.yaml     # Agent personas, goals, backstories, and LLM config\n            └── tasks.yaml      # Task descriptions, expected outputs, and file mappings\n```\n\n---\n\n## Agents\n\nDefined in [src/debate/config/agents.yaml](src/debate/config/agents.yaml).\n\n### `debater`\n\n| Field | Value |\n|-------|-------|\n| Role | A compelling debater |\n| Goal | Present a clear argument either in favour of or against the motion |\n| Backstory | Experienced debater with a knack for concise but convincing arguments |\n| LLM | `openai/gpt-4o-mini` |\n\nThe `debater` is reused for **both** the proposition and opposition tasks. The task `description` is what steers it towards the correct side each time — demonstrating how a single, well-crafted agent persona can serve multiple opposing roles.\n\n### `judge`\n\n| Field | Value |\n|-------|-------|\n| Role | Decide the winner of the debate |\n| Goal | Determine which side is more convincing based purely on argument merit |\n| Backstory | Fair judge known for weighing arguments without personal bias |\n| LLM | `openai/gpt-4o-mini` |\n\nThe `judge` only acts in the final task and deliberately has no stake in either side, relying on the prior tasks' outputs that are automatically injected as context by the sequential process.\n\n---\n\n## Tasks\n\nDefined in [src/debate/config/tasks.yaml](src/debate/config/tasks.yaml).\n\n### `propose`\n- **Agent**: `debater`\n- **Description**: Argue *in favour* of the motion — make the case convincingly.\n- **Expected output**: A concise, well-structured argument supporting the motion.\n- **Output file**: `output/propose.md`\n\n### `oppose`\n- **Agent**: `debater`\n- **Description**: Argue *against* the motion — make the counter-case convincingly.\n- **Expected output**: A concise, well-structured argument opposing the motion.\n- **Output file**: `output/oppose.md`\n\n### `decide`\n- **Agent**: `judge`\n- **Description**: Review both the proposition and opposition arguments; decide which side is more convincing.\n- **Expected output**: A verdict with clear, reasoned justification for the winning side.\n- **Output file**: `output/decide.md`\n\n> Because the Crew uses `Process.sequential`, the `judge` task automatically receives the full text of both prior task outputs as conversation context before it begins reasoning.\n\n---\n\n## Execution Flow\n\n```\ncrewai run\n    │\n    ├── Prompts user: \"Enter the debate motion:\"\n    │\n    ├── Instantiates Debate() — YAML configs loaded, {motion} staged for interpolation\n    │\n    ├── crew.kickoff(inputs={\"motion\": <user input>})\n    │   │\n    │   ├── Task 1 — propose\n    │   │   ├── {motion} interpolated into agent goal, backstory, and task description\n    │   │   ├── debater LLM call: \"You are proposing the motion: <motion>…\"\n    │   │   └── Response written to output/propose.md  ✓\n    │   │\n    │   ├── Task 2 — oppose   (Task 1 output appended to context)\n    │   │   ├── debater LLM call: \"You are in opposition to the motion: <motion>…\"\n    │   │   └── Response written to output/oppose.md  ✓\n    │   │\n    │   └── Task 3 — decide   (Task 1 + Task 2 outputs appended to context)\n    │       ├── judge LLM call: \"Review the arguments presented and decide…\"\n    │       └── Response written to output/decide.md  ✓\n    │\n    └── result.raw printed to stdout\n```\n\n---\n\n## Prerequisites\n\n| Requirement | Version |\n|-------------|---------|\n| Python | `>=3.13, <3.14` |\n| [UV](https://docs.astral.sh/uv/) | latest |\n| OpenAI API key | — |\n\n---\n\n## Installation\n\n```bash\n# 1. Clone the repository\ngit clone <repo-url>\ncd debate\n\n# 2. Install UV if not already present\npip install uv\n\n# 3. Install project dependencies\ncrewai install\n# or equivalently:\nuv sync\n```\n\n---\n\n## Configuration\n\nSet your OpenAI API key as an environment variable before running:\n\n```bash\n# Windows PowerShell\n$env:OPENAI_API_KEY = \"sk-...\"\n\n# macOS / Linux\nexport OPENAI_API_KEY=\"sk-...\"\n```\n\nAlternatively, create a `.env` file in the project root:\n\n```\nOPENAI_API_KEY=sk-...\n```\n\nThe LLM used by both agents is `openai/gpt-4o-mini`. To switch models, edit the `llm` field in [src/debate/config/agents.yaml](src/debate/config/agents.yaml) — any model supported by LiteLLM (the underlying provider) can be used.\n\n---\n\n## Running the Project\n\n```bash\ncrewai run\n```\n\nYou will be prompted to enter a debate motion, for example:\n\n```\nEnter the debate motion: A country should aim to be a nuclear weapon state\n```\n\nThe crew will run all three tasks sequentially, saving each to `output/`, and print the judge's full verdict to the terminal when complete.\n\n---\n\n## Outputs\n\nAfter a successful run, three Markdown files are written (or overwritten) under `output/`:\n\n| File | Contents |\n|------|----------|\n| `output/propose.md` | The debater's argument **for** the motion |\n| `output/oppose.md` | The debater's argument **against** the motion |\n| `output/decide.md` | The judge's verdict and full reasoning |\n\nThese files serve as a permanent, human-readable record of the full debate and can be committed to version control to compare runs across different motions or model configurations.\n\n---\n\n## Customisation\n\n| What to change | Where |\n|----------------|-------|\n| Agent persona, tone, or model | [src/debate/config/agents.yaml](src/debate/config/agents.yaml) |\n| Task instructions or expected output format | [src/debate/config/tasks.yaml](src/debate/config/tasks.yaml) |\n| Add a new agent (e.g. a fact-checker) | [src/debate/crew.py](src/debate/crew.py) — add `@agent` method + new entry in `agents.yaml` |\n| Add a new task (e.g. a rebuttal round) | [src/debate/crew.py](src/debate/crew.py) — add `@task` method + new entry in `tasks.yaml` |\n| Switch to hierarchical orchestration | [src/debate/crew.py](src/debate/crew.py) — change `Process.sequential` → `Process.hierarchical` |\n| Change output file locations | `output_file` values in [src/debate/config/tasks.yaml](src/debate/config/tasks.yaml) |\n| Add multiple runtime inputs | Extend the `inputs` dict in [src/debate/main.py](src/debate/main.py) and reference new `{variables}` in YAML |\n\n---\n\n## License\n\nThis project is licensed under the [MIT License](LICENSE).\n\n","readmeExcerpt":"Debate — AI-Powered Debate Engine $1 An autonomous debate system built with $1 that takes any debate motion as input, generates arguments **for** and **against** it, and renders a judge's verdict — all driven by large language models with no human intervention after the motion is entered. --- Table of Contents 1. $1 2. $1 3. $1 4. $1 5. $1 6. $1 7. $1 8. $1 9. $1 10. $1 11. $1 12. $1 13. $1 --- Overview The **Debate*","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"User Input (motion)\n        │\n        ▼\n┌───────────────────────────────────────────────────┐\n│                    Debate Crew                    │\n│                (Process.sequential)               │\n│                                                   │\n│  ┌─────────────────────────────────────────────┐  │\n│  │  Task 1 — propose                           │  │\n│  │  Agent  : Debater                           │  │\n│  │  Goal   : Argue FOR the motion              │  │\n│  │  Output : output/propose.md                 │  │\n│  └──────────────────┬──────────────────────────┘  │\n│                     │  output passed as context    │\n│  ┌──────────────────▼──────────────────────────┐  │\n│  │  Task 2 — oppose                            │  │\n│  │  Agent  : Debater                           │  │\n│  │  Goal   : Argue AGAINST the motion          │  │\n│  │  Output : output/oppose.md                  │  │\n│  └──────────────────┬──────────────────────────┘  │\n│                     │  both outputs passed         │\n│  ┌──────────────────▼──────────────────────────┐  │\n│  │  Task 3 — decide                            │  │\n│  │  Agent  : Judge                             │  │\n│  │  Goal   : Pick the more convincing side     │  │\n│  │  Output : output/decide.md                  │  │\n│  └─────────────────────────────────────────────┘  │\n└───────────────────────────────────────────────────┘\n        │\n        ▼\n   Final verdict printed to stdout"},{"language":"text","snippet":"debate/\n├── pyproject.toml              # Project metadata, dependencies, entry-point scripts\n├── README.md                   # This file\n│\n├── output/                     # Auto-generated at runtime — one file per task\n│   ├── propose.md              # Proposition argument (Task 1 output)\n│   ├── oppose.md               # Opposition argument (Task 2 output)\n│   └── decide.md               # Judge's verdict     (Task 3 output)\n│\n└── src/\n    └── debate/\n        ├── __init__.py\n        ├── crew.py             # @CrewBase class — agents, tasks, and crew assembly\n        ├── main.py             # CLI entry point — reads motion, calls crew.kickoff()\n        └── config/\n            ├── agents.yaml     # Agent personas, goals, backstories, and LLM config\n            └── tasks.yaml      # Task descriptions, expected outputs, and file mappings"},{"language":"text","snippet":"crewai run\n    │\n    ├── Prompts user: \"Enter the debate motion:\"\n    │\n    ├── Instantiates Debate() — YAML configs loaded, {motion} staged for interpolation\n    │\n    ├── crew.kickoff(inputs={\"motion\": <user input>})\n    │   │\n    │   ├── Task 1 — propose\n    │   │   ├── {motion} interpolated into agent goal, backstory, and task description\n    │   │   ├── debater LLM call: \"You are proposing the motion: <motion>…\"\n    │   │   └── Response written to output/propose.md  ✓\n    │   │\n    │   ├── Task 2 — oppose   (Task 1 output appended to context)\n    │   │   ├── debater LLM call: \"You are in opposition to the motion: <motion>…\"\n    │   │   └── Response written to output/oppose.md  ✓\n    │   │\n    │   └── Task 3 — decide   (Task 1 + Task 2 outputs appended to context)\n    │       ├── judge LLM call: \"Review the arguments presented and decide…\"\n    │       └── Response written to output/decide.md  ✓\n    │\n    └── result.raw printed to stdout"},{"language":"bash","snippet":"# 1. Clone the repository\ngit clone <repo-url>\ncd debate\n\n# 2. Install UV if not already present\npip install uv\n\n# 3. Install project dependencies\ncrewai install\n# or equivalently:\nuv sync"},{"language":"bash","snippet":"# Windows PowerShell\n$env:OPENAI_API_KEY = \"sk-...\"\n\n# macOS / Linux\nexport OPENAI_API_KEY=\"sk-...\""},{"language":"text","snippet":"OPENAI_API_KEY=sk-..."}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[],"languages":["python"],"docsSourceLabel":"GITHUB OPENCLEW","editorialOverview":"Multi-agent debate engine powered by CrewAI — two LLM debaters argue any motion, a judge agent decides the winner. Fully autonomous. Zero human moderation. Debate — AI-Powered Debate Engine $1 An autonomous debate system built with $1 that takes any debate motion as input, generates arguments **for** and **against** it, and renders a judge's verdict — all driven by large language models with no human intervention after the motion is entered. --- Table of Contents 1. $1 2. $1 3. $1 4. $1 5. $1 6. $1 7. $1 8. $1 9. $1 10. $1 11. $1 12. $1 13. $1 --- Overview The **Debate*","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":368,"uniquenessScore":70,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-05-18T06:45:32.399Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-05-18T06:45:32.399Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-09T01:55:32.638Z","emptyReason":null},"items":[{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-10T18:48:31.762Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/github_openclew","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}