feat(skiff): replace opencode target with agents standard dir

- targets: cursor, claude, codex, agents (~/.agents/skills, .agents/skills)
- agents dir covers OMP native discovery; drop omp/opencode targets
- project-level agents/cursor/codex share .agents/skills via idempotent symlinks
- migrate local state: remove ~/.config/opencode/skills links, reinstall into ~/.agents/skills
This commit is contained in:
2026-08-24 14:25:08 +08:00
parent 47bd454fa3
commit a8efa5f359
11 changed files with 131 additions and 18 deletions
+3 -1
View File
@@ -58,7 +58,7 @@ skiff bootstrap
| 命令 | 说明 |
|------|------|
| `skiff list [--source NAME]` | 列出所有来源或指定 source 中的 skill |
| `skiff status [--target all\|cursor\|claude\|codex]` | 安装状态总览 |
| `skiff status [--target all\|cursor\|claude\|codex\|agents]` | 安装状态总览 |
### 项目初始化
@@ -87,6 +87,7 @@ skiff bootstrap
| cursor | `~/.cursor/skills/` |
| claude | `~/.claude/skills/` |
| codex | `~/.codex/skills/` |
| agents | `~/.agents/skills/`(agents 标准目录,覆盖 OMP) |
### 预置 Catalog Source
@@ -171,6 +172,7 @@ skiff 不保存 token。可以使用 `company/code-review`,也可以使用
| cursor | `<project>/.agents/skills/` |
| claude | `<project>/.claude/skills/` |
| codex | `<project>/.agents/skills/` |
| agents | `<project>/.agents/skills/`(与 cursor/codex 共用路径,软链幂等) |
### 脚手架与健康检查
+1 -2
View File
@@ -9,8 +9,7 @@ AGENT_ALIASES: dict[str, str] = {
"claude": "claude",
"claude-code": "claude",
"codex": "codex",
"opencode": "opencode",
"*": "*",
"agents": "agents",
}
AGENT_CHOICES = sorted({*ALL_TARGETS, *AGENT_ALIASES.keys()})
+1 -1
View File
@@ -1655,7 +1655,7 @@ def _add_common_flags(parser: argparse.ArgumentParser) -> None:
nargs="+",
action="append",
metavar="AGENT",
help="目标 agent(cursor、claude、claude-code、codex、opencode、*)",
help="目标 agent(cursor、claude、claude-code、codex、agents、*)",
)
parser.add_argument(
"-g",
+5 -3
View File
@@ -20,17 +20,19 @@ AGENT_GLOBAL: dict[str, Path] = {
"cursor": HOME / ".cursor" / "skills",
"claude": HOME / ".claude" / "skills",
"codex": HOME / ".codex" / "skills",
"opencode": HOME / ".config" / "opencode" / "skills",
# agents 标准目录:OMP 原生 canonical(agents provider),cursor/codex 项目级同路径
"agents": HOME / ".agents" / "skills",
}
AGENT_PROJECT: dict[str, str] = {
"cursor": ".agents/skills",
"claude": ".claude/skills",
"codex": ".agents/skills",
"opencode": ".opencode/skills",
# 与 cursor/codex 共用 .agents/skills;软链幂等,同路径只写一次
"agents": ".agents/skills",
}
ALL_TARGETS = ("cursor", "claude", "codex", "opencode")
ALL_TARGETS = ("cursor", "claude", "codex", "agents")
def resolve_targets(target: str | None) -> list[str]: