父路线:#367
依赖:#368
用户可见结果
用户新建 Session 时可以显式选择服务器上的 Git 路径。该 Session 从此持续以这个工作根、仓库身份、适用 AGENTS.md 和项目记忆完成 coding work;同一仓库可以有多个平级 Session。
Coding Agent 不是第二个 Agent,而是通用 Akashic 在 Project Session 中的工作形态。
已确认合同
- Session 使用
session_kind = companion | project。Project Session 持久保存 project_id、不可变 working_root 和创建时的 project identity snapshot。
- 第一版不建
projects 表。每个 Project Session 重复保存同一确定性 project_id。
- 有 Git remote 时,
project_id 从去凭据、规范化后的 origin identity 派生;没有 remote 时从 canonical git-common-dir 派生。算法必须版本化。同 remote 的 clone/worktree 属于同一 Project,fork remote 属于不同 Project。
working_root 是用户选择、服务端已存在的绝对路径,可以是仓库子目录。它是默认 cwd 和上下文根,不是硬 sandbox。
- Agent 可以按既有工具权限跳出根目录,但不会因此重新绑定 Project。
- Session 创建后不允许修改、清除或重新指定工作根;其他根使用新 Session。
- 用户可从最近 Git 根选择,也可手工输入绝对服务端路径;路径必须存在且 identity 可确定。
- 同一 Project 可有多个平级 Session,不建立用户可见 parent/child。内部 programmatic 子任务可以继承 scope,但不进入普通抽屉。
- 同一 repository/worktree 的不同 Session 可以并发修改文件;第一版不加跨 Session 文件锁或警告。UI 显示 project、root、branch、dirty 和同项目 active Session 数。
- 抽屉保持扁平:Companion 使用 primary 语义色,Project 使用 tertiary,不可用路径使用 neutral;error 只表示真实错误。颜色同时有图标或文字。
- Project 自动标题为
repo · 首条用户消息;第一版只支持标题搜索。
- 工作根暂不可访问时,Session 从普通列表隐藏并进入“不可用项目”;数据保留,路径恢复后重新出现。
AGENTS.md Prompt 合同
- 每个新 turn 从 Git root 到
working_root 重新发现适用 AGENTS.md。
- 更深层文件在工具将要接触对应路径时按需加载。
- 离开工作根操作时按目标路径重新检查适用
AGENTS.md,但 Project identity 不变。
- 更深层
AGENTS.md 对目录树更具体;direct system/developer/user 指令仍优先。
- 总注入上限 32 KiB,来源与截断可见;文件变化在下一 turn 替换旧 Prompt 内容。
- 第一版只自动信任
AGENTS.md。不自动加载项目 Skill、MCP、插件、extension、prompt template 或其他约定文件。
项目记忆与 programmatic 规则
- Companion 继续读取全局
MEMORY.md / SELF.md 和 Companion Akasha。
- Project 以全局
MEMORY.md / SELF.md 作为人物与通用偏好基线;项目事实进入 Project Akasha,不复制到 Companion 图。
- 现有记忆提取判断编码偏好是否跨 Project 通用。可能通用的偏好先追加
PENDING.md,再由现有 optimizer 合并;不新增审批状态机。
scheduler:* 始终排除记忆。
programmatic:* 缺少 skip_post_memory 时默认排除;只有创建时显式 persist_memory=true / skip_post_memory=false 才学习。
- 现存未标记 programmatic Session 在派生重建时按新默认排除。
- Project 内部子任务只有显式继承
project_id 且显式开启记忆时,才能进入对应 Project scope。
持久化语义
- kind/project/root/identity 在 Session 创建时一次写入;project/root 不可原位修改。
- 标题、updated_at、模型选择继续按现有状态机更新。
- Project Session 只随 SES-003 的显式 Session 删除减少。
- AGENTS Prompt block 是每 turn 临时投影,不修改或删除仓库文件。
- Project preference 使用现有 PENDING 两阶段事务。
- unavailable 是路径探测投影,不是删除或 tombstone。
验收
- 同一 Git remote 的两个 worktree 得到同一
project_id,fork remote 不同;无 remote 的同一 git-common-dir 稳定一致。
- 一个 Project 的多个 Session 共享 Project identity,但保持独立消息、turn 和 compaction。
- 每个 turn 重新读取
AGENTS.md;嵌套覆盖、32 KiB 截断、来源展示与跳出根目录有真实测试。
working_root 不可重绑;路径离线时数据不减少,恢复后重新可见。
- Web/Mobile 显示同一 Project Session;light/dark/warm-paper 的语义颜色可区分且可访问。
- scheduler 与默认 programmatic 不进入 Markdown、Memory2 或 Akasha;显式 Project child 只进入对应 scope。
非目标
- 不增加 Projects 表、父子 Session 或 Project workflow engine。
- 不把 working root 当安全 sandbox。
- 不自动信任项目 Skill、MCP、插件或 extension。
- 不重做已实现的 Session compaction,也不引入 terminal resume。
父路线:#367
依赖:#368
用户可见结果
用户新建 Session 时可以显式选择服务器上的 Git 路径。该 Session 从此持续以这个工作根、仓库身份、适用
AGENTS.md和项目记忆完成 coding work;同一仓库可以有多个平级 Session。Coding Agent 不是第二个 Agent,而是通用 Akashic 在 Project Session 中的工作形态。
已确认合同
session_kind = companion | project。Project Session 持久保存project_id、不可变working_root和创建时的 project identity snapshot。projects表。每个 Project Session 重复保存同一确定性project_id。project_id从去凭据、规范化后的 origin identity 派生;没有 remote 时从 canonicalgit-common-dir派生。算法必须版本化。同 remote 的 clone/worktree 属于同一 Project,fork remote 属于不同 Project。working_root是用户选择、服务端已存在的绝对路径,可以是仓库子目录。它是默认 cwd 和上下文根,不是硬 sandbox。repo · 首条用户消息;第一版只支持标题搜索。AGENTS.md Prompt 合同
working_root重新发现适用AGENTS.md。AGENTS.md,但 Project identity 不变。AGENTS.md对目录树更具体;direct system/developer/user 指令仍优先。AGENTS.md。不自动加载项目 Skill、MCP、插件、extension、prompt template 或其他约定文件。项目记忆与 programmatic 规则
MEMORY.md/SELF.md和 Companion Akasha。MEMORY.md/SELF.md作为人物与通用偏好基线;项目事实进入 Project Akasha,不复制到 Companion 图。PENDING.md,再由现有 optimizer 合并;不新增审批状态机。scheduler:*始终排除记忆。programmatic:*缺少skip_post_memory时默认排除;只有创建时显式persist_memory=true/skip_post_memory=false才学习。project_id且显式开启记忆时,才能进入对应 Project scope。持久化语义
验收
project_id,fork remote 不同;无 remote 的同一git-common-dir稳定一致。AGENTS.md;嵌套覆盖、32 KiB 截断、来源展示与跳出根目录有真实测试。working_root不可重绑;路径离线时数据不减少,恢复后重新可见。非目标