Skip to content

Linux 下 Claude Code、Codex、OpenCode 更优雅的注册方式#39

Open
shiro123444 wants to merge 13 commits intoHKUDS:mainfrom
shiro123444:feat/unified-agent-registration
Open

Linux 下 Claude Code、Codex、OpenCode 更优雅的注册方式#39
shiro123444 wants to merge 13 commits intoHKUDS:mainfrom
shiro123444:feat/unified-agent-registration

Conversation

@shiro123444
Copy link

@shiro123444 shiro123444 commented Mar 12, 2026

(∠・ω< ) ̄☆ Ciallo~

Important

本 PR 当前主要整理的是:Linux 下 CLI-Anything 在 Claude Code / Codex / OpenCode 三端的统一注册接入方案 🐧
已经已经根据当前 maintainer 建议与主线代码状态做了收敛优化:聚焦“统一注册链路 + 可持续更新 + 可扩展适配”。


思路

按建议收敛到一条主线:

  • 统一注册入口(编排层)
  • 平台差异下沉到薄适配器
  • 二次安装必须可更新(而不只是 skip)
  • 未指定目标先询问,不默认全量安装
  • “注册”语义歧义可澄清(跨 agent 注册 vs 网站账号注册)

架构图(当前方案)

User Intent
  ├─ First-time setup
  ├─ Incremental install
  ├─ Install all
  └─ Status / List
        │
        ▼
Registration Orchestrator (register.py)
  ├─ target confirm (ask first if omitted)
  ├─ mode dispatch (bootstrap/install/install-all/status/list)
  ├─ debug / dry-run / status output
  └─ normalized result reporting
        │
        ▼
Adapter Contract Layer
  ├─ detect()
  ├─ source()
  ├─ destination()
  ├─ install()   -> installed / updated / skip / error
  └─ status()
        │
        ▼
Platform Adapters
  ├─ ClaudeAdapter
  │    └─ sync direct path + active cache installPath
  ├─ OpenCodeAdapter
  │    └─ update existing command files (not skip-only)
  └─ CodexAdapter
       └─ update existing skill files (not skip-only)

这次主要改动(按能力归纳)

  1. 统一入口与命令面

    • 支持仓库根目录直接执行:
      • python3 register.py bootstrap --target <auto|claude|opencode|codex>
      • python3 register.py install --targets <claude,opencode,codex|all>
      • python3 register.py install-all
      • python3 register.py status --targets all
      • python3 register.py list --debug
  2. 首次安装与后续管理分层

    • 首装推荐 bootstrap
    • 后续通过 register 流程管理其余平台
    • 简单来说就是第一次安装用户可以随意使用一个平台进行安装,安装后register将成为一个skills允许改平台的agent在其他平台(可以一键all)进行优雅的安装而不需要手动执行多次
  3. 命令语义统一

    • 统一围绕 register 语义组织
    • Claude:/cli-anything:register(namespaced)
    • OpenCode:/register
    • Codex:skill 内增加 register mode(保持平台原生触发方式)
  4. 二次安装同步修复(关键)

    • Claude / OpenCode / Codex 均从 skip-only 改为可增量更新
    • Claude 额外同步 active cache installPath,避免命令索引读旧缓存
  5. 默认安全策略

    • 未指定目标时先询问:
      • Choose install target: claude / opencode / codex / all
    • 不再默认 all
    • 仅在用户明确要求时执行全量安装
  6. “注册”意图澄清

    • 增加 registration disambiguation:
      • agent 适配器注册
      • 网站/服务账号注册
    • 避免 OpenCode/Codex 场景将“注册”误解释为账号创建流程

如何参考并适配了各平台差异

  • Claude Code

    • 命令是 namespaced 形式
    • 除了主插件目录,还同步 installed_plugins.json 指向的活跃 cache 路径,保证新增命令可见
  • OpenCode

    • 采用命令文件驱动
    • 注册入口统一为 /register
    • 二次安装会更新已存在命令文件,确保新策略可落地
  • Codex

    • 以 skill 方式触发,不是 slash command
    • 扩展 skill 定义,加入 register mode、target 询问策略与执行模板

本地验证(Linux)

