---
"@ux-team/tvu-design-system": patch
---

`setup-consumer.sh` 现在同时 symlink `.claude/agents`，消费产品因此能派发 DS 的只读走查 agent

此前该脚本只 symlink `.claude/skills` + `vocabulary.md`，消费仓 cwd 里 `design-review` /
`upstream-research` / `affordance-search` 等**不在 agent 注册表里** —— `design-qa-loop` 与
`design-walkthrough` 派发不到它们，Claude 退化成带写权限的通用子代理，「只审不改」就只剩
skill 正文里的一句约定，agent 定义里的 `tools` 白名单（这条保证唯一的机制层）丢失。

⚠️ 靠消费仓 `settings.json` 的 `additionalDirectories` 指向 DS 仓**不能**替代这条 symlink：
官方文档 permissions.md §"Additional directories grant file access, not configuration" 逐字写着
settings 键列出的目录「grant file access only and don't load any of the configuration below」，
而下表正含 `.claude/agents/`。只有 `--add-dir` / `/add-dir` 那条路才顺带加载。

同时修掉一个**既存**显示缺陷：脚本末尾 `$TARGET（$SKILL_COUNT 个）` 在真 locale
（`LANG=zh_CN.UTF-8`）+ bash 3.2 下，会把全角括号首字节吞进变量名 ⇒ 路径连同括号显示成乱码，
而脚本照样 exit 0。空 `LANG` 下不发作，所以在开发者自己的 shell 里测不出来。已改用 `${VAR}`
花括号界定。

skills 与 agents 的三分支迁移逻辑抽成 `link_dir()` 共用，不再是两份会漂的副本；两者都保留
「目标是真目录且含非 symlink 条目 ⇒ 拒绝且不删用户文件」的保护。
