[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-spacedriveapp--spacebot":3,"tool-spacedriveapp--spacebot":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 真正成长为懂上",150037,2,"2026-04-10T23:33:47",[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":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":77,"owner_twitter":72,"owner_website":78,"owner_url":79,"languages":80,"stars":118,"forks":119,"last_commit_at":120,"license":121,"difficulty_score":32,"env_os":122,"env_gpu":123,"env_ram":123,"env_deps":124,"category_tags":130,"github_topics":131,"view_count":10,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":139,"updated_at":140,"faqs":141,"releases":171},3106,"spacedriveapp\u002Fspacebot","spacebot","An AI agent for teams, communities, and multi-user environments.","Spacebot 是一款专为团队协作、社区运营及多用户环境打造的 AI 智能体。与传统单线程 AI 不同，它采用独特的并发架构，将思考、执行和响应拆分为独立的专业进程，从而彻底解决了传统模型在处理多任务时容易“卡顿”或“失忆”的痛点。当多个用户同时发起对话或请求时，Spacebot 能够并行处理，无需让任何人等待，真正实现了“永不阻塞，永不忘却”。\n\n这款工具特别适合需要高效协作的开发团队、活跃的 Discord 或 Slack 社区管理者，以及希望部署多角色 AI 场景的用户。无论是同时回应数十人的讨论，还是在后台运行耗时的代码任务，Spacebot 都能游刃有余。其技术亮点包括智能的消息聚合机制，能在信息轰炸中自动识别重点并适时回应；支持为不同频道配置具有独立人格和记忆的多智能体；以及基于 Rust 构建的高性能核心，确保在复杂负载下依然稳定流畅。通过简单的配置，即可将其接入主流通讯平台，让 AI 真正成为团队中全天候在线的得力助手。","\u003Cp align=\"center\">\n  \u003Cimg src=\".github\u002FBall.png\" alt=\"Spacebot\" width=\"120\" height=\"120\" \u002F>\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">Spacebot\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>An AI agent for teams, communities, and multi-user environments.\u003C\u002Fstrong>\u003Cbr\u002F>\n  Thinks, executes, and responds — concurrently, not sequentially.\u003Cbr\u002F>\n  Never blocks. Never forgets.\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Ffsl.software\u002F\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fstatic\u002Fv1?label=License&message=FSL-1.1-ALv2&color=000\" \u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fstatic\u002Fv1?label=Core&message=Rust&color=DEA584\" \u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002FgTaF2Z44f5\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F949090953497567312?label=Discord&color=5865F2\" \u002F>\n  \u003C\u002Fa>\n\n  [![Ask DeepWiki](https:\u002F\u002Fdeepwiki.com\u002Fbadge.svg)](https:\u002F\u002Fdeepwiki.com\u002Fspacedriveapp\u002Fspacebot)\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fspacebot.sh\">\u003Cstrong>spacebot.sh\u003C\u002Fstrong>\u003C\u002Fa> •\n  \u003Ca href=\"#how-it-works\">How It Works\u003C\u002Fa> •\n  \u003Ca href=\"#architecture\">Architecture\u003C\u002Fa> •\n  \u003Ca href=\"#quick-start\">Quick Start\u003C\u002Fa> •\n  \u003Ca href=\"#tech-stack\">Tech Stack\u003C\u002Fa> •\n  \u003Ca href=\"https:\u002F\u002Fdocs.spacebot.sh\">Docs\u003C\u002Fa>\n\u003C\u002Fp>\n\n> **One-click deploy with [spacebot.sh](https:\u002F\u002Fspacebot.sh)** — connect your Discord, Slack, Telegram, or Twitch, configure your agent, and go. No self-hosting required.\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\".github\u002Fspacebot-ui.jpg\" alt=\"Spacebot UI\" \u002F>\n\u003C\u002Fp>\n\n---\n\n## The Problem\n\nMost AI agent frameworks run everything in a single session. One LLM thread handles conversation, thinking, tool execution, memory retrieval, and context compaction — all in one loop. When it's doing work, it can't talk to you. When it's compacting, it goes dark. When it retrieves memories, raw results pollute the context with noise.\n\n[OpenClaw](https:\u002F\u002Fgithub.com\u002Fanomalyco\u002Fopenclaw) _does_ have subagents, but handles them poorly and there's no enforcement to their use. The session is the bottleneck for everything.\n\nSpacebot splits the monolith into specialized processes that only do one thing, and delegate everything else.\n\n---\n\n## Built for Teams and Communities\n\nMost AI agents are built for one person in one conversation. Spacebot is built for many people working together — a Discord community with hundreds of active members, a Slack workspace with teams running parallel workstreams, a Telegram group coordinating across time zones.\n\nThis is why the architecture exists. A single-threaded agent breaks the moment two people talk at once. Spacebot's delegation model means it can think about User A's question, execute a task for User B, and respond to User C's small talk — all at the same time, without any of them waiting on each other.\n\n**For communities** — drop Spacebot into a Discord server. It handles concurrent conversations across channels and threads, remembers context about every member, and does real work (code, research, file operations) without going dark. Fifty people can interact with it simultaneously.\n\n**For fast-moving channels** — when messages are flying in, Spacebot doesn't try to respond to every single one. A message coalescing system detects rapid-fire bursts, batches them into a single turn, and lets the LLM read the room — it picks the most interesting thing to engage with, or stays quiet if there's nothing to add. Configurable debounce timing, automatic DM bypass, and the LLM always knows which messages arrived together.\n\n**For teams** — connect it to Slack. Each channel gets a dedicated conversation with shared memory. Spacebot can run long coding sessions for one engineer while answering quick questions from another. Workers handle the heavy lifting in the background while the channel stays responsive.\n\n**For multi-agent setups** — run multiple agents on one instance. A community bot with a friendly personality on Discord, a no-nonsense dev assistant on Slack, and a research agent handling background tasks. Each with its own identity, memory, and security permissions. One binary, one deploy.\n\n### Deploy Your Way\n\n| Method                                 | What You Get                                                                                |\n| -------------------------------------- | ------------------------------------------------------------------------------------------- |\n| **[spacebot.sh](https:\u002F\u002Fspacebot.sh)** | One-click hosted deploy. Connect your platforms, configure your agent, done.                |\n| **Self-hosted**                        | Single Rust binary. No Docker, no server dependencies, no microservices. Clone, build, run. |\n| **Docker**                             | Container image with everything included. Mount a volume for persistent data.               |\n\n---\n\n## Capabilities\n\n### Task Execution\n\nWorkers come loaded with tools for real work:\n\n- **Shell** — run arbitrary commands with configurable timeouts\n- **File** — read, write, and list files with auto-created directories\n- **Exec** — run specific programs with arguments and environment variables\n- **[OpenCode](https:\u002F\u002Fopencode.ai)** — spawn a full coding agent as a persistent worker with codebase exploration, LSP awareness, and deep context management\n- **Browser** — headless Chrome automation with an accessibility-tree ref system. Navigate, click, type, screenshot, manage tabs — the LLM addresses elements by short refs (`e0`, `e1`) instead of fragile CSS selectors\n- **[Brave](https:\u002F\u002Fbrave.com\u002Fsearch\u002Fapi\u002F) web search** — search the web with freshness filters, localization, and configurable result count\n\n### Messaging\n\nNative adapters for Discord, Slack, Telegram, Twitch, and Webchat with full platform feature support:\n\n- **Message coalescing** — rapid-fire messages are batched into a single LLM turn with timing context, so the agent reads the room instead of spamming replies\n- **File attachments** — send and receive files, images, and documents\n- **Rich messages** — embeds\u002Fcards, interactive buttons, select menus, and polls (Discord). Block Kit messages and slash commands (Slack)\n- **Threading** — automatic thread creation for long conversations\n- **Reactions** — emoji reactions on messages\n- **Typing indicators** — visual feedback while the agent is thinking\n- **Message history backfill** — reads recent conversation context on first message\n- **Per-channel permissions** — guild, channel, and DM-level access control, hot-reloadable\n- **Webchat** — embeddable portal chat with SSE streaming, per-agent session isolation\n\n### Memory\n\nNot markdown files. Not _unstructured_ blocks in a vector database. Spacebot's memory is a typed, graph-connected knowledge system — and this opinionated structure is why agents are productive out of the box.\n\nEvery memory has a type, an importance score, and graph edges connecting it to related memories. The agent doesn't just \"remember things\" — it knows the difference between a fact it learned, a decision that was made, a goal it's working toward, and a preference the user expressed. This structure is what lets the cortex synthesize a useful briefing instead of dumping raw search results into context.\n\n- **Eight memory types** — Fact, Preference, Decision, Identity, Event, Observation, Goal, Todo\n- **Graph edges** — RelatedTo, Updates, Contradicts, CausedBy, PartOf\n- **Hybrid recall** — vector similarity + full-text search merged via Reciprocal Rank Fusion\n- **Memory import** — dump files into the `ingest\u002F` folder and Spacebot extracts structured memories automatically. Supports text, markdown, and PDF files. Migrating from OpenClaw? Drop your markdown memory files in and walk away.\n- **Cross-channel recall** — branches can read transcripts from other conversations\n- **Memory bulletin** — the cortex generates a periodic briefing of the agent's knowledge, injected into every conversation\n- **Warmup readiness contract** — branch\u002Fworker\u002Fcron dispatch checks `ready_for_work` (warm state + embedding ready + fresh bulletin), records cold-dispatch metrics, and triggers background forced warmup without blocking channels\n\n### Scheduling\n\nCron jobs created and managed from conversation or config:\n\n- **Natural scheduling** — \"check my inbox every 30 minutes\" becomes a cron job with a delivery target\n- **Strict wall-clock schedules** — use cron expressions for exact local-time execution (for example, `0 9 * * *` for 9:00 every day)\n- **Legacy interval compatibility** — existing `interval_secs` jobs still run and remain configurable\n- **Configurable timeouts** — per-job `timeout_secs` to cap execution time (defaults to 120s)\n- **Active hours** — restrict jobs to specific time windows (supports midnight wrapping)\n- **Circuit breaker** — auto-disables after 3 consecutive failures\n- **Full agent capabilities** — each job gets a fresh channel with branching and workers\n\n### Model Routing\n\nFour-level routing system that picks the right model for every LLM call. Structural routing handles the common case — process types and task types are known at spawn time. Prompt-level routing handles the rest, scoring user messages to downgrade simple requests to cheaper models automatically.\n\n- **Process-type defaults** — channels get the best conversational model, workers get something fast and cheap, compactors get the cheapest tier\n- **Task-type overrides** — a coding worker upgrades to a stronger model, a summarization worker stays cheap\n- **Prompt complexity scoring** — lightweight keyword scorer classifies user messages into three tiers (light\u002Fstandard\u002Fheavy) and routes to the cheapest model that can handle it. Scores the user message only — system prompts and context are excluded. \u003C1ms, no external calls\n- **Fallback chains** — when a model returns 429 or 502, the next model in the chain takes over automatically\n- **Rate limit tracking** — 429'd models are deprioritized across all agents for a configurable cooldown\n- **Per-agent routing profiles** — eco, balanced, or premium presets that shift what models each tier maps to. A budget agent routes simple messages to free models while a premium agent stays on opus\n\n```toml\n[defaults.routing]\nchannel = \"anthropic\u002Fclaude-sonnet-4\"\nworker = \"anthropic\u002Fclaude-haiku-4.5\"\n\n[defaults.routing.task_overrides]\ncoding = \"anthropic\u002Fclaude-sonnet-4\"\n\n[defaults.routing.prompt_routing]\nenabled = true\nprocess_types = [\"channel\", \"branch\"]\n\n[defaults.routing.fallbacks]\n\"anthropic\u002Fclaude-sonnet-4\" = [\"anthropic\u002Fclaude-haiku-4.5\"]\n```\n\n**Z.ai (GLM) example** — use GLM models directly with a [GLM Coding Plan](https:\u002F\u002Fz.ai) subscription:\n\n```toml\n[llm]\nzhipu_key = \"env:ZHIPU_API_KEY\"\n\n[defaults.routing]\nchannel = \"zhipu\u002Fglm-4.7\"\nworker = \"zhipu\u002Fglm-4.7\"\n\n[defaults.routing.task_overrides]\ncoding = \"zhipu\u002Fglm-4.7\"\n```\n\n**Ollama example** — run against a local Ollama instance:\n\n```toml\n[llm]\nollama_base_url = \"http:\u002F\u002Flocalhost:11434\"\n\n[defaults.routing]\nchannel = \"ollama\u002Fgemma3\"\nworker = \"ollama\u002Fgemma3\"\n\n[defaults.routing.task_overrides]\ncoding = \"ollama\u002Fqwen3\"\n```\n\n**Custom provider example** — add any OpenAI-compatible or Anthropic-compatible endpoint:\n\n```toml\n[llm.provider.my-provider]\napi_type = \"openai_completions\"  # or \"openai_chat_completions\", \"openai_responses\", \"anthropic\"\nbase_url = \"https:\u002F\u002Fmy-llm-host.example.com\"\napi_key = \"env:MY_PROVIDER_KEY\"\n\n[defaults.routing]\nchannel = \"my-provider\u002Fmy-model\"\n```\n\n**Azure OpenAI Service** — configure Azure OpenAI deployments:\n\n```toml\n[llm.provider.azure]\napi_type = \"azure\"\nbase_url = \"https:\u002F\u002F{resource-name}.openai.azure.com\"\napi_key = \"env:AZURE_API_KEY\"\napi_version = \"2024-06-01\"  # required\ndeployment = \"gpt-4o\"        # required — your deployment name\n\n[defaults.routing]\nchannel = \"azure\u002Fgpt-4o\"\nworker = \"azure\u002Fgpt-4o-mini\"\n```\n\nImportant notes:\n- `base_url` must end with `.openai.azure.com`\n- `api_version` and `deployment` are required fields\n- API key authentication is handled automatically via the `api-key` header\n- For Azure AI Foundry (accessing Anthropic, Llama, or other models through Azure's model catalog), use `api_type = \"openai_chat_completions\"` instead and configure the deployment endpoint accordingly\n\nAdditional built-in providers include **Kilo Gateway**, **OpenCode Go**, **NVIDIA**, **MiniMax**, **Moonshot AI (Kimi)**, and **Z.AI Coding Plan** — configure with `kilo_key`, `opencode_go_key`, `nvidia_key`, `minimax_key`, `moonshot_key`, or `zai_coding_plan_key` in `[llm]`.\n\n### Skills\n\nExtensible skill system integrated with [skills.sh](https:\u002F\u002Fskills.sh):\n\n- **skills.sh registry** — install any skill from the public ecosystem with one command\n- **CLI management** — `spacebot skill add owner\u002Frepo` to install, list, remove, and inspect skills\n- **Worker injection** — skills are injected into worker system prompts for specialized tasks\n- **Bundled resources** — scripts, references, and assets packaged with skills\n- **OpenClaw compatible** — drop in existing OpenClaw skills, or any skill from skills.sh\n\n**Install skills from the registry:**\n\n```bash\nspacebot skill add vercel-labs\u002Fagent-skills\nspacebot skill add anthropics\u002Fskills\u002Fpdf\nspacebot skill list\n```\n\n### MCP Integration\n\nConnect workers to external [MCP](https:\u002F\u002Fmodelcontextprotocol.io\u002F) (Model Context Protocol) servers for arbitrary tool access -- databases, APIs, SaaS products, custom integrations -- without native Rust implementations:\n\n- **Per-agent config** — each agent declares its own MCP servers in `config.toml`\n- **Both transports** — stdio (subprocess) for local tools, streamable HTTP for remote servers\n- **Automatic tool discovery** — tools are discovered via the MCP protocol and registered on worker ToolServers with namespaced names (`{server}_{tool}`)\n- **Automatic retry** — failed connections retry in the background with exponential backoff (5s initial, 60s cap, 12 attempts). A broken server never blocks agent startup\n- **Hot-reloadable** — add, remove, or change servers in config and they reconcile live\n- **API management** — full CRUD API under `\u002Fapi\u002Fmcp\u002F` for managing server definitions and monitoring connection status programmatically\n\n```toml\n[[mcp_servers]]\nname = \"filesystem\"\ntransport = \"stdio\"\ncommand = \"npx\"\nargs = [\"-y\", \"@modelcontextprotocol\u002Fserver-filesystem\", \"\u002Fworkspace\"]\n\n[[mcp_servers]]\nname = \"sentry\"\ntransport = \"http\"\nurl = \"https:\u002F\u002Fmcp.sentry.io\"\nheaders = { Authorization = \"Bearer ${SENTRY_TOKEN}\" }\n```\n\n### Security\n\nSpacebot runs autonomous LLM processes that execute arbitrary shell commands and spawn subprocesses. Security isn't an add-on — it's a layered system designed so that no single failure exposes credentials or breaks containment.\n\n#### Credential Isolation\n\nSecrets are split into two categories: **system** (LLM API keys, messaging tokens — never exposed to subprocesses) and **tool** (CLI credentials like `GH_TOKEN` — injected as env vars into workers). The category is auto-assigned based on the secret name, or set explicitly.\n\n- **Environment sanitization** — every subprocess starts with a clean environment (`--clearenv` on Linux, `env_clear()` everywhere else). Only safe baseline vars (`PATH`, `HOME`, `LANG`), tool-category secrets, and explicit `passthrough_env` entries are present. In sandbox mode, `HOME` is set to the workspace; in passthrough mode, `HOME` uses the parent environment. System secrets never enter any subprocess\n- **Secret store** — credentials live in a dedicated redb database, not in `config.toml`. Config references secrets by alias (`anthropic_key = \"secret:ANTHROPIC_API_KEY\"`), so the config file is safe to display, screenshot, or `cat`\n- **Encryption at rest** — optional AES-256-GCM encryption with a master key derived via Argon2id. The master key lives in the OS credential store (macOS Keychain, Linux kernel keyring) — never on disk, never in an env var, never accessible to worker subprocesses\n- **Keyring isolation** — on Linux, workers are spawned with a fresh empty session keyring via `pre_exec`. Even without the sandbox, workers cannot access the parent's kernel keyring where the master key lives\n- **Output scrubbing** — all tool secret values are redacted from worker output before it reaches channels or LLM context. A rolling buffer handles secrets split across stream chunks. Channels see `[REDACTED]`, never raw values\n- **Worker secret management** — workers can store credentials they obtain (API keys from account creation, OAuth tokens) via the `secret_set` tool. Stored secrets are immediately available to future workers\n\n#### Process Containment\n\n- **Process sandbox** — shell and exec tools run inside OS-level filesystem containment. On Linux, [bubblewrap](https:\u002F\u002Fgithub.com\u002Fcontainers\u002Fbubblewrap) creates a mount namespace where the entire filesystem is read-only except the agent's workspace and configured writable paths. On macOS, `sandbox-exec` enforces equivalent restrictions via SBPL profiles. Kernel-enforced, not string-filtered\n- **Dynamic sandbox mode** — sandbox settings are hot-reloadable. Toggle via the dashboard or API without restarting the agent\n- **Workspace isolation** — file tools canonicalize all paths and reject anything outside the agent's workspace. Symlinks that escape are blocked\n- **Leak detection** — secret-pattern checks are enforced at channel egress (`reply` and plaintext fallback output) across plaintext, URL-encoded, base64, and hex encodings. Outbound text matching a secret pattern is blocked; worker tool outputs no longer hard-fail the worker\n- **Library injection blocking** — the exec tool blocks dangerous environment variables (`LD_PRELOAD`, `DYLD_INSERT_LIBRARIES`, `NODE_OPTIONS`, etc.) that could hijack child process loading\n- **SSRF protection** — the browser tool blocks requests to cloud metadata endpoints, private IPs, loopback, and link-local addresses\n- **Identity file protection** — writes to `SOUL.md`, `IDENTITY.md`, and `USER.md` are blocked at the application level\n- **Durable binary storage** — `tools\u002Fbin` directory on PATH survives hosted rollouts. Workers are instructed to install binaries there instead of ephemeral package manager locations\n\n```toml\n[agents.sandbox]\nmode = \"enabled\"                              # \"enabled\" (default) or \"disabled\"\nwritable_paths = [\"\u002Fhome\u002Fuser\u002Fprojects\u002Fmyapp\"] # additional writable dirs beyond workspace\npassthrough_env = [\"CUSTOM_VAR\"]              # forward specific env vars to workers\n```\n\n---\n\n## How It Works\n\nFive process types. Each does one job.\n\n### Channels\n\nThe user-facing LLM process — the ambassador to the human. One per conversation (Discord thread, Slack channel, Telegram DM, etc). Has soul, identity, and personality. Talks to the user. Delegates everything else.\n\nA channel does **not**: execute tasks directly, search memories itself, or do any heavy tool work. It is always responsive — never blocked by work, never frozen by compaction.\n\nWhen it needs to think, it branches. When it needs work done, it spawns a worker.\n\n### Branches\n\nA fork of the channel's context that goes off to think. Has the channel's full conversation history — same context, same memories, same understanding. Operates independently. The channel never sees the working, only the conclusion.\n\n```\nUser A: \"what do you know about X?\"\n    → Channel branches (branch-1)\n\nUser B: \"hey, how's it going?\"\n    → Channel responds directly: \"Going well! Working on something for A.\"\n\nBranch-1 resolves: \"Here's what I found about X: [curated memories]\"\n    → Channel sees the branch result on its next turn\n    → Channel responds to User A with the findings\n```\n\nMultiple branches run concurrently. First done, first incorporated. Each branch forks from the channel's context at creation time, like a git branch.\n\n### Workers\n\nIndependent processes that do jobs. Get a specific task, a focused system prompt, and task-appropriate tools. No channel context, no soul, no personality.\n\n**Fire-and-forget** — do a job and return a result. Summarization, file operations, one-shot tasks.\n\n**Interactive** — long-running, accept follow-up input from the channel. Coding sessions, multi-step tasks.\n\n```\nUser: \"refactor the auth module\"\n    → Branch spawns interactive coding worker\n    → Branch returns: \"Started a coding session for the auth refactor\"\n\nUser: \"actually, update the tests too\"\n    → Channel routes message to active worker\n    → Worker receives follow-up, continues with its existing context\n```\n\nWorkers are pluggable. Any process that accepts a task and reports status can be a worker.\n\n**Built-in workers** come with shell, file, exec, and browser tools out of the box. They can write code, run commands, manage files, browse the web — enough to build a whole project from scratch.\n\n**[OpenCode](https:\u002F\u002Fopencode.ai) workers** are a built-in integration that spawns a full OpenCode coding agent as a persistent subprocess. OpenCode brings its own codebase exploration, LSP awareness, and context management — purpose-built for deep coding sessions. When a user asks for a complex refactor or a new feature, the channel can spawn an OpenCode worker that maintains a rich understanding of the codebase across the entire session. Both built-in and OpenCode workers support interactive follow-ups.\n\n### The Compactor\n\nNot an LLM process. A programmatic monitor per channel that watches context size and triggers compaction before the channel fills up.\n\n| Threshold | Action                                       |\n| --------- | -------------------------------------------- |\n| **>80%**  | Background compaction (summarize oldest 30%) |\n| **>85%**  | Aggressive compaction (summarize oldest 50%) |\n| **>95%**  | Emergency truncation (hard drop, no LLM)     |\n\nCompaction workers run alongside the channel without blocking it. Summaries stack chronologically at the top of the context window.\n\n### The Cortex\n\nThe agent's inner monologue. The only process that sees across all channels, workers, and branches simultaneously. Generates a **memory bulletin** — a periodically refreshed, LLM-curated briefing of the agent's knowledge injected into every conversation. Supervises running processes (kills hanging workers, cleans up stale branches). Maintains the memory graph (decay, pruning, merging near-duplicates, cross-channel consolidation). Detects patterns across conversations and creates observations. Also provides a direct interactive admin chat with full tool access for system inspection and manual intervention.\n\n---\n\n## Architecture\n\n```\nUser sends message\n    → Channel receives it\n        → Branches to think (has channel's context)\n            → Branch recalls memories, decides what to do\n            → Branch might spawn a worker for heavy tasks\n            → Branch returns conclusion\n        → Branch deleted\n    → Channel responds to user\n\nChannel context hits 80%\n    → Compactor notices\n        → Spins off a compaction worker\n            → Worker summarizes old context + extracts memories\n            → Compacted summary swaps in\n    → Channel never interrupted\n```\n\n### What Each Process Gets\n\n| Process   | Type               | Tools                                     | Context                             |\n| --------- | ------------------ | ----------------------------------------- | ----------------------------------- |\n| Channel   | LLM                | Reply, branch, spawn workers, route       | Conversation + compaction summaries |\n| Branch    | LLM                | Memory recall, memory save, spawn workers | Fork of channel's context           |\n| Worker    | Pluggable          | Shell, file, exec, browser (configurable) | Fresh prompt + task description     |\n| Compactor | Programmatic       | Monitor context, trigger workers          | N\u002FA                                 |\n| Cortex    | LLM + Programmatic | Memory, consolidation, system monitor     | Entire agent scope                  |\n\n### Memory System\n\nMemories are structured objects, not files. Every memory is a row in SQLite with typed metadata and graph connections, paired with a vector embedding in LanceDB.\n\n- **Eight types** — Fact, Preference, Decision, Identity, Event, Observation, Goal, Todo\n- **Graph edges** — RelatedTo, Updates, Contradicts, CausedBy, PartOf\n- **Hybrid search** — Vector similarity + full-text search, merged via Reciprocal Rank Fusion\n- **Three creation paths** — Branch-initiated, compactor-initiated, cortex-initiated\n- **Importance scoring** — Access frequency, recency, graph centrality. Identity memories exempt from decay.\n\n### Cron Jobs\n\nScheduled recurring tasks. Each cron job gets a fresh short-lived channel with full branching and worker capabilities.\n\n- Multiple cron jobs run independently on wall-clock schedules (or legacy intervals)\n- Stored in the database, created via config, conversation, or programmatically\n- Cron expressions execute against the resolved cron timezone for predictable local-time firing\n- Persisted `next_run_at` cursor for deterministic restart behavior and missed-run fast-forwarding\n- Claim-before-run scheduling so multi-process or restarted schedulers do not double-fire recurring jobs\n- Run-once jobs use at-most-once claiming semantics and disable before execution starts\n- Per-job `timeout_secs` to cap execution time\n- Circuit breaker auto-disables after 3 consecutive failures\n- Active hours support with midnight wrapping\n- Execution and delivery outcomes are logged separately, with bounded retry\u002Fbackoff for proactive sends\n\n### Multi-Agent\n\nEach agent is an independent entity with its own workspace, databases, identity files, cortex, and messaging bindings. All agents share one binary, one tokio runtime, and one set of API keys.\n\n---\n\n### Spacedrive Integration (Future)\n\nSpacebot is the AI counterpart to [Spacedrive](https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacedrive) — an open source cross-platform file manager built on a virtual distributed filesystem. Both projects are independent and fully functional on their own, but complementary by design. Spacedrive indexes files across all your devices, clouds, and platforms with content-addressed identity, semantic search, and local AI analysis. Spacebot brings autonomous reasoning, memory, and task execution. Together, an agent that can think, remember, and act — backed by terabytes of queryable data across every device you own.\n\nRead the full vision in the [roadmap](docs\u002Fcontent\u002Fdocs\u002F(deployment)\u002Froadmap.mdx).\n\n---\n\n## Quick Start\n\n### Prerequisites\n\n- **Rust** 1.85+ ([rustup](https:\u002F\u002Frustup.rs\u002F))\n- An LLM API key from any supported provider (Anthropic, OpenAI, OpenRouter, Kilo Gateway, Z.ai, Groq, Together, Fireworks, DeepSeek, xAI, Mistral, NVIDIA, MiniMax, Moonshot AI, OpenCode Zen, OpenCode Go) — or use `spacebot auth login` for Anthropic OAuth\n\n### Build and Run\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\ncd spacebot\n\n# Optional: build the OpenCode embedded UI (requires Node 22+ and bun)\n# Without this, OpenCode workers still work — the Workers tab shows a transcript view instead.\n# .\u002Fscripts\u002Fbuild-opencode-embed.sh\n\ncargo build --release\n```\n\n### Minimal Config\n\nCreate `config.toml`:\n\n```toml\n[llm]\nopenrouter_key = \"env:OPENROUTER_API_KEY\"\n\n[defaults.routing]\nchannel = \"anthropic\u002Fclaude-sonnet-4\"\nworker = \"anthropic\u002Fclaude-sonnet-4\"\n\n[[agents]]\nid = \"my-agent\"\n\n[messaging.discord]\ntoken = \"env:DISCORD_BOT_TOKEN\"\n\n[[bindings]]\nagent_id = \"my-agent\"\nchannel = \"discord\"\nguild_id = \"your-discord-guild-id\"\n\n# Optional: route a named adapter instance\n[[bindings]]\nagent_id = \"my-agent\"\nchannel = \"discord\"\nadapter = \"ops\"\n```\n\n```bash\nspacebot                      # start as background daemon\nspacebot start --foreground   # or run in the foreground\nspacebot stop                 # graceful shutdown\nspacebot restart              # stop + start\nspacebot status               # show pid and uptime\nspacebot auth login           # authenticate via Anthropic OAuth\n```\n\nThe binary creates all databases and directories automatically on first run. See the [quickstart guide](docs\u002Fcontent\u002Fdocs\u002F(getting-started)\u002Fquickstart.mdx) for more detail.\n\n### Authentication\n\nSpacebot supports Anthropic OAuth as an alternative to static API keys. Use your Claude Pro, Max, or API Console subscription directly:\n\n```bash\nspacebot auth login             # OAuth via Claude Pro\u002FMax (opens browser)\nspacebot auth login --console   # OAuth via API Console\nspacebot auth status            # show credential status and expiry\nspacebot auth refresh           # manually refresh the access token\nspacebot auth logout            # remove stored credentials\n```\n\nOAuth tokens are stored in `anthropic_oauth.json` and auto-refresh transparently before each API call. When OAuth credentials are present, they take priority over a static `ANTHROPIC_API_KEY`.\n\n---\n\n## Tech Stack\n\n| Layer           | Technology                                                                                                      |\n| --------------- | --------------------------------------------------------------------------------------------------------------- |\n| Language        | **Rust** (edition 2024)                                                                                         |\n| Async runtime   | **Tokio**                                                                                                       |\n| LLM framework   | **[Rig](https:\u002F\u002Fgithub.com\u002F0xPlaygrounds\u002Frig)** v0.31 — agentic loop, tool execution, hooks                     |\n| Relational data | **SQLite** (sqlx) — conversations, memory graph, cron jobs                                                      |\n| Vector + FTS    | **[LanceDB](https:\u002F\u002Flancedb.github.io\u002Flancedb\u002F)** — embeddings (HNSW), full-text (Tantivy), hybrid search (RRF) |\n| Key-value       | **[redb](https:\u002F\u002Fgithub.com\u002Fcberner\u002Fredb)** — settings, encrypted secrets                                       |\n| Embeddings      | **FastEmbed** — local embedding generation                                                                      |\n| Crypto          | **AES-256-GCM** — secret encryption at rest                                                                     |\n| Discord         | **Serenity** — gateway, cache, events, rich messages, interactions                              |\n| Slack           | **slack-morphism** — Socket Mode, events, Block Kit, slash commands, streaming via message edits |\n| Telegram        | **teloxide** — long-poll, media attachments, group\u002FDM support                                   |\n| Twitch          | **twitch-irc** — chat integration with trigger prefix                                           |\n| Browser         | **Chromiumoxide** — headless Chrome via CDP                                                     |\n| CLI             | **Clap** — command line interface                                                                               |\n\nNo server dependencies. Single binary. All data lives in embedded databases in a local directory.\n\n---\n\n## Documentation\n\n| Doc                                    | Description                                              |\n| -------------------------------------- | -------------------------------------------------------- |\n| [Quick Start](docs\u002Fcontent\u002Fdocs\u002F(getting-started)\u002Fquickstart.mdx) | Setup, config, first run                                 |\n| [Config Reference](docs\u002Fcontent\u002Fdocs\u002F(configuration)\u002Fconfig.mdx) | Full `config.toml` reference                             |\n| [Agents](docs\u002Fcontent\u002Fdocs\u002F(core)\u002Fagents.mdx)                    | Multi-agent setup and isolation                          |\n| [Memory](docs\u002Fcontent\u002Fdocs\u002F(core)\u002Fmemory.mdx)                    | Memory system design                                     |\n| [Tools](docs\u002Fcontent\u002Fdocs\u002F(features)\u002Ftools.mdx)                  | All available LLM tools                                  |\n| [Compaction](docs\u002Fcontent\u002Fdocs\u002F(core)\u002Fcompaction.mdx)            | Context window management                                |\n| [Cortex](docs\u002Fcontent\u002Fdocs\u002F(core)\u002Fcortex.mdx)                    | Memory bulletin and system observation                   |\n| [Cron Jobs](docs\u002Fcontent\u002Fdocs\u002F(features)\u002Fcron.mdx)               | Scheduled recurring tasks                                |\n| [Routing](docs\u002Fcontent\u002Fdocs\u002F(core)\u002Frouting.mdx)                  | Model routing and fallback chains                        |\n| [Secrets](docs\u002Fcontent\u002Fdocs\u002F(configuration)\u002Fsecrets.mdx)         | Credential storage, encryption, and output scrubbing     |\n| [Sandbox](docs\u002Fcontent\u002Fdocs\u002F(configuration)\u002Fsandbox.mdx)         | Process containment and environment sanitization         |\n| [Messaging](docs\u002Fcontent\u002Fdocs\u002F(messaging)\u002Fmessaging.mdx)         | Adapter architecture (Discord, Slack, Telegram, Twitch, Webchat, webhook) |\n| [Discord Setup](docs\u002Fcontent\u002Fdocs\u002F(messaging)\u002Fdiscord-setup.mdx) | Discord bot setup guide                                  |\n| [Browser](docs\u002Fcontent\u002Fdocs\u002F(features)\u002Fbrowser.mdx)              | Headless Chrome for workers                              |\n| [MCP](docs\u002Fcontent\u002Fdocs\u002F(features)\u002Fmcp.mdx)                      | External tool servers via Model Context Protocol         |\n| [OpenCode](docs\u002Fcontent\u002Fdocs\u002F(features)\u002Fopencode.mdx)            | OpenCode as a worker backend                             |\n| [Philosophy](docs\u002Fcontent\u002Fdocs\u002F(core)\u002Fphilosophy.mdx)            | Why Rust                                                 |\n\n---\n\n## Why Rust\n\nSpacebot isn't a chatbot — it's an orchestration layer for autonomous AI processes running concurrently, sharing memory, and delegating to each other. That's infrastructure, and infrastructure should be machine code.\n\nRust's strict type system and compiler mean there's one correct way to express something. When multiple AI processes share mutable state and spawn tasks without human oversight, \"the compiler won't let you do that\" is a feature. The result is a single binary with no runtime dependencies, no garbage collector pauses, and predictable resource usage.\n\nRead the full argument in [docs\u002Fphilosophy](docs\u002Fcontent\u002Fdocs\u002F(core)\u002Fphilosophy.mdx).\n\n---\n\n## Contributing\n\nContributions welcome. Read [RUST_STYLE_GUIDE.md](RUST_STYLE_GUIDE.md) before writing any code, and [AGENTS.md](AGENTS.md) for the full implementation guide.\n\n1. Fork the repo\n2. Create a feature branch\n3. Install `just` (https:\u002F\u002Fgithub.com\u002Fcasey\u002Fjust) if it is not already available (for example: `brew install just` or `cargo install just --locked`)\n4. Run `.\u002Fscripts\u002Finstall-git-hooks.sh` once (installs pre-commit formatting hook)\n5. Make your changes\n6. Run `just preflight` and `just gate-pr`\n7. Submit a PR\n\nFormatting is still enforced in CI, but the hook catches it earlier by running `cargo fmt --all` before each commit. `just gate-pr` mirrors the CI gate and includes migration safety, compile checks, and test verification.\n\n---\n\n## License\n\nFSL-1.1-ALv2 — [Functional Source License](https:\u002F\u002Ffsl.software\u002F), converting to Apache 2.0 after two years. See [LICENSE](LICENSE) for details.\n","\u003Cp align=\"center\">\n  \u003Cimg src=\".github\u002FBall.png\" alt=\"Spacebot\" width=\"120\" height=\"120\" \u002F>\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">Spacebot\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Cstrong>一款面向团队、社区及多用户环境的AI智能体。\u003C\u002Fstrong>\u003Cbr\u002F>\n  同时思考、执行并响应——并非依次进行。\u003Cbr\u002F>\n  永不阻塞，永不遗忘。\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Ffsl.software\u002F\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fstatic\u002Fv1?label=License&message=FSL-1.1-ALv2&color=000\" \u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fstatic\u002Fv1?label=Core&message=Rust&color=DEA584\" \u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fdiscord.gg\u002FgTaF2Z44f5\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fdiscord\u002F949090953497567312?label=Discord&color=5865F2\" \u002F>\n  \u003C\u002Fa>\n\n  [![Ask DeepWiki](https:\u002F\u002Fdeepwiki.com\u002Fbadge.svg)](https:\u002F\u002Fdeepwiki.com\u002Fspacedriveapp\u002Fspacebot)\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fspacebot.sh\">\u003Cstrong>spacebot.sh\u003C\u002Fstrong>\u003C\u002Fa> •\n  \u003Ca href=\"#how-it-works\">工作原理\u003C\u002Fa> •\n  \u003Ca href=\"#architecture\">架构\u003C\u002Fa> •\n  \u003Ca href=\"#quick-start\">快速入门\u003C\u002Fa> •\n  \u003Ca href=\"#tech-stack\">技术栈\u003C\u002Fa> •\n  \u003Ca href=\"https:\u002F\u002Fdocs.spacebot.sh\">文档\u003C\u002Fa>\n\u003C\u002Fp>\n\n> **通过[spacebot.sh](https:\u002F\u002Fspacebot.sh)一键部署** — 连接你的Discord、Slack、Telegram或Twitch，配置好你的智能体即可使用。无需自行托管。\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\".github\u002Fspacebot-ui.jpg\" alt=\"Spacebot UI\" \u002F>\n\u003C\u002Fp>\n\n---\n\n## 问题所在\n\n大多数AI智能体框架都在单一会话中运行所有任务。一个大语言模型线程负责对话、思考、工具执行、记忆检索以及上下文压缩——全部在一个循环里完成。当它忙于处理任务时，就无法与你交流；在压缩上下文时，又会进入“黑屏”状态；而当它调用记忆时，原始结果往往会混入上下文中，造成干扰。\n\n虽然[OpenClaw](https:\u002F\u002Fgithub.com\u002Fanomalyco\u002Fopenclaw)确实引入了子智能体的概念，但其管理方式并不完善，且缺乏对子智能体使用的有效约束。整个系统的瓶颈始终在于单一会话。\n\nSpacebot则将这一单体架构拆分为多个专门化的进程，每个进程只负责一项特定任务，并将其他事务委托给相应的组件。\n\n---\n\n## 专为团队与社区打造\n\n大多数AI智能体都是为单人单次对话设计的。而Spacebot则是为多人协作场景量身定制——无论是拥有数百名活跃成员的Discord社区、包含多个团队并行工作的Slack工作区，还是跨越不同时区协同行动的Telegram群组。\n\n这正是Spacebot架构存在的意义。对于单线程智能体而言，一旦两人同时发言，系统就会崩溃。而Spacebot采用的委托模式使其能够同时处理以下任务：思考用户A的问题、为用户B执行任务、回应用户C的闲聊——这一切都能在同一时刻完成，且彼此互不干扰。\n\n**面向社区** — 将Spacebot接入Discord服务器，它能高效处理跨频道和线程的并发对话，记住每位成员的上下文信息，并在不“黑屏”的情况下完成实际工作（如代码编写、研究任务、文件操作等）。最多可支持五十人同时与其互动。\n\n**针对消息高频涌入的频道** — 当大量消息快速到达时，Spacebot并不会试图逐一回复。它内置的消息聚合系统能够检测到密集的消息流，将其合并为一次统一的交互回合，让大语言模型更好地理解当前情境，从而选择最值得关注的内容进行回应，或者在没有合适话题时保持沉默。此外，还可自定义去抖动时间、自动绕过私信，并确保大语言模型始终清楚哪些消息是同时到达的。\n\n**适用于团队** — 将Spacebot连接至Slack，每个频道都将拥有独立的对话会话及共享的记忆空间。它可以为一位工程师持续进行长时间的编程工作，同时回答另一位工程师的即时问题。后台的工作者负责处理繁重的任务，而频道始终保持流畅响应。\n\n**多智能体部署场景** — 在同一实例上运行多个智能体。例如，在Discord上部署一个性格友好的社区机器人，在Slack上部署一个严谨高效的开发助手，再搭配一个负责后台研究任务的智能体。每个智能体都拥有独立的身份、记忆和安全权限。只需一个二进制文件，一次部署即可实现。\n\n### 部署方式\n\n| 方法                                 | 你能获得什么                                                                                |\n| -------------------------------------- | ------------------------------------------------------------------------------------------- |\n| **[spacebot.sh](https:\u002F\u002Fspacebot.sh)** | 一键托管式部署。连接你的平台，配置好智能体，即刻使用。                |\n| **自托管**                        | 单一Rust二进制文件。无需Docker，无服务器依赖，也无需微服务架构。克隆、构建、运行即可。 |\n| **Docker**                             | 包含所有内容的容器镜像。挂载卷以保存持久化数据。               |\n\n---\n\n## 核心能力\n\n### 任务执行\n\nSpacebot的工作者预装了多种实用工具，可用于执行真实任务：\n\n- **Shell** — 可运行任意命令，并支持设置超时时间\n- **File** — 支持读取、写入和列出文件，同时会自动创建目录\n- **Exec** — 可运行指定程序，支持传递参数和环境变量\n- **[OpenCode](https:\u002F\u002Fopencode.ai)** — 启动一个完整的编码智能体作为持久性工作者，具备代码库探索、LSP感知及深度上下文管理功能\n- **Browser** — 基于无头Chrome的自动化工具，配备无障碍树引用系统。导航、点击、输入、截图、管理标签页——大语言模型通过简短引用（如`e0`、`e1`）来定位元素，而非依赖易失效的CSS选择器\n- **[Brave](https:\u002F\u002Fbrave.com\u002Fsearch\u002Fapi\u002F)网络搜索** — 提供带有新鲜度过滤、本地化支持及可配置结果数量的网页搜索功能\n\n### 消息交互\n\nSpacebot原生适配Discord、Slack、Telegram、Twitch以及Webchat，全面支持各平台的功能特性：\n\n- **消息聚合** — 高频消息会被批量整合为一次大语言模型交互，附带时间上下文信息，使智能体能够综合判断当前局势，而非盲目回复\n- **文件附件** — 支持发送和接收文件、图片及文档\n- **富文本消息** — Discord支持嵌入卡片、交互式按钮、下拉菜单和投票；Slack则支持Block Kit消息和Slash命令\n- **线程功能** — 自动为长对话创建线程\n- **反应功能** — 支持在消息上添加表情反应\n- **打字指示器** — 当智能体正在思考时，会显示视觉反馈\n- **历史消息回填** — 在首次收到消息时，自动加载最近的对话上下文\n- **按频道权限控制** — 支持公会、频道及私信级别的访问控制，且可热更新\n- **Webchat** — 可嵌入的门户聊天界面，采用SSE流式传输，每个智能体拥有独立的会话隔离\n\n### 记忆\n\n这不是 Markdown 文件，也不是向量数据库中的“非结构化”块。Spacebot 的记忆是一个类型化的、图状连接的知识系统——正是这种有明确观点的结构，使得代理开箱即用，高效工作。\n\n每个记忆都有一个类型、一个重要性评分，以及连接到相关记忆的图边。代理不仅仅是“记住一些事情”——它能区分自己学到的事实、做出的决策、正在努力实现的目标，以及用户表达的偏好。正是这种结构让大脑皮层能够合成一份有用的简报，而不是简单地将原始搜索结果塞入上下文中。\n\n- **八种记忆类型**——事实、偏好、决策、身份、事件、观察、目标、待办事项\n- **图边**——相关、更新、矛盾、因果、部分\n- **混合检索**——通过互反排名融合（RRF）将向量相似度与全文搜索相结合\n- **记忆导入**——将文件转储到 `ingest\u002F` 文件夹中，Spacebot 会自动提取结构化记忆。支持文本、Markdown 和 PDF 文件。从 OpenClaw 迁移？只需将你的 Markdown 记忆文件丢进去，然后走开。\n- **跨渠道检索**——分支可以读取其他对话的记录\n- **记忆公告**——大脑皮层会定期生成代理知识的简报，并将其注入到每次对话中\n- **预热就绪合约**——分支\u002F工作者\u002F定时任务调度会检查 `ready_for_work` 状态（预热状态 + 嵌入已准备好 + 最新公告），记录冷启动指标，并在不阻塞渠道的情况下触发后台强制预热\n\n### 调度\n\n从对话或配置中创建和管理的 Cron 任务：\n\n- **自然调度**——“每 30 分钟检查一次我的收件箱”会变成一个带有交付目标的 Cron 任务\n- **严格的时间表**——使用 Cron 表达式来精确控制本地时间执行（例如，`0 9 * * *` 表示每天早上 9 点）\n- **旧版间隔兼容性**——现有的 `interval_secs` 任务仍然会运行，并且可以继续配置\n- **可配置超时**——为每个任务设置 `timeout_secs` 来限制执行时间（默认 120 秒）\n- **活跃时段**——将任务限制在特定的时间窗口内（支持午夜跨越）\n- **断路器**——连续失败 3 次后自动禁用\n- **完整的代理能力**——每个任务都会获得一个新的通道，配备分支和工作者\n\n### 模型路由\n\n四层路由系统，为每一次 LLM 调用选择合适的模型。结构化路由处理常见情况——进程类型和任务类型在启动时已知。提示级别路由则处理其余情况，通过对用户消息进行评分，自动将简单的请求降级到更便宜的模型。\n\n- **进程类型默认值**——通道使用最佳的对话模型，工作者使用快速且廉价的模型，压缩者则使用最便宜的层级\n- **任务类型覆盖**——编码工作者会升级到更强的模型，而摘要工作者则保持低成本\n- **提示复杂度评分**——轻量级关键词评分器将用户消息分为三个等级（轻、标准、重），并路由到能够处理该消息的最便宜模型。仅对用户消息进行评分——系统提示和上下文不包括在内。耗时不到 1 毫秒，无需外部调用。\n- **备用链路**——当某个模型返回 429 或 502 错误时，链路中的下一个模型会自动接管\n- **速率限制跟踪**——所有代理中被 429 错误标记的模型都会在可配置的冷却期内被降级优先级\n- **代理专属路由配置**——生态、均衡或高级预设，调整各层级对应的模型。预算代理会将简单消息路由到免费模型，而高级代理则坚持使用 opus 模型。\n\n```toml\n[defaults.routing]\nchannel = \"anthropic\u002Fclaude-sonnet-4\"\nworker = \"anthropic\u002Fclaude-haiku-4.5\"\n\n[defaults.routing.task_overrides]\ncoding = \"anthropic\u002Fclaude-sonnet-4\"\n\n[defaults.routing.prompt_routing]\nenabled = true\nprocess_types = [\"channel\", \"branch\"]\n\n[defaults.routing.fallbacks]\n\"anthropic\u002Fclaude-sonnet-4\" = [\"anthropic\u002Fclaude-haiku-4.5\"]\n```\n\n**Z.ai (GLM) 示例**——使用 GLM 模型，需订阅 [GLM 编程计划](https:\u002F\u002Fz.ai)：\n\n```toml\n[llm]\nzhipu_key = \"env:ZHIPU_API_KEY\"\n\n[defaults.routing]\nchannel = \"zhipu\u002Fglm-4.7\"\nworker = \"zhipu\u002Fglm-4.7\"\n\n[defaults.routing.task_overrides]\ncoding = \"zhipu\u002Fglm-4.7\"\n```\n\n**Ollama 示例**——直接对接本地 Ollama 实例：\n\n```toml\n[llm]\nollama_base_url = \"http:\u002F\u002Flocalhost:11434\"\n\n[defaults.routing]\nchannel = \"ollama\u002Fgemma3\"\nworker = \"ollama\u002Fgemma3\"\n\n[defaults.routing.task_overrides]\ncoding = \"ollama\u002Fqwen3\"\n```\n\n**自定义提供商示例**——添加任何兼容 OpenAI 或 Anthropic 的端点：\n\n```toml\n[llm.provider.my-provider]\napi_type = \"openai_completions\"  # 或 \"openai_chat_completions\", \"openai_responses\", \"anthropic\"\nbase_url = \"https:\u002F\u002Fmy-llm-host.example.com\"\napi_key = \"env:MY_PROVIDER_KEY\"\n\n[defaults.routing]\nchannel = \"my-provider\u002Fmy-model\"\n```\n\n**Azure OpenAI 服务**——配置 Azure OpenAI 部署：\n\n```toml\n[llm.provider.azure]\napi_type = \"azure\"\nbase_url = \"https:\u002F\u002F{resource-name}.openai.azure.com\"\napi_key = \"env:AZURE_API_KEY\"\napi_version = \"2024-06-01\"  # 必填\ndeployment = \"gpt-4o\"        # 必填——你的部署名称\n\n[defaults.routing]\nchannel = \"azure\u002Fgpt-4o\"\nworker = \"azure\u002Fgpt-4o-mini\"\n```\n\n重要提示：\n- `base_url` 必须以 `.openai.azure.com` 结尾\n- `api_version` 和 `deployment` 是必填字段\n- API 密钥认证会通过 `api-key` 头部自动处理\n- 对于 Azure AI Foundry（通过 Azure 的模型目录访问 Anthropic、Llama 等模型），请使用 `api_type = \"openai_chat_completions\"`，并相应配置部署端点。\n\n此外，内置的提供商还包括 **Kilo Gateway**、**OpenCode Go**、**NVIDIA**、 **MiniMax**、**Moonshot AI (Kimi)** 以及 **Z.AI 编程计划**——可通过 `[llm]` 中的 `kilo_key`、`opencode_go_key`、`nvidia_key`、`minimax_key`、`moonshot_key` 或 `zai_coding_plan_key` 进行配置。\n\n### 技能\n\n可扩展的技能系统，与 [skills.sh](https:\u002F\u002Fskills.sh) 集成：\n\n- **skills.sh 注册中心**——只需一条命令即可安装公共生态系统中的任何技能\n- **CLI 管理**——使用 `spacebot skill add owner\u002Frepo` 来安装、列出、移除和检查技能\n- **工作者注入**——技能会被注入到工作者的系统提示中，用于执行特定任务\n- **捆绑资源**——脚本、参考文献和资产随技能一起打包\n- **OpenClaw 兼容**——可以直接使用现有的 OpenClaw 技能，或者来自 skills.sh 的任何技能。\n\n**从注册中心安装技能：**\n\n```bash\nspacebot skill add vercel-labs\u002Fagent-skills\nspacebot skill add anthropics\u002Fskills\u002Fpdf\nspacebot skill list\n```\n\n### MCP 集成\n\n将工作进程连接到外部 [MCP](https:\u002F\u002Fmodelcontextprotocol.io\u002F)（模型上下文协议）服务器，以访问任意工具——数据库、API、SaaS 产品、自定义集成等——而无需原生 Rust 实现：\n\n- **每个代理的配置** — 每个代理在 `config.toml` 中声明自己的 MCP 服务器\n- **两种传输方式** — 使用 stdio（子进程）处理本地工具，使用可流式传输的 HTTP 处理远程服务器\n- **自动工具发现** — 工具通过 MCP 协议被发现，并以命名空间名称（`{server}_{tool}`）注册到工作进程的 ToolServer 上\n- **自动重试** — 连接失败时会在后台以指数退避策略重试（初始 5 秒，上限 60 秒，最多 12 次）。故障服务器绝不会阻塞代理启动\n- **热加载支持** — 在配置中添加、移除或更改服务器时，它们会实时重新协调\n- **API 管理** — 提供完整的 CRUD API，在 `\u002Fapi\u002Fmcp\u002F` 下管理服务器定义并以编程方式监控连接状态\n\n```toml\n[[mcp_servers]]\nname = \"filesystem\"\ntransport = \"stdio\"\ncommand = \"npx\"\nargs = [\"-y\", \"@modelcontextprotocol\u002Fserver-filesystem\", \"\u002Fworkspace\"]\n\n[[mcp_servers]]\nname = \"sentry\"\ntransport = \"http\"\nurl = \"https:\u002F\u002Fmcp.sentry.io\"\nheaders = { Authorization = \"Bearer ${SENTRY_TOKEN}\" }\n```\n\n### 安全性\n\nSpacebot 运行自主的 LLM 进程，这些进程会执行任意 shell 命令并派生子进程。安全性并非附加功能，而是一个分层系统，旨在确保即使发生单点故障，也不会泄露凭据或破坏隔离机制。\n\n#### 凭据隔离\n\n秘密分为两类：**系统级**（LLM API 密钥、消息传递令牌——绝不会暴露给子进程）和 **工具级**（CLI 凭据，如 `GH_TOKEN`——作为环境变量注入到工作进程中）。类别根据秘密名称自动分配，也可显式设置。\n\n- **环境净化** — 每个子进程都从一个干净的环境开始（Linux 上使用 `--clearenv`，其他平台使用 `env_clear()`）。只有安全的基础变量（`PATH`、`HOME`、`LANG`）、工具级秘密以及显式指定的 `passthrough_env` 条目才会保留。在沙箱模式下，`HOME` 被设置为工作目录；在透传模式下，`HOME` 继承父进程的环境。系统级秘密绝不会进入任何子进程\n- **秘密存储** — 凭据存储在一个专用的 redb 数据库中，而不是 `config.toml` 文件中。配置文件通过别名引用秘密（例如 `anthropic_key = \"secret:ANTHROPIC_API_KEY\"`），因此配置文件可以安全地展示、截图或直接查看\n- **静态加密** — 可选的 AES-256-GCM 加密，使用通过 Argon2id 导出的主密钥。主密钥存储在操作系统凭据存储中（macOS Keychain、Linux 内核密钥环），绝不在磁盘上、不在环境变量中，也绝不会被工作进程的子进程访问\n- **密钥环隔离** — 在 Linux 上，工作进程通过 `pre_exec` 启动时会创建一个新的空会话密钥环。即使没有启用沙箱，工作进程也无法访问父进程的内核密钥环，而主密钥就存储在那里\n- **输出脱敏** — 所有工具使用的秘密值都会在工作进程输出到达渠道或 LLM 上下文之前被屏蔽。滚动缓冲区会处理跨多个数据块的秘密信息。渠道只会看到 `[REDACTED]`，而绝不会看到原始值\n- **工作进程秘密管理** — 工作进程可以通过 `secret_set` 工具存储自己获取的凭据（如账户创建时的 API 密钥、OAuth 令牌等）。存储的秘密会立即对后续工作进程可用\n\n#### 进程隔离\n\n- **进程沙箱** — shell 和 exec 工具运行在操作系统级别的文件系统隔离环境中。在 Linux 上，[bubblewrap](https:\u002F\u002Fgithub.com\u002Fcontainers\u002Fbubblewrap) 创建一个挂载命名空间，其中整个文件系统除代理的工作目录和配置的可写路径外均为只读。在 macOS 上，`sandbox-exec` 通过 SBPL 配置文件强制实施类似的限制。这些限制由内核强制执行，而非字符串过滤\n- **动态沙箱模式** — 沙箱设置支持热加载。可通过仪表板或 API 切换，无需重启代理\n- **工作目录隔离** — 文件工具会对所有路径进行规范化，并拒绝任何位于代理工作目录之外的路径。逃逸的符号链接也会被阻止\n- **泄漏检测** — 在渠道出口处（回复和明文回退输出）会对明文、URL 编码、base64 和十六进制编码中的秘密模式进行检查。匹配秘密模式的输出会被拦截；工作进程的工具输出不再会导致工作进程崩溃\n- **库注入拦截** — exec 工具会拦截危险的环境变量（如 `LD_PRELOAD`、`DYLD_INSERT_LIBRARIES`、`NODE_OPTIONS` 等），这些变量可能会劫持子进程的加载过程\n- **SSRF 防护** — 浏览器工具会阻止向云元数据端点、私有 IP 地址、环回地址和链路本地地址发起请求\n- **身份文件保护** — 对 `SOUL.md`、`IDENTITY.md` 和 `USER.md` 的写操作会在应用层被阻止\n- **持久化二进制存储** — PATH 中的 `tools\u002Fbin` 目录可以在托管升级过程中保持不变。工作进程被指示将二进制文件安装到该目录，而不是临时的包管理器位置\n\n```toml\n[agents.sandbox]\nmode = \"enabled\"                              # \"enabled\"（默认）或 \"disabled\"\nwritable_paths = [\"\u002Fhome\u002Fuser\u002Fprojects\u002Fmyapp\"] # 除工作目录外的额外可写目录\npassthrough_env = [\"CUSTOM_VAR\"]              # 将特定环境变量传递给工作进程\n```\n\n---\n\n## 工作原理\n\n五种进程类型，每种各司其职。\n\n### 渠道\n\n面向用户的 LLM 进程——与人类沟通的桥梁。每个对话（Discord 线程、Slack 频道、Telegram 私信等）对应一个渠道。拥有灵魂、身份和个性，与用户交流，并将其他任务委托给工作进程。\n\n渠道 **不** 负责：直接执行任务、自行搜索记忆，或进行任何繁重的工具操作。它始终保持响应，绝不会因工作繁忙或内存压缩而卡顿。\n\n当需要思考时，它会分支；当需要完成工作时，它会派生一个工作进程。\n\n### 分支\n\n渠道上下文的一个分支，用于独立思考。拥有渠道的完整对话历史——相同的上下文、相同的记忆和相同的理解。独立运作，渠道仅能看到最终结果，而看不到中间过程。\n\n```\n用户 A：“你对 X 了解什么？”\n    → 渠道分支（branch-1）\n\n用户 B：“嘿，最近怎么样？”\n    → 渠道直接回复：“还不错！正在帮 A 处理一件事。”\n\nBranch-1 得出结论：“关于 X，我找到的内容如下：[精选记忆]”\n    → 渠道在下一次轮询时看到分支结果\n    → 游戏频道回复用户 A，告知其调查结果\n```\n\n多个分支可以同时运行。先完成的分支会优先被合并。每个分支在创建时都基于渠道的上下文进行分支，就像 Git 分支一样。\n\n### 工作者\n\n独立运行的进程，负责执行具体任务。它们接收特定的任务、专注的系统提示以及与任务相匹配的工具。没有对话上下文，也没有灵魂或个性。\n\n**一次性任务** — 执行一项工作并返回结果。例如摘要生成、文件操作、单次性任务等。\n\n**交互式任务** — 长时间运行，可接受来自对话通道的后续输入。例如编码会话、多步骤任务等。\n\n```\n用户: “重构认证模块”\n    → 分支会启动一个交互式的编码工作者\n    → 分支返回: “已开始认证模块的重构编码会话”\n\n用户: “其实，也请更新一下测试”\n    → 对话通道将消息路由到当前活跃的工作者\n    → 工作者接收到后续指令，并在原有上下文中继续执行\n```\n\n工作者是可插拔的。任何能够接收任务并汇报状态的进程都可以作为工作者。\n\n**内置工作者** 附带了 Shell、文件、执行和浏览器等工具，开箱即用。它们可以编写代码、执行命令、管理文件、浏览网页——足以从零开始构建整个项目。\n\n**[OpenCode](https:\u002F\u002Fopencode.ai) 工作者** 是一种内置集成，它会以持久子进程的形式启动一个完整的 OpenCode 编码代理。OpenCode 自带代码库探索、LSP 感知和上下文管理功能——专为深度编码会话而设计。当用户请求复杂的重构或新功能时，对话通道可以启动一个 OpenCode 工作者，该工作者在整个会话过程中都能保持对代码库的深刻理解。无论是内置工作者还是 OpenCode 工作者，都支持交互式的后续操作。\n\n### 压缩器\n\n并非 LLM 进程。它是每个对话通道的程序化监控器，用于监测上下文大小，并在对话通道内容过多之前触发压缩操作。\n\n| 阈值 | 行动                                       |\n| ---- | ------------------------------------------ |\n| **>80%**  | 后台压缩（总结最旧的 30%）                 |\n| **>85%**  | 强制压缩（总结最旧的 50%）                |\n| **>95%**  | 紧急截断（直接丢弃，不使用 LLM）          |\n\n压缩工作者会在对话通道旁运行，不会阻塞通道的正常流程。总结内容会按时间顺序堆叠在上下文窗口的顶部。\n\n### 皮层\n\n这是智能体的内部独白。唯一一个能够同时跨所有对话通道、工作者和分支进行观察的进程。它会生成一份“记忆简报”——由 LLM 定期更新并精选的智能体知识摘要，注入到每一次对话中。它还负责监督正在运行的进程（终止挂起的工作者、清理过时的分支），维护记忆图谱（衰减、修剪、合并近似重复项、跨通道整合），检测对话中的模式并形成观察记录。此外，它还提供一个直接的交互式管理员聊天界面，拥有全部工具访问权限，便于系统检查和手动干预。\n\n---\n\n## 架构\n\n```\n用户发送消息\n    → 对话通道接收\n        → 分支进入思考阶段（拥有对话通道的上下文）\n            → 分支调用记忆，决定如何行动\n            → 对于繁重任务，分支可能会启动一个工作者\n            → 分支得出结论\n        → 分支被删除\n    → 对话通道回复用户\n\n当对话通道的上下文占用率达到 80%\n    → 压缩器检测到\n        → 启动一个压缩工作者\n            → 工作者总结旧的上下文并提取记忆\n            → 将压缩后的摘要替换进上下文\n    → 对话通道始终畅通无阻\n```\n\n### 各个进程的职责\n\n| 进程   | 类型               | 工具                                     | 上下文                             |\n| ------ | ------------------ | ----------------------------------------- | ----------------------------------- |\n| 对话通道 | LLM                | 回复、分支、启动工作者、路由            | 对话内容 + 压缩总结                |\n| 分支   | LLM                | 调用记忆、保存记忆、启动工作者           | 对话通道上下文的分叉              |\n| 工作者 | 可插拔             | Shell、文件、执行、浏览器（可配置）      | 新鲜的提示词 + 任务描述            |\n| 压缩器 | 程序化             | 监控上下文、触发压缩工作者              | 无                                 |\n| 皮层   | LLM + 程序化       | 记忆管理、整合、系统监控                 | 整个智能体范围                     |\n\n### 记忆系统\n\n记忆是以结构化对象形式存储的，而非文件。每条记忆都是 SQLite 数据库中的一行，包含类型化的元数据和图谱连接，并与 LanceDB 中的向量嵌入相对应。\n\n- **八种类型** — 事实、偏好、决策、身份、事件、观察、目标、待办\n- **图谱边** — 关联、更新、矛盾、因果、部分\n- **混合搜索** — 向量相似度 + 全文检索，通过倒排秩融合算法合并\n- **三种创建路径** — 分支发起、压缩器发起、皮层发起\n- **重要性评分** — 访问频率、时效性、图谱中心性。身份记忆不受衰减影响。\n\n### 定时任务\n\n计划好的周期性任务。每个定时任务都会获得一个全新的短期对话通道，具备完整的分支和工作者能力。\n\n- 多个定时任务按照挂钟时间表（或传统的时间间隔）独立运行\n- 存储在数据库中，可通过配置、对话或程序化方式创建\n- Cron 表达式会根据解析后的时区执行，确保在本地时间准时触发\n- 持久化的 `next_run_at` 游标用于实现确定性的重启行为和错过任务的快速推进\n- 采用“先占后执行”的调度机制，防止多进程或重启的调度器重复触发周期性任务\n- 一次性任务则采用“至多一次”的占取语义，并在执行开始前禁用\n- 每个任务都有 `timeout_secs` 设置，以限制执行时间\n- 如果连续失败三次，熔断器会自动禁用该任务\n- 支持活动时段设置，并可在午夜时分自动切换\n- 执行和交付的结果会被分别记录，且具有有限的重试\u002F退避机制，以便主动重新发送\n\n### 多智能体\n\n每个智能体都是一个独立的实体，拥有自己的工作空间、数据库、身份文件、皮层和消息传递绑定。所有智能体共享同一个二进制文件、同一个 Tokio 运行时以及同一组 API 密钥。\n\n---\n\n### Spacedrive 集成（未来）\n\nSpacebot 是 [Spacedrive](https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacedrive) 的 AI 对应产品——一个基于虚拟分布式文件系统的开源跨平台文件管理器。这两个项目各自独立且功能完备，但在设计上互为补充。Spacedrive 通过内容寻址身份、语义搜索和本地 AI 分析，在你的所有设备、云存储和平台上索引文件；而 Spacebot 则带来自主推理、记忆和任务执行能力。两者结合，便能打造出一个既会思考、又能记忆和行动的智能体——背后依托的是你所拥有的每一台设备上可查询的数 TB 数据。\n\n完整愿景请参阅 [路线图](docs\u002Fcontent\u002Fdocs\u002F(deployment)\u002Froadmap.mdx)。\n\n---\n\n## 快速入门\n\n### 前提条件\n\n- **Rust** 1.85 或更高版本（可通过 [rustup](https:\u002F\u002Frustup.rs\u002F) 安装）\n- 来自任意支持提供商的 LLM API 密钥（Anthropic、OpenAI、OpenRouter、Kilo Gateway、Z.ai、Groq、Together、Fireworks、DeepSeek、xAI、Mistral、NVIDIA、MiniMax、Moonshot AI、OpenCode Zen、OpenCode Go）——或者使用 `spacebot auth login` 通过 Anthropic OAuth 进行登录\n\n### 构建与运行\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\ncd spacebot\n\n# 可选：构建 OpenCode 嵌入式 UI（需要 Node 22+ 和 bun）\n# 如果不执行此步骤，OpenCode 工作器仍然可以正常工作——“Workers”选项卡将显示对话记录视图。\n# .\u002Fscripts\u002Fbuild-opencode-embed.sh\n\ncargo build --release\n```\n\n### 最小配置\n\n创建 `config.toml` 文件：\n\n```toml\n[llm]\nopenrouter_key = \"env:OPENROUTER_API_KEY\"\n\n[defaults.routing]\nchannel = \"anthropic\u002Fclaude-sonnet-4\"\nworker = \"anthropic\u002Fclaude-sonnet-4\"\n\n[[agents]]\nid = \"my-agent\"\n\n[messaging.discord]\ntoken = \"env:DISCORD_BOT_TOKEN\"\n\n[[bindings]]\nagent_id = \"my-agent\"\nchannel = \"discord\"\nguild_id = \"your-discord-guild-id\"\n\n# 可选：路由一个命名的适配器实例\n[[bindings]]\nagent_id = \"my-agent\"\nchannel = \"discord\"\nadapter = \"ops\"\n```\n\n```bash\nspacebot                      # 以后台守护进程方式启动\nspacebot start --foreground   # 或在前台运行\nspacebot stop                 # 优雅关闭\nspacebot restart              # 先停止再启动\nspacebot status               # 显示进程 ID 和运行时长\nspacebot auth login           # 通过 Anthropic OAuth 进行认证\n```\n\n首次运行时，二进制文件会自动创建所有数据库和目录。更多详细信息请参阅[快速入门指南](docs\u002Fcontent\u002Fdocs\u002F(getting-started)\u002Fquickstart.mdx)。\n\n### 身份验证\n\nSpacebot 支持使用 Anthropic OAuth 作为静态 API 密钥的替代方案。您可以直接使用自己的 Claude Pro、Max 或 API 控制台订阅：\n\n```bash\nspacebot auth login             # 通过 Claude Pro\u002FMax 进行 OAuth（打开浏览器）\nspacebot auth login --console   # 通过 API 控制台进行 OAuth\nspacebot auth status            # 显示凭据状态及过期时间\nspacebot auth refresh           # 手动刷新访问令牌\nspacebot auth logout            # 删除已存储的凭据\n```\n\nOAuth 令牌会存储在 `anthropic_oauth.json` 文件中，并在每次 API 调用前透明地自动刷新。当存在 OAuth 凭据时，它们会优先于静态的 `ANTHROPIC_API_KEY`。\n\n---\n\n## 技术栈\n\n| 层次           | 技术                                                                                                      |\n| --------------- | --------------------------------------------------------------------------------------------------------------- |\n| 编程语言        | **Rust**（2024 版）                                                                                         |\n| 异步运行时      | **Tokio**                                                                                                       |\n| LLM 框架        | **[Rig](https:\u002F\u002Fgithub.com\u002F0xPlaygrounds\u002Frig)** v0.31 — 代理循环、工具执行、钩子                     |\n| 关系型数据      | **SQLite**（sqlx）— 对话记录、记忆图、定时任务                                                      |\n| 向量数据库 + FTS| **[LanceDB](https:\u002F\u002Flancedb.github.io\u002Flancedb\u002F)** — 嵌入向量（HNSW）、全文检索（Tantivy）、混合搜索（RRF） |\n| 键值存储        | **[redb](https:\u002F\u002Fgithub.com\u002Fcberner\u002Fredb)** — 设置、加密密钥                                       |\n| 嵌入向量        | **FastEmbed** — 本地嵌入生成                                                                      |\n| 加密技术        | **AES-256-GCM** — 静态数据加密                                                                     |\n| Discord         | **Serenity** — 网关、缓存、事件、富文本消息、交互                              |\n| Slack           | **slack-morphism** — Socket Mode、事件、Block Kit、斜杠命令、通过消息编辑实现流式传输 |\n| Telegram        | **teloxide** — 长轮询、媒体附件、群组\u002F私信支持                                   |\n| Twitch          | **twitch-irc** — 聊天集成，带有触发前缀                                           |\n| 浏览器          | **Chromiumoxide** — 通过 CDP 使用无头 Chrome                                                     |\n| 命令行界面      | **Clap** — 命令行接口                                                                               |\n\n无需任何服务器依赖。单个二进制文件即可运行。所有数据都存储在本地目录中的嵌入式数据库中。\n\n---\n\n## 文档\n\n| 文档                                    | 描述                                              |\n| -------------------------------------- | -------------------------------------------------------- |\n| [快速入门](docs\u002Fcontent\u002Fdocs\u002F(getting-started)\u002Fquickstart.mdx) | 设置、配置、首次运行                                 |\n| [配置参考](docs\u002Fcontent\u002Fdocs\u002F(configuration)\u002Fconfig.mdx) | 完整的 `config.toml` 参考                             |\n| [代理](docs\u002Fcontent\u002Fdocs\u002F(core)\u002Fagents.mdx)                    | 多代理设置与隔离                          |\n| [记忆](docs\u002Fcontent\u002Fdocs\u002F(core)\u002Fmemory.mdx)                    | 内存系统设计                                     |\n| [工具](docs\u002Fcontent\u002Fdocs\u002F(features)\u002Ftools.mdx)                  | 所有可用的 LLM 工具                                  |\n| [压缩](docs\u002Fcontent\u002Fdocs\u002F(core)\u002Fcompaction.mdx)            | 上下文窗口管理                                |\n| [皮层](docs\u002Fcontent\u002Fdocs\u002F(core)\u002Fcortex.mdx)                    | 内存公告板与系统观察                   |\n| [定时任务](docs\u002Fcontent\u002Fdocs\u002F(features)\u002Fcron.mdx)               | 定期执行的任务                               |\n| [路由](docs\u002Fcontent\u002Fdocs\u002F(core)\u002Frouting.mdx)                  | 模型路由与回退链                        |\n| [密钥](docs\u002Fcontent\u002Fdocs\u002F(configuration)\u002Fsecrets.mdx)         | 凭据存储、加密及输出脱敏     |\n| [沙盒](docs\u002Fcontent\u002Fdocs\u002F(configuration)\u002Fsandbox.mdx)         | 进程隔离与环境净化         |\n| [消息传递](docs\u002Fcontent\u002Fdocs\u002F(messaging)\u002Fmessaging.mdx)         | 适配器架构（Discord、Slack、Telegram、Twitch、Webchat、Webhook） |\n| [Discord 设置](docs\u002Fcontent\u002Fdocs\u002F(messaging)\u002Fdiscord-setup.mdx) | Discord 机器人设置指南                                  |\n| [浏览器](docs\u002Fcontent\u002Fdocs\u002F(features)\u002Fbrowser.mdx)              | 无头 Chrome 用于工作器                              |\n| [MCP](docs\u002Fcontent\u002Fdocs\u002F(features)\u002Fmcp.mdx)                      | 通过模型上下文协议连接外部工具服务器         |\n| [OpenCode](docs\u002Fcontent\u002Fdocs\u002F(features)\u002Fopencode.mdx)            | OpenCode 作为工作器后端                             |\n| [理念](docs\u002Fcontent\u002Fdocs\u002F(core)\u002Fphilosophy.mdx)            | 为什么选择 Rust                                                 |\n\n---\n\n## 为什么选择 Rust\n\nSpacebot 并不是聊天机器人——它是一个用于协调自主 AI 流程的层，这些流程可以并发运行、共享内存并相互委派任务。这属于基础设施范畴，而基础设施理应使用机器代码来实现。\n\nRust 的严格类型系统和编译器确保了每种逻辑都只有一种正确的表达方式。当多个 AI 流程共享可变状态并无需人工监督地创建任务时，“编译器不允许你这样做”恰恰是一项优势。最终结果是一个单一的二进制文件，没有任何运行时依赖、没有垃圾回收停顿，并且资源使用情况可预测。\n\n完整的论述请参阅 [docs\u002Fphilosophy](docs\u002Fcontent\u002Fdocs\u002F(core)\u002Fphilosophy.mdx)。\n\n---\n\n## 贡献说明\n\n欢迎贡献！在编写任何代码之前，请先阅读 [RUST_STYLE_GUIDE.md](RUST_STYLE_GUIDE.md)，并查看 [AGENTS.md](AGENTS.md) 以获取完整的实现指南。\n\n1. 克隆仓库并创建分支\n2. 创建一个功能分支\n3. 如果尚未安装 `just`（https:\u002F\u002Fgithub.com\u002Fcasey\u002Fjust），请先进行安装（例如：`brew install just` 或 `cargo install just --locked`）\n4. 运行一次 `.\u002Fscripts\u002Finstall-git-hooks.sh`（安装 pre-commit 格式化钩子）\n5. 进行更改\n6. 分别运行 `just preflight` 和 `just gate-pr`\n7. 提交 Pull Request\n\n虽然格式检查仍然会在 CI 中执行，但该钩子会在每次提交前运行 `cargo fmt --all`，从而更早地发现问题。`just gate-pr` 则与 CI 检查流程一致，包含迁移安全性检查、编译检查以及测试验证。\n\n---\n\n## 许可证\n\nFSL-1.1-ALv2 — [功能性源代码许可证](https:\u002F\u002Ffsl.software\u002F)；两年后将转换为 Apache 2.0 许可证。详情请参阅 [LICENSE](LICENSE)。","# Spacebot 快速上手指南\n\nSpacebot 是一款专为团队、社区及多用户环境设计的 AI 代理工具。它采用并发架构，能够同时处理思考、执行和响应任务，支持 Discord、Slack、Telegram 等平台，具备强大的记忆系统和任务调度能力。\n\n## 环境准备\n\n### 系统要求\n- **操作系统**：Linux, macOS, Windows (WSL 推荐)\n- **核心语言**：Rust (用于编译源码或运行二进制文件)\n- **内存**：建议至少 2GB RAM（根据并发负载调整）\n- **网络**：需访问外部 LLM API (如 Anthropic, OpenAI, Z.ai, Ollama 等)\n\n### 前置依赖\n1. **安装 Rust** (如果选择自托管编译)\n   ```bash\n   curl --proto '=https' --tlsv1.2 -sSf https:\u002F\u002Fsh.rustup.rs | sh\n   source $HOME\u002F.cargo\u002Fenv\n   ```\n   *国内加速提示*：若下载缓慢，可配置国内镜像源：\n   ```bash\n   export RUSTUP_DIST_SERVER=https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Frustup\n   export RUSTUP_UPDATE_ROOT=https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Frustup\u002Frustup\n   curl --proto '=https' --tlsv1.2 -sSf https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Frustup\u002Frustup-init.sh | sh\n   ```\n\n2. **LLM API Key**\n   - 准备至少一个 LLM 服务的 API Key（如 Anthropic, OpenAI, Zhipu\u002FGLM, 或本地 Ollama）。\n\n3. **平台凭证**\n   - 根据目标部署平台（Discord\u002FSlack\u002FTelegram 等），准备好 Bot Token 或 App ID。\n\n## 安装步骤\n\n你可以选择以下三种方式之一进行部署：\n\n### 方式一：一键云部署（推荐新手）\n无需自行维护服务器，直接通过官方平台配置。\n1. 访问 [spacebot.sh](https:\u002F\u002Fspacebot.sh)\n2. 连接你的社交平台账号（Discord, Slack, Telegram 等）。\n3. 在网页界面配置 Agent 人格、记忆和工具权限。\n4. 点击部署即可生效。\n\n### 方式二：自托管（单二进制文件）\n适合需要完全控制数据和本地运行的开发者。\n\n1. **克隆仓库**\n   ```bash\n   git clone https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot.git\n   cd spacebot\n   ```\n\n2. **编译构建**\n   ```bash\n   cargo build --release\n   ```\n   编译完成后，二进制文件位于 `target\u002Frelease\u002Fspacebot`。\n\n3. **配置文件**\n   在项目根目录创建 `config.toml`，参考以下最小化配置：\n   ```toml\n   [llm]\n   # 示例：使用 Anthropic\n   anthropic_key = \"env:ANTHROPIC_API_KEY\"\n\n   [defaults.routing]\n   channel = \"anthropic\u002Fclaude-sonnet-4\"\n   worker = \"anthropic\u002Fclaude-haiku-4.5\"\n\n   [platforms.discord]\n   token = \"env:DISCORD_BOT_TOKEN\"\n   ```\n\n4. **运行**\n   ```bash\n   export ANTHROPIC_API_KEY=\"your_api_key_here\"\n   export DISCORD_BOT_TOKEN=\"your_bot_token_here\"\n   .\u002Ftarget\u002Frelease\u002Fspacebot\n   ```\n\n### 方式三：Docker 部署\n适合容器化环境。\n\n1. **拉取镜像并运行**\n   ```bash\n   docker run -d \\\n     --name spacebot \\\n     -v $(pwd)\u002Fdata:\u002Fapp\u002Fdata \\\n     -e ANTHROPIC_API_KEY=\"your_api_key_here\" \\\n     -e DISCORD_BOT_TOKEN=\"your_bot_token_here\" \\\n     -v $(pwd)\u002Fconfig.toml:\u002Fapp\u002Fconfig.toml \\\n     ghcr.io\u002Fspacedriveapp\u002Fspacebot:latest\n   ```\n   *注意：请将 `config.toml` 挂载到容器中，并确保环境变量已正确设置。*\n\n## 基本使用\n\n### 1. 邀请机器人加入频道\n- **Discord**: 在开发者门户生成 OAuth2 链接，勾选 `bot` 和 `applications.commands` 权限，邀请至服务器。\n- **Slack**: 在 Slack API 页面创建应用，添加 Bot User 并安装到工作区。\n\n### 2. 触发对话\n在已添加 Spacebot 的频道中直接发送消息即可。Spacebot 会自动读取上下文并响应。\n\n**示例场景：**\n- **日常问答**：\n  > 用户：\"今天天气怎么样？\"\n  > Spacebot: (调用搜索工具) \"根据最新数据，今天北京晴朗，气温 25°C...\"\n\n- **代码任务** (需配置 OpenCode 工具)：\n  > 用户：\"帮我写一个 Python 脚本来计算斐波那契数列。\"\n  > Spacebot: (启动编码 Worker) \"好的，正在生成代码... [输出代码块]\"\n\n- **定时任务**：\n  > 用户：\"每 30 分钟检查一次我的待办事项列表。\"\n  > Spacebot: \"已创建定时任务，将在每小时的 00 分和 30 分执行。\"\n\n### 3. 管理记忆与上下文\nSpacebot 自动维护结构化记忆（事实、偏好、目标等）。你可以通过自然语言指令让它“记住”特定信息：\n> 用户：\"记住我喜欢用 Rust 编写后端服务。\"\n> Spacebot: \"已记录偏好：后端开发首选语言为 Rust。\"\n\n后续对话中，当涉及技术选型时，它会自动引用此偏好。\n\n### 4. 高级配置（模型路由）\n编辑 `config.toml` 以优化成本和性能。例如，将简单聊天路由到廉价模型，复杂编码路由到强力模型：\n\n```toml\n[defaults.routing]\n# 频道对话使用高性能模型\nchannel = \"anthropic\u002Fclaude-sonnet-4\"\n# 后台_worker_使用低成本模型\nworker = \"anthropic\u002Fclaude-haiku-4.5\"\n\n[defaults.routing.task_overrides]\n# 编码任务强制升级模型\ncoding = \"anthropic\u002Fclaude-sonnet-4\"\n\n[defaults.routing.prompt_routing]\nenabled = true\n# 启用基于提示词复杂度的自动降级\nprocess_types = [\"channel\", \"branch\"]\n```\n\n保存配置后重启 Spacebot 即可生效。","某跨时区开源社区在 Discord 上拥有数百名活跃开发者，日常需同时处理代码审查、技术答疑和新成员引导等多线程任务。\n\n### 没有 spacebot 时\n- **响应阻塞严重**：当 AI 正在为一名用户执行耗时的代码分析或检索长记忆时，其他用户的提问会被迫排队等待，导致聊天室出现长时间的“静默期”。\n- **上下文污染**：单一线程在处理多用户对话时，不同会话的原始数据容易混杂，导致 AI 回答张冠李戴，甚至遗忘之前的关键约定。\n- **信息过载失控**：在技术讨论高峰期，消息刷屏速度过快，传统机器人试图逐条回复，不仅反应迟钝，还因无法识别话题优先级而输出大量无效内容。\n- **并发能力缺失**：无法同时支持“深度编程辅助”与“快速闲聊”并行的场景，迫使团队必须部署多个独立的笨重实例来分担压力。\n\n### 使用 spacebot 后\n- **全并发即时响应**：spacebot 将思考、执行和回复拆分为独立进程，能同时为五十名成员服务；它在后台为 A 用户重构代码的同时，还能即时回应 B 用户的提问和 C 用户的闲聊，互不干扰。\n- **专属记忆隔离**：每个频道和用户拥有独立的共享记忆空间，spacebot 精准维护上下文，彻底杜绝了不同任务间的信息噪音污染，确保持续对话的逻辑连贯性。\n- **智能消息聚合**：面对刷屏消息，spacebot 的聚合系统自动将突发流量打包，让大模型“读懂房间气氛”，只挑选最有价值的话题介入或在无必要时保持安静，提升沟通效率。\n- **多角色协同运作**：单一实例即可运行多个具有不同人设的 Agent，既能作为友好的社区向导在公共频道活跃，又能作为严谨的开发助手在特定线程进行长周期任务，无需额外运维成本。\n\nspacebot 通过打破单线程瓶颈，将 AI 从“轮流服务的客服”升级为能同时驾驭复杂社区生态的“并发智能中枢”。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fspacedriveapp_spacebot_7ae16142.jpg","spacedriveapp","Spacedrive","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fspacedriveapp_a0ee3d58.png","Own Your Data",null,"jamie@spacedrive.com","https:\u002F\u002Fspacedrive.com","https:\u002F\u002Fgithub.com\u002Fspacedriveapp",[81,85,89,93,97,101,105,109,111,115],{"name":82,"color":83,"percentage":84},"Rust","#dea584",79.5,{"name":86,"color":87,"percentage":88},"TypeScript","#3178c6",17.6,{"name":90,"color":91,"percentage":92},"Jinja","#a52a22",1.7,{"name":94,"color":95,"percentage":96},"Shell","#89e051",0.6,{"name":98,"color":99,"percentage":100},"Nix","#7e7eff",0.3,{"name":102,"color":103,"percentage":104},"SCSS","#c6538c",0.2,{"name":106,"color":107,"percentage":108},"Dockerfile","#384d54",0.1,{"name":110,"color":107,"percentage":108},"Just",{"name":112,"color":113,"percentage":114},"Swift","#F05138",0,{"name":116,"color":117,"percentage":114},"HTML","#e34c26",2025,300,"2026-04-04T02:18:38","NOASSERTION","Linux, macOS, Windows","未说明",{"notes":125,"python":126,"dependencies":127},"该工具核心由 Rust 编写，以单个二进制文件形式运行，无需 Python 环境或特定 GPU 支持。支持一键部署托管服务、直接运行编译后的二进制文件或使用 Docker 容器部署。若使用本地大模型（如 Ollama），需额外配置对应的推理服务环境。","不需要",[128,129],"Rust (编译环境)","Docker (可选)",[14,13,15],[132,133,134,135,136,137,138],"agent","ai","agentic","automation","enterprise","messaging","developer-tools","2026-03-27T02:49:30.150509","2026-04-11T16:51:23.370872",[142,147,152,157,162,166],{"id":143,"question_zh":144,"answer_zh":145,"source_url":146},14296,"遇到 Anthropic API 报错 `tool_use` ids were found without `tool_result` blocks 怎么办？","该问题已在主分支（main）的合并提交中修复。请确保拉取最新的代码或更新到包含修复的版本（相关修复见 PR #104）。更新后错误应消失，日志中不再出现此类报错。","https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fissues\u002F136",{"id":148,"question_zh":149,"answer_zh":150,"source_url":151},14297,"直接在控制台窗口向 Spacebot 发送消息被忽略，且聊天记录无法保存，如何解决？","此问题已在最新版本中解决。请升级您的 Spacebot 实例到最新发行版，直接消息和聊天保存功能即可恢复正常。","https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fissues\u002F85",{"id":153,"question_zh":154,"answer_zh":155,"source_url":156},14298,"配置 MiniMax 模型（MiniMax-M2.5）时遇到 401 Unauthorized 错误如何处理？","该问题已修复。请拉取最近的容器发布版本（例如 v0.1.14 或更高），或者确保使用最新的 main 分支代码。修复后，原有的 `ApiType::Anthropic` 配置配合 `base_url = \"https:\u002F\u002Fapi.minimax.io\u002Fanthropic\"` 即可正常工作，无需切换到 `openai_completions`。","https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fissues\u002F147",{"id":158,"question_zh":159,"answer_zh":160,"source_url":161},14299,"在 Docker 中运行 Spacebot 时，Worker 命令执行失败或需要特殊权限怎么办？","如果在 Docker（特别是 Arch Linux）中运行，可能需要在 docker-compose 或运行命令中添加以下配置以允许 Worker 执行系统命令：\n1. 添加安全选项：`seccomp=unconfined`\n2. 增加能力权限：`cap_add: - SYS_ADMIN`\n缺少这些配置可能导致 Worker 无法正常启动或执行任务。","https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fissues\u002F262",{"id":163,"question_zh":164,"answer_zh":165,"source_url":161},14300,"使用 OpenRouter 预设（preset）时 Worker 调用失败或报错 `reasoning_content is missing` 如何解决？","当使用 `openrouter\u002F@preset\u002Fspacebot` 等预设遇到 Worker 执行失败或推理内容缺失错误时，尝试显式指定具体的模型路由（例如将路由改为 `openrouter\u002Fmoonshotai\u002Fkimi-k2.5`）。此外，确保在配置中启用了推理（reasoning）功能，某些预设可能需要手动开启此选项才能正确处理工具调用。",{"id":167,"question_zh":168,"answer_zh":169,"source_url":170},14301,"Worker 执行完成后结果没有返回到聊天窗口，但日志中没有报错，这是什么原因？","这是一个已知问题，已在后续版本（v0.1.15 之后的修复）中解决。如果您遇到 Worker 成功执行但结果未回传的情况，请检查并升级到最新的 Spacebot 版本。该修复确保了 Worker 的完成结果能正确传递回用户聊天界面。","https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fissues\u002F195",[172,177,182,187,192,197,202,207,212,217,222,227,232,237,242,247,252,257,262,267],{"id":173,"version":174,"summary_zh":175,"released_at":176},81045,"v0.4.0","## 变更内容\n* 修复：在 Docker 运行时依赖中添加缺失的 libxkbcommon0，由 @l33t0 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F426 中完成。\n* 新特性：桌面应用侧边栏、连接界面和 3D 球体，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F452 中实现。\n* 新特性：工作内存系统——为频道提供时间感知功能，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F454 中实现。\n* 修复：当提供商凭据不可用时，仍保持设置模式可用，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F422 中完成。\n* 新特性：工作流编排界面，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F457 中实现。\n* 修复：为 zai-coding-plan 默认模型添加提供商前缀，由 @tomasmach 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F456 中完成。\n* 修复：修复技能安装时的 500 错误及图表维度警告，由 @vsumner 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F447 中完成。\n* 新特性：添加 Mattermost 频道支持，由 @unverbraucht 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F428 中实现。\n* 修复：优雅地关闭浏览器并重试网络错误，由 @vsumner 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F463 中完成。\n* 修复：保留嵌套任务元数据更新，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F462 中完成。\n* 修复 imap-proto 构建问题并更新 Nix 依赖项，由 @vsumner 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F465 中完成。\n* 新特性（依赖项）：将 rig-core 升级至 v0.33，由 @vsumner 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F480 中完成。\n* 修复（嵌入）：在 OpenCode 嵌入中对代理数据使用 Array.isArray 检查，由 @eibrahimov 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F482 中完成。\n* 修复：工作流取消时将状态设置为“已取消”而非“失败”，由 @l33t0 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F399 中完成。\n* 修复：启动时跳过无法解析的频道绑定，避免崩溃，由 @l33t0 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F412 中完成。\n* 修复（卡片）：处理卡片页脚反序列化错误，由 @vsumner 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F479 中完成。\n* 新特性（消息传递）：为 Web 应用添加信号配置，由 @ibhagwan 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F392 中实现。\n* 修复：在 Docker 运行时依赖中添加 libxfixes3，由 @frizikk 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F427 中完成。\n* 修复：防止 Windows\u002FTauri 桌面应用中出现不必要的滚动条，由 @TheDarkSkyXD 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F471 中完成。\n* 修复：防止聊天页面布局偏移遮挡 Windows 上方导航栏，由 @TheDarkSkyXD 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F473 中完成。\n* 修复：在 Slack 中跳过仅监听模式对私信的过滤，由 @ciaranashton 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F484 中完成。\n* 新特性：将任务系统提升至实例级别的全局作用域，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F468 中实现。\n* 新特性（卡片）：添加缩略图、图片、作者、时间戳以及页脚 icon_url，由 @vsumner 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F467 中实现。\n* 新特性：使用生成的 TypeScript 类型进行 OpenAPI 迁移，由 @jamiepine 在 https:\u002F\u002Fgit 中实现。","2026-04-02T10:22:24",{"id":178,"version":179,"summary_zh":180,"released_at":181},81046,"v0.3.3","## 变更内容\n* cortex：由 @vsumner 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F307 中实现的第二\u002F三阶段健康监控及独立生命周期加固\n* 修复：由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F384 中修复的竞态条件导致数据库中丢失操作码工作端口的问题\n* 功能（消息传递）：由 @ibhagwan 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F347 中添加的通过 signal-cli JSON-RPC 守护进程实现的 Signal 适配器\n* 修复：由 @tomasmach 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F386 中加固的 GPT\u002FCodex 工具链、后续结果处理以及记忆持久化契约\n* 功能（LLM）：由 @ibhagwan 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F394 中新增的将 GitHub Copilot 作为一流 LLM 提供商\n* 修复（Slack）：由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F406 中进行的会话 ID 标准化，以防止线程分裂\n* 修复：由 @skulldogged 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F393 中保留助手工具调用转换中的推理过程\n* 修复：由 @Dakai666 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F389 中在 loop_guard 中使用字节切片，以避免多字节内容引发的 UTF-8 panic\n* 修复：由 @l33t0 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F400 中防止通过代理 API 删除实例级别的技能\n* 修复：由 @l33t0 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F398 中实现的浏览器工具和调试日志中的 UTF-8 安全字符串截断\n* 修复（配置）：由 @DeJayDev 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F403 中实现的部署到 Docker 时覆盖主机的功能\n* 修复：由 @vsumner 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F407 中加固的 Discord 投票处理并更新文档\n* 桌面应用：由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F387 中完成\n* 修复：由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F413 中保留流式响应中仅包含空白字符的内容段\n\n## 新贡献者\n* @ibhagwan 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F347 中完成了首次贡献\n* @Dakai666 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F389 中完成了首次贡献\n* @DeJayDev 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F403 中完成了首次贡献\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fcompare\u002Fv0.3.2...v0.3.3","2026-03-12T13:22:56",{"id":183,"version":184,"summary_zh":185,"released_at":186},81047,"v0.3.2","v0.3.2 在不改变核心架构的前提下，进一步提升了频道的可靠性和发布流程的易用性。托管部署现在可以通过专用的 API 来管理 SSH 守护进程，而运维人员则能够通过及时的检查快照和更丰富的实时状态上下文获得更强的可见性。\n\n本次补丁还修复了多个回合处理的边缘情况，这些情况在繁忙的频道中可能导致意外行为。`require_mention` 现已正常工作，`skip` 会立即终止当前频道回合（包括错误路径），并且历史回填内容在系统提示中被视为只读归档上下文，因此旧对话文本不会被当作新的指令来执行。\n\n## 变更内容\n* 添加 SSH 守护进程管理 API，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F369 中实现。\n* 修复：在调用 `skip` 工具后立即终止频道回合，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F373 中完成。\n* 新增：系统配置自感知、提示检查 API 以及发布版本检查功能，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F374 中实现。\n* 修复：当 `require_mention` 触发时，消息将转交给默认代理处理，而不是直接丢弃，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F376 中完成。\n* 修复：将历史回填内容从聊天历史移至系统提示中，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F377 中完成。\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fcompare\u002Fv0.3.1...v0.3.2","2026-03-10T00:49:16",{"id":188,"version":189,"summary_zh":190,"released_at":191},81048,"v0.3.1","## 变更内容\n* 修复 Docker 发布流程：0.3.0 版本的 Docker 镜像被跳过，新增检查机制以确保 Docker 构建成功后再发布版本。\n* 在 Docker 构建中启用指标收集，并由 @l33t0 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F274 中添加了全面的 Prometheus 监控埋点。\n\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fcompare\u002Fv0.3.0...v0.3.1","2026-03-08T15:54:45",{"id":193,"version":194,"summary_zh":195,"released_at":196},81049,"v0.3.0","现在，代理能够理解其所处的代码库。项目引入了仓库发现、工作树跟踪、磁盘使用情况报告以及自动沙盒白名单注入功能，从而使代理对其操作环境具备空间感知能力。\n\n浏览器工具已从头重写：基于 CDP 的无障碍 API 构建了 12 个专注型工具，取代了 DOM 提取功能，并支持在 Worker 重启后仍能保持会话状态。OpenCode 通过 Shadow DOM 直接嵌入到 Worker 详情视图中，具备空闲 Worker 持久化机制，并可在重启时自动重新连接。\n\nCortex 现在已成为真正的监管者。它负责监控 Worker 的健康状况、检测卡顿、管理分离 Worker 的生命周期，并通过内置文档和实时配置诊断实现了自我感知能力。Worker 新增了结果门控机制，可防止仅输出文本而不发出完成信号的情况；还增加了上下文注入功能，以便接收相关对话历史；同时，也实现了防止重复启动的功能。\n\nAgent Factory 增加了预设系统和由 Cortex 驱动的创建流程，用于快速启动具有专属身份文件（SOUL.md、IDENTITY.md、ROLE.md）及限定工具访问权限的新代理。原生 OpenAI SSE 流式传输和逐 token 的 Web 聊天推送功能已上线，同时对 config.rs 进行了全面重构，拆分为多个专注子模块，并实现了完善的热重载功能。\n\n其他新增功能包括：仅监听模式并支持跨平台调用处理、频道附件持久化与召回功能、针对 channel_recall 的时间过滤功能、挂钟式定时任务支持、主题切换器、Shell\u002FExec 工具整合，以及针对 rmcp 1.1 的 MCP 认证头修复。\n\n## 变更内容\n* 修复：在失败时发送 BranchResult，以防止频道被孤立 — @l33t0 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F279 中完成\n* 修复：在代理 API 错误中显示上游提供商详情 — @l33t0 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F278 中完成\n* 修复：解决配置测试中的测试隔离失败问题 — @vsumner 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F293 中完成\n* 修复：当沙盒禁用时，跳过 file\u002Fsend_file 操作中的工作区路径强制检查 — @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F295 中完成\n* 修复：阻止 Worker 秘密扫描功能中断内部工作 — @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F297 中完成\n* 修复 Cortex 和 Compactor 的 ProcessType 路由问题 — @artlu99 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F290 中完成\n* API：支持频道归档及频道列表筛选 — @txchen 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F291 中完成\n* 修复：阻止括号式回退及裸体跳过输出 — @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F303 中完成\n* 修复：为活跃代理热重载 OpenCode 设置 — @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F302 中完成\n* 修复：对未识别的顶级配置键发出警告（关闭 #221） — @l33t0 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F277 中完成\n* 修复 OpenRouter 应用归属信息：发送 X-Title 头 — @l33t0 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F275 中完成\n* 修复 cortex_chat 和 disc 中的 UTF-8 边界恐慌问题","2026-03-08T14:38:23",{"id":198,"version":199,"summary_zh":200,"released_at":201},81050,"v0.2.2","## 变更内容\n* 修复：根据配置的提供商推断默认路由，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F266 中完成\n* 沙箱加固：动态模式、环境变量净化、泄漏检测，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F259 中完成\n* 密钥存储：凭据隔离、静态加密、输出清洗，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F260 中完成\n* 新特性：通过 fetcher 自动下载 Chrome、统一 Docker 镜像、修复单例锁问题，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F268 中完成\n* 修复：保留对话历史并提升工作进程重新触发的可靠性，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F270 中完成\n* 添加界面 CI 工作流，由 @marijnvdwerf 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F267 中完成\n* 拆分 channel.rs 并标准化适配器元数据键，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F271 中完成\n* 修复：允许 macOS 沙箱中的 trustd mach 服务进行 TLS 证书验证，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F272 中完成\n* 新特性：添加 OpenRouter 应用归属头信息，由 @l33t0 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F264 中完成\n* 新特性：实现链接通道作为任务委托（v3），由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F255 中完成\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fcompare\u002Fv0.2.1...v0.2.2","2026-03-01T13:00:02",{"id":203,"version":204,"summary_zh":205,"released_at":206},81051,"v0.2.1","## 变更内容\n* 由 @fyzz-dev 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F237 中改进了任务 UI 的溢出处理以及 Docker 更新的回滚功能。\n* 由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F243 中修复了 Anthropic 在重新触发流程中的空文本块问题。\n* 修复：在断开 Twitch 平台连接时清理 twitch_token.json 文件，由 @Nebhay 完成，详见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F212。\n* 新增功能：添加电子邮件消息适配器及设置文档，由 @jamiepine 实现，详见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F244。\n* 修复：根据技能来源仓库而非仅凭名称匹配已安装的技能，由 @mwmdev 完成，详见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F205。\n* 杂项更新：添加交付门控和仓库本地的 PR 门控技能，由 @vsumner 完成，详见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F238。\n* 功能扩展（频道）：添加确定性的时序上下文，由 @vsumner 实现，详见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F239。\n* 新增功能：为分支读取功能添加 IMAP 邮件搜索工具，由 @jamiepine 完成，详见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F246。\n* 新增功能（定时任务）：添加严格的挂钟时间表支持，由 @jamiepine 实现，详见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F247。\n* 新增功能：为消息适配器实例命名，由 @jamiepine 完成，详见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F249。\n* 修复：将跨频道消息记录到目标频道的历史中，由 @jamiepine 完成，详见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F252。\n* 在 README 中添加 DeepWiki 徽章，由 @devabdultech 完成，详见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F251。\n* 修复（Cortex）：加强启动预热和公告协调机制，由 @vsumner 完成，详见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F248。\n* 新增功能：以字节形式下载图片，以便在 Slack、Discord 等平台中进行解析，并修复 Slack 的文件导入问题，由 @egenvall 完成，详见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F159。\n* 修复：使 Ollama 提供商能够通过设置 UI 进行测试，由 @jamiepine 完成，详见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F253。\n\n## 新贡献者\n* @fyzz-dev 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F237 中完成了他们的首次贡献。\n* @devabdultech 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F251 中完成了他们的首次贡献。\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fcompare\u002Fv0.2.0...v0.2.1","2026-02-27T11:54:42",{"id":208,"version":209,"summary_zh":210,"released_at":211},81052,"v0.2.0","## v0.2.0 是 Spacebot 迄今为止 _最大_ 的一次发布。\n\n代理不再是一个单通道聊天机器人，而是一个具备真正编排原语的多代理系统。\n\n\u003Cimg width=\"1074\" height=\"655\" alt=\"Screenshot_2026-02-23_at_12 48 29_PM copy\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F04b4e72d-c646-4900-8096-eec7e5222ed6\" \u002F>\n\n代理通过基于规范的任务系统进行协调，UI 中配备了一个完整的看板。任务是以结构化 Markdown 格式编写的文档，包含需求、约束条件和验收标准。后台的 Cortex 循环会拾取就绪的任务，启动工作进程，并在失败时处理完成或重新入队。代理通过公告系统查看共享的任务看板，因此委托是通过规范而非对话来完成的。\n\n工作进程的可见性得到了全面升级。实现了完整的对话记录持久化并采用 gzip 压缩，工具调用过程可实时通过 SSE 流式传输，同时还新增了 worker_inspect 工具，以便分支团队能够验证工作进程实际执行了什么操作，而不是仅依赖于一行摘要信息。\n\n在安全性方面，原有的基于字符串的命令过滤机制（超过 215 行的“打地鼠”式正则表达式）已被替换为内核强制实施的文件系统沙箱技术：Linux 上使用 bubblewrap，macOS 上使用 sandbox-exec。大模型无法将任何内容写入工作区之外，因为操作系统会阻止这种行为。\n\n此次发布还带来了对 OpenAI 和 Anthropic 订阅认证的支持，改进了频道历史的保存机制，实现了确定性的重触发处理；引入了结构化文本负载拦截功能，以防止原始 JSON\u002FXML 数据出现在用户界面上；在设置 UI 中增加了自托管更新控制选项；新增了对 Kilo Gateway 和 OpenCode Go 等服务商的支持；提供了适用于 amd64 和 arm64 架构的预编译 Linux 二进制文件；引入了 Nix Flake 构建系统；并对计划任务调度、OAuth、模型路由等多个模块进行了大量修复。\n\n## 变更内容\n* 功能 (Nix)：添加用于构建和部署 Spacebot 的 Nix Flake — @skulldogged，见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F47\n* 修复 ChatGPT OAuth 问题 — @marijnvdwerf，见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F187\n* 多代理通信图 — @jamiepine，见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F150\n* 进程沙箱：通过内核强制实现的 shell\u002Fexec 文件系统隔离 — @jamiepine，见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F188\n* 工作进程标签页：完整对话记录查看器、实时 SSE 流式传输、自省工具 — @jamiepine，见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F192\n* 添加设置中的更新控制选项，并强化自托管更新流程 — @jamiepine，见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F207\n* 功能 (Web)：UI\u002FUX 优化 — @skulldogged，见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F143\n* 功能 (CI)：发布适用于 Linux\u002Famd64 和 Linux\u002Farm64 的二进制文件 — @morgaesis，见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F94\n* 阻止结构化文本负载出现在用户回复中 — @jamiepine，见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F209\n* 修复 Z.AI Coding Plan 模型路由问题 — @jamiepine，见 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F2","2026-02-26T08:16:48",{"id":213,"version":214,"summary_zh":215,"released_at":216},81053,"v0.1.15","## 变更内容\n* 修复：通过 @Marenz 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F174 中解决已存在的 CI 失败问题（clippy、fmt、测试）\n* 修复：通过 @Marenz 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F175 中在配置中启用 ollama_base_url 简写\n* 修复：当 Anthropic 返回空内容时，返回合成的空文本，由 @Marenz 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F171 中完成\n* 修复：允许 LLM 提供字符串类型的 timeout_seconds 值，由 @Marenz 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F169 中实现\n* 功能：Telegram 部分使用 send_audio 发送音频 MIME 类型文件，由 @Marenz 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F170 中完成\n* 功能：技能部分，工作进程通过 read_skill 工具按需发现技能，由 @Marenz 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F172 中实现\n* 修复：避免日志消息截断时在多字节字符边界处发生 panic，由 @Marenz 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F176 中完成\n* ChatGPT OAuth 浏览器流程 + 提供商拆分，由 @marijnvdwerf 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F157 中完成\n* 修复：工作进程的执行结果无法送达用户的问题，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F182 中解决\n* 将 MiniMax 默认设置为 M2.5，并启用推理功能，由 @hotzen 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F180 中完成\n* 修复：通过简写配置键注册 groq\u002Ftogether\u002Fxai\u002Fmistral\u002Fdeepseek 等提供商，由 @Marenz 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F179 中实现\n* Bug 修复：更新 Slack TLS 的依赖项，由 @egenvall 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F165 中完成\n* 添加预热就绪检查机制及调度防护措施，由 @vsumner 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F181 中完成\n* 修复（Slack）：修复 Slack 频道相关问题、私信过滤、表情符号净化，并恢复 WebSocket 上的 TLS 连接，由 @sra 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F148 中完成\n\n## 新贡献者\n* @vsumner 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F181 中完成了首次贡献\n* @sra 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F148 中完成了首次贡献\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fcompare\u002Fv0.1.14...v0.1.15","2026-02-24T01:37:52",{"id":218,"version":219,"summary_zh":220,"released_at":221},81054,"v0.1.14","## 变更内容\n* 功能(mcp)：添加重试\u002F退避机制及 CRUD API，由 @l33t0 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F109 中实现\n* 功能(ux)：为侧边栏中的代理添加拖放排序功能，由 @MakerDZ 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F113 中实现\n* 修复(channel)：回滚 PromptCancelled 的历史记录，以防止中毒回合，由 @Marenz 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F114 中实现\n* 修复 CI 失败问题：rustfmt、clippy 及不稳定测试，由 @Marenz 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F116 中实现\n* 修复(channel)：防止机器人因级联触发而过度发送消息，由 @PyRo1121 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F115 中实现\n* 功能(安全)：添加认证中间件、SSRF 防护、Shell 加固及加密密钥，由 @PyRo1121 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F117 中实现\n* 移除 #58 中的过时计划文档，由 @hotzen 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F142 中实现\n* 修复(build)：在引入安全中间件和 URL 验证更改后恢复编译，由 @bilawalriaz 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F125 中实现\n* 修复(telegram)：将 Markdown 渲染为 Telegram HTML，并提供仅限 Telegram 的安全回退方案，由 @bilawalriaz 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F126 中实现\n* 修复 Fireworks，由 @Nebhay 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F91 中实现\n* 修复：加固 13 个安全漏洞（第二阶段），由 @PyRo1121 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F119 中实现\n* 修复：将生产代码中的 .expect() 和 .unwrap() 替换为正确的错误传播方式，由 @PyRo1121 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F122 中实现\n* 功能(twitch)：添加 Twitch 令牌刷新功能，由 @Nebhay 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F144 中实现\n* 功能：为国内用户添加 minimax-cn 提供商，由 @shuuul 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F140 中实现\n* 功能(telemetry)：完成指标监控与成本跟踪，并为每个代理添加上下文信息，由 @l33t0 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F102 中实现\n* 功能：支持 ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN 和 SPACEBOT_MODEL 环境变量，由 @adryserage 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F135 中实现\n* 修复 Cron 时区解析问题并消除漂移，由 @jamiepine 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F149 中实现\n* 功能：更新 Gemini 模型支持，集成最新的 Google 模型，由 @adryserage 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F134 中实现\n* 功能(web)：添加 favicon 文件，并更新 HTML 以包含这些文件，由 @the-snesler 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F154 中实现\n* 修复：添加 API 请求体大小限制及内存内容验证，由 @PyRo1121 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F123 中实现\n\n## 新贡献者\n* @PyRo1121 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F115 中完成了首次贡献\n* @hotzen 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F142 中完成了首次贡献\n* @bilawalriaz 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F125 中完成了首次贡献\n* @shuuul 在 https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F 中完成了首次贡献","2026-02-23T00:19:45",{"id":223,"version":224,"summary_zh":225,"released_at":226},81055,"v0.1.13","## What's Changed\n* Improve channel reply flow and Discord binding behavior by @jamiepine in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F95\n* feat(messaging): unify cross-channel delivery target resolution by @jamiepine in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F97\n* feat: add dedicated voice model routing and attachment transcription by @jamiepine in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F98\n* Fix all warnings and clippy lints by @Marenz in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F87\n* Add CI workflow (check, clippy, fmt, test) by @Marenz in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F101\n* Add native poll support to telegram adapter by @Marenz in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F93\n* docs(agents): update existing documentation when adding features by @Marenz in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F106\n* feat(llm): add Google Gemini API provider support by @MakerDZ in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F111\n* prompts: add missing memory-type guidance in memory flows by @marijnvdwerf in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F112\n* add mcp client support for workers by @nexxeln in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F103\n* Avoid requiring static API key for OAuth Login by @egenvall in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F100\n\n## New Contributors\n* @MakerDZ made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F111\n* @marijnvdwerf made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F112\n* @nexxeln made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F103\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fcompare\u002Fv0.1.12...v0.1.13","2026-02-21T23:00:59",{"id":228,"version":229,"summary_zh":230,"released_at":231},81056,"v0.1.12","## Note about v0.1.11\n\nv0.1.11 was removed due to a bad migration, and its tag\u002Frelease were deleted.\nv0.1.12 includes those intended changes plus additional fixes.\n\n## Highlights included from the missing v0.1.11 window\n\n- Added hosted agent limit functionality\n- Added backup export and restore endpoints\n- Added storage status endpoint and filesystem usage reporting\n- Improved release tagging\u002Fversion bump workflow (including Cargo.lock handling)\n\n## What's Changed\n* fix: register NVIDIA provider and base URL by @Nebhay in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F82\n* fix: Portal Chat isolation by @jnyecode in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F80\n* Nudge previously rejected DM users when added to allow list by @Marenz in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F78\n* Telegram adapter fixes: attachments, reply-to, and retry on startup by @Marenz in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F77\n* Anthropic OAuth authentication with PKCE and auto-refresh by @Marenz in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F76\n* fix: Prevent duplicate message replies by differentiating skip and replied flags by @thesammykins in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F69\n* fix(cron): prevent timer leak and improve scheduler reliability by @michaelbship in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F81\n* feat(cron): add configurable timeout_secs per cron job by @michaelbship in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F83\n* feat: add mention-gated Discord bindings and one-time cron jobs by @jamiepine in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F88\n* docs: update README for new features since last update by @Marenz in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F92\n\n## New Contributors\n* @Nebhay made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F82\n* @michaelbship made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F81\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fcompare\u002Fv0.1.10...v0.1.12\n","2026-02-21T02:15:01",{"id":233,"version":234,"summary_zh":235,"released_at":236},81057,"v0.1.10","## What's Changed\n* feat: Add Z.AI Coding Plan provider by @thesammykins in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F67\n* chore: optimize release profile to reduce binary size by @thesammykins in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F70\n* feat(slack): cache user identities and resolve channel names by @jamiepine in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F71\n\n## New Contributors\n* @jamiepine made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F71\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fcompare\u002Fv0.1.9...v0.1.10","2026-02-20T08:45:11",{"id":238,"version":239,"summary_zh":240,"released_at":241},81058,"v0.1.9","## What's Changed\n* add local ollama provider by @mmattbtw in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F18\n* fix(docs): add favicon, fix theme toggle, and resolve og:image localhost issue by @andrasbacsai in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F29\n* feat(llm): add NVIDIA NIM provider support by @skulldogged in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F46\n* Update slack connector to include additional sender metadata by @ACPixel in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F43\n* feat(telemetry): add Prometheus metrics with feature-gated instrumentation by @l33t0 in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F35\n* fix(ingestion): do not delete ingest files when chunk processing fails by @sookochoff in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F57\n* feat: Improve Slack Markdown by @egenvall in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F52\n* fix: key Discord typing indicator by channel ID to prevent stuck indicator by @tomasmach in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F53\n* fix: Telegram adapter improvements by @Marenz in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F50\n* Adds pdf ingestion by @ACPixel in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F63\n* feat: add markdown preview toggle to identity editors by @tomasmach in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F59\n* Add GitHub CLI to default docker image by @ACPixel in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F61\n* feat(llm): add custom providers and dynamic API routing by @sbtobb in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F36\n* fix: prevent panic in split_message on multibyte UTF-8 char boundaries by @tomasmach in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F49\n* feat(slack): app_mention, ephemeral messages, Block Kit, scheduled messages, typing indicator by @sookochoff in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F58\n* feat(slack): slash commands (Phase 3) + Block Kit interactions (Phase 2b) by @sookochoff in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F60\n* Add Portal Chat for direct web-based agent interaction by @jnyecode in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F64\n* feat: add MiniMax as native provider by @ricorna in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F26\n* feat: add Moonshot AI (Kimi) as native provider by @ricorna in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F25\n* feat: Discord rich messages (Embeds, Buttons, Polls) by @thesammykins in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F66\n\n## New Contributors\n* @mmattbtw made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F18\n* @skulldogged made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F46\n* @ACPixel made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F43\n* @l33t0 made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F35\n* @sookochoff made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F57\n* @egenvall made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F52\n* @Marenz made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F50\n* @sbtobb made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F36\n* @jnyecode made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F64\n* @ricorna made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F26\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fcompare\u002Fv0.1.8...v0.1.9","2026-02-20T04:25:44",{"id":243,"version":244,"summary_zh":245,"released_at":246},81059,"v0.1.8","## What's Changed\n* fix: set skip_flag in ReplyTool to prevent double reply by @tomasmach in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F39\n* fix(daemon): create instance directory before binding IPC socket by @BruceMacD in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F37\n* otel by @Brendonovich in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F30\n* fix otel by @Brendonovich in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F41\n* make otel actually work by @Brendonovich in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F42\n\n## New Contributors\n* @tomasmach made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F39\n* @BruceMacD made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F37\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fcompare\u002Fv0.1.7...v0.1.8","2026-02-19T05:26:17",{"id":248,"version":249,"summary_zh":250,"released_at":251},81060,"v0.1.7","## What's Changed\n* fix(config): support numeric telegram chat_id binding match by @cyllas in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F34\n* Add ARM64 multi-platform Docker images by @andrasbacsai in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F27\n\n## New Contributors\n* @cyllas made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F34\n* @andrasbacsai made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F27\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fcompare\u002Fv0.1.6...v0.1.7","2026-02-18T18:09:56",{"id":253,"version":254,"summary_zh":255,"released_at":256},81061,"v0.1.6","**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fcompare\u002Fv0.1.5...v0.1.6","2026-02-18T10:14:21",{"id":258,"version":259,"summary_zh":260,"released_at":261},81062,"v0.1.5","## What's Changed\n* Fix broken documentation links in README by @joseph-lozano in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F11\n* fix: IPv6 socket address parsing for Docker deployments by @pablopunk in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F14\n\n## New Contributors\n* @joseph-lozano made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F11\n* @pablopunk made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F14\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fcompare\u002Fv0.1.4...v0.1.5\n\n## What's Changed\n* Fix broken documentation links in README by @joseph-lozano in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F11\n* fix: IPv6 socket address parsing for Docker deployments by @pablopunk in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F14\n\n## New Contributors\n* @joseph-lozano made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F11\n* @pablopunk made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F14\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fcompare\u002Fv0.1.4...v0.1.5","2026-02-18T07:50:05",{"id":263,"version":264,"summary_zh":265,"released_at":266},81063,"v0.1.4","## What's Changed\n* Run release workflow on x86 and ARM runners by @Brendonovich in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F3\n* Fix OpenCode Zen provider icon by @Brendonovich in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F5\n* better provider list by @Brendonovich in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F6\n* Fix Z.ai provider icon by @jiunshinn in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F7\n* improve docker build by @Brendonovich in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F4\n* Fix quick start by @doanbactam in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F8\n\n## New Contributors\n* @doanbactam made their first contribution in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F8\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fcompare\u002Fv0.1.3...v0.1.4","2026-02-17T23:23:34",{"id":268,"version":269,"summary_zh":270,"released_at":271},81064,"v0.1.3","## What's Changed\n* Add OpenCode Zen provider support by @Brendonovich in https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fpull\u002F2\n\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacebot\u002Fcompare\u002Fv0.1.2...v0.1.3","2026-02-17T03:59:34"]