position

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

/position — load a team position into the session

/position — 将团队职位角色加载到会话中

/position <name>
is the generic teammate-bootstrap skill. It loads a position profile from
ai-workspace/team/<name>.md
and runs the bootstrap sequence the profile defines. Replaces the bespoke
/tpm
(which, where present, is a thin wrapper around
/position tpm
that adds a unidirectional refusal contract — see "Wrapper skills" below).
/position <name>
是通用的队友引导技能。它从
ai-workspace/team/<name>.md
加载职位配置文件,并执行该配置文件定义的引导流程。替代了定制化的
/tpm
(如果存在,
/tpm
/position tpm
的轻量包装器,增加了单向拒绝约定——详见下方“包装器技能”)。

Position vs role

职位 vs 角色

  • Position = persistent identity, loaded once per teammate session. Lives in
    ai-workspace/team/<name>.md
    . Examples:
    tpm
    ,
    software-engineer
    ,
    technical-editor
    ,
    architect
    .
  • Role = one-shot activity dispatched at a
    /task
    step. Lives in
    ai-workspace/agents/<name>.md
    . Examples:
    implementer
    ,
    code-reviewer
    ,
    test-writer
    ,
    explorer
    .
/position
operates on positions only. For one-shot role dispatch, use your tool's subagent-dispatch mechanism — Claude Code:
Agent({subagent_type: <role-name>})
; Codex/Cursor: see your project's
AGENTS.md
§Agent Roles for the equivalent dispatch pattern.
  • 职位 = 持久身份,每个队友会话仅加载一次。存储在
    ai-workspace/team/<name>.md
    中。示例:
    tpm
    software-engineer
    technical-editor
    architect
  • 角色 = 在
    /task
    步骤中调度的一次性活动。存储在
    ai-workspace/agents/<name>.md
    中。示例:
    implementer
    code-reviewer
    test-writer
    explorer
/position
仅针对职位操作。如需调度一次性角色,请使用工具的子代理(subagent)调度机制——Claude Code:
Agent({subagent_type: <role-name>})
;Codex/Cursor:查看项目的
AGENTS.md
§Agent Roles获取等效调度模式。

1. Resolve position

1. 解析职位

