---
title: "空间与项目"
description: "空间是隔离的知识库，也是安全边界；项目是空间内被打上标签的文件夹，代理通过稳定的名称访问它。"
---

# 空间与项目

Notarium 区分两种组织单元：**空间（space）**——隔离的知识库，也是安全边界；**项目（project）**——空间内被打上标签的文件夹。它们是职责不同的两种实体：空间负责隔离，项目负责组织。

## 空间——隔离的单元

空间是一个自成一体的知识库：拥有各自的索引、图谱、搜索、目录树、历史日志，以及各自的成员集合。空间之间互不重叠：一个空间的笔记、搜索和链接在另一个空间中不可见。空间同时承担两种角色——组织（“个人” /“工作” /“归档”）和**安全边界**：正是在空间这一层决定谁能看到什么。

- 每个空间由恰好一个引擎实例提供服务——隔离由架构本身保证。
- 空间的身份是稳定的内部 `space_id`；**slug**（URL 安全：小写拉丁字母、数字、连字符和下划线——`[a-z0-9_-]`）是可重命名的地址和 URL 句柄，而 `displayName` 是人类可读的标签。重命名 slug 是安全的：旧名称会进入别名历史并继续解析（`/s/<old>` 会重定向到当前名称）。
- 寻址方式：界面中用 `/s/<slug>`，REST 中用 `/api/s/<slug>/…`。

有关角色和隐私的更多内容，参见[访问模型](/docs/concepts/access-model/)。

## 个人空间

每个用户都必定拥有一个**个人空间**——其默认主页：

- 它在账户开通时创建，且**不可删除**；
- 它作为默认落地页，并保存代理关于你和你个人资料的私有记忆；
- 它是一个功能完整的工作空间：无需另行设置，你就能立即开始记笔记和标记项目。

> [!important] 个人空间无法邀请第二位成员
> 这是个人空间与普通空间的唯一区别。拥有读取权限的其他成员会看到你的私有记忆和个人笔记——因此对个人空间的邀请是在服务端被禁止的，而不仅仅是在界面中隐藏。

## 项目——被打上标签的文件夹

项目是一种**轻量、可选的实体**：空间内一棵被标记为项目的普通文件夹子树。内容不必存放在项目里——未打标签的文件夹依然只是文件夹。

标签是文件夹根目录下的一个点文件 `.notariummeta`（JSON，带有一个稳定的 `id`）。它随文件夹一同迁移，包括**外部**迁移（git、文件管理器）——项目的身份锚定在文件夹本身之中，而不仅仅在数据库里。

```md
myspace/
├─ research/
│  └─ .notariummeta      ← 打上标签的文件夹 = 项目
├─ inbox/                ← 普通文件夹（不是项目）
└─ ...
```

- **寻址是一个句柄 `(space, slug)`**，采用 GitLab 的 `group/project` 模型。项目的 slug 在空间内唯一；跨空间的同名项目通过 `space` 字段区分。根项目会收缩为仅 `<space>`（例如 `main`，而非 `main/main`）。
- **项目的 slug** 是 `displayName` 或路径最后一段（而非整条路径）经音译得到的 kebab-case 形式。
- **给文件夹打标签、移除标签或创建 “New project” 都是人类的操作**（`space:write` 权限）。代理不创建容器：它拥有内容，人类拥有结构。
- **创建空间会自动把它的根标记为项目**——这样代理无需手动打标签就能立即写入 `<space>`。

项目是作用域和地址，但**不是安全边界**：访问决策始终取决于空间成员资格。代理如何寻址项目，参见[意图工具](/docs/agents/intent-tools/)。

> [!note] 要求与边界
> 项目依赖元数据库和本地标签存储——没有它们，项目将无法打开。
