7.3 KiB
7.3 KiB
Trellis Instructions
These instructions are for AI assistants working in this project.
Use the /trellis:start command when starting a new session to:
- Initialize your developer identity
- Understand current project context
- Read relevant guidelines
Use @/.trellis/ to learn:
- Development workflow (
workflow.md) - Project structure guidelines (
spec/) - Developer workspace (
workspace/)
If you're using Codex, project-scoped helpers may also live in:
.agents/skills/for reusable Trellis skills.codex/agents/for optional custom subagents
Keep this managed block so 'trellis update' can refresh the instructions.
常用运维命令
重启 cc-web 服务:
修改 ccweb 项目后如果需要重启服务,必须先查看当前会话列表中的运行状态。
只有在除当前对话外没有其他 running 对话时,才能执行重启;如果仍有其他
运行中的对话,应暂缓重启并告知用户原因。
pm2 restart ccweb --update-env
Codebase Memory 代码检索约定
本项目内 graphify 已全面弃用。后续涉及代码定位、调用链、架构理解、影响面分析、跨模块关系梳理时,默认优先使用 codebase-memory-mcp,不要再启用 graphify 技能、graphify CLI 或 graphify-out 产物作为主路径。
当前项目的 codebase-memory 项目名:
home-cc-web
默认检索流程
- 先确认索引状态:
list_projectsindex_status(project="home-cc-web")
- 如果索引缺失或明显过期,先执行:
index_repository(repo_path="/home/cc-web", mode="full", persistence=false)
- 需要理解整体结构时,先用:
get_architecture(project="home-cc-web", aspects=["all"])
- 需要找功能入口、类、函数、路由时,优先用:
search_graphsearch_code
- 需要确认调用关系时,使用:
trace_path(mode="calls", direction="inbound" | "outbound" | "both")
- 需要读取具体实现时,先通过
search_graph找到精确qualified_name,再用:get_code_snippet
rg/sed只作为补充校验:- 校验最终行号
- 查未被索引的配置或纯文本
- 对 MCP 命中结果做交叉验证
子代理引导词模板
派发需要理解代码的子代理时,默认加入以下引导:
请优先使用 codebase-memory-mcp 做代码理解:
先 list_projects / index_status 确认项目索引;
再用 search_graph 或 search_code 定位候选函数;
需要调用链时用 trace_path;
需要源码时先拿 qualified_name,再调用 get_code_snippet;
最后只用 rg/sed 校验行号或补查未索引文本。
不要使用 graphify。
本项目已验证的使用经验
- 无明确引导时,子代理不一定会主动使用
codebase-memory-mcp,可能退回rg或旧的 graphify 路径。 - 明确要求优先使用
codebase-memory-mcp后,能稳定命中函数级入口、调用链和源码片段。 - 对
codexapp/ccweb这类跨模块链路,search_code+trace_path+get_code_snippet的组合比单纯全文检索更快建立上下文。 - 自然语言检索遇到
developer、config、message等通用词会有噪声;这时应收敛到明确标识符,如collaborationMode、mcp_servers.ccweb、CC_WEB_SOURCE_SESSION_ID。 - 最终答复中的文件行号仍建议用
rg -n或nl -ba做一次轻量核验。
索引更新与忽略规则
auto_index是codebase-memory-mcp的本地配置,按当前CBM_CACHE_DIR生效;它不是.codex/config.toml里的项目级开关。- 当前项目的项目级忽略规则写在
.cbmignore。普通源码级*.js/*.css不应一刀切排除;只排除*.min.js、*.map、压缩包、构建目录、日志、临时文件、运行态状态文件等。 - watcher 是 Git-based polling:非 Git 项目跳过轮询;Git 项目的轮询间隔为基础 5 秒,每 500 个文件加 1 秒,最长 60 秒。
- 修改
.cbmignore或大范围调整文件后,建议手动执行一次index_repository(repo_path="/home/cc-web", mode="full", persistence=false),让当前索引立即收敛到最新规则。
Codex App / hapi 对齐经验
以下约定来自本项目对 /home/hdzx/2026/hapi 中 Codex app-server 接入方式的对比结果。后续如果继续维护 codexapp,默认按这些约定实现,避免再走偏到“看起来能跑、但拿不到原生协作能力”的分叉路径。
1. 初始化链路优先对齐上游协议
initialize成功后,先发送initializednotification。- 然后再做 best-effort 的能力探测:
experimentalFeature/enablement/set,当前至少尝试{ enablement: { goals: true } }collaborationMode/list
- 上述探测失败时:
- 只记录日志
- 不直接中断
codexapp启动
2. collaborationMode 的参数形状必须贴近 hapi
- 一旦本轮使用
collaborationMode,turn/start顶层参数应保持精简。 model、reasoning_effort、developer_instructions应放入:collaborationMode.settings.modelcollaborationMode.settings.reasoning_effortcollaborationMode.settings.developer_instructions
- 使用
collaborationMode时,不要再重复传顶层model/effort,否则容易让 app-server 落到非原生协作路径。
3. 自定义跨会话能力走 MCP,不优先走 dynamicTools
ccweb_list_conversations、ccweb_send_message这类自定义能力,优先通过thread/start.config.mcp_servers.*挂载。- 不要把它们当成
dynamicTools主路径注入给codexapp。 - 原因:
dynamicTools容易污染 app-server 原生工具集- 会增加拿不到
spawn_agent/wait_agent/ 原生协作工具的风险
4. MCP 配置要做成“线程级”而不是“进程级”
codexapp是长驻 app-server,不是一次一进程的 CLI 调用。- 因此
CC_WEB_SOURCE_SESSION_ID、CC_WEB_CROSS_HOP_COUNT这类来源上下文,不应只放在 app-server 进程全局环境里。 - 正确做法是随
thread/start.config.mcp_servers.ccweb.env一起下发,让每个线程拿到自己的来源会话上下文。
5. guided input 依赖 plan 协作模式
request_user_input类能力默认按“协作 / plan 模式可用”来设计。- Default / YOLO 模式下,不要假设引导输入一定可用。
- 如果要做降级:
- 优先退回普通文本交互
- 不要让整轮对话因为 guided input 不可用而直接失效
6. 能力降级要明确而保守
- 如果运行时拒绝
collaborationMode(例如unknown field collaborationMode或unsupported collaboration mode):- 应记录一次能力降级
- 后续本轮可退回普通 turn 发送
- 但如果只是
goals或collaborationMode/list探测失败:- 不应直接判定整个 app-server 不可用
7. 回归检查要覆盖协议形状,不只看 UI
后续涉及 codexapp 的改动,至少要检查这些点:
initialize后是否真的调用了:experimentalFeature/enablement/setcollaborationMode/list
collaborationMode存在时:- 顶层是否没有重复
model - 顶层是否没有重复
effort
- 顶层是否没有重复
ccweb能力是否走mcpToolCall,而不是再次退回dynamicToolCall- mock / regression 中是否覆盖了上述断言