用途:当编码智能体所在仓库中可用 Jujutsu(jj,存在 .jj/ 目录)时,优先使用 jj 而非原始 git 进行变更;Git 仍作为远程、PR、CI 与审计的规范接口:用 jj 变更,用只读 Git 验证。
主要能力与流程:
- 检测与门控:运行 ${CLAUDE_SKILL_DIR}/scripts/detect_jj_state.sh,或手动检查。有 .jj/ 用 jj,不做变更性原始 git;.jj/ 与 .git/ 并存(colocated)时用 jj 变更、git 读取,不碰 git 索引/暂存区;仅有 .git/ 则为普通 Git 仓库,未经要求不引入 jj;在 git worktree 中若 jj root ≠ git rev-parse --show-toplevel(shadowed,退出码 3),不要运行 jj,改用 git 并询问用户。
- 智能体安全规则:所有会打印输出的命令都加 --no-pager;不要把 ui.paginate 写入用户配置(--user 会超出会话,影响用户交互式 jj 的分页);始终使用 -m,绝不运行编辑器/TUI 形式(裸 jj describe|commit|squash、交互式 jj split、jj squash -i、jj resolve、jj diffedit)以免挂起智能体;jj 仅在某条 jj 命令运行时快照工作副本,而非每次文件写入时。
- 编辑循环:jj --no-pager status,编辑文件(下次 jj 命令时快照),jj --no-pager diff,jj describe -m "<project-conventional message>",jj new -m "<next unit>"(每个逻辑单元一个变更)。非交互拆分:jj split <path> -m "<msg>"。
- 可逆恢复:jj --no-pager op log,然后 jj undo 或 jj op restore <id>;冲突是一等公民,jj status 会标记,编辑标记后验证。
- 经 Git 交接:jj git fetch;jj rebase -d <default-branch>;jj bookmark create <branch> -r @-(每个推送的提交都需要描述);jj git push --bookmark <branch>(新 bookmark 直接推送)。不得推送到受保护/默认分支,未获允许不得重写公共历史,用 gh/glab 开 PR。
- 并行智能体:每个并发智能体一个 jj workspace,绝不共享工作副本。
- 完成前验证:运行 ${CLAUDE_SKILL_DIR}/scripts/verify_handoff.sh,或报告 jj --no-pager status、jj --no-pager log --limit 10、jj --no-pager diff --stat、git status --short --branch;没有这些输出不得声称完成/已测试/就绪,并披露强制推送、恢复与冲突。
限制:具体细节见技能内引用文档(git-interop、agent-safety、command-map、recovery-playbook、pr-handoff、parallel-agents、why-jj-for-agents);资料未提供定价、平台支持范围与失败重试策略等信息。