position
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinese/position — load a team position into the session
/position — 将团队职位角色加载到会话中
/position <name>ai-workspace/team/<name>.md/tpm/position tpm/position <name>ai-workspace/team/<name>.md/tpm/tpm/position tpmPosition vs role
职位 vs 角色
- Position = persistent identity, loaded once per teammate session. Lives in . Examples:
ai-workspace/team/<name>.md,tpm,software-engineer,technical-editor.architect - Role = one-shot activity dispatched at a step. Lives in
/task. Examples:ai-workspace/agents/<name>.md,implementer,code-reviewer,test-writer.explorer
/positionAgent({subagent_type: <role-name>})AGENTS.md- 职位 = 持久身份,每个队友会话仅加载一次。存储在中。示例:
ai-workspace/team/<name>.md、tpm、software-engineer、technical-editor。architect - 角色 = 在步骤中调度的一次性活动。存储在
/task中。示例:ai-workspace/agents/<name>.md、implementer、code-reviewer、test-writer。explorer
/positionAgent({subagent_type: <role-name>})AGENTS.md1. Resolve position
1. 解析职位
bash
NAME="<arg>"
PROFILE="ai-workspace/team/${NAME}.md"
STATE_DIR="ai-workspace/team/${NAME}"Pre-flight: if does not exist, refuse with:
$PROFILEPositionnot found at<name>. Available positions: list them by runningai-workspace/team/<name>.md. (For one-shot subagent role dispatch instead, use your tool's role-dispatch mechanism — Claude Code:ls ai-workspace/team/*.md.)Agent({subagent_type: <role>})
Do not auto-bootstrap. Absence is a signal to verify the environment.
bash
NAME="<arg>"
PROFILE="ai-workspace/team/${NAME}.md"
STATE_DIR="ai-workspace/team/${NAME}"预检查:如果不存在,拒绝执行并提示:
$PROFILE未在找到职位ai-workspace/team/<name>.md。可用职位:运行<name>查看列表。(若需调度一次性子代理角色,请使用工具的角色调度机制——Claude Code:ls ai-workspace/team/*.md。)Agent({subagent_type: <role>})
请勿自动引导。配置文件缺失意味着需要验证环境。
2. Load profile + state
2. 加载配置文件 + 状态
Read in order. Load all files into context first, then reason — do not summarize as you read.
- (required) — the position's role identity, working agreement, decision rules, triggers, anti-patterns, lifecycle hooks.
$PROFILE - (if exists) — the position's operating manual.
${STATE_DIR}/PLAYBOOK.md - (if exists) — the position's append-only judgment log.
${STATE_DIR}/DECISIONS.md
Most positions have NO sibling state directory — only stateful positions (currently just ) do. The skill silently skips state-load when the directory is absent.
tpm按顺序读取。先将所有文件加载到上下文,再进行推理——读取时不要进行总结。
- (必填)——职位的角色身份、工作约定、决策规则、触发条件、反模式、生命周期钩子。
$PROFILE - (若存在)——职位的操作手册。
${STATE_DIR}/PLAYBOOK.md - (若存在)——职位的追加式判断日志。
${STATE_DIR}/DECISIONS.md
大多数职位没有同级状态目录——只有有状态的职位(目前仅)才有。当目录不存在时,技能会静默跳过状态加载。
tpm3. Regenerate live state (if profile prescribes it)
3. 重新生成实时状态(若配置文件要求)
The position's profile body specifies whether/how to regenerate live state on session start. Common patterns:
- TPM: +
gh project item-list+git worktree listgh pr list - Software-engineer: tail chat + read
#generalif resuming.branch-context.md - Technical-editor: tail chat for review requests
#general
Follow the profile's section verbatim. The skill doesn't prescribe regeneration steps — the profile owns them.
## Session lifecycle / Session start职位配置文件主体会指定是否/如何在会话启动时重新生成实时状态。常见模式:
- TPM:+
gh project item-list+git worktree listgh pr list - Software-engineer:查看聊天最新内容 + 若恢复会话则读取
#general.branch-context.md - Technical-editor:查看聊天中的评审请求
#general
严格遵循配置文件的部分内容。技能不规定重新生成步骤——由配置文件主导。
## Session lifecycle / Session start4. Acknowledge + take the position
4. 确认并承担职位角色
After load + bootstrap:
- Acknowledge:
Position '<name>' loaded. Following profile session-start instructions. - Hold the position for the rest of the session — the agent operates as according to profile rules until session end.
@<name> - Chat handle (if the position's chat substrate is online): post the registration message the profile prescribes.
加载 + 引导完成后:
- 确认:
已加载职位'<name>'。将遵循配置文件的会话启动指令。 - 保持职位角色:在会话剩余时间内,Agent将以身份按照配置文件规则运行,直到会话结束。
@<name> - 聊天标识(若职位的聊天载体在线):发布配置文件规定的注册消息。
5. --resume
flag (optional)
--resume5. --resume
标志(可选)
--resume/position <name> --resume- Read if present (per the position's profile resume convention)
.branch-context.md - Skip the registration chat post (the position is presumed already known to the team)
- Pick up where the prior session left off
If the profile has no resume semantics, is a no-op silently.
--resume/position <name> --resume- 若存在则读取(遵循职位配置文件的恢复约定)
.branch-context.md - 跳过聊天注册消息(默认团队已知晓该职位角色)
- 从之前会话中断处继续
若配置文件无恢复语义,将静默无操作。
--resume6. Switching positions
6. 切换职位角色
A session can switch positions by re-invoking . Latest wins. Profile rules from the prior position drop. Exception: the position has a unidirectional refusal contract (enforced by the wrapper skill, where installed) — switching out of TPM mid-session is refused per its own rules.
/position <other>tpm/tpm重新调用可在会话中切换职位角色。最新调用的职位生效。之前职位的配置文件规则不再适用。例外:职位有单向拒绝约定(由包装器技能强制执行,若已安装)——根据其自身规则,会话中途退出TPM职位将被拒绝。
/position <other>tpm/tpmAnti-patterns
反模式
| Anti-pattern | Why wrong |
|---|---|
Reading from | That's the role directory (subagents). Positions live in |
| Auto-bootstrapping a missing position | Refusal is the contract — positions must be defined first |
| Soft-loading just the profile without the state dir | Stateful positions need both; skipping state breaks continuity |
| Summarizing the profile as you load it | Load first, reason second — same as |
Treating | Roles are not positions; refuse and direct to your tool's role-dispatch mechanism (Claude Code: |
| 反模式 | 错误原因 |
|---|---|
为 | 这是角色(子代理)目录。职位存储在 |
| 自动引导缺失的职位角色 | 拒绝执行是约定——必须先定义职位角色 |
| 仅加载配置文件而不加载状态目录 | 有状态职位需要两者;跳过状态会破坏连续性 |
| 加载配置文件时进行总结 | 先加载,再推理——与 |
将 | 角色不是职位;拒绝执行并引导至工具的角色调度机制(Claude Code: |
Invocation forms
调用形式
- — load position, run bootstrap
/position <name> - — same, but resume semantics if the profile defines them
/position <name> --resume
- —— 加载职位角色,执行引导流程
/position <name> - —— 同上,但如果配置文件定义了恢复语义则启用该语义
/position <name> --resume
Wrapper skills
包装器技能
A position can ship with a sibling wrapper skill that adds position-specific lifecycle behavior on top of . Wrappers are optional — always works directly. If a wrapper is installed alongside in the same skills repo, prefer the wrapper for the position it covers (it handles position-specific contracts the generic loader can't).
/position/position <name>/positionExample: (where shipped as a separate skill) is the wrapper for the position — it invokes and adds a unidirectional refusal contract. If is not installed in your environment, use directly; the position loads cleanly without the wrapper, just without the refusal-contract enforcement.
/tpmtpm/position tpm/tpm/position tpm职位角色可附带同级包装器技能,在基础上增加职位特定的生命周期行为。包装器是可选的——始终可直接使用。如果包装器与安装在同一技能仓库中,优先使用对应职位的包装器(它能处理通用加载器无法实现的职位特定约定)。
/position/position <name>/position示例:(若作为单独技能发布)是职位的包装器——它调用并增加单向拒绝约定。如果环境中未安装,可直接使用;职位角色将正常加载,只是没有拒绝约定的强制执行。
/tpmtpm/position tpm/tpm/position tpmQuick reference
快速参考
| Step | Action | On failure |
|---|---|---|
| 1 | Resolve | Refuse with available positions list |
| 2 | Read profile + state dir | Silently skip state if dir absent |
| 3 | Regenerate live state per profile | — |
| 4 | Acknowledge + hold position | — |
| 5 | Honor | No-op if profile has no resume semantics |
| 6 | Switch positions on re-invoke | Refuse for unidirectional positions (tpm) |
| 步骤 | 操作 | 失败处理 |
|---|---|---|
| 1 | 解析 | 拒绝执行并返回可用职位列表 |
| 2 | 读取配置文件 + 状态目录 | 若目录不存在则静默跳过状态加载 |
| 3 | 根据配置文件重新生成实时状态 | — |
| 4 | 确认并保持职位角色 | — |
| 5 | 若存在则启用 | 若配置文件无恢复语义则无操作 |
| 6 | 重新调用时切换职位角色 | 对单向约定职位(tpm)拒绝执行 |