[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-74672":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":33,"readmeContent":34,"aiSummary":35,"trendingCount":16,"starSnapshotCount":16,"syncStatus":36,"lastSyncTime":37,"discoverSource":38},74672,"spacebot","spacedriveapp\u002Fspacebot","spacedriveapp","An AI agent for teams, communities, and multi-user environments.","https:\u002F\u002Fspacebot.sh",null,"Rust",2266,345,18,121,0,8,15,58,24,88.92,"Other",false,"main",[26,27,28,29,30,31,32],"agent","agentic","ai","automation","developer-tools","enterprise","messaging","2026-06-12 04:01:15","\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>The agent harness that runs teams, communities, and companies.\u003C\u002Fstrong>\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  \u003Ca href=\"https:\u002F\u002Fdeepwiki.com\u002Fspacedriveapp\u002Fspacebot\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fstatic\u002Fv1?label=Ask&message=DeepWiki&color=5B6EF7\" \u002F>\n  \u003C\u002Fa>\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=\"#goals-and-tasks\">Goals & Tasks\u003C\u002Fa> •\n  \u003Ca href=\"#quick-start\">Quick Start\u003C\u002Fa> •\n  \u003Ca href=\"#spacebot--spacedrive\">Spacedrive\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.webp\" alt=\"Spacebot UI\" \u002F>\n\u003C\u002Fp>\n\n---\n\nSpacebot is opinionated agent infrastructure, built for teams and usable by anyone. **State belongs in structured storage, not markdown files the LLM manages.** Memory lives in a typed graph in SQLite. Autonomy runs on a task state machine linked to goals, not a heartbeat.json. The LLM reasons. The system holds state.\n\n**It gets smarter the more you use it.** After complex tasks, the agent captures what it learned as reusable skills. After conversations go idle, a background process silently saves skills and memories worth keeping. Every session builds on the last — without any user action.\n\nIt works out of the box and scales from one person to a whole community.\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\nSpacebot splits the monolith into specialized processes that only do one thing, and delegate everything else.\n\n---\n\n## Built for Teams\n\nNo other agent harness handles concurrent multi-user conversations, shared memory across channels, and true process-level concurrency. A Discord community with hundreds of active members, a Slack workspace running parallel workstreams, a Telegram group coordinating across time zones. Spacebot handles all of it without any user waiting on another.\n\nSolo users get the same infrastructure. Better memory, better concurrency, better structure. Everything teams rely on, for one person.\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 without going dark. Fifty people can interact simultaneously. A message coalescing system detects rapid-fire bursts, batches them into a single turn, and lets the agent read the room.\n\n**For teams:** connect it to Slack. Each channel gets a dedicated conversation with shared memory. One engineer gets a deep coding session while another gets a quick answer. Workers handle 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 on Discord, a dev assistant on Slack, a research agent handling background tasks. Each with its own identity, memory, and security permissions. One binary, one deploy.\n\n---\n\n## How It Works\n\nFive process types. Each does one job.\n\n**Channels** are the user-facing LLM process. One per conversation, with soul, identity, and personality. A channel never executes tasks or searches memories directly. It branches to think, spawns workers to act, and stays responsive.\n\n**Branches** fork from the channel's context to think. They have the full conversation history and run concurrently. The channel sees the conclusion, not the working.\n\n**Workers** are independent processes. Each gets a specific task, a focused prompt, and task-appropriate tools, with no conversation context. Fire-and-forget for one-shot tasks, or interactive for longer sessions where follow-up routes to the active worker.\n\n**The Compactor** is a programmatic monitor (not an LLM) that watches context size per channel and triggers compaction before the channel fills up. Compaction workers run alongside without blocking.\n\n**The Cortex** sees across all channels, workers, and branches simultaneously. It maintains the agent's working memory — a layered context assembly system that gives every conversation structured awareness of what's happening across the agent. Events are recorded as they happen; intra-day synthesis compresses them into narrative; daily summaries roll up at midnight; knowledge synthesis regenerates when the memory graph changes. The cortex supervises processes and maintains the memory graph.\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\n            → Compacted summary swaps in\n    → Channel never interrupted\n```\n\nFor process capabilities, tool access by type, memory internals, cron, and multi-agent isolation, see [ARCHITECTURE.md](ARCHITECTURE.md).\n\n---\n\n## Goals and Tasks\n\nSpacebot is built around a task system. Goals set direction. Tasks carry work. The agent executes, remembers, and improves whether or not you're present.\n\nOn a configured interval, the **autonomy channel** wakes with full context: identity, memory, working memory, the complete task state, active goals, and a summary of its last few runs. It picks the most important ready task, executes it with full tool access, and exits.\n\nState lives in tasks. Progress notes go on the task itself. After a crash, the next wake reads task metadata and picks up where things left off. At the end of each run the autonomy channel writes a summary of what happened. On next wake, that summary is the first thing it reads.\n\n**The agent proposes. You decide.** Tasks the autonomy channel creates land in `pending_approval`. Nothing runs autonomously until you approve it.\n\n---\n\n## What It Does\n\n### Memory\n\nSpacebot's memory is a typed, graph-connected knowledge system in SQLite and LanceDB. Every memory has a type, an importance score, and graph edges to related memories. The agent distinguishes facts from decisions, preferences from goals.\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** — drop files into `ingest\u002F` and Spacebot extracts structured memories automatically. Supports text, markdown, and PDF.\n- **Working memory** — a five-layer context assembly system. Identity context, a structured event log, cross-channel activity map, participant awareness, and change-driven knowledge synthesis. Most layers are programmatic — no LLM calls to stay current\n\n### Skills\n\nSkills are reusable procedures injected into worker system prompts. The agent writes them from experience — and they accumulate automatically over time.\n\n- **Autonomous skill capture** — when a channel identifies a workflow that required multiple steps or problem-solving, it delegates to a branch to write it as a skill. The skill loads into the next session and every session after\n- **Post-conversation reflection** — after a conversation goes idle, a background branch silently reviews the history and saves skills and memories worth keeping. No user action required\n- **AI-assisted authoring** — describe a skill in plain language, the agent generates it and shows a preview before saving\n- **Worker injection** — skills are injected into worker system prompts for specialized tasks\n- **skills.sh registry** — install any skill from the public ecosystem with one command. Compatible with any skill from the public registry\n\n```bash\nspacebot skill add vercel-labs\u002Fagent-skills\nspacebot skill add anthropics\u002Fskills\u002Fpdf\nspacebot skill list\n```\n\n### Scheduling\n\nCron jobs created and managed from conversation:\n\n- **Natural scheduling** — \"check my inbox every 30 minutes\" becomes a cron job with a delivery target\n- **Strict wall-clock schedules** — cron expressions for exact local-time execution\n- **Single delivery** — all reply calls are buffered during the run and flushed as one message when the job completes. No mid-run fragments.\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### 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- **Browser** — headless Chrome automation with accessibility-tree refs. Navigate, click, type, screenshot, manage tabs\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- **[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, Signal, Mattermost, Email, and Webchat, plus a generic Webhook receiver:\n\n- **Message coalescing** — rapid-fire messages are batched into a single LLM turn with timing context\n- **File attachments** — send and receive files, images, and documents. Attachments are saved to the workspace and recalled by ID\n- **Rich messages** — embeds\u002Fcards, interactive buttons, select menus, and polls (Discord). Block Kit and slash commands (Slack)\n- **Email** — IMAP polling + SMTP delivery with TLS, UID-based dedup, allowed sender filtering, and attachment limits. Works with local bridges like Proton Bridge\n- **Webchat** — embeddable portal chat with SSE streaming, per-agent session isolation\n- **Per-channel permissions** — guild, channel, and DM-level access control, hot-reloadable\n\n### Model Routing\n\nFour-level routing picks the right model for every call. Channels get the best conversational model. Workers get something fast and cheap. Coding workers upgrade automatically. Simple user messages are downgraded to cheaper models by a sub-millisecond prompt scorer with no external calls. Voice messages route to a dedicated voice model.\n\nAny OpenAI-compatible or Anthropic-compatible endpoint works, including Ollama for local models, Z.ai GLM models, Azure OpenAI, and custom providers. Built-in support for Kilo Gateway, NVIDIA, MiniMax, Moonshot AI, Gemini, GitHub Copilot, OpenCode Go, and more.\n\n### MCP Integration\n\nConnect workers to external [MCP](https:\u002F\u002Fmodelcontextprotocol.io\u002F) servers for arbitrary tool access — databases, APIs, SaaS products, custom integrations. Both stdio and streamable HTTP transports. Automatic tool discovery, hot-reloadable, exponential-backoff retry so a broken server never blocks startup.\n\n### Security\n\nSpacebot runs autonomous LLM processes that execute arbitrary shell commands. Security is layered so no single failure exposes credentials or breaks containment.\n\n**Credential isolation:** secrets split into system credentials (LLM API keys, messaging tokens, never exposed to subprocesses) and tool credentials (CLI tokens injected as env vars into workers). Every subprocess starts with a sanitized environment. System secrets never enter any subprocess.\n\n- **Secret store** — credentials live in a dedicated encrypted database, referenced by alias. Plain config files never contain secrets\n- **Encryption at rest** — optional AES-256-GCM with a master key derived via Argon2id, stored in the OS credential store (macOS Keychain, Linux kernel keyring), never on disk or in an env var\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\n\n**Process containment:** 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 filesystem is read-only except the agent's workspace. On macOS, `sandbox-exec` enforces equivalent restrictions via SBPL profiles. Enforced at the kernel level.\n\n- **Dynamic sandbox** — toggle sandbox mode via dashboard or API without restarting\n- **Workspace isolation** — file tools reject paths outside the agent's workspace. Symlinks that escape are blocked.\n- **Leak detection** — secret-pattern checks at channel egress across plaintext, URL-encoded, base64, and hex encodings\n- **SSRF protection** — browser tool blocks requests to cloud metadata endpoints, private IPs, loopback, and link-local addresses\n\n---\n\n## Gets Better with Use\n\nSpacebot builds on itself over time through four specific mechanisms.\n\n**Branches write skills from experience.** When a channel identifies a workflow that required multiple steps, problem-solving, or domain knowledge, it delegates to a branch to capture it as a structured skill. The skill goes to disk and loads into the next session. Future workers get it injected into their system prompt.\n\n**Post-conversation reflection saves what's worth keeping.** After a conversation goes idle, a background branch reviews the history and silently saves skills and memories worth keeping. It runs with a capped turn budget, produces no user-visible output, and fires only when there's enough conversation to learn from.\n\n**Memory deepens with every interaction.** Each conversation adds facts, preferences, decisions, and observations to a typed graph with importance scoring and graph edges. The cortex synthesizes this into a briefing every future conversation benefits from.\n\n**Goals drive autonomous work between conversations.** The autonomy channel wakes on its interval, picks up ready tasks, and works through them. Working memory records what happened, so the next conversation picks up where things left off.\n\nEverything goes through typed tools into structured storage. Nothing drifts.\n\n---\n\n## Spacebot + Spacedrive\n\nSpacebot pairs with [Spacedrive](https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspacedrive), an open-source cross-platform file manager built on a virtual distributed filesystem. Neither requires the other. When paired, Spacebot is the only agent harness with direct integration into a cross-device filesystem.\n\n### What Pairing Enables Today\n\n**Multi-device access:** one Spacebot instance, all your devices. Talk to your agent from your phone while a worker executes on your server. Spacedrive's P2P layer (Iroh\u002FQUIC) routes from every device through the paired node to Spacebot. No separate SDK, no separate auth.\n\n**Remote execution:** workers can target any device in your library. A task that needs your home server's GPU, your work laptop's local repos, or your phone's camera routes through Spacedrive's permission system to the target device. From the agent's perspective, the tool call is identical.\n\n**File system intelligence:** every directory can carry context nodes describing what it contains and what policies apply. When the agent navigates your filesystem it gets that context, not a blind listing.\n\n**Safe data access:** Spacedrive indexes external sources (Gmail, Slack, Obsidian, GitHub, Apple Notes, contacts, calendar, browser history) as searchable data the agent can query. Every record passes through a local prompt injection classifier (Prompt Guard 2) before reaching the agent. The agent can search your emails without a malicious email hijacking it.\n\n### Where This Is Going\n\nA company deploys Spacebot + Spacedrive on their infrastructure. Employees install Spacedrive on their devices and join the company library. The company agent has access to employee devices through Spacedrive's permission system, with individual-level controls. The org graph in Spacebot defines hierarchy and delegation: which agents report to which, who can approve what, how tasks flow.\n\nAn employee talks to the company agent from their MacBook. The agent knows their projects, their device, their role, and can spawn workers on any authorized machine. They switch to their personal Spacedrive library and connect to their home Spacebot, with personal data and personal context. The app is the same. The agent is different.\n\nNo other agent harness is building this. It's a category.\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, Gemini, GitHub Copilot, 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### Run\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](\u003Cdocs\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:\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 before each API call. When OAuth credentials are present, they take priority over a static `ANTHROPIC_API_KEY`.\n\n---\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## Tech Stack\n\n| Layer           | Technology                                                                                                      |\n| --------------- | --------------------------------------------------------------------------------------------------------------- |\n| Language        | **Rust** (edition 2024) — single binary, no runtime dependencies, no GC pauses                                  |\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, tasks, goals, 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                                             |\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\nSingle binary, no server dependencies. All data lives in embedded databases in a local directory.\n\n---\n\n## Documentation\n\n| Doc                                                                 | Description                                               |\n| ------------------------------------------------------------------- | --------------------------------------------------------- |\n| [Quick Start](\u003Cdocs\u002Fcontent\u002Fdocs\u002F(getting-started)\u002Fquickstart.mdx>) | Setup, config, first run                                  |\n| [Config Reference](\u003Cdocs\u002Fcontent\u002Fdocs\u002F(configuration)\u002Fconfig.mdx>)  | Full `config.toml` reference                              |\n| [Architecture](ARCHITECTURE.md)                                     | Process types, tool access, memory internals, multi-agent |\n| [Memory](\u003Cdocs\u002Fcontent\u002Fdocs\u002F(core)\u002Fmemory.mdx>)                     | Memory system design                                      |\n| [Tools](\u003Cdocs\u002Fcontent\u002Fdocs\u002F(features)\u002Ftools.mdx>)                   | All available LLM tools                                   |\n| [Routing](\u003Cdocs\u002Fcontent\u002Fdocs\u002F(core)\u002Frouting.mdx>)                   | Model routing and fallback chains                         |\n| [Secrets](\u003Cdocs\u002Fcontent\u002Fdocs\u002F(configuration)\u002Fsecrets.mdx>)          | Credential storage, encryption, output scrubbing          |\n| [Sandbox](\u003Cdocs\u002Fcontent\u002Fdocs\u002F(configuration)\u002Fsandbox.mdx>)          | Process containment and environment sanitization          |\n| [Cron Jobs](\u003Cdocs\u002Fcontent\u002Fdocs\u002F(features)\u002Fcron.mdx>)                | Scheduled recurring tasks                                 |\n| [MCP](\u003Cdocs\u002Fcontent\u002Fdocs\u002F(features)\u002Fmcp.mdx>)                       | External tool servers via Model Context Protocol          |\n| [OpenCode](\u003Cdocs\u002Fcontent\u002Fdocs\u002F(features)\u002Fopencode.mdx>)             | OpenCode as a worker backend                              |\n| [Messaging](\u003Cdocs\u002Fcontent\u002Fdocs\u002F(messaging)\u002Fmessaging.mdx>)          | Adapter architecture and platform setup                   |\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\n### SpaceUI (Frontend Components)\n\nThe dashboard uses [`@spacedrive\u002F*`](https:\u002F\u002Fgithub.com\u002Fspacedriveapp\u002Fspaceui) packages from npm. For local development with linked packages, see [CONTRIBUTING.md](CONTRIBUTING.md).\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","Spacebot 是一个专为团队、社区和多用户环境设计的AI代理。它使用Rust语言构建，具备结构化存储状态、基于SQLite的类型图记忆以及与目标链接的任务状态机等核心功能，确保了系统的高效性和智能性。该工具特别适合需要在多个通信平台上（如Discord、Slack、Telegram或Twitch）进行协作交流的场景，无论是小规模个人项目还是大规模企业级应用都能良好适配。通过将复杂任务分解成专门处理单一职责的小进程，Spacebot能够实现真正的并行处理，避免了传统AI代理框架中常见的单一会话瓶颈问题。",2,"2026-06-11 03:50:23","high_star"]