From omni
Parses input to create or reuse Git feature branches and changes/ directories in Git/non-Git workspaces, generates names from descriptions if unspecified, outputs BRANCH_NAME, FEATURE_DIR, SPEC_FILE.
npx claudepluginhub zte-aicloud/co-omnispec --plugin omniThis skill uses the workspace's default tool permissions.
当需要为功能规格创建或复用工作上下文时使用本技能。目标是确定并返回:
Manages Git feature branches and directories based on requirement IDs: parses/validates ID from input, checks current branch match, creates new branch/dir if needed via scripts.
Creates Git feature branches with short auto-incremented names and type prefixes (feat/fix/refactor/chore/docs). Generates from manual descriptions, uncommitted changes, or Arkhe SDLC specs.
Creates new git branch, initializes spec directory at YYYY/MM/branch-name/ with 000-backlog.md, commits it. Requires clean git state. Triggers on 'create branch' keywords.
Share bugs, ideas, or general feedback.
当需要为功能规格创建或复用工作上下文时使用本技能。目标是确定并返回:
BRANCH_NAMEFEATURE_DIRSPEC_FILE本技能处理两类问题:
changes/... 功能目录从用户指令与上下文中解析两个驱动量;未出现则视为未指定:
| 输入 | 含义 | 视为已指定 |
|---|---|---|
BRANCH_NAME | Git 分支名 | 显式给出;或「在 xxx 分支」「使用当前分支」等可解析为单一分支名 |
FEATURE_DIR | 功能目录,位于仓库 changes/ 下 | 显式路径 changes/foo、仅目录名 foo(补全为 changes/foo)、或等价表述 |
若两者都未指定,可根据 description 推导一个建议名,用于后续询问或派生目录名;这只是技能内部推导,不是脚本参数。若最终采用“基于描述建议”的命名方式,除非名称中已包含业务前缀编号,否则最终建议名应补一个可用编号前缀。
严格按以下顺序执行,不要跳步:
BRANCH_NAME、FEATURE_DIR。FEATURE_DIR:
changes/foo,直接视为功能目录。foo,先补全为 changes/foo 再继续。spec.md,必须走脚本。ls test_01/ 再判断它是不是 changes/test_01。ls changes/* | grep ... | sort ... | tail ... 这类方式扫描编号目录。spec.md,然后再把状态“补齐”给脚本。本节规则只用于技能内部生成建议名,可用于建议分支名、建议目录名,或在“新建分支(基于描述)”场景下推导 BRANCH_NAME 的核心标识;不是 create-new-feature 脚本的输入参数规则。
BRANCH_NAME。thread-table-aging、add-user-auth。OAuth2、API、JWT 等技术缩写的语义,不要在推导阶段丢失这些关键词。RDC:项目-xxxx 或 BUG:项目-xxxx 的编号前缀:
RDC: 或 BUG:,不得丢弃。RDC:xGW7-13063413-session-delete,不得替换或省略编号。thread-table-aging。001-thread-table-aging。补充说明:
RDC: / BUG: 前缀,则该前缀即为核心标识,无需再额外补通用编号。BRANCH_NAME 与 FEATURE_DIR。BRANCH_NAME 推导目录名,可在调用脚本前再做一次目录安全清洗。先判断当前工作区是否为 Git 仓库,例如执行 git rev-parse --is-inside-work-tree。之后按 BRANCH_NAME × FEATURE_DIR 是否指定走分支。
已指定 FEATURE_DIR | 未指定 FEATURE_DIR | |
|---|---|---|
已指定 BRANCH_NAME | G1:若分支与目录都已存在则直接复用;只要任一项缺失,就必须调用脚本创建缺失项,并确保 spec.md 存在 | G2:若分支已存在则直接复用;若目录缺失,则先根据 BRANCH_NAME 推导目录名,再调用脚本创建目录;若分支缺失,同样必须通过脚本创建;确保 spec.md 存在 |
未指定 BRANCH_NAME | G3:若目录已存在则直接复用;若目录不存在则不要手工创建,先按「询问 A」明确分支策略,再通过脚本创建所需目录/分支 | G4:若能从 description 推导建议名,则先生成最终建议名称;无业务前缀时应补编号;一旦决定新建,必须通过脚本创建建议目录与分支,然后再进入后续流程 |
已指定 FEATURE_DIR | 未指定 FEATURE_DIR | |
|---|---|---|
已指定 BRANCH_NAME | N1:提示当前非 Git,BRANCH_NAME 仅作逻辑名;若目录已存在则直接复用;若目录缺失则必须通过脚本创建并初始化 spec.md | N2:提示当前非 Git;若未给目录,则可由 BRANCH_NAME 推导目录名;目录创建必须通过脚本完成 |
未指定 BRANCH_NAME | N3:若目录已存在则直接复用;若目录缺失则必须通过脚本创建;确保 spec.md 存在 | N4:若能从 description 推导建议名,则先生成最终建议名称;无业务前缀时应补编号;目录创建必须通过脚本完成 |
非 Git 场景下仅维护磁盘上的 changes/<dir>/ 与 spec.md;不执行 Git 分支操作。
仓库中的 create-new-feature 是一个双参数直通脚本,只接受:
BRANCH_NAMEFEATURE_DIR使用原则:
BRANCH_NAME 已存在,且目标 FEATURE_DIR 已存在,并且当前场景只是“复用”,则直接复用,不需要调用脚本。spec.md,都必须调用脚本,不允许技能侧手工创建后再补状态。BRANCH_NAME / FEATURE_DIR 传给脚本。FEATURE_DIR 进行,而不是针对原始输入文本直接检查。脚本职责:
REPO_ROOTFEATURE_DIR:支持绝对路径、changes/foo、或仅目录名 fooBRANCH_NAME,则按分支名最后一段清洗后推导目录名FEATURE_DIRspec.md,若已存在则不覆盖BRANCH_NAME、SPEC_FILE、FEATURE_DIR| 环境 | 命令 |
|---|---|
| Linux / macOS / Git Bash | bash ./.infra/scripts/bash/create-new-feature.sh --json --branch-name "<BRANCH_NAME>" --feature-dir "<DIR_NAME>" |
| Windows(PowerShell) | pwsh ./.infra/scripts/powershell/create-new-feature.ps1 -Json -BranchName "<BRANCH_NAME>" -FeatureDir "<DIR_NAME>" |
说明:
FEATURE_DIR 优先传目录名本身,例如 001-gsu-session-delete-handle;脚本会自动补到 changes/...。BRANCH_NAME 时,脚本会自动推导目录名。FEATURE_DIR 时,脚本只创建或复用目录与 spec.md,不会执行 Git 分支操作。short_name、编号分支、--number 等旧入口。BRANCH_NAMESPEC_FILEFEATURE_DIRchange_file:与 SPEC_FILE 同义,仅为兼容旧调用方保留HAS_GIT询问 A(Git,无 BRANCH_NAME,已有或刚建 FEATURE_DIR):
已关联功能目录 <FEATURE_DIR>,请选择分支操作:
A. 复用已有分支(请说明分支名,或“使用当前分支”)
B. 新建特性分支(建议名:<建议 BRANCH_NAME>)
询问 B(Git,两者均未指定,已生成目录或建议名):
已准备功能目录 <FEATURE_DIR>,请选择分支操作:
A. 复用某个已有分支(请说明分支名)
B. 新建特性分支(建议名:<建议 BRANCH_NAME>)
| 变量 | 说明 |
|---|---|
BRANCH_NAME | 最终采用的分支名;非 Git 时可仅作为逻辑名 |
FEATURE_DIR | 功能目录绝对路径 |
SPEC_FILE | $FEATURE_DIR/spec.md 绝对路径 |
将以上三个值统一传给调用方技能,例如 specify。