# User Context Loader

用户上下文加载器示例 Skill，演示 Claude Plugins 模式的 hooks 机制。

## 功能说明

本 Skill 演示了三种 Hook 类型：

### PrePrompt Hook
在 system_prompt 加载时执行，动态注入用户上下文信息。
- 文件: `hooks/pre_prompt.py`
- 用途: 查询用户信息、偏好设置、历史记录等，注入到 prompt 中

### PostAgent Hook
在 agent 执行完成后执行，用于后处理。
- 文件: `hooks/post_agent.py`
- 用途: 记录分析数据、触发异步任务、发送通知等

### PreSave Hook
在消息保存前执行，用于内容处理。
- 文件: `hooks/pre_save.py`
- 用途: 内容过滤、敏感信息脱敏、格式转换等

## 目录结构

```
user-context-loader/
├── README.md                   # Skill 说明文档
├── .claude-plugin/
│   └── plugin.json            # Hook 和 MCP 配置文件
└── hooks/
    ├── pre_prompt.py          # PrePrompt hook 脚本
    ├── post_agent.py          # PostAgent hook 脚本
    └── pre_save.py            # PreSave hook 脚本
```

## plugin.json 格式

```json
{
  "name": "user-context-loader",
  "description": "用户上下文加载器示例 Skill",
  "hooks": {
    "PrePrompt": [
      {
        "type": "command",
        "command": "python hooks/pre_prompt.py"
      }
    ],
    "PostAgent": [
      {
        "type": "command",
        "command": "python hooks/post_agent.py"
      }
    ],
    "PreSave": [
      {
        "type": "command",
        "command": "python hooks/pre_save.py"
      }
    ]
  },
  "mcpServers": {
    "server-name": {
      "command": "node",
      "args": ["path/to/server.js"],
      "env": {
        "API_KEY": "${API_KEY}"
      }
    }
  }
}
```

## Hook 脚本格式

Hook 脚本通过子进程执行，通过环境变量接收参数，通过 stdout 返回结果。

### 可用环境变量

| 环境变量 | 说明 | 适用于 |
|---------|------|--------|
| `BOT_ID` | Bot ID | 所有 hook |
| `USER_IDENTIFIER` | 用户标识 | 所有 hook |
| `SESSION_ID` | 会话 ID | 所有 hook |
| `LANGUAGE` | 语言代码 | 所有 hook |
| `HOOK_TYPE` | Hook 类型 | 所有 hook |
| `CONTENT` | 消息内容 | PreSave |
| `ROLE` | 消息角色 | PreSave |
| `RESPONSE` | Agent 响应 | PostAgent |
| `METADATA` | 元数据 JSON | PostAgent |

### PrePrompt 示例

```python
#!/usr/bin/env python3
import os
import sys

def main():
    user_identifier = os.environ.get('USER_IDENTIFIER', '')
    bot_id = os.environ.get('BOT_ID', '')

    # 输出要注入到 prompt 中的内容
    print(f"## User Context\n\n用户: {user_identifier}")
    return 0

if __name__ == '__main__':
    sys.exit(main())
```

### PreSave 示例

```python
#!/usr/bin/env python3
import os
import sys

def main():
    content = os.environ.get('CONTENT', '')

    # 处理内容并输出
    print(content)  # 输出处理后的内容
    return 0

if __name__ == '__main__':
    sys.exit(main())
```

### PostAgent 示例

```python
#!/usr/bin/env python3
import os
import sys

def main():
    response = os.environ.get('RESPONSE', '')
    session_id = os.environ.get('SESSION_ID', '')

    # 记录日志（输出到 stderr）
    print(f"Session {session_id}: Response length {len(response)}", file=sys.stderr)
    return 0

if __name__ == '__main__':
    sys.exit(main())
```

## 使用场景

1. **PrePrompt**: 用户登录时自动加载其偏好设置、历史订单等
2. **PostAgent**: 记录对话分析数据，触发后续业务流程
3. **PreSave**: 敏感信息脱敏后再存储，如手机号、邮箱等
