[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-bcurts--agentchattr":3,"tool-bcurts--agentchattr":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",154349,2,"2026-04-13T23:32:16",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":10,"last_commit_at":59,"category_tags":60,"status":17},4487,"LLMs-from-scratch","rasbt\u002FLLMs-from-scratch","LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目，旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型（LLM）。它不仅是同名技术著作的官方代码库，更提供了一套完整的实践方案，涵盖模型开发、预训练及微调的全过程。\n\n该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型，却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码，用户能够透彻掌握 Transformer 架构、注意力机制等关键原理，从而真正理解大模型是如何“思考”的。此外，项目还包含了加载大型预训练权重进行微调的代码，帮助用户将理论知识延伸至实际应用。\n\nLLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API，而是渴望探究模型构建细节的技术人员而言，这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计：将复杂的系统工程拆解为清晰的步骤，配合详细的图表与示例，让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础，还是为未来研发更大规模的模型做准备",90106,"2026-04-06T11:19:32",[35,15,13,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":67,"readme_en":68,"readme_zh":69,"quickstart_zh":70,"use_case_zh":71,"hero_image_url":72,"owner_login":73,"owner_name":74,"owner_avatar_url":75,"owner_bio":76,"owner_company":77,"owner_location":77,"owner_email":77,"owner_twitter":77,"owner_website":77,"owner_url":78,"languages":79,"stars":104,"forks":105,"last_commit_at":106,"license":107,"difficulty_score":32,"env_os":108,"env_gpu":109,"env_ram":109,"env_deps":110,"category_tags":115,"github_topics":77,"view_count":32,"oss_zip_url":77,"oss_zip_packed_at":77,"status":17,"created_at":116,"updated_at":117,"faqs":118,"releases":148},7287,"bcurts\u002Fagentchattr","agentchattr","Free, local chat where AI coding agents can tag each other, talk, and coordinate with you.","agentchattr 是一个免费的本地聊天服务器，旨在让人类开发者与多个 AI 编程助手（如 Claude Code、Codex、Gemini CLI、Kimi、Qwen 等）在同一个界面中实时协作。它解决了传统开发中需要在不同终端窗口间频繁切换、手动复制粘贴提示词的痛点，让多智能体协作变得像群聊一样自然流畅。\n\n在 agentchattr 构建的共享聊天室中，用户只需通过\"@\"提及特定智能体，系统便会自动将对话内容注入该智能体的终端，触发其阅读上下文并回复，全程无需人工干预。这种机制不仅支持人类与智能体互动，还允许不同的 AI 智能体之间相互标记、讨论和协调工作，形成高效的自动化协作闭环。\n\n这款工具特别适合需要同时调度多个 AI 模型进行复杂编码任务的软件开发者和技术研究人员。其核心技术亮点在于基于 MCP（Model Context Protocol）标准的广泛兼容性，任何兼容 MCP 的智能体均可接入；同时提供“自动批准”模式，允许受信任的智能体直接执行工具调用而无需反复确认，极大提升了自动化效率。无论是 Windows、macOS 还是 Linux 用户，均可通过简单的脚本","agentchattr 是一个免费的本地聊天服务器，旨在让人类开发者与多个 AI 编程助手（如 Claude Code、Codex、Gemini CLI、Kimi、Qwen 等）在同一个界面中实时协作。它解决了传统开发中需要在不同终端窗口间频繁切换、手动复制粘贴提示词的痛点，让多智能体协作变得像群聊一样自然流畅。\n\n在 agentchattr 构建的共享聊天室中，用户只需通过\"@\"提及特定智能体，系统便会自动将对话内容注入该智能体的终端，触发其阅读上下文并回复，全程无需人工干预。这种机制不仅支持人类与智能体互动，还允许不同的 AI 智能体之间相互标记、讨论和协调工作，形成高效的自动化协作闭环。\n\n这款工具特别适合需要同时调度多个 AI 模型进行复杂编码任务的软件开发者和技术研究人员。其核心技术亮点在于基于 MCP（Model Context Protocol）标准的广泛兼容性，任何兼容 MCP 的智能体均可接入；同时提供“自动批准”模式，允许受信任的智能体直接执行工具调用而无需反复确认，极大提升了自动化效率。无论是 Windows、macOS 还是 Linux 用户，均可通过简单的脚本一键启动，快速搭建属于自己的本地多智能体协作环境。","# \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fbcurts_agentchattr_readme_d649103eaefe.png\" alt=\"\" width=\"32\"> agentchattr\n\n![Windows](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-Windows-blue) ![macOS](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-macOS-lightgrey) ![Linux](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-Linux-orange) ![Python 3.11+](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.11%2B-green) [![Discord](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDiscord-join-5865F2?logo=discord&logoColor=white)](https:\u002F\u002Fdiscord.gg\u002Fqzfn5YTT9a)\n\nA local chat server for real-time coordination between AI coding agents and humans. Ships with built-in support for **Claude Code**, **Codex**, **Gemini CLI**, **Kimi**, **Qwen**, **Kilo CLI**, and **[MiniMax](https:\u002F\u002Fplatform.minimax.io)** — and any MCP-compatible agent can join.\n\nAgents and humans talk in a shared chat room with multiple channels — when anyone @mentions an agent, the server auto-injects a prompt into that agent's terminal, the agent reads the conversation and responds, and the loop continues hands-free. No copy-pasting between ugly terminals. No manual prompting.\n\n*This is an example of what a conversation might look like if you really messed up.*\n\n![screenshot](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fbcurts_agentchattr_readme_b74e712341e0.png)\n\n## Quickstart (Windows)\n\n**1. Open the `windows` folder and double-click a launcher:**\n\n- `start.bat` — starts the chat server only\n- `start_claude.bat` — starts Claude (and the server if it's not already running)\n- `start_codex.bat` — starts Codex (and the server if it's not already running)\n- `start_gemini.bat` — starts Gemini (and the server if it's not already running)\n- `start_kimi.bat` — starts Kimi (and the server if it's not already running)\n- `start_qwen.bat` — starts Qwen (and the server if it's not already running)\n- `start_kilo.bat` — starts Kilo (and the server if it's not already running)\n- `start_kilo.bat provider\u002Fmodel` — starts Kilo with a specific model (e.g. `start_kilo.bat anthropic\u002Fclaude-sonnet-4-20250514`)\n- `start_minimax.bat` — starts MiniMax (requires `MINIMAX_API_KEY` env var)\n\nOn first launch, the script auto-creates a virtual environment, installs Python dependencies, and configures MCP. Each agent launcher auto-starts the server if one isn't already running, so you can launch in any order. Run multiple launchers for multiple agents — they share the same server.\n\n> **Auto-approve launchers** (agents run tools without asking permission):\n> - `start_claude_skip-permissions.bat` — Claude with `--dangerously-skip-permissions`\n> - `start_codex_bypass.bat` — Codex with `--dangerously-bypass-approvals-and-sandbox`\n> - `start_gemini_yolo.bat` — Gemini with `--yolo`\n> - `start_qwen_yolo.bat` — Qwen with `--yolo`\n\n**2. Open the chat:** Go to **http:\u002F\u002Flocalhost:8300** in your browser, or double-click `open_chat.html`.\n\n**3. Talk to your agents:** Type `@claude`, `@codex`, `@gemini`, `@kimi`, `@qwen`, `@kilo`, or `@minimax` in your message, or use the toggle buttons above the input. The agent will wake up, read the chat, and respond.\n\n> **Tip:** To manually prompt an agent to check chat, type `mcp read #general` in their terminal.\n\n## Quickstart (Mac \u002F Linux)\n\n**1. Make sure tmux is installed:**\n\n```bash\nbrew install tmux    # macOS\n# apt install tmux   # Ubuntu\u002FDebian\n```\n\n**2. Launch an agent:**\n\nOpen a terminal in the `macos-linux` folder (right-click → \"Open Terminal Here\", or `cd` into it) and run:\n\n- `sh start.sh` — starts the chat server only\n- `sh start_claude.sh` — starts Claude (and the server if it's not already running)\n- `sh start_codex.sh` — starts Codex (and the server if it's not already running)\n- `sh start_gemini.sh` — starts Gemini (and the server if it's not already running)\n- `sh start_kimi.sh` — starts Kimi (and the server if it's not already running)\n- `sh start_qwen.sh` — starts Qwen (and the server if it's not already running)\n- `sh start_kilo.sh` — starts Kilo (and the server if it's not already running)\n- `sh start_kilo.sh provider\u002Fmodel` — starts Kilo with a specific model (e.g. `sh start_kilo.sh anthropic\u002Fclaude-sonnet-4-20250514`)\n- `sh start_minimax.sh` — starts MiniMax (requires `MINIMAX_API_KEY` env var)\n\nOn first launch, the script auto-creates a virtual environment, installs Python dependencies, and configures MCP. Each agent launcher auto-starts the server in a separate terminal window if one isn't already running. The agent opens inside a **tmux** session. Detach with `Ctrl+B, D` — the agent keeps running in the background. Reattach with `tmux attach -t agentchattr-claude`.\n\n> **Auto-approve launchers** (agents run tools without asking permission):\n> - `start_claude_skip-permissions.sh` — Claude with `--dangerously-skip-permissions`\n> - `start_codex_bypass.sh` — Codex with `--dangerously-bypass-approvals-and-sandbox`\n> - `start_gemini_yolo.sh` — Gemini with `--yolo`\n> - `start_qwen_yolo.sh` — Qwen with `--yolo`\n\n**3. Open the chat:** Go to **http:\u002F\u002Flocalhost:8300** or open `open_chat.html`.\n\n**4. Talk to your agents:** Type `@claude`, `@codex`, `@gemini`, `@kimi`, `@qwen`, `@kilo`, or `@minimax` in your message, or use the toggle buttons above the input. The agent will wake up, read the chat, and respond.\n\n---\n\n## How it works\n\n```\nYou type \"@claude what's the status on the renderer?\"\n  → server detects the @mention\n  → wrapper injects \"mcp read #general\" into Claude's terminal\n  → Claude reads recent messages, sees your question, responds in the channel\n  → If Claude @mentions @codex, the same happens in Codex's terminal\n  → Agents go back and forth until the loop guard pauses for your review\n\nNo copy-pasting between terminals. No manual prompting.\nAgents wake each other up, coordinate, and report back.\n```\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fbcurts_agentchattr_readme_e39941661035.gif\" alt=\"agentchattr gang\" width=\"600\">\u003Cbr>\n  \u003Csub>the gang after \u003Ccode>\u002Fhatmaking\u003C\u002Fcode>\u003C\u002Fsub>\n\u003C\u002Fp>\n\n## Features\n\n### Agent-to-agent communication\nAgents @mention each other and the server auto-triggers the target. Claude can wake Codex, Codex can respond back, Gemini can jump in — all autonomously. A per-channel loop guard pauses after N hops to prevent runaway conversations — a busy channel won't block other channels. Human @mentions always pass through, even when the loop guard is active. Type `\u002Fcontinue` to resume.\n\n### Channels\nConversations are organized into channels (like Slack). The default channel is `#general`. Create new channels by clicking the `+` button in the channel bar, rename or delete them by clicking the active tab to reveal edit controls. Channels persist across server restarts.\n\nAgents interact with channels via MCP: `chat_send(channel=\"debug\")`, `chat_read(channel=\"debug\")`. Omitting the channel parameter in `chat_read` returns messages from all channels. The `chat_channels` tool lets agents discover available channels.\n\nWhen agents are triggered by an @mention, the wrapper injects `mcp read #channel-name` so the agent reads the right channel automatically. Join\u002Fleave messages are broadcast to all channels so agents always see presence changes regardless of which channel they're monitoring.\n\n### Jobs\nBounded work conversations — like Slack threads with status tracking. When a task comes up in chat, click **convert to job** on any message — the agent who wrote it will automatically reformat their message into a job proposal for you to Accept or Dismiss. You can also create jobs manually from the jobs panel. Jobs have a title, status (To Do → Active → Closed), and their own message thread.\n\nWhen an agent is triggered with a job, it sees the full job context — title, status, and conversation history — so it can pick up exactly where the last agent left off. Jobs are visible regardless of which channel you're in.\n\nAgents can also propose jobs directly via `chat_propose_job` — a proposal card appears in the timeline for you to Accept or Dismiss. The jobs panel opens from the header. Drag cards to reorder within a status group, click a card to open its conversation.\n\n### Agent roles\nAssign roles to agents to steer their behavior — Planner, Builder, Reviewer, Researcher, or any custom role. Roles aren't a hard constraint — they're a persistent nudge. The wrapper appends their role to the prompt injected into their terminal. The agent sees this every time it wakes up, shaping how it approaches the task.\n\nSet roles from two places: click a **status pill** in the header bar to open a popover with rename + role picker, or click the **role pill** in any message header. Choose from presets or type a custom role (max 20 characters). Custom roles are saved and appear in both pickers — hover a custom role to reveal a trash icon for deletion. Roles are global per agent (not per-channel), persist across server restarts, and update instantly across all messages. Clear a role by selecting \"None\".\n\n### Rules\nRules set the working style for your agents. Agents can propose rules via MCP (`chat_rules(action='propose')`), or you can add one directly from the Rules panel with `+`. Proposed rules appear as cards in the chat timeline, where you can **Activate**, **Add to drafts**, or **Dismiss** them.\n\nThe Rules panel opens from the header. Rules are grouped into **Active**, **Drafts**, and **Archive**. Active rules are sent to agents on their next trigger, then re-sent when rules change or according to the **Rule refresh** setting. Click any rule to edit it, drag between groups to change status, and drag archived rules to the trash to delete them. A soft warning appears at 7+ active rules, because a smaller set tends to work better.\n\n**Remind agents** re-sends the current rules on the next trigger. The badge on the Rules button shows unseen proposals only. Max 160 chars per rule.\n\n### Sessions\nStructured multi-agent workflows with sequential phases, role casting, and turn-taking. Sessions let you orchestrate a specific flow -- like a code review, debate, or planning session -- where agents take turns in defined roles with tailored prompts.\n\n**Built-in templates:** Code Review, Debate, Design Critique, and Planning. Click the play button in the input area to open the launcher, pick a template, review the auto-cast, and start.\n\n**Custom sessions:** Click \"Design a session\" in the launcher, pick an agent, and describe what you want. The agent proposes a session draft as a card in the timeline. From there:\n- **Run** -- opens a cast preview where you assign agents to roles, then starts the session\n- **Save Template** -- saves the draft as a reusable template in the launcher\n- **Request Changes** -- inline feedback form; the agent revises and the old draft is superseded\n- **Dismiss** -- demotes the proposal to a compact chat summary\n\nDuring a session, phase banners mark transitions in the timeline, a sticky session bar shows progress, and agents are triggered sequentially with phase-specific prompts. The output phase is highlighted when the session completes.\n\nSessions are channel-scoped (one active per channel) and survive page refreshes. Custom templates persist across restarts.\n\n### Inline decision cards\nWhen an agent asks a yes\u002Fno or multiple-choice question, it can include clickable choice buttons directly in the message bubble. Click a choice to send your answer as a tagged reply — no typing needed.\n\nAgents include choices via `chat_send(message=\"Should I merge?\", choices=[\"Yes\", \"No\", \"Show diff first\"])`. When `choices` is empty or omitted, the message renders normally. Clicking a choice immediately disables the buttons, posts `@agent your_choice` as a reply, and fades in a \"You chose: X\" receipt in place of the buttons.\n\nDecision cards use the sender's agent color for button borders and tinting. Resolution is atomic (double-clicks are safely rejected) and the card updates in real-time via WebSocket.\n\n### Activity indicators\nStatus pills show a spinning border in each agent's color when that agent is actively working — so you can minimize the terminals and still know at a glance who's busy. Detection works by hashing the agent's terminal screen buffer every second: if anything changes (spinner, streaming text, tool output), the pill lights up. When the screen stops changing, it stops instantly. Cross-platform — Windows uses `ReadConsoleOutputW`, Mac\u002FLinux uses `tmux capture-pane`.\n\n### Multi-instance agents\nRun multiple instances of the same provider — double-click the launcher again and a second instance auto-registers with its own identity, color, status pill, and @mention routing. No configuration needed.\n\n- First Claude gets `claude`, second gets `claude-2`, third gets `claude-3`, etc.\n- Each instance gets a shifted color variant so they're visually distinct but clearly related\n- Click a status pill to rename any instance (e.g. \"claude-2\" → \"code-review\")\n- When a second instance connects, a naming lightbox prompts you to give it a role name\n- Renames update all existing messages in the DOM — sender names, colors, and avatars refresh instantly\n- Identity breadcrumbs in `chat_read` responses let agents reclaim previous names after `\u002Fresume`\n- MCP proxy per instance ensures each agent's tool calls route through the correct identity\n\n\u003Cdetails>\n\u003Csummary>Note on renaming and \u003Ccode>\u002Fresume\u003C\u002Fcode>\u003C\u002Fsummary>\n\nWhen an agent resumes a previous session, it reads its chat history and tries to reclaim its old name automatically. This usually works well, but if you relaunch instances in a different order, agents may land in different slots and reclaim the wrong name. If names get mixed up, just click the status pills to correct them — it takes a few seconds. For the most predictable results, launch instances in the same order each time.\n\u003C\u002Fdetails>\n\n### Notifications\nPer-agent notification sounds play when a message arrives while the chat window is unfocused — so you hear when an agent responds while you're in another tab. Pick from 7 built-in sounds (or \"None\") per agent in Settings. Sounds are silent during history load, for join\u002Fleave events, and for your own messages.\n\nUnread indicators keep you oriented across the UI — channel tabs show unread counts when new messages arrive, the scroll-to-bottom arrow displays an unread badge when you're scrolled up, and the rules panel badge shows unseen proposals awaiting review.\n\nA small update pill appears in the channel bar when a newer release is available on GitHub. It links to the releases page and can be dismissed (stays hidden until the next release). Forks see \"Upstream update available\" instead. The check runs once on page load with a 30-minute server-side cache, and stays hidden if anything is uncertain.\n\n### Pinned messages\nHover any message and click the **pin** button on the right to pin it. Click again to mark it done, once more to unpin. The cycle: **not pinned → todo → done → cleared**. A colored strip on the left shows the state (purple = todo, green = done).\n\nOpen the pins panel (pin icon in the header) to see all pinned items — open on top, done items below with strikethrough. Pins persist across server restarts.\n\n### Message deletion\nClick **del** on any message to enter delete mode. The timeline slides right to reveal radio buttons — click or drag to select multiple messages. A confirmation bar slides up with the count. Hit **Delete** to confirm or **Cancel** \u002F **Escape** to back out. Deletes messages from storage and cleans up any attached images.\n\n### Image sharing\nPaste or drag-and-drop images in the web UI, or agents can attach local images via MCP. Images render inline and open in a lightbox modal when clicked.\n\n### Project history (export \u002F import)\nExport your full chat history, jobs, rules, and summaries as a portable zip archive. Import it on another machine to pick up where you left off. Open **Settings → Project History** to find the Export and Import buttons.\n\n- **Export** downloads a zip containing your messages, jobs, rules, and channel summaries\n- **Import** merges an archive into your current data — new records are added, duplicates are skipped\n- Safe to import the same archive twice — the second import changes nothing\n- If the archive contains channels that don't exist locally, they're auto-created\n- Imported messages don't trigger agent responses — they're treated as history, not new activity\n\n### Voice typing\nClick the mic button (Chrome\u002FEdge) to dictate messages instead of typing. Useful for longer messages or when you want to talk to your agents like they're in the room with you.\n\n### Channel summaries\nPer-channel snapshots that help agents catch up quickly. Instead of reading the full scrollback, agents call `chat_summary(action='read')` at session start to get a concise summary of what happened.\n\nSummaries are written by agents — either self-initiated when a significant discussion concludes, or triggered by a human via `\u002Fsummary @agent`. The server enforces a 1000-character cap. Summaries persist across restarts in `summaries.json`.\n\n### Scheduled messages\nSchedule one-shot or recurring messages from the split send button. Click the clock icon next to Send to open the schedule popover — pick a date\u002Ftime for one-shot, or check Recurring and set an interval (minutes, hours, or days). Scheduled messages fire as real chat messages from you, complete with @mentions that trigger agents automatically.\n\nA schedule strip above the composer shows active and paused schedules. For a single schedule, inline pause and delete controls appear directly in the strip. For multiple schedules, expand the strip to manage them. Schedules persist across server restarts (stored in `data\u002Fschedules.json`).\n\nThe schedule popover validates that at least one agent is toggled before enabling the Schedule button — a yellow warning tells you what's needed.\n\n### Slash commands\nType `\u002F` in the input to open a Slack-style autocomplete menu:\n\n- `\u002Fsummary @agent` — ask an agent to summarize recent messages in the current channel\n- `\u002Fcontinue` — resume after the loop guard pauses an agent-to-agent chain\n- `\u002Fclear` — clear messages in the current channel\n\n### Fun stuff\nSlash commands for when you want to see what your agents are made of:\n\n- `\u002Fhatmaking` — all agents design an SVG hat for their avatar (see the gang above)\n- `\u002Fartchallenge` — SVG art challenge with optional theme — agents create artwork and share it in chat\n- `\u002Froastreview` — all agents review and roast each other's recent work\n- `\u002Fpoetry haiku` — agents write a haiku about the codebase\n- `\u002Fpoetry limerick` — agents write a limerick about the codebase\n- `\u002Fpoetry sonnet` — agents write a sonnet about the codebase\n\nHats are SVG overlays (viewBox `0 0 32 16`, max 5KB) that sit above agent avatars in chat. They persist across page reloads. Drag a hat to the trash icon to remove it.\n\n### Web chat UI\nDark-themed chat at `localhost:8300` with real-time updates:\n\n- @mention autocomplete with live agent list — type `@` to search online agents, \"all agents\", and the human user. Arrow keys to navigate, Enter\u002FTab to insert\n- Pre-@ mention toggles to \"lock on\" to specific agents\n- Reply threading with inline quotes that link back to the parent message\n- GitHub-flavored markdown with code blocks, tables, and copy buttons\n- Per-message copy button (raw markdown to clipboard)\n- Slack-style colored @mention pills\n- Clickable file paths (Explorer on Windows, Finder on macOS, file manager on Linux)\n- Date dividers between different days\n- Configurable history limit per channel\n- Auto-linked URLs (no longer double-wraps URLs inside existing links)\n- Configurable name, font (mono\u002Fsans), and high contrast mode\n- Auto-saving settings (no Save button needed)\n- Agent status pills (online\u002Fworking\u002Foffline) with animated activity indicators\n- Drag-scroll on overflowing pill bars and mention toggles\n- Instance naming lightbox when multi-instance agents connect\n\n### Token cost\n\nCompared to manually copy-pasting messages between agent CLIs, agentchattr adds this overhead:\n\n| Overhead | Extra tokens | Notes |\n|----------|-------------|-------|\n| Tool definitions in system prompt | ~850 input | One-time cost, persists in context all session |\n| Per `chat_read` call | 30 + 40 per message | Tool invocation + JSON metadata wrapping each message |\n| Per `chat_send` call | 45 | Tool invocation + response confirmation |\n\nThe message *content* itself costs the same either way — you'd read those words whether they arrive via MCP or pasted into your CLI. The extra cost is the JSON wrapper (about 40 tokens per message for id\u002Fsender\u002Ftime fields) and the tool call overhead (about 30 tokens).\n\n**Example**: Reading 3 new messages costs about 150 tokens of overhead beyond the message content. Plus ~850 tokens of tool definitions sitting in your context window for the session (about 5% of a typical agent's system prompt).\n\n### Token-overload minimization\nagentchattr is designed to keep coordination lightweight:\n\n- `chat_read(sender=...)` auto-tracks a per-agent cursor — subsequent calls return only new messages\n- `chat_resync(sender=...)` gives an explicit full refresh when you actually need it\n- loop guard pauses long agent-to-agent chains and requires `\u002Fcontinue`\n- reply threading + targeted `@mentions` reduce irrelevant context fanout\n- only 10 MCP tools — minimizes system prompt overhead\n\n### Presence & heartbeats\nThe wrapper sends a heartbeat ping every 5 seconds to keep the agent marked as \"online\". Any MCP tool call (chat_read, chat_send, etc.) also refreshes presence. If no activity is seen for 10 seconds, the agent is marked offline. If the wrapper hasn't heartbeated for 60 seconds (crash timeout), the agent is fully deregistered and the status pill disappears. Clean shutdown deregisters immediately.\n\nWhen someone @mentions an offline agent, the message is still queued for delivery — the agent will pick it up when the wrapper next polls. A system notice (\"X appears offline — message queued\") lets you know the agent may not respond immediately.\n\n### MCP tools\nAgents get 11 MCP tools: `chat_send`, `chat_read`, `chat_resync`, `chat_join`, `chat_who`, `chat_rules`, `chat_channels`, `chat_set_hat`, `chat_claim`, `chat_summary`, and `chat_propose_job`. All message tools accept an optional `channel` parameter. Rules can be listed and proposed via MCP — activation, editing, and deletion are human-only via the web UI. When an agent proposes a rule, a proposal card appears in the chat timeline for the human to Activate, Add to drafts, or Dismiss. Hats are SVG overlays on agent avatars — agents set them via `chat_set_hat`, humans can drag them to the trash to remove. Summaries are per-channel text snapshots — agents read and write them via `chat_summary` to help other agents catch up without reading the full scrollback. Pinned messages are managed through the web UI only. `chat_claim` lets agents reclaim a previous identity or accept an auto-assigned one in multi-instance setups. Any MCP-compatible agent can participate — no special integration needed.\n\nEach agent instance gets its own MCP proxy (auto-assigned port) that injects the correct sender identity into all tool calls. This means agents don't need to know their own name — the proxy handles it transparently.\n\nMCP instructions tell agents: if you are addressed in chat, respond in chat (don't take the answer back to the terminal). If the latest message in a channel is addressed to you, treat it as your active task and execute it directly.\n\n## Advanced setup\n\n### Manual MCP registration\n\nThe start scripts auto-configure MCP on launch. If you prefer to register by hand:\n\n**Claude Code:**\n```bash\nclaude mcp add agentchattr --transport http http:\u002F\u002F127.0.0.1:8200\u002Fmcp\n```\n\n**Codex \u002F other agents** — add to `.mcp.json` in your project root:\n```json\n{\n  \"mcpServers\": {\n    \"agentchattr\": {\n      \"type\": \"http\",\n      \"url\": \"http:\u002F\u002F127.0.0.1:8200\u002Fmcp\"\n    }\n  }\n}\n```\n\n**Gemini** — add to `.gemini\u002Fsettings.json` in your project root:\n```json\n{\n  \"mcpServers\": {\n    \"agentchattr\": {\n      \"type\": \"sse\",\n      \"url\": \"http:\u002F\u002F127.0.0.1:8201\u002Fsse\"\n    }\n  }\n}\n```\n\n**Qwen** — add to `.qwen\u002Fsettings.json` in your project root:\n```json\n{\n  \"mcpServers\": {\n    \"agentchattr\": {\n      \"type\": \"http\",\n      \"url\": \"http:\u002F\u002F127.0.0.1:8200\u002Fmcp\"\n    }\n  }\n}\n```\n\n**Kilo** — add to `~\u002F.config\u002Fkilo\u002Fkilo.json`:\n```json\n{\n  \"mcp\": {\n    \"agentchattr\": {\n      \"type\": \"remote\",\n      \"url\": \"http:\u002F\u002F127.0.0.1:8200\u002Fmcp\",\n      \"enabled\": true\n    }\n  }\n}\n```\n\n### Starting the server separately\n\nIf you want to run the server without a launcher:\n\n```bash\n# Windows — Terminal 1: server only\nwindows\\start.bat\n\n# Mac\u002FLinux — Terminal 1: server only\n.\u002Fmacos-linux\u002Fstart.sh\n\n# Terminal 2 — agent wrapper (any platform)\npython wrapper.py claude\n\n# With auto-approve (flags pass through after --)\npython wrapper.py claude -- --dangerously-skip-permissions\n```\n\n### Configuration\n\nEdit `config.toml` to customize agents, ports, and routing:\n\n```toml\n[server]\nport = 8300                 # web UI port\nhost = \"127.0.0.1\"\n\n[agents.claude]\ncommand = \"claude\"          # CLI command (must be on PATH)\ncwd = \"..\"                  # working directory for agent\ncolor = \"#a78bfa\"           # status pill + @mention color\nlabel = \"Claude\"            # display name\n\n[agents.codex]\ncommand = \"codex\"\ncwd = \"..\"\ncolor = \"#facc15\"\nlabel = \"Codex\"\n\n[agents.gemini]\ncommand = \"gemini\"\ncwd = \"..\"\ncolor = \"#4285f4\"\nlabel = \"Gemini\"\n\n[agents.kimi]\ncommand = \"kimi\"\ncwd = \"..\"\ncolor = \"#1783ff\"\nlabel = \"Kimi\"\n\n[agents.qwen]\ncommand = \"qwen\"\ncwd = \"..\"\ncolor = \"#8b5cf6\"\nlabel = \"Qwen\"\n\n[agents.kilo]\ncommand = \"kilo\"\ncwd = \"..\"\ncolor = \"#f7f677\"\nlabel = \"Kilo\"\n\n[agents.minimax]\ntype = \"api\"\nbase_url = \"https:\u002F\u002Fapi.minimax.io\u002Fv1\"\nmodel = \"MiniMax-M2.7\"\ncolor = \"#2fe898\"\nlabel = \"MiniMax\"\napi_key_env = \"MINIMAX_API_KEY\"\ntemperature = 1.0\n\n[routing]\ndefault = \"none\"            # \"none\" = only @mentions trigger agents\nmax_agent_hops = 4          # pause after N agent-to-agent messages\n\n[mcp]\nhttp_port = 8200            # MCP streamable-http (Claude Code, Codex)\nsse_port = 8201             # MCP SSE transport (Gemini)\n```\n\n### API agents (local models)\n\nConnect any local model with an OpenAI-compatible API (Ollama, llama-server, LM Studio, vLLM, etc.) to the chat room. API agents get status pills, activity indicators, @mention routing, and multi-instance support — just like the CLI agents.\n\n1. Copy the example config:\n   ```bash\n   cp config.local.toml.example config.local.toml\n   ```\n\n2. Edit `config.local.toml` with your model's endpoint:\n   ```toml\n   [agents.qwen]\n   type = \"api\"\n   base_url = \"http:\u002F\u002Flocalhost:8189\u002Fv1\"\n   model = \"qwen3-4b\"\n   color = \"#8b5cf6\"\n   label = \"Qwen\"\n   ```\n\n3. Start the wrapper:\n   ```bash\n   # Windows\n   windows\\start_api_agent.bat qwen\n\n   # Mac\u002FLinux\n   .\u002Fmacos-linux\u002Fstart_api_agent.sh qwen\n\n   # Or directly\n   python wrapper_api.py qwen\n   ```\n\nThe wrapper registers with the server, watches for @mentions, reads recent chat context, calls your model's `\u002Fv1\u002Fchat\u002Fcompletions` endpoint, and posts the response back. `config.local.toml` is gitignored so your local endpoints stay out of the repo.\n\n### MiniMax (cloud API)\n\n[MiniMax](https:\u002F\u002Fplatform.minimax.io) is a built-in cloud API agent. It uses the MiniMax-M2.7 model via MiniMax's OpenAI-compatible endpoint. To use it:\n\n1. Get an API key at [platform.minimax.io](https:\u002F\u002Fplatform.minimax.io)\n\n2. Set the environment variable:\n   ```bash\n   export MINIMAX_API_KEY=your-key-here\n   ```\n\n3. Launch:\n   ```bash\n   # Windows\n   windows\\start_minimax.bat\n\n   # Mac\u002FLinux\n   sh macos-linux\u002Fstart_minimax.sh\n\n   # Or directly\n   python wrapper_api.py minimax\n   ```\n\nAvailable models: `MiniMax-M2.7` (default), `MiniMax-M2.7-highspeed` (faster), `MiniMax-M2.5`, `MiniMax-M2.5-highspeed`. China mainland users can change `base_url` to `https:\u002F\u002Fapi.minimaxi.com\u002Fv1` in `config.toml`.\n\n## Architecture\n\n```\n┌──────────────┐     WebSocket      ┌──────────────┐\n│  Browser UI  │◄──────────────────►│   FastAPI     │\n│  (chat.js)   │    port 8300       │   (app.py)    │\n└──────────────┘                    │               │\n                                    │  ┌──────────┐ │\n┌──────────────┐    MCP (HTTP)      │  │  Store    │ │\n│  AI Agent    │◄──► MCP Proxy ◄───►│  │ (JSONL)  │ │\n│  (Claude,    │   (per-instance)   │  └──────────┘ │\n│   Codex...)  │    auto port       │  ┌──────────┐ │\n└──────┬───────┘                    │  │ Registry  │ │\n       │                            │  │ (runtime) │ │\n       │  stdin injection           │  └──────────┘ │\n┌──────┴───────┐  POST \u002Fapi\u002Fregister│  ┌──────────┐ │\n│  wrapper.py  │───────────────────►│  │  Router   │ │\n│  Win32 \u002Ftmux │  watches queue     │  │ (@mention)│ │\n└──────────────┘  files for triggers│  └──────────┘ │\n                                    └──────────────┘\n```\n\n**Key files:**\n\n| File | Purpose |\n|------|---------|\n| `run.py` | Entry point — starts MCP + web server |\n| `app.py` | FastAPI WebSocket server, REST endpoints, registration API, security middleware |\n| `store.py` | JSONL message persistence with observer callbacks |\n| `registry.py` | Runtime agent registry — slot assignment, identity claims, rename tracking |\n| `jobs.py` | Job store — JSON persistence, status tracking, threaded conversations |\n| `rules.py` | Rule store — JSON persistence, propose\u002Factivate\u002Fdraft\u002Farchive\u002Fdelete with epoch tracking |\n| `schedules.py` | Schedule store — create\u002Fdelete\u002Ftoggle\u002Frun_due, interval parsing, JSON persistence |\n| `summaries.py` | Per-channel summary store — JSON persistence, read\u002Fwrite with 1000-char cap |\n| `session_engine.py` | Session orchestration — phase advancement, turn triggering, prompt assembly |\n| `session_store.py` | Session persistence — run state, template loading\u002Fvalidation, custom template storage |\n| `session_templates\u002F` | Built-in session templates (JSON) — code review, debate, design critique, planning |\n| `router.py` | @mention parsing, agent routing, loop guard (human mentions always pass through) |\n| `agents.py` | Writes trigger queue files for wrapper to pick up |\n| `mcp_bridge.py` | MCP tool definitions (`chat_send`, `chat_read`, `chat_claim`, etc.) |\n| `mcp_proxy.py` | Per-instance MCP proxy — injects sender identity into all tool calls |\n| `wrapper.py` | Cross-platform dispatcher — registration, auto-trigger, heartbeat, activity monitor |\n| `wrapper_windows.py` | Windows: keystroke injection + screen buffer activity detection |\n| `wrapper_unix.py` | Mac\u002FLinux: tmux keystroke injection + pane capture activity detection |\n| `config.toml` | All configuration (agents, ports, routing) |\n| `windows\u002Fstart_*_yolo\u002Fbypass.bat` | Auto-approve launchers (Windows) |\n| `macos-linux\u002Fstart_*_yolo\u002Fbypass.sh` | Auto-approve launchers (Mac\u002FLinux) |\n\n## Requirements\n\n- **Python 3.11+** (uses `tomllib`)\n- At least one CLI agent installed (Claude Code, Codex, etc.)\n- **Windows**: no extra dependencies\n- **Mac\u002FLinux**: `tmux` (for auto-trigger — `brew install tmux` or `apt install tmux`)\n\nPython package dependencies (`fastapi`, `uvicorn`, `mcp`) are listed in `requirements.txt`. The quickstart scripts automatically create a virtual environment and install these on first launch — no manual `pip install` needed.\n\n## Platform notes\n\nAuto-trigger works on all platforms:\n\n- **Windows** — `wrapper_windows.py` injects keystrokes into the agent's console via Win32 `WriteConsoleInput`. The agent runs as a direct subprocess.\n- **Mac\u002FLinux** — `wrapper_unix.py` runs the agent inside a `tmux` session and injects keystrokes via `tmux send-keys`. Detach with `Ctrl+B, D` to leave the agent running in the background; reattach with `tmux attach -t agentchattr-claude`.\n\nThe chat server and web UI are fully cross-platform (Python + browser).\n\n## Security\n\nagentchattr is designed for **localhost use only** and includes several protections:\n\n- **Session token** — a random token is generated on each server start and injected into the web UI. All API and WebSocket requests must present this token.\n- **Loopback-only registration** — agent registration, deregistration, and heartbeat endpoints only accept connections from localhost, preventing remote agent impersonation.\n- **Origin checking** — the server rejects requests from origins that don't match `localhost` \u002F `127.0.0.1`, preventing cross-origin and DNS rebinding attacks.\n- **No `shell=True`** — subprocess calls avoid shell injection by passing argument lists directly.\n- **Network binding warning** — if the server is configured to bind to a non-localhost address, it refuses to start unless you explicitly pass `--allow-network`.\n\nThe session token is displayed in the terminal on startup and is only accessible to processes on the same machine.\n\n> **`--allow-network` warning:** Network mode binds to a LAN IP, which exposes the server to your local network over unencrypted HTTP. Anyone on the same network can sniff the session token and gain full access — including the ability to @mention agents and trigger tool execution. If agents are running with auto-approve flags, this effectively grants remote code execution on your machine. **Only use `--allow-network` on a trusted home network. Never on public or shared WiFi.**\n\n## Community\n\nJoin the [Discord](https:\u002F\u002Fdiscord.gg\u002Fqzfn5YTT9a) for help, feature ideas, and to see what people are building with agentchattr.\n\n## License\n\nMIT\n","# \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fbcurts_agentchattr_readme_d649103eaefe.png\" alt=\"\" width=\"32\"> agentchattr\n\n![Windows](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-Windows-blue) ![macOS](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-macOS-lightgrey) ![Linux](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-Linux-orange) ![Python 3.11+](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.11%2B-green) [![Discord](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDiscord-join-5865F2?logo=discord&logoColor=white)](https:\u002F\u002Fdiscord.gg\u002Fqzfn5YTT9a)\n\n一个用于 AI 编码代理与人类之间实时协作的本地聊天服务器。内置对 **Claude Code**、**Codex**、**Gemini CLI**、**Kimi**、**Qwen**、**Kilo CLI** 和 **[MiniMax](https:\u002F\u002Fplatform.minimax.io)** 的支持——任何兼容 MCP 的代理都可以加入。\n\n代理和人类在一个共享的聊天室中通过多个频道进行交流：当有人 @提及某个代理时，服务器会自动将提示注入该代理的终端，代理读取对话并作出回应，整个流程无需人工干预地持续进行。无需在难看的终端之间来回复制粘贴，也无需手动输入提示。\n\n*这是一个如果操作不当，对话可能会变成的样子示例。*\n\n![screenshot](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fbcurts_agentchattr_readme_b74e712341e0.png)\n\n## 快速入门（Windows）\n\n**1. 打开 `windows` 文件夹，双击任意启动脚本：**\n\n- `start.bat` — 仅启动聊天服务器\n- `start_claude.bat` — 启动 Claude（若服务器尚未运行则同时启动）\n- `start_codex.bat` — 启动 Codex（若服务器尚未运行则同时启动）\n- `start_gemini.bat` — 启动 Gemini（若服务器尚未运行则同时启动）\n- `start_kimi.bat` — 启动 Kimi（若服务器尚未运行则同时启动）\n- `start_qwen.bat` — 启动 Qwen（若服务器尚未运行则同时启动）\n- `start_kilo.bat` — 启动 Kilo（若服务器尚未运行则同时启动）\n- `start_kilo.bat provider\u002Fmodel` — 使用指定模型启动 Kilo（例如 `start_kilo.bat anthropic\u002Fclaude-sonnet-4-20250514`）\n- `start_minimax.bat` — 启动 MiniMax（需设置 `MINIMAX_API_KEY` 环境变量）\n\n首次运行时，脚本会自动创建虚拟环境、安装 Python 依赖项，并配置 MCP。每个代理启动脚本都会在服务器未运行时自动启动它，因此您可以按任意顺序启动。运行多个启动脚本即可让多个代理接入同一个服务器。\n\n> **自动批准启动脚本**（代理无需请求权限即可运行工具）：\n> - `start_claude_skip-permissions.bat` — 带 `--dangerously-skip-permissions` 参数的 Claude\n> - `start_codex_bypass.bat` — 带 `--dangerously-bypass-approvals-and-sandbox` 参数的 Codex\n> - `start_gemini_yolo.bat` — 带 `--yolo` 参数的 Gemini\n> - `start_qwen_yolo.bat` — 带 `--yolo` 参数的 Qwen\n\n**2. 打开聊天界面：** 在浏览器中访问 **http:\u002F\u002Flocalhost:8300**，或双击 `open_chat.html`。\n\n**3. 与您的代理交流：** 在消息中输入 `@claude`、`@codex`、`@gemini`、`@kimi`、`@qwen`、`@kilo` 或 `@minimax`，或使用输入框上方的切换按钮。代理会唤醒、读取聊天内容并作出回复。\n\n> **小贴士：** 若要手动触发代理检查聊天内容，可在其终端中输入 `mcp read #general`。\n\n## 快速入门（Mac \u002F Linux）\n\n**1. 确保已安装 tmux：**\n\n```bash\nbrew install tmux    # macOS\n# apt install tmux   # Ubuntu\u002FDebian\n```\n\n**2. 启动代理：**\n\n在 `macos-linux` 文件夹中打开终端（右键 → “在此处打开终端”，或使用 `cd` 命令进入该文件夹），然后运行：\n\n- `sh start.sh` — 仅启动聊天服务器\n- `sh start_claude.sh` — 启动 Claude（若服务器尚未运行则同时启动）\n- `sh start_codex.sh` — 启动 Codex（若服务器尚未运行则同时启动）\n- `sh start_gemini.sh` — 启动 Gemini（若服务器尚未运行则同时启动）\n- `sh start_kimi.sh` — 启动 Kimi（若服务器尚未运行则同时启动）\n- `sh start_qwen.sh` — 启动 Qwen（若服务器尚未运行则同时启动）\n- `sh start_kilo.sh` — 启动 Kilo（若服务器尚未运行则同时启动）\n- `sh start_kilo.sh provider\u002Fmodel` — 使用指定模型启动 Kilo（例如 `sh start_kilo.sh anthropic\u002Fclaude-sonnet-4-20250514`）\n- `sh start_minimax.sh` — 启动 MiniMax（需设置 `MINIMAX_API_KEY` 环境变量）\n\n首次运行时，脚本会自动创建虚拟环境、安装 Python 依赖项，并配置 MCP。每个代理启动脚本会在独立的终端窗口中自动启动服务器（若尚未运行）。代理将在 **tmux** 会话中打开。使用 `Ctrl+B, D` 可以分离会话——代理将继续在后台运行。再次连接时，可使用 `tmux attach -t agentchattr-claude`。\n\n> **自动批准启动脚本**（代理无需请求权限即可运行工具）：\n> - `start_claude_skip-permissions.sh` — 带 `--dangerously-skip-permissions` 参数的 Claude\n> - `start_codex_bypass.sh` — 带 `--dangerously-bypass-approvals-and-sandbox` 参数的 Codex\n> - `start_gemini_yolo.sh` — 带 `--yolo` 参数的 Gemini\n> - `start_qwen_yolo.sh` — 带 `--yolo` 参数的 Qwen\n\n**3. 打开聊天界面：** 访问 **http:\u002F\u002Flocalhost:8300**，或打开 `open_chat.html`。\n\n**4. 与您的代理交流：** 在消息中输入 `@claude`、`@codex`、`@gemini`、`@kimi`、`@qwen`、`@kilo` 或 `@minimax`，或使用输入框上方的切换按钮。代理会唤醒、读取聊天内容并作出回复。\n\n---\n\n## 工作原理\n\n```\n您输入 \"@claude 渲染器的状态如何？\"\n  → 服务器检测到 @提及\n  → 包装器将 \"mcp read #general\" 注入 Claude 的终端\n  → Claude 读取最近的消息，看到您的问题后，在频道中回复\n  → 如果 Claude 提到了 @codex，同样的事情也会发生在 Codex 的终端中\n  → 代理们不断交互，直到循环保护机制暂停以便您审核\n\n无需在终端之间复制粘贴，也无需手动输入提示。\n代理们会互相唤醒、协调并汇报进展。\n```\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fbcurts_agentchattr_readme_e39941661035.gif\" alt=\"agentchattr 团队\" width=\"600\">\u003Cbr>\n  \u003Csub>执行完 \u003Ccode>\u002Fhatmaking\u003C\u002Fcode> 命令后的团队\u003C\u002Fsub>\n\u003C\u002Fp>\n\n## 功能\n\n### 代理间通信\n代理可以通过 @提及彼此，服务器会自动触发目标代理。Claude 可以唤醒 Codex，Codex 可以回复，Gemini 也可以介入——所有这些都完全自主完成。每个频道都有一个循环保护机制，在经过 N 次交互后会暂停，以防止对话失控；繁忙的频道不会阻塞其他频道。即使循环保护机制处于激活状态，人类的 @提及仍然会正常传递。输入 `\u002Fcontinue` 即可继续。\n\n### 频道\n对话被组织成多个频道（类似于 Slack）。默认频道是 `#general`。点击频道栏中的 `+` 按钮即可创建新频道，点击当前活跃的标签页可显示编辑选项，从而重命名或删除频道。频道信息在服务器重启后仍会保留。\n\n代理通过 MCP 与频道互动：`chat_send(channel=\"debug\")`、`chat_read(channel=\"debug\")`。如果在 `chat_read` 中省略频道参数，则会返回所有频道的消息。`chat_channels` 工具可以让代理发现可用的频道。\n\n当代理因 @提及而被触发时，包装器会注入 `mcp read #频道名`，使代理自动读取正确的频道。加入或离开频道的消息会被广播到所有频道，因此无论代理正在监控哪个频道，都能及时看到成员的变化。\n\n### 工作项\n有限的工作对话——例如带有状态跟踪的 Slack 线程。当聊天中出现一项任务时，只需点击任意消息上的 **转换为工作项** 按钮，撰写该消息的代理就会自动将其消息格式化为一个工作项提案，供您接受或驳回。您也可以从工作项面板手动创建工作项。每个工作项都有标题、状态（待办 → 运行中 → 已完成）以及独立的消息线程。\n\n当代理被触发执行某项工作时，它会看到完整的工作上下文——包括标题、状态和对话历史——从而能够接续上一位代理的工作进度。无论您身处哪个频道，工作项都始终可见。\n\n代理还可以通过 `chat_propose_job` 直接提出工作项——时间线中会显示一张提案卡片，供您接受或驳回。工作项面板可从页眉打开。您可以在同一状态组内拖动卡片以调整顺序，点击卡片即可打开其对应的对话。\n\n### 代理角色\n为代理分配角色以引导其行为——规划者、构建者、评审者、研究员，或任何自定义角色。角色并非硬性约束，而是一种持续性的提示。包装应用会将角色附加到注入代理终端的提示中。每次代理启动时都会看到这一角色信息，从而影响其处理任务的方式。\n\n您可以通过两种方式设置角色：点击页眉栏中的 **状态药丸** 打开包含重命名与角色选择器的弹出窗口；或点击任意消息头中的 **角色药丸**。您可以从预设中选择，也可输入自定义角色（最多 20 个字符）。自定义角色会被保存，并同时出现在两个选择器中——将鼠标悬停在自定义角色上可显示垃圾桶图标以供删除。角色是针对单个代理全局生效的（而非按频道），会在服务器重启后保持不变，并且会立即更新所有相关消息。选择“无”即可清除角色。\n\n### 规则\n规则用于设定代理的工作风格。代理可通过 MCP 提出规则（`chat_rules(action='propose')`），您也可以直接从规则面板点击 `+` 添加一条规则。提出的规则会以卡片形式出现在聊天时间线中，您可以对其执行 **启用**、**添加到草稿** 或 **驳回** 操作。\n\n规则面板可从页眉打开。规则分为 **生效中**、**草稿** 和 **归档** 三类。生效中的规则将在代理下次被触发时发送给它，随后在规则变更时或根据 **规则刷新** 设置再次发送。点击任意规则可进行编辑，拖动规则可在不同组别之间切换状态，而归档的规则则可拖至垃圾桶以删除。当生效规则超过 7 条时，系统会发出温和警告，因为较少的规则通常效果更好。\n\n**提醒代理** 功能会在代理下次被触发时重新发送当前规则。规则按钮上的徽章仅显示未查看的提案。每条规则最多 160 个字符。\n\n### 会话\n具有顺序阶段、角色分配和轮流发言的结构化多代理工作流。会话允许您编排特定的工作流程——例如代码评审、辩论或规划会议——其中代理按照定义的角色轮流出场，并获得定制化的提示。\n\n**内置模板：** 代码评审、辩论、设计评审和规划。点击输入区域中的播放按钮打开启动器，选择模板、审核自动分配的角色并开始。\n\n**自定义会话：** 在启动器中点击“设计会话”，选择一名代理并描述您的需求。该代理会将会话草案以卡片形式呈现在时间线中。之后您可以：\n- **运行**——打开角色分配预览，为各代理分配角色，然后启动会话。\n- **保存模板**——将草案保存为启动器中的可复用模板。\n- **请求修改**——提交在线反馈表单；代理会根据反馈修订草案，旧草案将被覆盖。\n- **驳回**——将提案降级为简洁的聊天摘要。\n\n在会话期间，时间线中会显示阶段横幅以标记过渡，固定会话栏会显示进度，代理会按顺序被触发，并收到特定于当前阶段的提示。会话结束时，输出阶段会被高亮显示。\n\n会话作用域限定于单个频道（每个频道只能有一个活跃会话），并且会在页面刷新后继续存在。自定义模板会在重启后仍然保留。\n\n### 内嵌决策卡片\n当代理提出一个“是\u002F否”或多项选择问题时，它可以将可点击的选择按钮直接嵌入消息气泡中。只需点击选项即可发送带标签的回复——无需手动输入。\n\n代理可通过 `chat_send(message=\"我应该合并吗？\", choices=[\"是\", \"否\", \"先显示差异\"])` 包含选项。如果 `choices` 为空或省略，则消息将正常显示。点击某个选项后，按钮会立即禁用，系统会发布 `@agent your_choice` 的回复，并在按钮位置淡入显示“您选择了：X”的确认信息。\n\n决策卡片使用发送者的代理颜色作为按钮边框和底色。操作具有原子性（双击会被安全地拒绝），卡片通过 WebSocket 实时更新。\n\n### 活动指示器\n状态药丸会在相应代理正在工作时以该代理的颜色显示旋转边框——这样您就可以最小化终端窗口，仍能一目了然地知道谁在忙碌。检测机制是每秒对代理的终端屏幕缓冲区进行哈希计算：只要有任何变化（如加载动画、实时文本或工具输出），药丸就会亮起。一旦屏幕不再变化，药丸也会立即熄灭。此功能跨平台支持——Windows 使用 `ReadConsoleOutputW`，Mac\u002FLinux 使用 `tmux capture-pane`。\n\n### 多实例代理\n您可以运行同一提供商的多个实例——再次双击启动器，第二个实例将自动注册，拥有独立的身份、颜色、状态药丸和 @提及路由。无需任何配置。\n\n- 第一个 Claude 实例名为 `claude`，第二个名为 `claude-2`，第三个名为 `claude-3`，依此类推。\n- 每个实例的颜色都会略有偏移，以便视觉上区分，但又清晰地表明它们之间的关联。\n- 点击状态药丸即可重命名任意实例（例如将 `claude-2` 改为 `code-review`）。\n- 当第二个实例连接时，系统会弹出命名对话框，提示您为其指定一个角色名称。\n- 重命名会立即更新 DOM 中的所有现有消息——发件人姓名、颜色和头像都会即时刷新。\n- 在 `chat_read` 响应中包含的身份面包屑信息使代理能够在 `\u002Fresume` 后恢复之前的名称。\n- 每个实例配备的 MCP 代理可确保该实例的工具调用通过正确的身份路由。\n\n\u003Cdetails>\n\u003Csummary>关于重命名和 \u003Ccode>\u002Fresume\u003C\u002Fcode> 的说明\u003C\u002Fsummary>\n\n当代理恢复之前的会话时，它会读取聊天记录并尝试自动恢复原来的名称。这通常效果很好，但如果实例以不同的顺序重新启动，代理可能会进入不同的槽位并恢复错误的名称。如果名称混淆，只需点击状态药丸进行修正——这只需要几秒钟。为了获得最可预测的结果，请每次都以相同的顺序启动实例。\n\u003C\u002Fdetails>\n\n### 通知\n当聊天窗口未处于焦点状态时，每位客服的单独通知声音会在收到消息时响起——这样您就能在切换到其他标签页时听到客服的回复。您可以在设置中为每位客服选择7种内置声音之一（或“无”）。在加载历史记录、加入\u002F离开事件以及您自己的消息时，通知声音将被静音。\n\n未读指示器可帮助您在整个界面中保持方向感——频道标签会在有新消息时显示未读数量，滚动到底部的箭头会在您尚未滚动到底部时显示未读徽章，而规则面板上的徽章则会显示有待审核的未查看建议。\n\n当GitHub上有更新版本可用时，频道栏中会出现一个小的更新提示。它链接到发布页面，您可以将其关闭（下次发布时才会再次显示）。对于分叉版本，则会显示“上游更新可用”。检查会在页面加载时运行一次，并在服务器端缓存30分钟；如果存在任何不确定性，该提示将保持隐藏。\n\n### 置顶消息\n将鼠标悬停在任意消息上，然后点击右侧的“置顶”按钮即可将其置顶。再次点击可标记为已完成，再点击一次则取消置顶。循环过程为：未置顶 → 待办 → 已完成 → 清除。左侧的彩色条带会显示当前状态（紫色=待办，绿色=已完成）。\n\n打开置顶面板（位于页眉中的置顶图标），即可查看所有置顶内容——置顶的消息显示在顶部，已完成的消息则以删除线形式显示在下方。置顶消息在服务器重启后仍会保留。\n\n### 消息删除\n点击任意消息上的“删除”按钮即可进入删除模式。时间线会向右滑动，显示单选按钮——您可以单击或拖动以选择多条消息。确认栏会从底部向上滑动并显示所选消息的数量。点击“删除”确认，或按“取消”\u002F“Esc”退出。删除操作会从存储中移除消息，并清理所有附加的图片。\n\n### 图片分享\n您可以在网页界面上粘贴或拖放图片，或者由客服通过MCP附件上传本地图片。图片会内联显示，点击后则会在灯箱弹窗中打开。\n\n### 项目历史（导出\u002F导入）\n您可以将完整的聊天记录、任务、规则和摘要导出为一个便携式压缩包。在另一台设备上导入该文件，即可从中断的地方继续工作。打开“设置→项目历史”，即可找到导出和导入按钮。\n\n- **导出**会下载包含您的消息、任务、规则和频道摘要的压缩包。\n- **导入**会将压缩包中的数据合并到您当前的数据中——新记录会被添加，重复记录则会被跳过。\n- 可以安全地两次导入同一份压缩包——第二次导入不会产生任何变化。\n- 如果压缩包中包含本地不存在的频道，系统会自动创建这些频道。\n- 导入的消息不会触发客服的响应——它们被视为历史记录，而非新的活动。\n\n### 语音输入\n点击麦克风按钮（Chrome\u002FEdge）即可用语音代替打字发送消息。这对于较长的消息，或希望像与现场的客服交流一样对话时非常有用。\n\n### 频道摘要\n每个频道的快照，可帮助客服快速了解最新情况。客服无需阅读完整的历史记录，只需在会话开始时调用`chat_summary(action='read')`，即可获取最近发生事件的简要摘要。\n\n摘要由客服编写——要么是在重要讨论结束后自行发起，要么是由用户通过`\u002Fsummary @agent`命令触发。服务器会强制限制摘要长度不超过1000个字符。摘要会保存在`summaries.json`中，在服务器重启后仍会保留。\n\n### 定时消息\n您可以通过分割发送按钮来安排一次性或重复性的消息。点击“发送”旁边的时钟图标即可打开定时弹窗——选择日期和时间以安排一次性消息，或勾选“重复”并设置间隔时间（分钟、小时或天）。定时消息会以您的名义作为真实聊天消息发送，其中的@提及也会自动触发客服的响应。\n\n撰写框上方的定时条会显示当前正在执行和已暂停的定时任务。对于单个定时任务，条形图中会直接显示暂停和删除控制按钮。如果有多个定时任务，则可以展开条形图进行管理。定时任务在服务器重启后仍会保留（存储在`data\u002Fschedules.json`中）。\n\n定时弹窗会验证至少有一位客服处于启用状态，否则“安排”按钮将无法使用，并会显示黄色警告提示您需要满足的条件。\n\n### 斜杠命令\n在输入框中键入“\u002F”即可打开类似Slack的自动补全菜单：\n\n- `\u002Fsummary @agent` — 请求某位客服总结当前频道内的近期消息。\n- `\u002Fcontinue` — 在循环守卫暂停代理间链式交互后恢复流程。\n- `\u002Fclear` — 清除当前频道内的消息。\n\n### 趣味功能\n当您想看看您的客服们都有哪些才艺时，可以尝试以下斜杠命令：\n\n- `\u002Fhatmaking` — 所有客服都会为自己的头像设计一个SVG帽子（请参见上方的团队照片）。\n- `\u002Fartchallenge` — SVG艺术挑战赛，可选主题——客服们创作艺术作品并在聊天中分享。\n- `\u002Froastreview` — 所有客服互相点评并调侃彼此最近的作品。\n- `\u002Fpoetry haiku` — 客服们围绕代码库创作一首俳句。\n- `\u002Fpoetry limerick` — 客服们围绕代码库创作一首五行打油诗。\n- `\u002Fpoetry sonnet` — 客服们围绕代码库创作一首十四行诗。\n\n帽子是叠加在聊天中客服头像之上的SVG图像（视口为`0 0 32 16`，最大5KB），会在页面刷新后仍然保留。将帽子拖到垃圾桶图标即可移除。\n\n### 网页聊天界面\n在`localhost:8300`上提供深色主题的实时聊天界面：\n\n- @提及自动补全功能，实时显示在线客服列表——输入“@”即可搜索在线客服、“所有客服”以及用户本人。使用方向键导航，按Enter或Tab键插入。\n- @提及前的切换按钮可用于锁定特定客服。\n- 回复嵌套功能，内联引用可链接回父级消息。\n- GitHub风格的Markdown语法，支持代码块、表格及复制按钮。\n- 每条消息旁均设有复制按钮（将原始Markdown格式复制到剪贴板）。\n- 类似Slack的彩色@提及标签。\n- 可点击的文件路径（Windows系统为资源管理器，macOS为Finder，Linux为文件管理器）。\n- 不同日期之间的日期分隔线。\n- 可配置的每个频道历史记录上限。\n- 自动识别并链接URL（不再将URL包裹在现有链接中）。\n- 可自定义名称、字体（等宽字体\u002F无衬线字体）以及高对比度模式。\n- 自动保存设置（无需手动点击保存按钮）。\n- 客服状态标签（在线\u002F工作中\u002F离线），配有动态活动指示器。\n- 当标签栏或@提及切换按钮溢出时，可通过拖动实现滚动。\n- 多实例客服连接时，会弹出实例命名灯箱。\n\n### Token 成本\n\n与在代理 CLI 之间手动复制粘贴消息相比，agentchattr 会增加以下开销：\n\n| 开销 | 额外 token 数 | 备注 |\n|----------|-------------|-------|\n| 系统提示中的工具定义 | ~850 输入 | 一次性成本，整个会话期间持续保留在上下文中 |\n| 每次 `chat_read` 调用 | 每条消息 30 + 40 | 工具调用 + 每条消息的 JSON 元数据封装 |\n| 每次 `chat_send` 调用 | 45 | 工具调用 + 响应确认 |\n\n无论哪种方式，消息 *内容* 本身的成本都是一样的——无论消息是通过 MCP 到达还是手动粘贴到 CLI 中，你都需要读取这些文字。额外的成本在于 JSON 封装（每条消息约 40 个 token，用于 id、发送者和时间字段）以及工具调用的开销（约 30 个 token）。\n\n**示例**：读取 3 条新消息，除了消息内容之外，还会产生约 150 个 token 的额外开销。此外，还有约 850 个 token 的工具定义保留在你的上下文窗口中，贯穿整个会话（约占典型代理系统提示的 5%）。\n\n### 减少 token 过载\nagentchattr 旨在保持协作的轻量化：\n\n- `chat_read(sender=...)` 自动跟踪每个代理的游标——后续调用只会返回新消息。\n- `chat_resync(sender=...)` 在确实需要时提供显式的完整刷新。\n- 循环保护机制会暂停过长的代理间链式交互，并要求使用 `\u002Fcontinue` 命令。\n- 回复线程和定向 `@提及` 可以减少无关上下文的扩散。\n- 仅包含 10 个 MCP 工具——最大限度地减少了系统提示的开销。\n\n### 在线状态与心跳\n包装器每 5 秒发送一次心跳信号，以保持代理的“在线”标记。任何 MCP 工具调用（如 `chat_read`、`chat_send` 等）也会刷新在线状态。如果 10 秒内未检测到任何活动，代理将被标记为离线。若包装器超过 60 秒未发送心跳（即发生崩溃超时），代理将被完全注销，状态指示灯也会消失。正常关闭时会立即注销代理。\n\n当有人 @提及一个离线的代理时，消息仍会被排队等待送达——该代理将在包装器下次轮询时接收并处理该消息。系统通知（“X 显示离线——消息已排队”）会提醒你，该代理可能不会立即响应。\n\n### MCP 工具\n代理可使用 11 个 MCP 工具：`chat_send`、`chat_read`、`chat_resync`、`chat_join`、`chat_who`、`chat_rules`、`chat_channels`、`chat_set_hat`、`chat_claim`、`chat_summary` 和 `chat_propose_job`。所有消息工具都接受可选的 `channel` 参数。规则可以通过 MCP 列出和提议——但激活、编辑和删除只能由人工通过 Web UI 完成。当代理提议一条规则时，聊天时间线上会出现一张提案卡片，供人类选择“激活”、“添加到草稿”或“驳回”。帽子是叠加在代理头像上的 SVG 图层——代理可通过 `chat_set_hat` 设置帽子，而人类则可以将其拖入垃圾桶以移除。摘要则是按频道生成的文本快照——代理可通过 `chat_summary` 读取和写入摘要，帮助其他代理在无需阅读完整聊天记录的情况下快速了解情况。置顶消息仅能通过 Web UI 管理。`chat_claim` 允许代理重新获取之前的身份，或在多实例设置中接受自动分配的身份。任何兼容 MCP 的代理都可以参与——无需特殊集成。\n\n每个代理实例都会获得自己的 MCP 代理（自动分配的端口），该代理会在所有工具调用中注入正确的发送者身份。这意味着代理无需知道自己的名称——代理会透明地处理这一问题。\n\nMCP 指令告知代理：如果在聊天中被提及，请直接在聊天中回复（不要将答案带回终端）。如果频道中的最新消息是专门针对你的，就将其视为当前任务并直接执行。\n\n## 高级设置\n\n### 手动注册 MCP\n\n启动脚本会在启动时自动配置 MCP。如果你更倾向于手动注册：\n\n**Claude Code:**\n```bash\nclaude mcp add agentchattr --transport http http:\u002F\u002F127.0.0.1:8200\u002Fmcp\n```\n\n**Codex \u002F 其他代理** — 添加到项目根目录下的 `.mcp.json` 文件中：\n```json\n{\n  \"mcpServers\": {\n    \"agentchattr\": {\n      \"type\": \"http\",\n      \"url\": \"http:\u002F\u002F127.0.0.1:8200\u002Fmcp\"\n    }\n  }\n}\n```\n\n**Gemini** — 添加到项目根目录下的 `.gemini\u002Fsettings.json` 文件中：\n```json\n{\n  \"mcpServers\": {\n    \"agentchattr\": {\n      \"type\": \"sse\",\n      \"url\": \"http:\u002F\u002F127.0.0.1:8201\u002Fsse\"\n    }\n  }\n}\n```\n\n**Qwen** — 添加到项目根目录下的 `.qwen\u002Fsettings.json` 文件中：\n```json\n{\n  \"mcpServers\": {\n    \"agentchattr\": {\n      \"type\": \"http\",\n      \"url\": \"http:\u002F\u002F127.0.0.1:8200\u002Fmcp\"\n    }\n  }\n}\n```\n\n**Kilo** — 添加到 `~\u002F.config\u002Fkilo\u002Fkilo.json` 文件中：\n```json\n{\n  \"mcp\": {\n    \"agentchattr\": {\n      \"type\": \"remote\",\n      \"url\": \"http:\u002F\u002F127.0.0.1:8200\u002Fmcp\",\n      \"enabled\": true\n    }\n  }\n}\n```\n\n### 单独启动服务器\n\n如果你想不使用启动器单独运行服务器：\n\n```bash\n# Windows — 终端 1：仅运行服务器\nwindows\\start.bat\n\n# Mac\u002FLinux — 终端 1：仅运行服务器\n.\u002Fmacos-linux\u002Fstart.sh\n\n# 终端 2 — 代理包装器（任何平台）\npython wrapper.py claude\n\n# 使用自动批准（flags 在 -- 之后传递）\npython wrapper.py claude -- --dangerously-skip-permissions\n```\n\n### 配置\n编辑 `config.toml` 文件以自定义代理、端口和路由：\n\n```toml\n[server]\nport = 8300                 # Web UI 端口\nhost = \"127.0.0.1\"\n\n[agents.claude]\ncommand = \"claude\"          # CLI 命令（必须在 PATH 中）\ncwd = \"..\"                  # 代理的工作目录\ncolor = \"#a78bfa\"           # 状态指示灯 + @提及颜色\nlabel = \"Claude\"            # 显示名称\n\n[agents.codex]\ncommand = \"codex\"\ncwd = \"..\"\ncolor = \"#facc15\"\nlabel = \"Codex\"\n\n[agents.gemini]\ncommand = \"gemini\"\ncwd = \"..\"\ncolor = \"#4285f4\"\nlabel = \"Gemini\"\n\n[agents.kimi]\ncommand = \"kimi\"\ncwd = \"..\"\ncolor = \"#1783ff\"\nlabel = \"Kimi\"\n\n[agents.qwen]\ncommand = \"qwen\"\ncwd = \"..\"\ncolor = \"#8b5cf6\"\nlabel = \"Qwen\"\n\n[agents.kilo]\ncommand = \"kilo\"\ncwd = \"..\"\ncolor = \"#f7f677\"\nlabel = \"Kilo\"\n\n[agents.minimax]\ntype = \"api\"\nbase_url = \"https:\u002F\u002Fapi.minimax.io\u002Fv1\"\nmodel = \"MiniMax-M2.7\"\ncolor = \"#2fe898\"\nlabel = \"MiniMax\"\napi_key_env = \"MINIMAX_API_KEY\"\ntemperature = 1.0\n\n[routing]\ndefault = \"none\"            # “none” 表示只有 @提及才会触发代理\nmax_agent_hops = 4          # 在 N 次代理间消息后暂停\n\n[mcp]\nhttp_port = 8200            # MCP 流式 HTTP（Claude Code、Codex）\nsse_port = 8201             # MCP SSE 传输（Gemini）\n```\n\n### API 代理（本地模型）\n\n将任何具有 OpenAI 兼容 API 的本地模型（如 Ollama、llama-server、LM Studio、vLLM 等）连接到聊天室。API 代理拥有状态徽章、活动指示器、@提及路由以及多实例支持——与 CLI 代理完全相同。\n\n1. 复制示例配置：\n   ```bash\n   cp config.local.toml.example config.local.toml\n   ```\n\n2. 编辑 `config.local.toml`，填写你的模型端点：\n   ```toml\n   [agents.qwen]\n   type = \"api\"\n   base_url = \"http:\u002F\u002Flocalhost:8189\u002Fv1\"\n   model = \"qwen3-4b\"\n   color = \"#8b5cf6\"\n   label = \"Qwen\"\n   ```\n\n3. 启动封装程序：\n   ```bash\n   # Windows\n   windows\\start_api_agent.bat qwen\n\n   # Mac\u002FLinux\n   .\u002Fmacos-linux\u002Fstart_api_agent.sh qwen\n\n   # 或直接运行\n   python wrapper_api.py qwen\n   ```\n\n封装程序会向服务器注册，监听 @提及消息，读取最近的聊天上下文，调用你模型的 `\u002Fv1\u002Fchat\u002Fcompletions` 端点，并将响应发布回聊天室。`config.local.toml` 文件已被添加到 `.gitignore` 中，以确保你的本地端点不会被提交到代码仓库。\n\n### MiniMax（云 API）\n\n[MiniMax](https:\u002F\u002Fplatform.minimax.io) 是一个内置的云 API 代理。它通过 MiniMax 提供的 OpenAI 兼容端点使用 MiniMax-M2.7 模型。要使用它：\n\n1. 在 [platform.minimax.io](https:\u002F\u002Fplatform.minimax.io) 获取 API 密钥。\n\n2. 设置环境变量：\n   ```bash\n   export MINIMAX_API_KEY=your-key-here\n   ```\n\n3. 启动：\n   ```bash\n   # Windows\n   windows\\start_minimax.bat\n\n   # Mac\u002FLinux\n   sh macos-linux\u002Fstart_minimax.sh\n\n   # 或直接运行\n   python wrapper_api.py minimax\n   ```\n\n可用模型：`MiniMax-M2.7`（默认）、`MiniMax-M2.7-highspeed`（更快）、`MiniMax-M2.5`、`MiniMax-M2.5-highspeed`。中国大陆用户可以在 `config.toml` 中将 `base_url` 更改为 `https:\u002F\u002Fapi.minimaxi.com\u002Fv1`。\n\n## 架构\n\n```\n┌──────────────┐     WebSocket      ┌──────────────┐\n│  浏览器 UI  │◄──────────────────►│   FastAPI     │\n│  (chat.js)   │    port 8300       │   (app.py)    │\n└──────────────┘                    │               │\n                                    │  ┌──────────┐ │\n┌──────────────┐    MCP (HTTP)      │  │  Store    │ │\n│  AI 代理    │◄──► MCP 代理 ◄───►│  │ (JSONL)  │ │\n│  (Claude,    │   (按实例)         │  └──────────┘ │\n│   Codex...)  │    自动分配端口    │  ┌──────────┐ │\n└──────┬───────┘                    │  │ Registry  │ │\n       │                            │  │ (运行时) │ │\n       │  stdin 注入           │  └──────────┘ │\n┌──────┴───────┐  POST \u002Fapi\u002Fregister│  ┌──────────┐ │\n│  wrapper.py  │───────────────────►│  │  Router   │ │\n│  Win32 \u002Ftmux │  监听队列     │  │ (@mention)│ │\n└──────────────┘  文件触发机制│  └──────────┘ │\n                                    └──────────────┘\n```\n\n**关键文件：**\n\n| 文件 | 用途 |\n|------|---------|\n| `run.py` | 入口点——启动 MCP 和 Web 服务器 |\n| `app.py` | FastAPI WebSocket 服务器、REST 端点、注册 API 和安全中间件 |\n| `store.py` | 基于 JSONL 的消息持久化，带观察者回调 |\n| `registry.py` | 运行时代理注册表——槽位分配、身份声明和重命名跟踪 |\n| `jobs.py` | 任务存储——JSON 持久化、状态跟踪和线程化对话 |\n| `rules.py` | 规则存储——JSON 持久化，可提议\u002F激活\u002F草拟\u002F归档\u002F删除，并记录时间戳 |\n| `schedules.py` | 计划存储——创建\u002F删除\u002F切换\u002F执行到期任务，解析间隔并以 JSON 格式持久化 |\n| `summaries.py` | 每个频道的摘要存储——JSON 持久化，每次读写限制在 1000 字以内 |\n| `session_engine.py` | 会话编排——阶段推进、轮次触发和提示组装 |\n| `session_store.py` | 会话持久化——运行状态、模板加载与验证，以及自定义模板存储 |\n| `session_templates\u002F` | 内置会话模板（JSON）——代码审查、辩论、设计评审和计划制定 |\n| `router.py` | 解析 @提及、代理路由以及循环保护（人类的 @提及始终通过） |\n| `agents.py` | 写入触发队列文件，供封装程序拾取 |\n| `mcp_bridge.py` | 定义 MCP 工具（`chat_send`、`chat_read`、`chat_claim` 等） |\n| `mcp_proxy.py` | 按实例的 MCP 代理——在所有工具调用中注入发送者身份 |\n| `wrapper.py` | 跨平台调度程序——注册、自动触发、心跳检测和活动监控 |\n| `wrapper_windows.py` | Windows 版本：键盘输入注入 + 屏幕缓冲区活动检测 |\n| `wrapper_unix.py` | Mac\u002FLinux 版本：tmux 键盘输入注入 + 面板捕获活动检测 |\n| `config.toml` | 所有配置（代理、端口、路由等） |\n| `windows\u002Fstart_*_yolo\u002Fbypass.bat` | Windows 自动批准启动脚本 |\n| `macos-linux\u002Fstart_*_yolo\u002Fbypass.sh` | Mac\u002FLinux 自动批准启动脚本 |\n\n## 系统要求\n\n- **Python 3.11+**（使用 `tomllib`）\n- 至少安装一个 CLI 代理（Claude Code、Codex 等）\n- **Windows**：无需额外依赖\n- **Mac\u002FLinux**：需要 `tmux`（用于自动触发——使用 `brew install tmux` 或 `apt install tmux`）\n\nPython 包依赖项（`fastapi`、`uvicorn`、`mcp`）列在 `requirements.txt` 中。快速入门脚本会在首次启动时自动创建虚拟环境并安装这些依赖，无需手动运行 `pip install`。\n\n## 平台说明\n\n自动触发功能在所有平台上均适用：\n\n- **Windows**——`wrapper_windows.py` 通过 Win32 的 `WriteConsoleInput` 将按键注入代理的控制台。代理作为直接子进程运行。\n- **Mac\u002FLinux**——`wrapper_unix.py` 将代理运行在 `tmux` 会话中，并通过 `tmux send-keys` 注入按键。使用 `Ctrl+B, D` 可以分离会话，使代理在后台继续运行；使用 `tmux attach -t agentchattr-claude` 可重新连接。\n\n聊天服务器和 Web 界面是完全跨平台的（Python + 浏览器）。\n\n## 安全\n\nagentchattr 专为 **仅限本地使用** 而设计，并包含多项安全保护措施：\n\n- **会话令牌** — 每次服务器启动时都会生成一个随机令牌，并注入到 Web 界面中。所有 API 和 WebSocket 请求都必须携带此令牌。\n- **仅限回环注册** — 代理注册、注销和心跳端点仅接受来自本地主机的连接，从而防止远程代理伪装。\n- **来源检查** — 服务器会拒绝来自与 `localhost` 或 `127.0.0.1` 不匹配的来源的请求，以防止跨域攻击和 DNS 重绑定攻击。\n- **不使用 `shell=True`** — 子进程调用通过直接传递参数列表来避免 Shell 注入。\n- **网络绑定警告** — 如果服务器配置为绑定到非本地地址，则除非您显式传递 `--allow-network` 参数，否则将拒绝启动。\n\n会话令牌会在启动时显示在终端中，且仅对同一台机器上的进程可见。\n\n> **`--allow-network` 警告：** 网络模式会绑定到局域网 IP 地址，这会使服务器通过未加密的 HTTP 暴露于您的本地网络。同一网络中的任何用户都可以嗅探会话令牌并获得完全访问权限——包括 @提及代理和触发工具执行的能力。如果代理启用了自动批准标志，这实际上会赋予远程代码执行能力，从而控制您的机器。**请仅在受信任的家庭网络中使用 `--allow-network`。切勿在公共或共享 WiFi 网络上使用。**\n\n## 社区\n\n加入 [Discord](https:\u002F\u002Fdiscord.gg\u002Fqzfn5YTT9a)，获取帮助、提出功能建议，并查看社区成员正在使用 agentchattr 构建的各种项目。\n\n## 许可证\n\nMIT","# agentchattr 快速上手指南\n\nagentchattr 是一个本地聊天服务器，旨在实现 AI 编程助手（如 Claude Code、Codex、Gemini CLI 等）与人类开发者之间的实时协作。通过共享聊天室和频道机制，Agent 之间可以互相 @提及并自动响应，无需在多个终端间复制粘贴或手动输入提示词。\n\n## 环境准备\n\n### 系统要求\n- **操作系统**：Windows、macOS 或 Linux\n- **Python 版本**：Python 3.11 或更高版本\n- **依赖工具**：\n  - **Windows**：无需额外安装，脚本会自动处理环境。\n  - **macOS \u002F Linux**：必须安装 `tmux` 终端复用器。\n    ```bash\n    # macOS (使用 Homebrew)\n    brew install tmux\n\n    # Ubuntu\u002FDebian\n    sudo apt install tmux\n    ```\n\n### 前置依赖\n- 确保已安装并配置好你想要使用的 AI Agent（如 Claude Code、Gemini CLI 等）及其对应的 API Key。\n- 对于 MiniMax Agent，需设置环境变量 `MINIMAX_API_KEY`。\n\n> **国内开发者提示**：如果在使用 `pip` 安装依赖时遇到网络问题，建议在运行启动脚本前配置国内镜像源（如清华源）：\n> ```bash\n> export PIP_INDEX_URL=https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n> ```\n> *(Windows PowerShell 用户请使用 `$env:PIP_INDEX_URL=\"https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\"`)*\n\n## 安装步骤\n\n本项目无需复杂的 `pip install` 命令，官方提供了开箱即用的启动脚本，首次运行时会自动创建虚拟环境并安装依赖。\n\n### Windows 用户\n1. 打开项目文件夹中的 `windows` 目录。\n2. 双击运行对应的启动脚本（`.bat` 文件）：\n   - `start.bat`：仅启动聊天服务器。\n   - `start_claude.bat`：启动 Claude Agent（若服务器未运行则同时启动）。\n   - `start_codex.bat`、`start_gemini.bat` 等：启动对应的 Agent。\n   \n   > **注意**：你可以同时运行多个脚本以启动多个 Agent，它们将共享同一个服务器。\n\n### macOS \u002F Linux 用户\n1. 打开终端，进入项目文件夹中的 `macos-linux` 目录：\n   ```bash\n   cd macos-linux\n   ```\n2. 运行对应的 Shell 脚本：\n   ```bash\n   # 仅启动服务器\n   sh start.sh\n\n   # 启动特定 Agent (例如 Claude)\n   sh start_claude.sh\n   \n   # 启动 Kilo 并指定模型\n   sh start_kilo.sh anthropic\u002Fclaude-sonnet-4-20250514\n   ```\n   \n   > **提示**：Agent 将在 `tmux` 会话中运行。你可以按 `Ctrl+B` 然后按 `D` 分离会话（Agent 会在后台继续运行）。重新连接使用 `tmux attach -t agentchattr-\u003Cagent-name>`。\n\n## 基本使用\n\n### 1. 打开聊天界面\n在浏览器中访问本地服务地址，或直接双击项目根目录下的 `open_chat.html` 文件：\n```text\nhttp:\u002F\u002Flocalhost:8300\n```\n\n### 2. 与 Agent 交互\n在聊天输入框中，使用 `@` 符号提及特定的 Agent 即可唤醒它。\n\n**操作示例：**\n1. 在输入框输入：`@claude 请检查当前项目的渲染器状态`\n2. 或者点击输入框上方的切换按钮选择 Agent。\n3. 发送消息后，服务器会自动向该 Agent 的终端注入指令（`mcp read #general`）。\n4. Agent 会读取聊天记录，理解上下文，并在同一频道中回复。\n\n### 3. 高级协作功能\n- **Agent 互调**：Agent 之间也可以互相 @提及。例如 Claude 可以 @codex 请求帮助，形成自动化协作闭环。\n- **多频道支持**：点击频道栏的 `+` 号创建新频道（类似 Slack），不同话题可在不同频道讨论，默认频道为 `#general`。\n- **任务管理**：右键点击任何消息选择\"Convert to Job\"，可将对话转化为带状态追踪的任务卡片。\n- **角色设定**：点击 Agent 的状态标签为其分配角色（如 Planner, Builder），这将影响其回答风格。\n\n### 4. 免确认模式（可选）\n如果你希望 Agent 执行工具时无需人工确认，可以使用特定的“自动批准”启动脚本：\n- **Windows**: `start_claude_skip-permissions.bat`, `start_gemini_yolo.bat` 等。\n- **Mac\u002FLinux**: `sh start_claude_skip-permissions.sh`, `sh start_gemini_yolo.sh` 等。\n\n> **手动触发提示**：如果 Agent 没有自动响应，你可以在其终端手动输入 `mcp read #general` 强制其读取聊天内容。","资深全栈工程师小李正带领三个不同模型的 AI 助手（Claude、Codex、Gemini）协同重构一个遗留的电商微服务系统，需要它们分别处理数据库迁移、API 接口升级和前端适配。\n\n### 没有 agentchattr 时\n- **沟通割裂**：小李需要在三个独立的终端窗口间频繁切换，手动将 A 助手的输出复制粘贴给 B 助手作为上下文，极易出错。\n- **协作低效**：当 Codex 发现数据库字段变更影响 API 时，无法直接通知负责 API 的 Claude，只能靠人工中转，导致返工。\n- **状态不同步**：各助手对当前任务进度的理解不一致，经常出现前端已改完而后端还在旧逻辑上打转的情况。\n- **操作繁琐**：每次分配新任务都要重新编写详细的 Prompt 并输入到对应终端，打断开发心流。\n\n### 使用 agentchattr 后\n- **统一会话空间**：所有助手与小李在同一个 Web 聊天室中交流，通过 `@claude` 或 `@codex` 即可定向唤醒特定助手，信息天然共享。\n- **自动协同闭环**：当小李指出问题或助手间互相 `@提及` 时，agentchattr 自动将对话注入对应终端，触发助手读取上下文并即时响应，无需人工干预。\n- **实时进度对齐**：所有讨论记录留存在共享频道中，任何助手加入对话都能瞬间掌握最新架构决策，确保多方步调一致。\n- **零样本启动**：只需在聊天框输入自然语言指令，agentchattr 自动分发给对应 Agent，让开发者专注于逻辑设计而非提示词工程。\n\nagentchattr 将原本分散的“单兵作战”转变为高效的“多智能体团队”，实现了本地 AI 编码代理间的无缝实时协作。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fbcurts_agentchattr_b74e7123.png","bcurts","Ben","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fbcurts_9c08ff0d.png","Product designer working in XR and formerly as a game designer. Interested in agentic AI, game dev, side projects, digital art and tools.",null,"https:\u002F\u002Fgithub.com\u002Fbcurts",[80,84,88,92,96,100],{"name":81,"color":82,"percentage":83},"Python","#3572A5",40.2,{"name":85,"color":86,"percentage":87},"JavaScript","#f1e05a",37.9,{"name":89,"color":90,"percentage":91},"CSS","#663399",15.3,{"name":93,"color":94,"percentage":95},"Shell","#89e051",2.8,{"name":97,"color":98,"percentage":99},"HTML","#e34c26",2.3,{"name":101,"color":102,"percentage":103},"Batchfile","#C1F12E",1.6,1255,176,"2026-04-13T17:20:33","MIT","Windows, macOS, Linux","未说明",{"notes":111,"python":112,"dependencies":113},"该工具是一个本地聊天服务器，用于协调 AI 编码代理（如 Claude Code, Codex, Gemini CLI 等）与人类。它本身不运行大模型，而是通过脚本调用外部已安装的 AI 代理工具。macOS 和 Linux 用户必须预先安装 tmux。首次运行时脚本会自动创建虚拟环境并安装 Python 依赖。部分代理（如 MiniMax）需要配置相应的 API 密钥环境变量。","3.11+",[114],"tmux (macOS\u002FLinux 必需)",[35,13],"2026-03-27T02:49:30.150509","2026-04-14T12:26:52.593449",[119,124,129,134,139,143],{"id":120,"question_zh":121,"answer_zh":122,"source_url":123},32717,"如何配置 agentchattr 以支持本地模型（如 Ollama）或混合使用不同模型？","可以在 config.toml 中添加新的代理类型来支持 Ollama 或 OpenAI 兼容接口。例如，添加一个 Ollama 代理：\n\n[agents.mistral]\ntype = \"ollama\"\nmodel = \"mistral-nemo\"\nollama_url = \"http:\u002F\u002Flocalhost:11434\"\ncolor = \"#f97316\"\nlabel = \"Mistral\"\nroles = [\"review\", \"summarize\"]\n\n也可以添加 OpenAI 兼容代理：\n\n[agents.qwen]\ntype = \"openai_compat\"\nbase_url = \"https:\u002F\u002Fapi.ollama.ai\u002Fv1\"\napi_key_env = \"OLLAMA_CLOUD_KEY\"\nmodel = \"qwen2.5-coder:32b\"\nroles = [\"codegen\", \"refactor\"]\n\n这些代理可以加入同一个聊天室，通过 @提及进行响应，并参与代理循环。此外，可以通过设置 enabled = true\u002Ffalse 来启用或禁用特定模型（例如只使用免费的 Ollama\u002FOpenRouter 模型）。","https:\u002F\u002Fgithub.com\u002Fbcurts\u002Fagentchattr\u002Fissues\u002F21",{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},32718,"如何在单个终端中监控所有代理，而不是为每个代理启动单独的 tmux 会话？","虽然最初考虑过单 tmux 会话多窗格模式，但在某些环境（如 Firebase Studio Nix IDE）中，tmux 无法满足具有直接批准输入的独立交互式终端的需求。\n\n推荐的解决方案是使用 VS Code Tasks。通过在项目根目录创建 .vscode\u002Ftasks.json 文件，可以为每个代理启动专用的命名终端标签页（例如：AC - Claude, AC - Codex, AC - Gemini），同时保留交互式的 stdin\u002Fstdout。这避免了手动逐个启动和重命名会话的麻烦，是目前在多代理启动场景下覆盖可用性目标的有效方法。","https:\u002F\u002Fgithub.com\u002Fbcurts\u002Fagentchattr\u002Fissues\u002F20",{"id":130,"question_zh":131,"answer_zh":132,"source_url":133},32719,"如何备份或迁移 agentchattr 的项目历史记录（聊天记录、任务线程等）？","agentchattr 现已支持导出和导入功能，用于持久化项目历史。\n\n1. **导出**：运行命令 `agentchattr export --project \u003C路径>`。这将把项目的共享历史（聊天消息、任务 jobs、规则 rules 和频道摘要）打包成一个 zip 备份文件。\n2. **导入**：在另一台机器或新实例上运行导入命令读取该 zip 文件。导入过程会将数据合并到当前项目中，而不会覆盖现有内容。如果某项已存在则跳过；如果档案中包含当前不存在的合法频道，系统会自动创建它们。\n\n注意：导入的消息被视为历史记录，不会唤醒代理或重新触发工作；也不会导入实时的代理状态或设置。","https:\u002F\u002Fgithub.com\u002Fbcurts\u002Fagentchattr\u002Fissues\u002F40",{"id":135,"question_zh":136,"answer_zh":137,"source_url":138},32720,"Gemini CLI 启动时卡在 \"Initializing...\" 怎么办？","这通常是因为缺少 `ripgrep` (rg) 工具导致的。Gemini CLI 需要在 PATH 中或 `~\u002F.gemini\u002Ftmp\u002Fbin\u002F` 目录下找到 rg。\n\n**解决方法：**\n1. **安装 ripgrep**：\n   - Windows: `choco install ripgrep` 或 `winget install BurntSushi.ripgrep.MSVC`\n   - Linux: `apt install ripgrep` 或 `dnf install ripgrep`\n2. **手动复制**：如果已安装但仍报错，可以尝试将 rg 复制到 Gemini 预期的位置：\n   `cp $(which rg) ~\u002F.gemini\u002Ftmp\u002Fbin\u002Frg.exe` (Linux\u002FMac)\n   或在 Windows 上手动复制 rg.exe 到 `%USERPROFILE%\\.gemini\\tmp\\bin\\`。\n\n维护者已在包装器中添加了预检警告，如果检测到缺失会提示用户，但不会自动安装以避免侵入性操作。","https:\u002F\u002Fgithub.com\u002Fbcurts\u002Fagentchattr\u002Fissues\u002F36",{"id":140,"question_zh":141,"answer_zh":142,"source_url":123},32721,"agentchattr 是否支持在聊天中发送图片给 AI 模型？","Web UI 本身已经支持图片的上传、粘贴和拖拽分享。但是，要让 API 代理（如本地模型）能够“看到”并处理这些图片比较复杂。\n\n技术实现上，包装器需要从聊天消息中获取图片附件，将其转换为 base64 编码，并作为 `image_url` 内容块包含在发送给模型的消息数组中。这仅当所使用的模型支持视觉（Vision）功能时才有效。由于大多数小型本地模型不具备视觉能力，因此该功能目前尚未完全实现，但已被列入未来考虑范围。",{"id":144,"question_zh":145,"answer_zh":146,"source_url":147},32722,"我可以贡献代码来改进 agentchattr 的用户界面（UI\u002FUX）吗？","目前维护者希望亲自负责 UI\u002FUX 的设计和改进工作。尽管社区成员提出了使用原生 JS 进行小幅度改进（如间距、布局清晰度、响应式等）且不引入新依赖的建议，但维护者明确表示该领域暂不接受外部贡献，建议关注者等待官方更新。","https:\u002F\u002Fgithub.com\u002Fbcurts\u002Fagentchattr\u002Fissues\u002F7",[149,154,159,164,169,174,179],{"id":150,"version":151,"summary_zh":152,"released_at":153},247447,"v0.3.2","## 新增功能\n\n### 帮助指南叠加层\n一款丰富的可视化指南，通过交互式原型展示所有功能。首次访问时自动显示，也可随时通过页眉中的“?”按钮打开。\n\n- **全页布局**：卡片紧贴其对应的界面元素放置。\n- **视觉原型**：涵盖代理（状态指示条）、作业（转换为作业并显示侧边栏）、规则（启用\u002F草稿状态）、渠道、会话（模板+自定义）、排程（一次性+周期性）以及提及等功能。\n- **高亮环**：突出显示每张卡片所解释的真实界面控件。\n- **响应式设计**：在窄屏下自动换行，宽度低于900px时则回退为可滚动的模态窗口。\n- 首次访问时自动弹出，之后可随时通过“?”按钮访问。\n\n### 项目 MCP 服务器合并\nGemini 和 Kimi 代理现在会自动从项目的 `.mcp.json` 文件中继承 MCP 服务器配置。如果您的项目还配置了其他 MCP 工具，代理将同时获得对这些工具的访问权限，与 agentchattr 一同使用。\n\n### MiniMax M2.7\n默认的 MiniMax 模型已从 M2.5 升级至 M2.7。（感谢 @NoRain211）\n\n### 错误修复\n- **@all agents** 现在仅触发在线代理，不再触发所有已配置的代理。\n- **断开连接通知** 现在只会在最后一个活跃渠道中显示，而不再出现在每个渠道中。\n- **代理崩溃超时时间** 由 60 秒缩短至 15 秒，以加快清理速度。\n- 修复了 **会话提示注入问题** — 长提示不再因检测到粘贴内容而中断。Windows 系统采用批量 WriteConsoleInput 方法，并配合延时调整。\n- **移除不必要的日志记录** — 活动调试\u002F报告日志文件不再写入磁盘。\n\n## 升级说明\n\n如需从旧版本升级，请下载压缩包，并将其中的文件拖放到现有安装目录中覆盖即可。您的数据（消息、作业、规则、计划、设置）存储在 `data\u002F` 文件夹中，不会受到影响。","2026-03-19T21:37:42",{"id":155,"version":156,"summary_zh":157,"released_at":158},247448,"v0.3.1","## 功能\n\n- **内联决策卡片** — 代理通过 `chat_send(choices=[...])` 包含选项，这些选项会渲染为消息气泡内的可点击按钮。点击后会发布带有标签的回复。代理颜色的按钮在解决时会有淡出动画。基于 @BlazingFV 提交的 PR #35 中的设计。\n\n## 错误修复\n\n- 修复聊天消息中尖括号显示为 `&gt;` 和 `&lt;` 的问题 (#43)\n- 修复导入的任务面包屑在 ID 重新映射后丢失导航功能的问题 (#44)\n- 修复语音输入期间发送按钮不亮起的问题","2026-03-17T23:22:16",{"id":160,"version":161,"summary_zh":162,"released_at":163},247449,"v0.3.0","## v0.3.0 — 项目历史与智能体自定义\n\n### 项目历史（导出\u002F导入）\n- 将您的完整聊天记录、任务、规则和摘要导出为可移植的 ZIP 压缩包\n- 可在另一台设备上导入——新记录会自动合并，重复项则被跳过\n- 幂等性：重复导入同一份存档不会产生任何变化\n- 导入的消息被视为历史记录，不会唤醒智能体或触发工作\n- 存档中新增的频道会在导入时自动创建\n- 设置 → 项目历史页面提供这两个功能的按钮\n- 基于 UUID 的去重机制确保跨设备的身份一致性\n\n### 智能体颜色选择器\n- 点击任意智能体的状态圆点即可自定义其颜色\n- 提供 14 种渐变顺序的预设色卡，以及原生颜色选择器用于自定义颜色\n- 当前所选颜色会高亮显示——无论是预设色还是自定义色都适用\n- 颜色会持久化保存在 localStorage 中，并即时更新状态圆点、提及标记、头像和聊天气泡\n- “重置”按钮可恢复默认颜色\n- 大部分工作由社区贡献者 [@kev5684](https:\u002F\u002Fgithub.com\u002Fkev5684) 完成\n\n### MiniMax 智能体支持\n- MiniMax 被添加为内置的云端 API 智能体（MiniMax-M2.5，上下文长度 204K）\n- 提供适用于 Windows 和 Mac\u002FLinux 的启动器，并包含 API 密钥验证\n- 在 wrapper_api.py 中新增了温度配置字段，所有基于 API 的智能体均可受益\n- 社区贡献者 [@octo-patch](https:\u002F\u002Fgithub.com\u002Focto-patch) 参与开发\n\n### 修复与优化\n- 修复了 WebSocket 处理器中规则提案卡片的重复广播问题\n- Gemini CLI 启动器会在缺少 ripgrep 时发出警告（以避免上游进程挂起的 bug）\n- 编辑器中的图片缩略图现可点击，点击后会打开完整预览\n- 使用 CSS Grid 实现频道栏居中布局，不再出现依赖 JavaScript 测量带来的闪烁\n- 通过 CSS 容器查询实现帮助按钮的折叠效果，使切换逻辑更加简洁\n- 新增导出\u002F导入操作的 Toast 通知系统，用于反馈操作结果\n\n---\n\n完整变更日志：https:\u002F\u002Fgithub.com\u002Fbcurts\u002Fagentchattr\u002Fcompare\u002Fv0.2.2...v0.3.0","2026-03-15T19:24:44",{"id":165,"version":166,"summary_zh":167,"released_at":168},247450,"v0.2.2","## v0.2.2 — 用户界面优化与新代理支持\n\n### 新代理支持\n- 在 README、配置示例和 MCP 指南中新增了 **Kilo CLI** 和 **Qwen**\n- 修复了 UI 中 Kilo 代理的颜色显示问题\n\n### 通过状态气泡设置角色\n- 点击任意代理的状态气泡，会弹出一个包含重命名和角色分配的浮层\n- 可保存自定义角色；这些角色会通过服务器设置在不同会话间持续生效\n- 将鼠标悬停在自定义角色上时，会出现垃圾桶图标，并以红色确认状态提示删除\n- 角色名称限制为 20 个字符；删除某个角色后，该角色会自动从所有代理身上解除绑定\n\n### 用户界面修复\n- 调整了聊天气泡的最小宽度，避免与转岗卡片重叠\n- 当频道标签占满导航栏时，支持按钮会折叠为心形图标（带有迟滞效果，防止闪烁）\n- 支持在标签页位置直接进行频道重命名，而非固定在最右侧\n- 请求岗位卡片时，会显示系统状态消息\n\n---\n\n完整变更日志：https:\u002F\u002Fgithub.com\u002Fbcurts\u002Fagentchattr\u002Fcompare\u002Fv0.2.1...v0.2.2","2026-03-12T03:42:10",{"id":170,"version":171,"summary_zh":172,"released_at":173},247451,"v0.2.1","### 新功能：定时与重复消息\n\n采用 Slack 风格的分屏发送按钮，带时钟图标，点击后会弹出一个定时选项面板。支持一次性定时发送和重复性定时发送，并在界面上提供暂停\u002F删除控制。定时任务会在服务器重启后依然保留。\n\n**新特性：**\n- 分屏发送按钮新增时钟图标，点击后弹出定时对话框\n- 支持一次性（指定日期\u002F时间）和重复性（每隔 N 分钟\u002F小时\u002F天）定时发送\n- 在消息编辑器上方显示定时条，列出当前生效或已暂停的定时任务，并提供内联控制操作\n- 主动验证机制——当未选择任何客服人员时，定时按钮会变为灰色并显示黄色警告提示\n- 定时成功创建时，界面会显示绿色闪烁确认提示\n- 定时消息将以真实聊天消息的形式由创建者发出，并触发被 @ 提及的客服人员\n- 定时任务可在服务器重启后继续生效（通过 JSON 持久化存储）\n\n**Bug 修复：**\n- 间隔型定时任务不再在创建时立即触发\n- 定时消息不再导致客服人员被重复触发\n\n**联合作者：[BlazingFV](https:\u002F\u002Fgithub.com\u002FBlazingFV)** — 基于其最初的 \u002Fschedule 命令 Pull Request。","2026-03-08T17:43:24",{"id":175,"version":176,"summary_zh":177,"released_at":178},247452,"v0.2.0","本次发布优化了会议工作流，使提案卡片和系统工件更易于管理，新增了跨频道通知，并引入了针对 GitHub 新版本的更新通知功能。\n\n### 亮点\n- **会议用户体验改进**：会议提案卡片更加简洁，自定义会议草稿流程更流畅，会议相关界面状态也得到优化。\n- **提案流程优化**：会议、规则和任务的提案卡片更加一致，信息更易快速浏览。\n- **可删除的系统工件**：现在更多由会议\u002F任务\u002F规则生成的时间线工件在删除模式和清理流程中表现得更加合理。\n- **跨频道通知**：当活动发生在当前频道之外时，用户能更好地感知到。\n- **更新通知**：当有更新的 GitHub 版本可用时，会显示一个小的“新版本”提示。\n- **Kimi 支持**：新增 Kimi 作为内置代理选项。\n- **Windows 启动器加固**：所有代理启动器现在都会检查 PATH 中是否存在 CLI，并在启动失败时保持窗口打开。\n\n### 内部改进\n- 对聊天单体架构进行了大规模的前端模块化改造。\n- 进行了 CSS 变量和重复项去除工作，以构建更整洁的样式基础。\n- 对代理注册接口进行了仅限本地的加固处理。\n- 在会议、规则、任务和通知模块中进行了全面的代码清理和错误修复。\n\n### 注意事项\n- 本次发布包含**更新通知**功能，而非自动更新。\n- 更新提示链接至最新的 GitHub 发布页面，用户可以将其关闭，直到出现新的版本为止。","2026-03-08T07:17:45",{"id":180,"version":181,"summary_zh":182,"released_at":183},247453,"v0.1.0","# \u003Cimg src=\"static\u002Flogo.png\" alt=\"\" width=\"32\"> agentchattr\n\n![Windows](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-Windows-blue) ![macOS](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-macOS-lightgrey) ![Linux](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-Linux-orange) ![Python 3.11+](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.11%2B-green) [![Discord](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDiscord-join-5865F2?logo=discord&logoColor=white)](https:\u002F\u002Fdiscord.gg\u002Fqzfn5YTT9a)\n\n一个用于 AI 编码代理与人类之间实时协作的本地聊天服务器。内置对 **Claude Code**、**Codex** 和 **Gemini CLI** 的支持——任何兼容 MCP 的代理都可以加入。\n\n代理和人类在一个共享的聊天室中通过多个频道交流：当有人 @提及某个代理时，服务器会自动将提示注入该代理的终端，代理读取对话并作出回应，整个流程无需手动操作。无需在难看的终端之间复制粘贴，也无需手动输入提示。\n\n*以下是一个如果你把事情搞砸了，对话可能会呈现的样子。*\n\n![截图](screenshot.png)\n\n## 快速入门（Windows）\n\n**1. 打开 `windows` 文件夹，双击任意启动脚本：**\n\n- `start.bat` — 仅启动聊天服务器\n- `start_claude.bat` — 启动 Claude（如果服务器尚未运行，则同时启动）\n- `start_codex.bat` — 启动 Codex（如果服务器尚未运行，则同时启动）\n- `start_gemini.bat` — 启动 Gemini（如果服务器尚未运行，则同时启动）\n\n首次运行时，脚本会自动创建虚拟环境、安装 Python 依赖项，并配置 MCP。每个代理启动脚本都会在服务器未运行时自动启动它，因此你可以按任意顺序启动。若需使用多个代理，可同时运行多个启动脚本——它们会共享同一个服务器。\n\n> **自动批准启动脚本**（代理无需请求权限即可运行工具）：\n> - `start_claude_skip-permissions.bat` — 使用 `--dangerously-skip-permissions` 参数的 Claude\n> - `start_codex_bypass.bat` — 使用 `--dangerously-bypass-approvals-and-sandbox` 参数的 Codex\n> - `start_gemini_yolo.bat` — 使用 `--yolo` 参数的 Gemini\n\n**2. 打开聊天界面：** 在浏览器中访问 **http:\u002F\u002Flocalhost:8300**，或双击 `open_chat.html`。\n\n**3. 与你的代理交流：** 在消息中输入 `@claude`、`@codex` 或 `@gemini`，或使用输入框上方的切换按钮。代理会“唤醒”自己，读取聊天内容并作出回复。\n\n> **小贴士：** 若要手动让代理检查聊天内容，可在其终端中输入 `mcp read #general`。\n\n## 快速入门（Mac \u002F Linux）\n\n**1. 确保已安装 tmux：**\n\n```bash\nbrew install tmux    # macOS\n# apt install tmux   # Ubuntu\u002FDebian\n```\n\n**2. 启动代理：**\n\n在 `macos-linux` 文件夹中打开终端（右键点击 → “在此处打开终端”，或使用 `cd` 命令进入该文件夹），然后运行：\n\n- `sh start.sh` — 仅启动聊天服务器\n- `sh start_claude.sh` — 启动 Claude（如果服务器尚未运行，则同时启动）\n- `sh start_codex.sh` — 启动 Codex（如果服务器尚未运行，则同时启动）\n- `sh start_gemini.sh` — 启动 Gem","2026-03-07T08:03:05"]