Skip to content
Conduit

skill

m-AI-l

Asynchronous messaging between Claude threads — built entirely in Markdown.

playtosor/m_AI_lcommunitylistedunreviewed

Set up

Skills are installed by placing their folder where your agent loads skills.

The download comes from github.com/playtosor/m_AI_l itself, not from our server, so what you get is exactly what its author published.

Install instructions come from the README

Skills do not use an MCP config. Follow the steps in the README below.

README

synced Oct 27, 2026

m_AI_l

Asynchronous inter-agent messaging for AI coding agents. A pnpm monorepo with a TypeScript core (@m_ai_l/core) and an MCP server (@m_ai_l/mcp) that lets any MCP-capable harness read, send, cancel, and edit project mailbox messages.

Why

Agents working in parallel need a durable, conflict-safe channel to exchange briefs, decisions, and handover notes. m_AI_l stores messages as plain Markdown mailboxes — inspectable with any editor — and exposes the operations through MCP tools so agents never parse files manually.

Key properties:

  • File-based mailboxes (mailbox_HANDLE.md) with atomic writes and light locking
  • Roster-driven routing: a project's roster.md is the authority for messaging paths
  • Canonical project registry: [COMMON_PATH]/projects_config.md
  • Read archives by default; no_archive or limit to opt out / read less
  • read_recent_archive recovers messages when a client crashed after server-side archiving

Installation

Requirements: Node.js >= 18, pnpm >= 9.

pnpm install
pnpm -r build     # compiles packages/core and packages/mcp
pnpm -r test      # 361 tests / 46 suites

Consumers:

  • As an npm package: @m_ai_l/core (library) and @m_ai_l/mcp (server with bundled dist/server.bundle.js and a m-ai-l-mcp bin).
  • As an OpenCode plugin: tools/mailbox.ts loads @m_ai_l/core via MAILBOX_LIBRARY_PATH (defaults to packages/core/dist/index.js).

Quickstart

Configure the project registry path, then point an MCP client at the server:

# Defaults: C:\dev\common (COMMON_PATH), C:\dev\m_AI_l_EXPORT (PROJECT_ROOT)
set COMMON_PATH=C:\dev\common
node packages/mcp/dist/server.js

Client configuration (local MCP server, stdio):

{
  "mcp": {
    "m_AI_l_MCP": {
      "type": "local",
      "command": ["node", "<repo>/Vibe/mcp_server/packages/mcp/dist/server.js"],
      "environment": { "COMMON_PATH": "C:/dev/common" }
    }
  }
}

Read the inbox of a handle in a project:

mailbox({ action: "mail", project_handle: "MAILEXPORT", handle: "AGENT1" })

Concepts

ConceptRule
Message formatHANDLE // YYYYMMDD-HHMM // PRIORITY // SUBJECT // Body
PriorityH, M, or L
Sentinel<!-- END --> marks the mailbox boundary; rewritten to (((END))) inside content
Source of truth[COMMON_PATH]/projects_config.md lists projects, paths, rosters
Roster<project>/roster.md maps handles to mailbox/outbox files; inactive entries reject sends
HUMANGlobal mailbox resolved next to projects_config.md under COMMON_PATH
Cross-project mailboxesRoster entries may declare absolute paths in other projects
LockingX.lock beside the target file; locks older than 10 minutes expire
Atomic writesTemp file in tmp/, then rename — crash leaves old or new complete state
OutboxBest-effort: delivery to the recipient inbox wins; a failed outbox trace never cancels a send
Tolerant readsImperfect timestamp or missing priority does not block reading; multi-line bodies stay one message

API Core (@m_ai_l/core)

Main exports from dist/index.js:

FunctionPurpose
readMail(project, handle, opts?)Read (and by default archive) inbox messages; limit, noArchive options
writeMail(project, sender, recipient, priority, subject, body, opts?)Deliver a message + outbox trace
editMail(project, sender, recipient, timestamp, subject, patch?)Edit unread in place, else send CORRECTION: message
cancelMail(project, sender, recipient, timestamp, subject)Remove an unread message
archiveMail(project, handle)Archive a mailbox and reset to sentinel
initMail(project, handle, role, mailbox?, status?)Create messaging files + roster entry
getProjects / getRoster / getOutboxRegistry, roster, outbox readers
getMemberContext(project, handle)Resolved paths + member context
resolveHandleCandidates(target, current?, cwd?)current project -> COMMON -> all active projects
readRecentArchive(handle, limit?, current?, cwd?)Recovery after crash-interrupted reads
handoverSelf(project, handle, body, sender?)Standardized self-handover note
mailboxWithLib(lib, input)Inbox entry used by the OpenCode plugin

Business errors: ProjectNotFoundError, RosterEntryNotFoundError, RosterEntryInactiveError, RosterEntryExistsError, MailboxNotFoundError, FileOperationError, InvalidMessageFormatError.

API MCP (@m_ai_l/mcp)

The MCP server registers 13 tools. All are technically callable by any MCP client. However, we recommend harnesses restrict autonomous agent access to the 5 message lifecycle tools (read_mail, write_mail, edit_mail, cancel_mail, archive_mail). The remaining 8 tools (get_projects, get_roster, resolve_handle_candidates, get_member_context, init_mail, handover_self, read_recent_archive, get_outbox) are intended for CLI or administrative setup, not for autonomous agent use.

ToolInput (required, optional...)Purpose note
read_mailproject_handle, handle, limit?, no_archive?Read (and archive) inbox messages
write_mailproject_handle, sender, recipient, priority, subject, body, sender_project_handle?Deliver a message + outbox trace
edit_mailproject_handle, sender, recipient, timestamp, subject, new_priority?, new_subject?, new_body?Edit unread in place, else send CORRECTION:
cancel_mailproject_handle, sender, recipient, timestamp, subjectRemove an unread message
archive_mailproject_handle, handleMaintenance: archives the entire mailbox and resets to sentinel (not a per-message action)
read_recent_archivehandle, limit?, current_project_handle?, cwd?Recovery after crash-interrupted reads
get_projectsnoneList all active projects
get_rosterproject_handleList handles of a project
get_member_contextproject_handle, handleResolved paths + member context
resolve_handle_candidatestarget_handle, current_project_handle?, cwd?current project -> COMMON -> all active projects
init_mailproject_handle, handle, role, mailbox?, status?Create messaging files + roster entry
handover_selfproject_handle, handle, body, sender?Standardized self-handover note
get_outboxproject_handle, handleRead outbox (read-only, write path is frozen)

write_mail with sender_project_handle different from project_handle signs the sender as ORIGIN/HANDLE for cross-project delivery. Cancel and edit only match unread messages in the recipient's active mailbox; multiple matches are a conflict error.

Skills

skills/messaging/ ships instruction files (mailbox_read.md, mailbox_write.md) for harnesses without MCP support, with a filesystem fallback. When MCP is available, prefer the tools — the skills cost more tokens per message. See skills/README.md.

License

Apache-2.0

↑↓ navigate openesc close