关于 position
position 会加载持久的团队职位配置,并执行其中定义的会话启动流程,适用于采用团队分工的 Agent。它将长期职位与一次性派发的角色区分开来。
主要功能
- 01加载职位配置
- 02读取可选操作手册和决策记录
- 03执行配置定义的会话启动流程
- 04恢复中断的会话
- 05切换团队职位
适用场景
- 01以指定团队成员身份开始会话
- 02恢复工作会话上下文
- 03执行职位专属的启动流程
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ camacho/ ai-skills --skill position安装后在 Claude Code 中输入/position确认已加载。
详细介绍
/position — 将团队职位加载到会话中
/position <name> 是通用的队友初始化技能。它会从 ai-workspace/team/<name>.md 加载职位档案,并执行档案定义的初始化流程。它取代了专门的 /tpm(若存在,/tpm 是 /position tpm 的轻量封装,并添加了单向拒绝约定——见下文“封装技能”)。
职位与角色
- 职位 = 持久身份,在每个队友会话中加载一次。位于
ai-workspace/team/<name>.md。示例:tpm、software-engineer、technical-editor、architect。 - 角色 = 在
/task步骤中分派的一次性活动。位于ai-workspace/agents/<name>.md。示例:implementer、code-reviewer、test-writer、explorer。
/position 仅用于职位。要分派一次性角色,请使用工具的子 Agent 分派机制——Claude Code:Agent({subagent_type: <role-name>});Codex/Cursor:请参阅项目的 AGENTS.md §Agent Roles,了解相应的分派模式。
1. 确定职位
NAME="<arg>"
PROFILE="ai-workspace/team/${NAME}.md"
STATE_DIR="ai-workspace/team/${NAME}"
预检:如果 $PROFILE 不存在,则拒绝并提示:
在
ai-workspace/team/<name>.md中找不到职位<name>。可用职位:运行ls ai-workspace/team/*.md查看。(若要分派一次性子 Agent 角色,请改用工具的角色分派机制——Claude Code:Agent({subagent_type: <role>})。)
不要自动初始化。缺少档案是需要核验环境的信号。
2. 加载档案和状态
按顺序读取。先将所有文件加载到上下文中,再进行推理——不要边读边总结。
$PROFILE(必需)——职位的角色身份、工作约定、决策规则、触发条件、反模式和生命周期钩子。${STATE_DIR}/PLAYBOOK.md(若存在)——职位的操作手册。${STATE_DIR}/DECISIONS.md(若存在)——职位的仅追加式判断日志。
大多数职位都没有同级状态目录——只有有状态的职位(目前只有 tpm)才有。若目录不存在,此技能会静默跳过状态加载。
3. 重新生成实时状态(若档案有规定)
职位档案正文会说明是否以及如何在会话开始时重新生成实时状态。常见模式:
- TPM:
gh project item-list+git worktree list+gh pr list - Software-engineer:查看
#general聊天记录末尾;若为恢复会话,则读取.branch-context.md - Technical-editor:查看
#general聊天记录末尾,查找审查请求
严格遵循档案中的 ## Session lifecycle / Session start 部分。此技能不规定重新生成步骤——由档案负责规定。
4. 确认并担任职位
加载和初始化后:
- 确认:
Position '<name>' loaded. Following profile session-start instructions. - 在本次会话剩余时间内保持该职位——直到会话结束,Agent 都会依据档案规则以
@<name>身份运行。 - 聊天账号(若职位使用的聊天系统已上线):发送档案规定的注册消息。
5. --resume 标志(可选)
/position <name> --resume 表示恢复已中断的会话:
- 若
.branch-context.md存在,则按职位档案中的恢复约定读取 - 跳过注册聊天消息(团队应已知晓该职位)
- 从上次会话中断处继续
如果档案没有恢复语义,--resume 将静默无效。
6. 切换职位
通过再次调用 /position <other>,会话可以切换职位。以最新职位为准。之前职位的档案规则将不再生效。例外:tpm 职位具有单向拒绝约定(若已安装,则由 /tpm 封装技能强制执行)——根据其自身规则,会话中途退出 TPM 将被拒绝。
反模式
| 反模式 | 错误原因 |
|---|---|
从 ai-workspace/agents/ 读取 /position | 那是角色目录(子 Agent)。岗位定义在 team/ 中。 |
| 自动初始化缺失的岗位 | 拒绝是约定的一部分——必须先定义岗位 |
| 只软加载配置文件,不加载状态目录 | 有状态的岗位需要两者;跳过状态会破坏连续性 |
| 加载配置文件时对其进行总结 | 先加载,再推理——与 /tpm v0 约定相同 |
将 /position <subagent-role> 视为有效调用(例如 /position implementer) | 角色不是岗位;应拒绝,并引导使用工具的角色分派机制(Claude Code:Agent({subagent_type: <role>})) |
调用形式
/position <name>— 加载岗位并运行引导流程/position <name> --resume— 相同,但在配置文件定义了恢复语义时按其恢复
包装技能
岗位可以附带同级的包装技能,在 /position 之上增加岗位专属的生命周期行为。包装技能是可选的——始终可以直接使用 /position <name>。如果包装技能与 /position 一同安装在同一个技能仓库中,则优先使用适用该岗位的包装技能(它会处理通用加载器无法处理的岗位专属约定)。
示例:/tpm(作为独立技能提供时)是 tpm 岗位的包装技能——它会调用 /position tpm 并添加单向拒绝约定。如果你的环境中未安装 /tpm,则直接使用 /position tpm;该岗位无需包装技能也能正常加载,只是不强制执行拒绝约定。
快速参考
| 步骤 | 操作 | 失败时 |
|---|---|---|
| 1 | 解析 team/<name>.md | 拒绝调用并列出可用岗位 |
| 2 | 读取配置文件和状态目录 | 如果目录不存在,则静默跳过状态 |
| 3 | 根据配置文件重新生成实时状态 | — |
| 4 | 确认并保持岗位身份 | — |
| 5 | 如果存在 --resume,则遵循其语义 | 如果配置文件未定义恢复语义,则不执行任何操作 |
| 6 | 重新调用时切换岗位 | 对于单向岗位(tpm),拒绝切换 |