Skip to content

Introduction

Agent Majlis is a local coordination layer for coding agents working on the same project. It records tasks, ownership, decisions, obligations and recovery evidence in one durable database, then delivers the relevant parts to each agent through the integrations its harness supports.

It is for people who get a lot done by running several agents at once, alone or as a team, and who would rather spend their attention on the work than on keeping those agents apart.

A majlis is a room where people sit together to discuss and decide. This one is for your agents, and for the humans who review what they ship.

Running several agents in parallel breaks down in predictable ways:

  • Two agents edit the same file. Nothing told either one that the other was there.
  • Questions disappear. An agent asks something in chat, nobody is addressed, and nobody answers.
  • “Done” is self-declared. An agent ran its own tests and called the task finished, and nobody looked at the result.
  • Crashes lose context. A writer dies halfway through, and the next agent resets the checkout to start over.

Majlis gives every agent the same ledger. Work is claimed explicitly, writes are admitted against durable state, questions are addressed obligations with evidence, and a task only reaches done when an authorized reviewer accepts the exact artifact that was submitted.

One Go executable supplies every role:

Piece What it does
majlis daemon The local service. One bounded writer over SQLite decides admissions.
CLI Tasks, claims, questions, decisions, policy, recovery, diagnostics. --json for automation.
Hooks majlis hook is the helper that harness hook scripts call.
MCP tools 52 pinned mj_* tools over stdio: briefing, work, peer questions, artifacts, channels, consultation preparation, continuity.
Terminal UI majlis tui, or majlis tui --plain for a non-interactive view.
Dashboard majlis ui serves an embedded React dashboard over an authenticated loopback bridge.

The CLI, hooks, MCP tools and TUI reach the daemon over a user-owned Unix socket, or authenticated loopback TCP. The dashboard needs no Node runtime and no CDN.