๐๏ธ Agora
August 23, 2026 ยท View on GitHub
Where AI Agents debate, code, and ship โ under your command.
๐ฏ What is Agora?
Agora is not another "ChatGPT wrapper".
It is a multi-agent software development team that communicates through group chats, just like a real engineering squad. Youโthe humanโact as the Team Leader, while AI Agents take on specialized roles: PM, Architect, Coder, Tester, and Reviewer.
The core bet: True parallel coding + human-led arbitration + strict context engineering = an AI team you can actually trust to ship code.
โจ Design Highlights (Why this matters for your portfolio)
Agora stands on four engineering pillars that directly address the known failure modes of multi-agent systems (famously criticized in "Don't Build Multi-Agents"):
1. ๐ Context as Engineering (Not Raw Logs)
Naive multi-agent systems flood every agent with the entire chat historyโcausing token explosion and context dilution. Agora flips this.
- Implements Role Projection: Each Agent reads only a structured slice of the global state (e.g., the Coder sees the Subtask + failing tests, but not the PM's full debate).
- Uses Harness's
agent/pre-stepto overwrite the model's input queue with this projection, physically blocking raw group-chat logs from ever reaching the LLM.
2. โก True Parallelism + Cooperative Preemption
To feel like a real team, agents must work simultaneously.
- Each worker runs in an isolated Harness sub-agent with its own git worktree (file isolation).
- Cooperative Preemption: When the Leader changes their mind mid-task, workers run to a safe point (Step boundary), checkpoint their state, and resume with the new context. No hard-killing LLMs, no corrupted state.
3. ๐งโโ๏ธ Leader as the Sole Authority (No Auto-Consensus)
Automatic consensus among agents leads to endless debate and "hallucinated compromises."
- Agents can raise Objections (Blocking vs. Advisory).
- Blocking issues (e.g., Leader contradicts existing requirements) trigger a global pause and escalate to the Leader for a final, irreversible ruling via the
HumanGate.
4. ๐๏ธ Project-level Tenancy (Isolation + Knowledge Distillation)
- Default Deny: Projects are independent worlds (separate sandboxes, rosters, and state).
- Controlled Imports: Reuse goes through an audited
ImportRecord(snapshot copy, not live link). - Knowledge Base: Each project has a Refined Layer (injected into context) and an Archive Layer (RAG-accessible). The Librarian (Coordinator delegate) distills insights from finished tasks, but Write-Block is enforced until human approval (
/approve-kb).
๐ง Architecture Overview
graph TD
User[๐ค Leader] <--> UI[๐ฑ Group Chat UI / Global Inbox]
UI <--> Orchestrator[๐ง Orchestrator (Self-research)]
Orchestrator --> Coordinator[โ๏ธ Coordinator]
Coordinator -->|Routes| WorkerPool[๐ผ Worker Pool]
subgraph WorkerPool [Parallel Execution]
Worker1[Worker 1: Coder] --> Harness1[Harness Loop]
Worker2[Worker 2: Tester] --> Harness2[Harness Loop]
Worker3[Worker 3: Architect] --> Harness3[Harness Loop]
end
Harness1 --> Projection[๐ Context Projection (Overwrite)]
Harness1 --> MCP[๐ง MCP Tools]
MCP --> Sandbox[๐ฆ Sandbox Adapter]
Sandbox -->|Phase 0| Local[๐ Local Temp Dir]
Sandbox -->|Future| Docker[๐ณ Docker + Worktrees]
Orchestrator <--> State[๐พ Shared State / Reducers]
State <--> KB[๐ Knowledge Base]
Coordinator -->|Blocking| HumanGate[๐ฆ Human Gate]
HumanGate --> User
๐ ๏ธ Tech Stack
| Layer | Technology |
|---|---|
| Language | TypeScript (Node 20+) |
| Single-Agent Kernel | DeepSeek Harness (ReAct loop, event sourcing, ctx.subagents) |
| Orchestration | Self-researched lightweight runtime (4 generic nodes) |
| Communication | MCP (Model Context Protocol) SDK |
| Sandbox | Phase 0: fs.mkdtemp + child_process (Mock) Future: Docker (dockerode) + Git Worktree (simple-git) |
| Frontend | Next.js / React (SSE + HTTP POST) |
| Monorepo | pnpm workspaces |
๐ Quick Start (Phase 0 Prototype)
Note: Phase 0 is the "skeleton" phase. It runs entirely locally without Docker or Git worktrees to ensure the agent loop and state machine work flawlessly first. It uses temporary directories for sandboxing.
Prerequisites
- Node.js 20+
- pnpm (
npm install -g pnpm) - An API Key for DeepSeek/OpenAI (Harness provider)
Installation
# Clone the repository
git clone https://github.com/your-username/agora.git
cd agora
# Install dependencies
pnpm install
# Set up environment variables
cp .env.example .env
# Edit .env and add your LLM API keys
Run the Phase 0 Test (LRU Cache)
# Build the core packages
pnpm build
# Run the single-file coding task (Coder writes LRU Cache, Tester validates)
pnpm start:phase-0
What you should see:
Coordinatorcreates the task.Codergenerates the LRU Cache code in a temporary directory.Testerruns the validation tests.- If tests fail, the loop sends it back to
Coder. - On success, the system finalizes and outputs the result.
๐ Project Structure (Monorepo)
agora/
โโโ packages/
โ โโโ core/ # State, Orchestrator, Coordinator, Projection
โ โโโ executors/ # HarnessExecutor, ExternalExecutor (interface)
โ โโโ sandbox/ # SandboxManager (LocalTemp adapter + future Docker)
โ โโโ tools/ # MCP Servers (fs, git, test, lint, sandbox)
โ โโโ comm/ # Message Bus, Channels, Inbox
โ โโโ roles/ # RoleSpec definitions (PM, Coder, etc.)
โโโ apps/
โ โโโ web/ # Next.js frontend (Future phase)
โโโ docs/
โ โโโ ๅค Agent ไปฃ็ ๅไฝ็ณป็ป ยท ้กน็ฎ่ๅพ.md
โ โโโ ๅค Agent ไปฃ็ ๅไฝ็ณป็ป ยท ่ฏฆ็ป่ฎพ่ฎกๆนๆก.md
โโโ .env.example
โโโ package.json
โโโ README.md
๐บ๏ธ Roadmap
| Phase | Goal | Status |
|---|---|---|
| 0 | Skeleton: State machine + Harness single agent + Local temp sandbox. Run a single-file LRU Cache task. | ๐ง In Progress |
| 1 | Add Docker sandbox + core MCP tools (read/write/run). | ๐ Planned |
| 2 | Full team: PM, Architect, Tester, Reviewer + test/review loops. | ๐ Planned |
| 3 | Context engineering: Handoffs, decision ledger, authority levels. | ๐ Planned |
| 4 | Adaptive orchestration: Complexity-based routing (Tier 0/1/2). | ๐ Planned |
| 5 | Group Chat UI + Leader commands. | ๐ Planned |
| 6 | Multi-channel communication (Sub-groups, threads). | ๐ Planned |
| 7 | Role hot-swapping (Recruitment / Offboarding with mandatory handoffs). | ๐ Planned |
| 8 | Human Gate + Arbitration UI. | ๐ Planned |
| 9 | True Parallelism: Async workers + Cooperative Preemption. | ๐ Planned |
| 10 | "Thick" Executors (OpenHands) + Product polish. | ๐ Planned |
๐ง Key Architectural Decisions (Phase 0)
To keep the project moving fast, we made 5 crucial engineering trade-offs (2026-08-23):
- Context Overwrite: We overwrite the Harness
messagesqueue inpre-steprather than appending, ensuring raw chat logs never hit the model. - Thin-Only Executors: All agents use the Harness "thin" loop until Phase 10. The
externaltype is a reserved placeholder. - Knowledge Base Write-Block: Writing to the KB is disabled until a double-gate passes (All tests green +
/approve-kbcommand). - Terminate & Fork: When stuck in
HumanGate, the process is terminated (releasing resources) and later forked from the checkpoint, rather than being "paused." - Local Mock Sandbox: Phase 0 uses Node.js
tmpdirectories andchild_processinstead of Docker/Git to accelerate development.
These decisions are documented in docs/ with [2026-08-23 Architecture Decision] markers.
๐ค Contributing
This is a personal portfolio project for the 2026 Autumn Recruitment season. While I'm not accepting external PRs right now, feedback and star-gazing are highly appreciated!
๐ License
Distributed under the MIT License. See LICENSE for more information.
๐ If You're a Recruiter or Interviewer...
Agora was designed to demonstrate system-level thinking rather than just calling a chat API. It tackles:
- Engineering trade-offs: Why choose Harness over LangGraph? Why Self-researched orchestration?
- Concurrency: Cooperative preemption with LLMs (no hard-killing).
- Context Management: Projection views to prevent "lost-in-the-middle."
- Product Sense: A "Group Chat" interface makes AI behavior transparent and controllable.
I'd love to walk you through the code or the design decisions in an interview.
Built with โ and ๐ง for the love of building AI that actually works.