内容
<h1 align="center">Muster</h1>
<p align="center">
<strong>适用于智能软件团队的操作系统,一键部署。</strong><br>
人类和一支AI代理团队共享一个任务基板 — Muster将整个流程打包,您可以在新机器或笔记本电脑上运行。<br>
</p>
<p align="center">
<a href="https://34.220.64.149.sslip.io">实时演示和白皮书</a> ·
<a href="https://app.34.220.64.149.sslip.io">实时门户</a>
(只读演示登录 <code>demo@muster.dev</code> / <code>muster-demo</code>)<br>
<sub>演示服务于原始 <code>sslip.io</code> 主机,带有真实的Let's Encrypt证书,直到 <strong>musterr.dev</strong> DNS切换 — 相同的机器,相同的TLS。</sub>
</p>
> **命名说明:**公开产品名称为 **Muster**;**Elk OS** 是项目的内部名称,保留在CLI(`bin/elk-os`)、环境变量(`ELK_OS_*`)和一些内部文档中。重命名是跟踪决策的结果,而不是意外 — 两个名称指的是同一件事。
---
大多数“AI应用于工作”的工具在现有系统中添加聊天机器人。Muster颠倒了这一点:**共享任务板是基板**,人类和代理都是其一流用户。人类在板上拖动的行是代理通过MCP拾取的行 — 并在完成后写回。Muster将该循环打包、连接并可复制,作为可自行托管的产品交付。
```bash
git clone https://github.com/AnalogElk/muster.git && cd muster
./bin/elk-os init --profile generic # 生成密钥 + .env
./bin/elk-os up # 整个堆栈的docker compose up
./bin/elk-os doctor # 绿色/红色健康板 — 循环证明
```
Docker是唯一的硬依赖项(`migrate`/`seed`额外使用标准库`python3` — 参见下面的CLI表格)。密钥生成到gitignore的`.env`中,永不打印。
> **全新克隆说明:**门户映像从 `analog-elk-front-end` 的本地checkout(参见 [`portal/`](./portal/))构建,新克隆不会有 — `up`停止并列出替代方案。或者,在`.env`中设置`ELK_OS_WITH_PORTAL=false`(Directus + RAG + 板块仍然启动)或拉取发布的映像(`ELK_OS_USE_PUBLISHED_IMAGES=true` + `PORTAL_IMAGE`/`RAG_IMAGE`)。
## 四个子系统
一个`elk-os up`启动四个连接的组件:
| 子系统 | 描述 |
|---|---|
| **Claude侧操作系统** | 治理宪法(`CLAUDE.md`)、MCP桥、SessionStart钩子和持久内存,将Claude Code转换为常驻团队成员。通过`elk-os wire`按部署渲染。 |
| **Directus + `os_*`** | 共享状态总线:任务、冲刺、项目、发布、仓库。Directus的**原生MCP服务器**(`/mcp`)是代理访问板块的门户。 |
| **RAG知识引擎** | 本地“Claude是LLM”的知识库(Postgres + Qdrant + Redis + FastAPI)。嵌入本地 — 无外部推理,无API密钥,无配额。 |
| **门户** | 人类界面(管理员 + 客户端),Next.js应用程序在相同的`os_*`数据上。 |
## 循环,具体来说
```
┌─────────────────────────────────────────────────────┐
│ Directus + os_*板块 │
│ (任务 · 冲刺 · 项目 · 发布) │
└───────────────▲───────────────────────▲─────────────┘
拖动卡片到 │ │ 通过原生Directus MCP (/mcp)读取/写入
门户 │ │
┌──────┴──────┐ ┌──────┴───────────┐
│ 人类 │ │ Claude舰队 │
│ (门户) │ │ (连接CLAUDE.md)│
└─────────────┘ └──────────────────┘
```
`elk-os wire`启用原生MCP服务器(`settings.mcp_enabled`),编写`.mcp.json`指向此部署的Directus,并通过相同的端点 + 令牌证明循环。`doctor`然后遍历每个子系统 — 包括针对`/mcp`的实时`tools/list`探针(WARN直到连接) — 如果任何行红色,则退出非零。
## 配置文件
| 配置文件 | 启动 |
|---|---|
| `generic` | 空白 slate 种子化带有合成的“Demo Co” — 模式 + 种子数据清理原始;使其成为您自己的。 |
| `analogelk` | Analog Elk自己的演示数据(参考实例)。 |
> 诚实说明:门户**UI**为**每个**配置文件提供Muster品牌 — 品牌在映像构建时应用(`portal/prepare-context.sh`),不按配置文件切换。配置文件门户品牌化是一个跟踪的后续工作。
```bash
./bin/elk-os init --profile analogelk
```
## CLI
一个幂等阶段安装程序(`.elk-os-state.json`记录已完成阶段;每个阶段都可以安全重试 — 已完成的工作不会执行,因此您可以随时停止并继续):
| 命令 | 执行 |
|---|---|
| `init` | 生成密钥 + 从`.env.example`写入`.env`。 |
| `up` | `docker compose up`核心(+ RAG + 门户),然后铸造管理员静态令牌。 |
| `migrate` | 应用修剪的`os_*`模式快照(幂等差异 + 应用)。 |
| `seed` | 加载配置文件的种子数据(幂等插入)。 |
| `wire` | 渲染Claude侧操作系统,启用原生MCP服务器,证明循环。 |
| `doctor` | 按子系统绿色/红色板块 — 运行时验收测试。 |
| `down` | 停止堆栈(`--volumes`删除数据)。 |
## 部署选项(诚实关于本地与主机)
| 路径 | 主机 | 最适合 |
|---|---|---|
| **Box** ([`provision/`](./provision/)) | **整个堆栈** 在Caddy + TLS后面 | 推荐的实时演示:〜$6–12/月VPS + 域名(或免费`sslip.io`主机)。 |
| **Render** ([`deploy/render.yaml`](./deploy/render.yaml)) | Directus + Postgres + 门户 | 最方便的PaaS一键部署。 |
| **Fly / Railway** ([`deploy/`](./deploy/)) | 按服务,手动连接 | 如果您已经在那里生活。 |
| **Netlify** ([`deploy/netlify/`](./deploy/netlify/)) | 门户**前端仅** | 将UI放在CDN上 — **需要其他地方托管Directus** 。 |
**诚实的警告:**门户**如果没有可达的Directus后端,则快速失败** — 前端仅主机(Netlify)托管UI,*不*后端。 后端(Postgres + Directus + RAG + 原生MCP)需要真实主机:box是可靠的全栈路径。 而门户映像发布到GHCR(不能在裸PaaS上构建) — 参见 [`provision/`](./provision/) 和 [`deploy/README.md`](./deploy/README.md)。
实时演示*是* box路径: [`site/`](./site/) 是白皮书首页,Caddy在演示根目录提供服务, [`provision/`](./provision/) 包括使公共演示真实的脚本 — `seed-demo.py`(种子实际Muster构建板块),`re-add-kb.py`(恢复 + 种子知识库),和 `demo-readonly-role.py`(锁定`demo@muster.dev`登录为只读)。
## 克隆后重新生成的内容(不作为预渲染)
- **`portal/.build/`** — 门户的Docker构建上下文是`analog-elk-front-end`提交的**冻结存档**,按需重现 `portal/prepare-context.sh`。 Gitignored;永不提交。
- **`wire/`** — 每个部署的Claude配置由`elk-os wire`从提交的 [`claude-os/`](./claude-os/) 模板渲染。它生成绝对本地路径,并仅通过环境变量引用令牌。 Gitignored;随时重新生成 `elk-os wire`。
## 版本控制和发布
版本控制通过 [release-please](https://github.com/googleapis/release-please) 自动进行(`release-type: simple` — Muster是bash/compose仓库,而不是Node包)。 记录版本位于 [`version.txt`](./version.txt);叙述位于 [`CHANGELOG.md`](./CHANGELOG.md)。 每个提交/PR标题必须是有效的 [Conventional Commit](https://www.conventionalcommits.org) (`feat:` → 次要,`fix:`/`perf:` → 修补,`feat!:` → 主要)。 在标签上,服务映像发布到GHCR( [`publish-images.yml`](./.github/workflows/publish-images.yml))。
## 它在演示之外是否成立?
Muster包装的系统在生产中运行一个真正的机构 — 真实的客户,发票,运行状况监控,备份恢复演练,自动发布。 在48小时窗口(2026-07-01/02)内,它承载了 **18个拉取请求到生产环境,跨越8个仓库** ,每个机器编写的更改都经过 **3审阅者对抗风险门控** 才能合并。 门控通过提供可复制的证据来发挥作用 — 包括一个“修复”被证明是完全无操作的补丁,以及一个博客部署仍然保留的推出,因为索引薄页面而没有内容存在将是一个SEO回归。 当编排会话因机器崩溃而被终止时,新会话从任务记录和每代理日志中重建了完整状态,并恢复了零工作损失。
## 设计和状态
完整规格: [`docs/superpowers/specs/2026-06-29-elk-os-installer-design.md`](./docs/superpowers/specs/2026-06-29-elk-os-installer-design.md)。 按阶段的实际状态(已发货 vs 预期)在 [`WHITEPAPER-LOG.md`](./WHITEPAPER-LOG.md) 中诚实跟踪。 循环 — 核心 + RAG + 模式/种子 + 门户 + 连接的Claude-OS — 在从零开始安装时已证明,公共演示已上线: [白皮书首页](https://34.220.64.149.sslip.io) 与 [门户](https://app.34.220.64.149.sslip.io) 一键即可访问。
## 许可证
[MIT](./LICENSE) © Michael Walliser (Analog Elk)。 Muster的`os_*`模式源自 [directus-labs/agency-os](https://github.com/directus-labs/agency-os) (也是MIT);该归属在 [`NOTICE`](./NOTICE) 中,并随任何重新分发一起存在。 决策记录:宽松许可最大化采用和信任;业务是服务(托管,支持,自定义构建) — 代码是凭证,而不是护城河。
由 [Michael Walliser](https://walliser.me) 构建,创意技术人员 — Muster是凭证。