bash
NAME="<arg>"
PROFILE="ai-workspace/team/${NAME}.md"
STATE_DIR="ai-workspace/team/${NAME}"
Pre-flight: if
$PROFILE
does not exist, refuse with:
Position
<name>
not found at
ai-workspace/team/<name>.md
. Available positions: list them by running
ls ai-workspace/team/*.md
. (For one-shot subagent role dispatch instead, use your tool's role-dispatch mechanism — Claude Code:
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>
。可用职位:运行
ls ai-workspace/team/*.md
查看列表。(若需调度一次性子代理角色,请使用工具的角色调度机制——Claude Code:
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.
  1. $PROFILE
    (required) — the position's role identity, working agreement, decision rules, triggers, anti-patterns, lifecycle hooks.
  2. ${STATE_DIR}/PLAYBOOK.md
    (if exists) — the position's operating manual.
  3. ${STATE_DIR}/DECISIONS.md
    (if exists) — the position's append-only judgment log.
Most positions have NO sibling state directory — only stateful positions (currently just
tpm
) do. The skill silently skips state-load when the directory is absent.
按顺序读取。先将所有文件加载到上下文,再进行推理——读取时不要进行总结。
  1. $PROFILE
    (必填)——职位的角色身份、工作约定、决策规则、触发条件、反模式、生命周期钩子。
  2. ${STATE_DIR}/PLAYBOOK.md
    (若存在)——职位的操作手册。
  3. ${STATE_DIR}/DECISIONS.md
    (若存在)——职位的追加式判断日志。
大多数职位没有同级状态目录——只有有状态的职位(目前仅
tpm
)才有。当目录不存在时,技能会静默跳过状态加载。

3. 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 list
    +
    gh pr list
  • Software-engineer: tail
    #general
    chat + read
    .branch-context.md
    if resuming
  • Technical-editor: tail
    #general
    chat for review requests
Follow the profile's
## Session lifecycle / Session start
section verbatim. The skill doesn't prescribe regeneration steps — the profile owns them.
职位配置文件主体会指定是否/如何在会话启动时重新生成实时状态。常见模式:
  • 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. Acknowledge + take the position

4. 确认并承担职位角色

After load + bootstrap:
  1. Acknowledge:
    Position '<name>' loaded. Following profile session-start instructions.
  2. Hold the position for the rest of the session — the agent operates as
    @<name>
    according to profile rules until session end.
  3. Chat handle (if the position's chat substrate is online): post the registration message the profile prescribes.
加载 + 引导完成后:
  1. 确认
    已加载职位'<name>'。将遵循配置文件的会话启动指令。
  2. 保持职位角色:在会话剩余时间内,Agent将以
    @<name>
    身份按照配置文件规则运行,直到会话结束。
  3. 聊天标识(若职位的聊天载体在线):发布配置文件规定的注册消息。

5.
--resume
flag (optional)

5.
--resume
标志(可选)

/position <name> --resume
signals resumption of an interrupted session:
  • Read
    .branch-context.md
    if present (per the position's profile resume convention)
  • 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,
--resume
is a no-op silently.
/position <name> --resume
表示恢复中断的会话:
  • 若存在则读取
    .branch-context.md
    (遵循职位配置文件的恢复约定)
  • 跳过聊天注册消息(默认团队已知晓该职位角色)
  • 从之前会话中断处继续
若配置文件无恢复语义,
--resume
将静默无操作。

6. Switching positions

6. 切换职位角色

A session can switch positions by re-invoking
/position <other>
. Latest wins. Profile rules from the prior position drop. Exception: the
tpm
position has a unidirectional refusal contract (enforced by the
/tpm
wrapper skill, where installed) — switching out of TPM mid-session is refused per its own rules.
重新调用
/position <other>
可在会话中切换职位角色。最新调用的职位生效。之前职位的配置文件规则不再适用。例外
tpm
职位有单向拒绝约定(由
/tpm
包装器技能强制执行,若已安装)——根据其自身规则,会话中途退出TPM职位将被拒绝。

Anti-patterns

反模式

Anti-patternWhy wrong
Reading from
ai-workspace/agents/
for
/position
That's the role directory (subagents). Positions live in
team/
.
Auto-bootstrapping a missing positionRefusal is the contract — positions must be defined first
Soft-loading just the profile without the state dirStateful positions need both; skipping state breaks continuity
Summarizing the profile as you load itLoad first, reason second — same as
/tpm
v0 contract
Treating
/position <subagent-role>
as valid (e.g.
/position implementer
)
Roles are not positions; refuse and direct to your tool's role-dispatch mechanism (Claude Code:
Agent({subagent_type: <role>})
)
反模式错误原因
/position
ai-workspace/agents/
读取内容
这是角色(子代理)目录。职位存储在
team/
目录中。
自动引导缺失的职位角色拒绝执行是约定——必须先定义职位角色
仅加载配置文件而不加载状态目录有状态职位需要两者;跳过状态会破坏连续性
加载配置文件时进行总结先加载,再推理——与
/tpm
v0约定一致
/position <subagent-role>
视为有效指令(如
/position implementer
角色不是职位;拒绝执行并引导至工具的角色调度机制(Claude Code:
Agent({subagent_type: <role>})

Invocation forms

调用形式

  • /position <name>
    — load position, run bootstrap
  • /position <name> --resume
    — same, but resume semantics if the profile defines them
  • /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
/position
. Wrappers are optional —
/position <name>
always works directly. If a wrapper is installed alongside
/position
in the same skills repo, prefer the wrapper for the position it covers (it handles position-specific contracts the generic loader can't).
Example:
/tpm
(where shipped as a separate skill) is the wrapper for the
tpm
position — it invokes
/position tpm
and adds a unidirectional refusal contract. If
/tpm
is not installed in your environment, use
/position tpm
directly; the position loads cleanly without the wrapper, just without the refusal-contract enforcement.
职位角色可附带同级包装器技能,在
/position
基础上增加职位特定的生命周期行为。包装器是可选的——
/position <name>
始终可直接使用。如果包装器与
/position
安装在同一技能仓库中,优先使用对应职位的包装器(它能处理通用加载器无法实现的职位特定约定)。
示例:
/tpm
(若作为单独技能发布)是
tpm
职位的包装器——它调用
/position tpm
并增加单向拒绝约定。如果环境中未安装
/tpm
,可直接使用
/position tpm
;职位角色将正常加载,只是没有拒绝约定的强制执行。

Quick reference

快速参考

StepActionOn failure
1Resolve
team/<name>.md
Refuse with available positions list
2Read profile + state dirSilently skip state if dir absent
3Regenerate live state per profile
4Acknowledge + hold position
5Honor
--resume
if present
No-op if profile has no resume semantics
6Switch positions on re-invokeRefuse for unidirectional positions (tpm)
步骤操作失败处理
1解析
team/<name>.md
拒绝执行并返回可用职位列表
2读取配置文件 + 状态目录若目录不存在则静默跳过状态加载
3根据配置文件重新生成实时状态
4确认并保持职位角色
5若存在则启用
--resume
语义
若配置文件无恢复语义则无操作
6重新调用时切换职位角色对单向约定职位(tpm)拒绝执行