feat: 新增 huanxi 与 memcore 插件,完善 CLAUDE.md 与记忆体系

- 新增 plugins/huanxi:Bearer Token 模式 MCP Server + 6 个工作流技能
  (日报/负责人日报/周报/任务/组织),修正全部 MCP 工具签名
- 新增 plugins/memcore:memory-sync/update/lint 三技能记忆引擎,
  修正 git add 范围避免误提交敏感文件
- CLAUDE.md:移除 version 字段示例,补充 userConfig/mcpServers 说明,
  注入「记忆体系(会话启动必读)」区块
- .claude/memory/:初始化项目记忆索引(decisions/project_overview/
  feedback_plugin_dev/lint_report)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
SkyJourney
2026-05-01 12:12:08 +08:00
co-authored by Claude Sonnet 4.6
parent 0c46ed0306
commit ab6d78b096
7 changed files with 266 additions and 2 deletions
+9
View File
@@ -0,0 +1,9 @@
# Memory Index
> _Last synced: 2026-05-01 | Base commit: `0c46ed0`_
| 文件 | 描述 | 类型 | 引用 | Commit |
|------|------|------|------|--------|
| decisions.md | 关键架构决策:无版本号/userConfig/Bearer Token/SKILL.md规范 | project | 1 | 0c46ed0 |
| project_overview.md | 项目定位、目录结构、插件规范、发布流程 | project | 1 | 0c46ed0 |
| feedback_plugin_dev.md | 插件开发协作规范:同步四处/路径解析/工具签名对照 | feedback | 0 | 0c46ed0 |
| lint_report.md | memory-lint 最新执行结果 | lint | 0 | 0c46ed0 |
+60
View File
@@ -0,0 +1,60 @@
---
name: 架构决策
description: Marketplace 设计中的关键技术决策及其原因
type: project
last_updated: 2026-05-01
commit: 0c46ed0
---
# 关键架构决策
## plugin.json 不设 version 字段
**结论**:所有 plugin.json 均不含 `version` 字段。
**Why**Claude Code 官方文档说明,若 plugin.json 设置了固定 `version`,推送新 commit 不改 version 字符串时,已安装用户看不到更新。省略 version 后,Claude Code 自动用 git commit SHA 做版本判断,每次推送 main 分支即为新版本。
**How to apply**:新增插件时不要加 `version` 字段。memcore 和 huanxi 均已按此规范执行。
---
## huanxi plugin 使用 userConfig 而非环境变量传 Token
**结论**`plugin.json``userConfig` + `sensitive: true` 声明 Bearer Token 输入,`mcpServers.headers` 中用 `${user_config.token}` 引用。
**Why**`sensitive: true` 将 token 存入系统钥匙链(或 `~/.claude/.credentials.json`),不会出现在 settings.json 中,避免随仓库提交泄露。Claude Code 安装插件时自动弹窗提示用户输入,体验好于环境变量。
**How to apply**:其他需要用户配置 API Key/Token 的插件,均应使用此模式,不要用 `${ENV_VAR}` 方式。
```json
"userConfig": {
"token": {
"type": "string",
"title": "寰汐 Personal Token",
"description": "在寰汐系统后台生成,hxp_ 前缀",
"sensitive": true
}
}
```
**See Also**[[project_overview.md#已发布插件]]
---
## huanxi MCP Server 认证:Bearer Token 直连,不改后端
**结论**plugin.json 配置 `Authorization: Bearer ${user_config.token}` headerMCP server 已有的 `_PersonalTokenVerifier` 直接验证 `hxp_` token,无需改后端。
**Why**:后端已有 ASGI 中间件模式(AdminMcpAuthMiddleware)和 PersonalTokenVerifierBearer Token 天然支持。OAuth2 Discovery Flow 是 FastMCP 框架层的特性,当客户端直接在 header 中传 Bearer Token 时可绕过 OAuth 流程。改后端风险高且无必要。
**How to apply**:未来新增 MCP server 插件时,只需在 plugin.json 配置 header,不需要修改后端认证逻辑。
---
## SKILL.md frontmatter 只保留 name 和 description
**结论**SKILL.md frontmatter 只写 `name``description` 两个字段,去掉 `version`
**Why**Claude Code 插件规范中 SKILL.md frontmatter 只定义了 `name``description``version` 字段不在规范内,silently ignored,且与 plugin.json 层面的版本管理重复。已从所有 huanxi skill 文件中移除。
**How to apply**:新建 SKILL.md 时只写这两个字段。`description` 字段写用户实际口语触发词(第三人称描述),不要用"当需要…时触发"的内部视角表达。
+57
View File
@@ -0,0 +1,57 @@
---
name: 插件开发协作反馈
description: 在此 marketplace 项目中开发插件时需遵守的协作规范和经验教训
type: feedback
last_updated: 2026-05-01
commit: 0c46ed0
---
# 插件开发协作规范
## 新增插件时必须同步更新四个位置
**规范**:新增插件必须同步修改:① `plugins/<name>/` 目录 ② `plugins/<name>/.claude-plugin/plugin.json``.claude-plugin/marketplace.json` 的 plugins 数组 ④ `CLAUDE.md` 的已发布插件表格。
**Why**marketplace.json 是 Claude Code 的安装入口,CLAUDE.md 是新会话的参考文档,两者不更新会导致插件不可被发现。
**How to apply**:每次创建插件后用 checklist 验证四处都已修改。
---
## cp -r 复制目录时注意目标路径存在与否
**规范**:用 `cp -r source/ dest/` 复制 skill 目录时,若 `dest/` 目录不存在,source 内容会直接成为 `dest/`(而非 `dest/source/`)。
**Why**:本次将 huanxi-shared 复制到 skills/ 目录时,因为 skills/ 不存在,SKILL.md 直接落在了 skills/ 下而非 skills/huanxi-shared/ 下,需要手动修复。
**How to apply**:多目录批量复制时,先 `mkdir -p` 目标目录,再逐个 `cp -r`;或改用第一个 `cp -r` 后检查结构。
---
## 引入 Skill 相对路径时需考虑运行时路径解析
**规范**SKILL.md 中引用其他 skill 文件时使用 `../sibling-skill/SKILL.md` 的相对路径(如 huanxi-* 系列引用 huanxi-shared),这种模式在 Claude Code 插件的 skill 目录结构下是可行的,但依赖 Claude 正确解析路径。
**Why**:validator 审查时指出相对路径存在解析风险,但由于 huanxi-* 系列已在用户本地以相同目录结构正常工作,打包后一致性可保持。
**How to apply**:若未来发现 Read 相对路径失败,改为在每个 skill 内联关键共享规则(工具签名表、缓存 TTL),降低对 Read 成功的依赖。
---
## SKILL.md description 使用用户口语,不用内部视角
**规范**frontmatter 的 `description` 字段应描述用户会说的话("我有哪些模块"、"帮我写日报"),不要写内部触发条件("当需要解析模块名/人员名为 ID 时触发")。
**Why**description 是 Claude Code 判断何时触发该技能的依据,也是展示给用户的摘要。内部视角语言对用户无意义,且不能有效触发。
**How to apply**:新建 skill 时,先想"用户实际会怎么说这个需求",用这些词写 description。
---
## plugin-validator 和 skill-reviewer 审查之后要对照实际代码修正工具签名
**规范**:Plugin 审查发现工具名称错误时(如 report_submit vs report_submit_item),必须回到源代码(`huanxi_mcp/tools/*.py`)确认实际函数签名,以代码为准修正 skill 描述。
**Why**:本次发现 huanxi-shared 工具索引中 report_submit/withdraw 用了旧名,leader_report_submit/withdraw 缺必填参数,weekly_report_save 参数名用 week 而非 week_number,这些都是 MCP 升级后 skill 未同步导致的。
**How to apply**:每次 MCP server 工具链升级后,运行 plugin-validator 对照检查 skill 中的工具调用。
+32
View File
@@ -0,0 +1,32 @@
---
name: 记忆健康检查报告
description: memory-lint 最新一次执行的检查结果与待处理项
type: lint
last_updated: 2026-05-01
---
# 记忆健康检查报告
> _执行时间: 2026-05-01 | Base commit: `0c46ed0` | Last synced: 2026-05-01_
## 健康概览
| 检查项 | AUTO-FIX | NEED-HUMAN |
|--------|---------|-----------|
| 1 孤儿 / 2 幽灵 / 3A 引用 / 3B 双链 | 0 / 0 / 0 / 1 | — / — / 0 / 0 |
| 4 矛盾 / 5 过期 / 6 污染 | — | 0 / 0 / 0 |
**AUTO-FIX 已执行 1 项 | NEED-HUMAN 待处理 0 项**
---
## AUTO-FIX 已执行清单
- [x] 补入反向链接:`project_overview.md → ## 已发布插件` 末尾追加 `See Also: [[decisions.md#...]]`
- [x] MEMORY.md「引用」列已刷新(3 文件,按引用倒序)
---
## 条目级高频引用 Top(供 /memory-update 消费)
无候选(所有条目跨文件引用次数 < 3)
+75
View File
@@ -0,0 +1,75 @@
---
name: 项目概述
description: yixiong-claude-marketplace 的定位、目录结构、插件规范和发布流程
type: project
last_updated: 2026-05-01
commit: 0c46ed0
---
# 蚁熊内部 Claude Code Marketplace
## 定位
蚁熊公司内部 Claude Code Plugin Marketplace(技能市场),统一管理和发布供全员安装的 Claude Code 插件与技能。Marketplace 名称:`yixiong-claude-hub`
## 目录结构
```
.claude-plugin/
└── marketplace.json # 市场索引:声明所有插件
plugins/
└── <plugin-name>/
├── .claude-plugin/
│ └── plugin.json # 插件元数据
└── skills/
└── <skill-name>/
├── SKILL.md
└── references/ # 可选:详细工作流文档
```
## 文件格式规范
### marketplace.json
```json
{
"name": "yixiong-claude-hub",
"owner": { "name": "蚁熊团队" },
"description": "...",
"plugins": [
{ "name": "<name>", "source": "./plugins/<name>", "description": "..." }
]
}
```
### plugin.json(关键字段)
- **无 `version` 字段**:用 git commit SHA 作为版本基准,每次推送 main 即发布
- `userConfig`:用于用户输入敏感配置(token 等),`sensitive: true` 存系统钥匙链
- `mcpServers`:声明 MCP 服务器,headers 中可用 `${user_config.KEY}` 替换
### SKILL.md frontmatter(只需两字段)
```yaml
---
name: skill-name
description: "触发描述(用户实际口语,不用内部视角)"
---
```
- **不写 `version`**version 不是 SKILL.md 规范字段
## 已发布插件
| 插件 | 技能 | 特性 |
|------|------|------|
| `huanxi` | 6 个(report/leader/task/weekly/org/shared | userConfig Bearer Token + MCP Server |
| `memcore` | 3 个(memory-sync/lint/update | 纯技能,无 MCP |
**See Also**[[decisions.md#huanxi plugin 使用 userConfig 而非环境变量传 Token]]
## 发布流程
1. 新增/修改插件内容
2. 提交 main 分支(`git push`
3. 已安装用户会话启动时自动检测更新(需用户先手动开启 auto-update 一次:`/plugin` → Marketplaces → Enable auto-update
4. 有更新时提示执行 `/reload-plugins`
**第三方 marketplace 默认关闭 auto-update**,同事安装后需手动开启一次。
+8
View File
@@ -0,0 +1,8 @@
{
"permissions": {
"allow": [
"Bash(mkdir -p ~/.claude/projects/C--Projects-yixiong-claude-marketplace/memory/)",
"Bash(cp -pf \"C:/Projects/yixiong-claude-marketplace/.claude/memory/\"*.md ~/.claude/projects/C--Projects-yixiong-claude-marketplace/memory/)"
]
}
}