Multi-Agent Collaboration CLI with flock-based locking and event-driven workflow
Project description
Mai CLI
English | 简体中文
Multi-Agent Collaboration CLI — flock-based coordination, event-driven workflow, zero overhead.
Mai is a command-line tool that coordinates multiple AI agents working on a shared project. It provides atomic locking, queue-based issue routing, per-agent heartbeat timeouts, and an automated daily summary loop — all backed by a simple file-based store.
Features
- Atomic flock locks — race-condition-free claim/complete cycles via POSIX
fcntl - Queue-based routing — issues route to the right agent with configurable SLA per queue
- Heartbeat-aware guardian — stale locks auto-release after
heartbeat × 1.5minutes - Event-driven daily summary — concurrently write summaries with idempotent trigger/collect
- Async mirror —
.mai/internal store syncs toasync/for human visibility - Configurable via JSON — all rules externalized to
config.json; no code changes needed - Dual output format —
--format jsonfor machine consumption, text for humans - Dry-run mode —
--dry-runpreviews every mutation without side effects
Installation
pip install mai-cli
Or install from source:
git clone https://github.com/yourname/mai-cli.git
cd mai-cli
pip install -e .
Quick Start
Step 1 — Initialize a project
mai init
Step 2 — Register an agent
mai --project MyProject agent add alice --heartbeat-minutes 30
Step 3 — Create an issue
mai --project MyProject issue new questions "How should we handle input buffering?"
Step 4 — Have the assigned agent claim it
mai --project MyProject issue claim REQ-001
Step 5 — Mark it done
mai --project MyProject issue complete REQ-001 "Decision: ring buffer, 60Hz polling"
Step 6 — Inspect queues
mai --project MyProject queue check
Architecture
.mai/ async/
├── queues/<queue>/ Issue files <queue>/ Human-visible mirror
├── locks/ flock files (internal only)
├── processing/ Active issues <queue>/
├── decisions/ Conclusion logs decisions/
├── history/ Audit logs history/
├── events/ Daily-summary triggers (internal only)
└── config.json All collaboration rules
Lock protocol: When an agent claims an issue, Mai acquires an flock(2)-based file lock. The lock expires after heartbeat × 1.5 minutes if the agent fails to heartbeat. The lock guardian cron command automatically releases stale locks.
Daily summary flow: trigger → each agent write independently → collect merges all summaries into a single report.
Command Reference
Global Options
mai [-v|--version] [--project <path>] [--format json|text] [--dry-run] <subcommand>
Issue
mai issue new <queue> <title> [--ref REQ-XXX]
mai issue claim <issue-id>
mai issue block <issue-id> <reason>
mai issue unblock <issue-id>
mai issue complete <issue-id> <conclusion>
mai issue reopen <issue-id> <reason>
mai issue status <issue-id>
mai issue amend <issue-id> <remark>
mai issue list [queue]
mai issue show <issue-id>
mai issue escalate <issue-id>
Queue
mai queue check [queue] [--overdue]
mai queue blockers
mai queue create <queue> --owner <agent> [--sla <hours>]
Lock
mai lock check <issue-id>
mai lock release <issue-id> [--force] [--yes]
mai lock guardian
Log
mai log history [--date YYYY-MM-DD] [--agent NAME]
mai log undo
mai log write <agent> <type> <summary> [status]
Daily Summary
mai daily-summary trigger
mai daily-summary status
mai daily-summary reset
mai daily-summary write <agent> <content...> # Protected by flock
mai daily-summary read [<agent>|.|--all]
Escalation
mai escalation gen <issue-id>
Exec
mai exec safe-check <command>
Project / Agent
mai init # 在当前目录初始化(不接受参数)
mai project init [project-name] # 在指定路径初始化,name 可省略
mai agent list
mai agent add <name> [--heartbeat-minutes 30]
### Status
mai status [--verbose]
---
## Configuration
Edit `.mai/config.json` in your project root:
```json
{
"queues": {
"questions": {
"handler": "alice",
"sla_minutes": 120,
"id_prefix": "REQ"
}
},
"agents": {
"alice": { "heartbeat_minutes": 30 }
},
"daily_summary_order": ["alice", "bob"]
}
Legacy field compatibility
owner → handler, sla_hours → sla_minutes are automatically converted.
Supported Platforms
- OS: Linux / macOS (POSIX required for
flock) - Python: 3.8, 3.9, 3.10, 3.11, 3.12
License
MIT License — see LICENSE for the full text.
Mai CLI v1.6.4
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mai_cli-1.6.4.tar.gz.
File metadata
- Download URL: mai_cli-1.6.4.tar.gz
- Upload date:
- Size: 31.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23e81ea96d03c8139bd9b17cef22ac01b023a6c23df0e39103832acc29bc6f43
|
|
| MD5 |
dd4e759a604dba928aa7d72351f07625
|
|
| BLAKE2b-256 |
c4f76810a7f80057f4a27b4c76f51a44f29ea612956250c661569136282dfa2d
|
File details
Details for the file mai_cli-1.6.4-py3-none-any.whl.
File metadata
- Download URL: mai_cli-1.6.4-py3-none-any.whl
- Upload date:
- Size: 31.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ce1bb6d5d6a9d83e016ec6f50336e604127525a28fc3e0851abf59dab950264
|
|
| MD5 |
b04d28fd7f337f079ef6d6490f6fe96e
|
|
| BLAKE2b-256 |
0d413bec80949e75a4d1a6f7efc8e6c9a22692d59a91521387234a1cffa3c840
|