This release is a pre-release and may not be stable for production use.
agent-chat
Sister projects from n24q02m (click to expand)
| Project | Tagline | Tag |
|---|---|---|
| agent-chat-plugin | Peer AI agents chat in a shared folder — no human relay, no orchestrator, wor... | Tooling |
| better-code-review-graph | Knowledge graph for token-efficient code reviews -- semantic search and call-... | MCP |
| better-drive | 2-way Google Drive sync with .driveignore filter — rclone engine, Windows tray | Tooling |
| better-email-mcp | IMAP/SMTP email for AI agents -- read, send, organize folders, and manage att... | MCP |
| better-godot-mcp | Composite MCP server for Godot Engine -- 17 composite tools for AI-assisted g... | MCP |
| better-notion-mcp | Markdown-first Notion for AI agents -- pages, databases, blocks, and comments... | MCP |
| better-semantic-release | Drop-in python-semantic-release fork with built-in release-safety guards (orp... | Tooling |
| better-telegram-mcp | Telegram for AI agents -- messages, chats, media, and contacts across both bo... | MCP |
| better-workspace-mcp | Google Workspace MCP server (Docs/Drive/Calendar/Gmail/Sheets/Slides/Tasks/Ch... | MCP |
| claude-plugins | Claude Code plugin marketplace for the n24q02m MCP servers -- install web sea... | Marketplace |
| imagine-mcp | Image and video understanding + generation for AI agents -- across Gemini, Op... | MCP |
| jules-task-archiver | Chrome Extension for bulk operations on Jules tasks via batchexecute API -- a... | Tooling |
| mcp-core | Shared foundation for building MCP servers -- Streamable HTTP transport, OAut... | MCP |
| mnemo-mcp | Persistent AI memory with hybrid search and embedded sync. Open, free, unlimi... | MCP |
| qwen3-embed | Lightweight Qwen3 text embedding and reranking via ONNX Runtime and GGUF | Library |
| skret | Secrets without the server. | CLI |
| tacet | A self-distilling neuro-symbolic cascade that amortises LLM cost across knowl... | Tooling |
| web-core | Shared web infrastructure package for search, scraping, HTTP security, and st... | Library |
| wet-mcp | Open-source MCP server for AI agents: web search, content extraction, and lib... | MCP |
Peer AI agents chat in a shared folder — no human relay, no orchestrator, works on Windows, waits at zero tokens.
Multiple agent sessions (OMP, Claude Code, Codex, Cursor, OpenCode — same tool or mixed) coordinate as equals by exchanging markdown messages in shared channel folders. The folder is the whole state: git-committable, human-readable, replayable. A crashed session loses nothing.
The dependency-free CLI (chat.py plus the agent_chat/ modules, Python stdlib)
runs on Windows, WSL, and Linux. Waiting for a reply blocks in-process —
the wait loop makes no model calls and consumes no model tokens.
Distributed as
agent-chat-pluginon PyPI and as a Claude Code plugin (the short nameagent-chatwas taken on PyPI). The command and skill are stillagent-chat.
Why this exists
Claude Code now has a native cross-session messaging path for Claude Code sessions
on supported platforms. The peer case this project targets is broader: N equal sessions
across Claude Code, Codex, Cursor, OpenCode, or mixed tools coordinating through a
file-backed, auditable folder of messages and autonomously waiting on each other. This
is that cross-tool answer. (Honest scope: this is a young space; see COMPARISON.md for
the native Claude Code overlap and the exact differences.)
Claude Code native overlap
Claude Code v2.1.224+ provides Cross-session messaging through ListAgents and
SendMessage on macOS/Linux, including WSL2; native Windows is not currently supported.
That feature is Claude-Code-only and delivers messages directly between sessions. This
project remains distinct through mixed-tool coordination, native Windows support,
Markdown channels that are git-committable and replayable, atomic claims/cursors, and
zero-token in-process waiting. On supported Claude Code platforms, the native path may
make this plugin's optional unread-notification hooks redundant; it does not replace the
file-backed protocol.
Quickstart
Run these commands from a complete repository checkout. With the installed CLI,
replace python chat.py with agent-chat (see Install & distribution).
# a channel = a group chat
python chat.py init review --members alice,bob --topic "code review"
# alice posts to bob
python chat.py post review --from alice --to bob --title "Schema v0.2" --body "Ready for review."
# bob reads what's new for him
python chat.py read review --as bob
# create dependent work
python chat.py task create review T-0001 --from alice --title "Implement schema"
python chat.py task create review T-0002 --from alice --title "Review schema" --depends-on T-0001
# claim, renew and complete a ready task
python chat.py task claim review T-0001 --as alice --lease-seconds 900
python chat.py task renew review T-0001 --as alice --lease-seconds 900
python chat.py task done review T-0001 --as alice
# coordinate paths and state
python chat.py lock review src/schema.py --as alice --lease-seconds 900
python chat.py unlock review src/schema.py --as alice
python chat.py state review
python chat.py compact review --as alice
# capability handshake without claiming host-native execution
python chat.py event post review --from alice --type capability --harness generic-shell
Root precedence is --root > $AGENT_CHAT_ROOT > ~/agent-chat. Put the global
flag before the subcommand: python chat.py --root "/shared/chat" channels.
Run python chat.py <cmd> --help for all flags.
How it works
- Channels — one folder per group chat; make as many as needed with
init. - Messages — numbered Markdown files with frontmatter and immutable replies.
- Cursors —
read/waitshow only new relevant messages. - Tasks — JSON records with dependencies, readiness, status and acceptance.
- Leases — owner-bound claims with expiry and explicit stale recovery.
- Path locks — normalized workspace-relative ownership records with conflict checks.
- State — deterministic derived
state.md; compaction never replaces source records. - Events — versioned capability/status JSON carried through ordinary messages.
- Atomicity — filesystem transactions, audit events and recovery markers protect concurrent work.
Agent Chat is a coordination data layer. It does not execute agents, assign models,
approve permissions, run MCP/ACP, or wake another process. No command or hook
calls an LLM, embedding/rerank provider, graph service, relay, or Cloudflare gateway.
state/compact derive summaries from local records, not model-generated text;
capability/status events describe a peer and do not invoke it.
Two modes, two budgets
- Live swarm — N sessions run concurrently and use
waitfor wall-clock parallelism. - Async handoff / audit — a session posts an artifact summary for the next session.
Both modes use the same file-backed protocol and remain auditable.
Install & distribution
- As a CLI —
pipx install agent-chat-plugin, then runagent-chat <cmd>. For one-off execution useuvx --from agent-chat-plugin agent-chat <cmd>on each invocation;uvxdoes not install a persistentagent-chatcommand. - As a standalone Skill — copy the root
SKILL.md,chat.py, and the entireagent_chat/directory together into a compatible Skills directory. Copying onlychat.pybreaks task, lease, path-lock, and state commands. - As a Claude Code plugin — install the marketplace package from
claude-plugins. Keep
.claude-plugin/,hooks/,commands/,skills/,chat.py, andagent_chat/together; the plugin skill isskills/agent-chat/SKILL.md.
PyPI installs the CLI and its Python modules, not the skill, slash command, or lifecycle hooks. Use the checkout/plugin distribution for those assets.
All participants must address the same channel root on a filesystem with the
required atomic replacement and locking semantics. Separate home/company
~/agent-chat directories are separate inboxes; this package does not sync
machines or install a background service. Give each participant a distinct
AGENT_CHAT_NAME for hooks; CLI identities are explicit --from/--as flags.
Set environment values before starting the host, not by changing its model or
MCP configuration.
Optional inbox hooks
hooks/hooks.json registers three Claude Code lifecycle commands. Python hook
scripts can be invoked by absolute checkout path in another host, but that host
must explicitly support or adapt their lifecycle/output contract:
| Hook | Output when messages are unread |
|---|---|
SessionStart / hooks/session_inbox.py |
Plain-text channel/count notice; warns about unset identity when channels exist. |
UserPromptSubmit / hooks/prompt_inbox.py |
Plain-text channel/count notice; unset identity is silent. |
Stop / hooks/stop_inbox.py |
Claude-compatible JSON with systemMessage; unset identity is silent. |
Set AGENT_CHAT_ROOT and optionally comma-separated AGENT_CHAT_CHANNELS
to restrict checks to relevant channels (empty means all discovered channels).
Malformed channel names are skipped without suppressing other configured inboxes.
Hooks only print when unread messages are relevant to the current identity,
bound each notice to a small stdout budget, and never advance cursors, read
message bodies into notices, reply, block a turn, or wake a peer. read and
successful wait advance cursors.
The scripts prefer non-empty CLAUDE_PLUGIN_ROOT; otherwise they resolve
chat.py beside their own hooks/ directory. An unresolved plugin root skips
with a one-line stderr diagnostic; hook failures always exit 0. Quote paths:
python "/path/to/agent-chat-plugin/hooks/session_inbox.py".
A portable script is not an installed OMP/native integration. Verify each host's explicit invocation and rendered notice; CLI installation or a successful source check alone does not prove hooks are loaded on home or company.
See CONTRIBUTING.md for developer setup and runtime layout.
Status
The reference implementation covers file-backed messages, cursors, token-free wait, structured tasks/dependencies, leases, normalized path locks, derived state and adapter-neutral capability/status events. MCP wrappers, ACP/wake bridges and agent execution remain separate future designs.
License
Apache-2.0.
Metadata
Release files for agent-chat-plugin 0.6.1b4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| agent_chat_plugin-0.6.1b4.tar.gz | 93.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| agent_chat_plugin-0.6.1b4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 157.5 kB
Release files / agent_chat_plugin-0.6.1b4.tar.gz
| Download URL | agent_chat_plugin-0.6.1b4.tar.gz |
|---|---|
| Size | 93.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
473007fda5aa7961460eb67a7e37ddd663065d46f7ca8b35ee0e62263f421526
|
|
BLAKE2b-256 checksum How to use checksums |
a9a31af01904ecbded9648b10de5f51395753bf92c76793a70ad7dbcf2e9d98d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / agent_chat_plugin-0.6.1b4-py3-none-any.whl
| Download URL | agent_chat_plugin-0.6.1b4-py3-none-any.whl |
|---|---|
| Size | 63.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2b15e59e43ca5b67e5e88ec80bd5e82765f277fb89b420119d16f90219d450eb
|
|
BLAKE2b-256 checksum How to use checksums |
33c30a4b31145df0946667d912d8414ff848a26a370345de77c99bf2ad7e90df
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.10 {"installer":{"name":"uv","version":"0.12.10","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|