python3 register.py bootstrap --target auto --dry-run --debug
python3 register.py bootstrap --target claude --debug
python3 register.py install --targets codex
python3 register.py install --targets opencode --debug
python3 register.py install-all
python3 register.py status --targets all
python3 register.py list --debug

验证重点:

  • 二次安装显示 updated(非纯 skip
  • Claude register 命令在实际加载路径可见
  • OpenCode/Codex 更新后策略可立即生效
  • 未指定目标时会先询问,不自动全装

后续开发者如何优雅接入新平台www

建议沿用“薄适配器 + 稳编排”规范:

  1. 新增一个 adapter 文件,遵循统一契约:
    • detect() / source() / destination() / install() / status()
  2. 平台差异只放 adapter,不改编排核心
  3. 已安装场景优先“更新同步”,不要只做 skip
  4. 默认策略保持一致:
    • 未给目标先询问
    • all 需显式确认
  5. 输出语义统一:
    • installed / updated / skip / error
  6. 最低可观测性要求:
    • statusdebugdry-run
  7. 回归测试固定检查:
    • 首装、二装、单目标、全量、状态查询

Tip

依旧适配的linux~
后续加平台例如cursor等只需补 adapter,不必重做入口与流程设计。


截图展示~

展示三个平台的“注册动作“
image
image
image
image
image
image

Copilot AI review requested due to automatic review settings March 12, 2026 03:54
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

该 PR 旨在把 CLI-Anything 在 Claude Code / OpenCode / Codex 三端的接入、安装与一致性校验收敛到“registry 单一事实源 + 生成/同步脚本 + 统一安装入口”的链路中,并引入本地 Python control plane(anythingcli)作为统一控制面。

Changes:

  • 新增 registry/ 作为共享命令规范、HARNESS 与 adapter 模板的单一事实源,并提供生成/同步/校验脚本
  • 新增统一安装/管理入口 scripts/anythingcli.sh + scripts/install-anythingcli.sh,支持 install/uninstall/status/doctor
  • 新增 anythingcli/ Python 包作为本地 control plane,并添加 CI 工作流做漂移校验与语法检查

Reviewed changes

Copilot reviewed 33 out of 37 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
scripts/verify-agent-pack.py 新增仓库级校验:模板/产物一致性、HARNESS/commands 同步、frontmatter/manifest 完整性等
scripts/sync-command-registry.py registry/generator/commands/*.mdHARNESS.md 同步到 Claude 插件目录
scripts/install-anythingcli.sh install 的便捷 wrapper,委托给 scripts/anythingcli.sh
scripts/generate-adapters.py registry/package.yaml 与 adapter 模板生成 Claude/OpenCode/Codex 的产物,并支持 --check
scripts/anythingcli_core.py Python 入口包装(anythingcli.control_plane.main
scripts/anythingcli.sh 统一控制脚本:install/uninstall/status/doctor + build/refine/test/validate/list 委托给 python -m anythingcli
registry/package.yaml registry 包元数据(name/version/description/targets 等)
registry/generator/commands/cli-anything.md canonical build 命令规范
registry/generator/commands/refine.md canonical refine 命令规范
registry/generator/commands/test.md canonical test 命令规范
registry/generator/commands/validate.md canonical validate 命令规范
registry/generator/commands/list.md canonical list 命令规范
registry/generator/HARNESS.md canonical HARNESS 单一事实源(方法论与规范)
registry/adapters/claude/plugin.json.template Claude 插件 manifest 模板
registry/adapters/opencode/SKILL.md.template OpenCode skill 模板
registry/adapters/codex/SKILL.md.template Codex skill 模板
registry/README.md 说明 registry 的 source-of-truth 角色与同步/生成脚本
opencode/skills/cli-anything/SKILL.md OpenCode 一等适配产物
opencode/README.md OpenCode skill 安装与使用说明
codex/skills/cli-anything/SKILL.md Codex 一等适配产物
codex/README.md Codex skill 安装与使用说明(含 scope)
cli-anything-plugin/scripts/setup-cli-anything.sh 去除 /root/cli-anything 硬编码,改为相对插件目录解析 HARNESS
cli-anything-plugin/commands/cli-anything.md Claude 命令文档(兼容副本)格式/内容对齐 registry
cli-anything-plugin/commands/refine.md 同上
cli-anything-plugin/commands/test.md 同上
cli-anything-plugin/commands/validate.md 同上
cli-anything-plugin/commands/list.md 同上
cli-anything-plugin/HARNESS.md Claude 侧 HARNESS 兼容副本(强调 registry 为 canonical)
cli-anything-plugin/.claude-plugin/plugin.json Claude 插件 manifest(由模板生成/对齐)
anythingcli/control_plane.py 本地 control plane:build/refine/test/validate 输出上下文;list 枚举 installed/generated 工具
anythingcli/main.py python -m anythingcli 入口
anythingcli/init.py 导出 main
README.md 更新安装推荐路径为统一安装入口,并补充 OpenCode/Codex 说明
README_CN.md 同上(中文)
DEPLOYMENT_UNIFICATION_PLAN.md 统一部署方案与分层架构的长文说明
.gitignore 放开新增目录/文件(registry/anythingcli/scripts/.github 等)
.github/workflows/verify-agent-pack.yml CI:模板漂移检查、pack 校验、Python compileall、bash -n

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +107 to +108
if action in {"refine", "test", "validate"}:
raise ValueError(f"{action} requires a local source path, not a GitHub URL")
Copy link

Copilot AI Mar 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The control-plane rejects GitHub URLs for refine/test/validate with a hard error, but the canonical command specs (registry/generator/commands/test.md and validate.md) state those commands accept a GitHub URL and clone first. Either adjust the specs (if local-only is intended) or make the control-plane accept GitHub URLs and return a context/next_step similar to build instead of erroring.

Suggested change
if action in {"refine", "test", "validate"}:
raise ValueError(f"{action} requires a local source path, not a GitHub URL")

Copilot uses AI. Check for mistakes.

def list_generated_tools(search_path: Path, depth: int | None) -> dict[str, dict[str, Any]]:
generated: dict[str, dict[str, Any]] = {}
relative_patterns = [pattern.replace(str(search_path) + "/", "") for pattern in build_glob_patterns(search_path, depth)]
Copy link

Copilot AI Mar 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

list_generated_tools builds relative glob patterns by string-replacing str(search_path) + "/". This is brittle (e.g., --path / makes the prefix "//", so the replace won’t happen and you may pass an absolute pattern into Path.glob, which is invalid). Consider generating relative patterns directly (e.g., keep patterns relative in build_glob_patterns, or use Path.relative_to/os.path.relpath).

Suggested change
relative_patterns = [pattern.replace(str(search_path) + "/", "") for pattern in build_glob_patterns(search_path, depth)]
patterns = build_glob_patterns(search_path, depth)
relative_patterns: list[str] = []
for pattern in patterns:
pattern_path = Path(pattern)
try:
relative_pattern = pattern_path.relative_to(search_path)
except ValueError:
# Skip patterns that are not under the search path
continue
relative_patterns.append(str(relative_pattern))

Copilot uses AI. Check for mistakes.

If a GitHub URL is provided, the agent clones the repo locally first, then works on the local copy.

The software name is derived from the directory name. The agent locates the CLI harness at `/root/cli-anything/<software-name>/agent-harness/`.
Copy link

Copilot AI Mar 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This spec hardcodes /root/cli-anything/<software-name>/agent-harness/ as the harness location. Given the PR’s goal of more portable, unified installation, this should be expressed relative to the provided <software-path-or-repo> (or clearly labeled as an example), otherwise it will mislead non-root/non-/root/cli-anything setups.

Suggested change
The software name is derived from the directory name. The agent locates the CLI harness at `/root/cli-anything/<software-name>/agent-harness/`.
The software name is derived from the directory name. The agent expects the CLI harness to live under `<software-path-or-repo>/agent-harness/` (for example, if you pass `/home/user/gimp`, it looks for `/home/user/gimp/agent-harness/`).

Copilot uses AI. Check for mistakes.

If a GitHub URL is provided, the agent clones the repo locally first, then works on the local copy.

The software name is derived from the directory name. The agent locates the CLI harness at `/root/cli-anything/<software-name>/agent-harness/`.
Copy link

Copilot AI Mar 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This spec hardcodes /root/cli-anything/<software-name>/... as the harness location, which conflicts with the “no hardcoded paths” guidance later in the same document and with the repo’s move toward relative/portable installs. Consider rewriting this to be derived from the user-provided <software-path-or-repo> (or clearly marking /root/cli-anything as an example only).

Suggested change
The software name is derived from the directory name. The agent locates the CLI harness at `/root/cli-anything/<software-name>/agent-harness/`.
The software name is derived from the directory name. The agent locates the CLI harness relative to `<software-path-or-repo>`, typically at `<software-path-or-repo>/agent-harness/`.

Copilot uses AI. Check for mistakes.
Comment on lines +99 to +102
CLI Harness Validation Report
Software: gimp
Path: /root/cli-anything/gimp/agent-harness/cli_anything/gimp

Copy link

Copilot AI Mar 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The sample report path is still /root/cli-anything/..., which is environment-specific and contradicts the doc’s later “No hardcoded paths” validation rule. Suggest updating this example to a generic path (e.g., based on the provided source path) to avoid implying /root/cli-anything is required.

Copilot uses AI. Check for mistakes.
Comment on lines +56 to +63
run_local_cli() {
if has_command python3; then
exec python3 -m anythingcli "$@"
elif has_command python; then
exec python -m anythingcli "$@"
else
die "python is required to run the anythingcli control plane"
fi
Copy link

Copilot AI Mar 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

run_local_cli uses python -m anythingcli without ensuring the repo root is on sys.path. If this script is invoked from outside the repository root (e.g., via an absolute path), module resolution will likely fail. Consider cd "$REPO_ROOT" before exec, or set PYTHONPATH="$REPO_ROOT" for the exec call.

Copilot uses AI. Check for mistakes.
Comment on lines +376 to +379
--force)
shift
;;
-h|--help)
Copy link

Copilot AI Mar 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

--force is advertised in the usage text and parsed, but it has no effect. install_target always rm -rf's the destination path regardless, so callers may assume --force is required when it isn't (and the flag currently provides no safety/behavior change). Either implement force-gating (e.g., refuse to remove existing installs unless --force is set) or remove the option from both usage and parsing.

Copilot uses AI. Check for mistakes.
@shiro123444 shiro123444 changed the title 提供更统一优雅的 Claude Code、Codex、OpenCode 注册方案 统一 Linux 下 Claude Code、Codex、OpenCode 的接入方式 Mar 12, 2026
Copilot AI review requested due to automatic review settings March 12, 2026 04:23
@shiro123444 shiro123444 changed the title 统一 Linux 下 Claude Code、Codex、OpenCode 的接入方式 Linux 下 Claude Code、Codex、OpenCode 更优雅的注册方式 Mar 12, 2026
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 33 out of 36 changed files in this pull request and generated 3 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +27 to +31
synced = []
for source in sorted(REGISTRY_DIR.glob("*.md")):
destination = CLAUDE_DIR / source.name
shutil.copyfile(source, destination)
synced.append(destination.name)
Copy link

Copilot AI Mar 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The sync script only copies registry/generator/commands/*.md into cli-anything-plugin/commands/ but never removes files that no longer exist in the registry. This can leave stale command docs behind in the plugin directory without any obvious signal. Consider cleaning the destination directory (or at least deleting markdown files not present in the registry) before copying.

Copilot uses AI. Check for mistakes.
Comment on lines +167 to +177
for dist in distributions():
name = dist.metadata.get("Name", "")
if not name.startswith("cli-anything-"):
continue
software = name.replace("cli-anything-", "")
installed[software] = {
"name": software,
"status": "installed",
"version": dist.version,
"executable": shutil.which(f"cli-anything-{software}"),
"source": None,
Copy link

Copilot AI Mar 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

list can report the same tool twice because installed packages are keyed by the distribution suffix (e.g. cli-anything-obs-studio -> obs-studio) while generated harnesses are keyed by the Python package directory (e.g. cli_anything/obs_studio -> obs_studio). This prevents merge_tool_results() from merging installed+generated entries for hyphenated software names. Normalize the software identifier consistently in both list_installed_tools() and list_generated_tools() (e.g., map - <-> _ via a shared helper) and keep a separate display name if needed.

Copilot uses AI. Check for mistakes.
Comment on lines +36 to +42
def build_context() -> dict[str, str]:
metadata = parse_simple_yaml(PACKAGE_METADATA)
return {
"package_name": metadata.get("name", "cli-anything"),
"package_version": metadata.get("version", "0.0.0"),
"package_description": metadata.get("description", ""),
}
Copy link

Copilot AI Mar 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

build_context() calls parse_simple_yaml(PACKAGE_METADATA) without checking that registry/package.yaml exists, so running this script from an incomplete checkout fails with an unhandled FileNotFoundError. Consider adding an explicit is_file() guard with a clear error message (and exit code 1) before reading the file, similar to the checks already done for template paths.

Copilot uses AI. Check for mistakes.
Copilot AI review requested due to automatic review settings March 12, 2026 05:15
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 33 out of 36 changed files in this pull request and generated 2 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +373 to +387
parse_options() {
while [[ $# -gt 0 ]]; do
case "$1" in
--targets)
TARGETS="${2:-}"
shift 2
;;
--mode)
MODE="${2:-}"
shift 2
;;
--scope)
SCOPE="${2:-}"
shift 2
;;
Copy link

Copilot AI Mar 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

parse_options shifts by 2 for --targets/--mode/--scope without validating that an argument is present. With set -e, calling e.g. scripts/anythingcli.sh install --targets will trigger shift: shift count out of range instead of a clear error message. Add an explicit check for a missing/empty value before shift 2 and fail with die (ideally showing usage).

Copilot uses AI. Check for mistakes.
Comment on lines +106 to +130
def build_action_context(action: str, source: str, focus: str | None) -> ActionContext:
spec_path = COMMAND_SPECS[action]
software_name = derive_software_name(source)

if is_github_source(source):
if action in {"refine", "test", "validate"}:
raise ValueError(f"{action} requires a local source path, not a GitHub URL")
return ActionContext(
action=action,
source=source,
source_kind="github_url",
software_name=software_name,
spec_path=str(spec_path),
harness_path=None,
cli_package_root=None,
source_path=None,
focus=focus,
can_execute_locally=False,
next_step="clone the repository locally, then rerun the command with a local source path",
)

source_path = resolve_local_source(source)
harness_path = source_path / "agent-harness"
cli_package_root = harness_path / "cli_anything" / software_name.replace("-", "_")

Copy link

Copilot AI Mar 12, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For local sources, software_name is derived from the raw user input before path normalization. Inputs like . / .. / ~/proj will produce incorrect software_name (e.g., .) and therefore an incorrect cli_package_root. Resolve/normalize the local path first and derive the software name from the resolved path’s directory name; also consider only stripping a .git suffix for GitHub URLs, not local paths.

Copilot uses AI. Check for mistakes.
@yuh-yang
Copy link
Collaborator

感谢贡献,确实是一个很好的vision和很大的PR。目前看到的一些问题是:

  • anythingcli这个命名有些奇怪,如果这个文件夹的作用是作为一个register_center,那可以直接叫类似的名字
  • 看起来对cli-anything-plugin/下的一些skills文件存在不必要的修改和更新,理想情况下这个PR应该先保持这些文件不变,只进行统一化注册相关的修改和更新
  • registry和scripts下文件太多,而且许多文件存在重复问题。比如generate/下面,把cli-anything-plugin/下的skills又复制了一遍。并且scripts/下的脚本文件没看出来各自明确的作用

@shiro123444
Copy link
Author

感谢贡献,确实是一个很好的vision和很大的PR。目前看到的一些问题是:

  • anythingcli这个命名有些奇怪,如果这个文件夹的作用是作为一个register_center,那可以直接叫类似的名字
  • 看起来对cli-anything-plugin/下的一些skills文件存在不必要的修改和更新,理想情况下这个PR应该先保持这些文件不变,只进行统一化注册相关的修改和更新
  • registry和scripts下文件太多,而且许多文件存在重复问题。比如generate/下面,把cli-anything-plugin/下的skills又复制了一遍。并且scripts/下的脚本文件没看出来各自明确的作用

感谢反馈,理解了喵。

确认一次现在的问题大概是吧

  1. 当前 PR 范围确实过大,混入了 registry / generation / verification / control-plane 这些额外内容
  2. cli-anything-plugin 下的现有文件这版不应该大改
  3. anythingcli 的命名和职责边界也不够清晰

我会按 先只做统一注册相关改动 的方向把这个 PR 的代码重新打磨,尽量保持现有 plugin/skills 内容不动,并把 registry / 重复脚本 / 重复副本相关内容移出这版 PR。


后续如果有需要,再单独提交更小的 PR 讨论这些演进方向www

Add scripts/register.sh that installs Claude Code, OpenCode, and Codex
adapters from a single command instead of separate manual steps per platform.

Usage:
  scripts/register.sh install --targets all
  scripts/register.sh status

Also adds native /register commands so users can trigger registration
from within their agent:
  - Claude Code: /register [targets]
  - OpenCode: /cli-anything-register [targets]

No existing files are modified except .gitignore (allow scripts/ dir).
Swap register.sh (152 lines, monolithic) for a modular Python system:

  scripts/register.py          CLI entry point
  scripts/adapters/base.py     Abstract Adapter base class
  scripts/adapters/claude.py   Claude Code adapter
  scripts/adapters/opencode.py OpenCode adapter
  scripts/adapters/codex.py    Codex adapter

Adding a new platform (Cursor, Copilot, etc.) means dropping one .py
file in adapters/ — no other files need to change.

Usage unchanged:
  python3 scripts/register.py install --targets all
  python3 scripts/register.py status
  python3 scripts/register.py list
Adds 'bootstrap' subcommand that auto-detects an available agent,
installs CLI-Anything to it, then prints next-step guidance for
using /register from within that agent to manage the rest.
- unify first-install command with --target/--dry-run/--debug
- add install-all for one-click install of all supported agents
- add detailed registration guide for users and adapter developers
- update Claude/OpenCode register command guidance
- use register as canonical command name across platforms
- set OpenCode entrypoint to /register and stop installing old alias
- clarify Claude namespaced form /cli-anything:register
- update registration docs and migration guidance
- support python3 register.py from repo root
- keep scripts/register.py as implementation backend
- make user-facing hints prefer python3 register.py
- update docs and command guidance to root-level entrypoint
- whitelist register.py in gitignore
- update existing ~/.claude/plugins/cli-anything via copytree dirs_exist_ok
- ensure newly added commands (e.g. register) are propagated
- add troubleshooting note about Claude command list refresh
…install

- sync cli-anything updates to installPath entries in installed_plugins.json
- keep direct plugin dir in sync as well
- align command title to cli-anything:register format for parser consistency
- do not default to all when user omits targets
- ask user to choose claude/opencode/codex/all first
- keep explicit all support for one-click installation
- extend skill scope to bootstrap/install/status/list workflows
- require explicit target confirmation when omitted
- keep explicit install-all support
- update Codex agent metadata prompt/description
- extend codex cli-anything skill with register mode and target confirmation policy
- update Codex agent metadata for registration workflows
- change codex adapter to update existing install instead of skipping
- redirect cross-agent adapter registration to register command
- add explicit clarification question for register vs account sign-up
- reduce false interpretation of 注册 as website signup
- update existing command files instead of skipping
- ensure behavior/docs changes propagate to ~/.config/opencode/commands
- keep deprecated alias cleanup logic
@shiro123444 shiro123444 force-pushed the feat/unified-agent-registration branch from d690454 to 4a722e0 Compare March 12, 2026 11:46
@shiro123444
Copy link
Author

感谢贡献,确实是一个很好的vision和很大的PR。目前看到的一些问题是:

  • anythingcli这个命名有些奇怪,如果这个文件夹的作用是作为一个register_center,那可以直接叫类似的名字
  • 看起来对cli-anything-plugin/下的一些skills文件存在不必要的修改和更新,理想情况下这个PR应该先保持这些文件不变,只进行统一化注册相关的修改和更新
  • registry和scripts下文件太多,而且许多文件存在重复问题。比如generate/下面,把cli-anything-plugin/下的skills又复制了一遍。并且scripts/下的脚本文件没看出来各自明确的作用

已更新,欢迎审核~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants