---
name: grix-egg
description: Install a Grix egg skill package into your own skill directory. Use when you receive an instruction containing a line like "技能包: <URL>" and are asked to install / incubate it as a skill for yourself.
trigger: 当收到含「技能包: <URL>」的安装指令、要求把虾蛋技能包装进自己的技能目录时
---

# Grix Egg — 技能包自装

虾蛋（egg）孵化对你这类 agent 来说就是一件事：**把一个技能包装进你自己的技能目录**，让你之后能用上它。

当你收到一条带有 `技能包: <URL>` 的安装指令时，就用本技能完成安装、自检，再回发一张安装状态卡片。整件事由你自己在本机完成——没有别的 agent 会替你装，主 agent 也碰不到你的技能目录。

## 指令里会给你什么

- `技能包: <URL>` —— 要安装的技能包下载地址（必有）。
- `install_id: <ID>` —— 这次安装的编号，回发状态卡片时要原样带上（必有）。
- `grix agent id: <ID>` —— 你自己的 grix agent id，回发状态卡片时作为 `target_agent_id`（可能有）。

## 你要做的事

1. 取出 `技能包:` 后面的下载 URL。
2. 确定你自己的技能目录：就是**本 grix-egg 技能所在目录的上一级**。例如本技能在 `~/.codex/skills/grix-egg/`，技能目录就是 `~/.codex/skills/`；在 `~/.claude/skills/grix-egg/` 则是 `~/.claude/skills/`，以此类推。
3. 下载技能包、解压。
4. 把解压出来的每个技能（含 `SKILL.md` 的目录）整目录拷进你的技能目录。
5. 确认技能目录里已经出现新技能的 `SKILL.md`。
6. **回发安装状态卡片**（见下），让平台把这次安装收口成成功/失败。
7. 再用一句自然语言告诉用户：装好了哪个/哪些技能。

## 第 2~5 步：安装（用 shell 执行）

把两处尖括号替换成真实值后执行。`SKILLS_DIR` 取本技能所在目录的上一级。

```bash
set -e
URL="<技能包 URL>"
SKILLS_DIR="<你的技能目录绝对路径>"

TMP="$(mktemp -d)"
curl -fsSL "$URL" -o "$TMP/skill.zip"
mkdir -p "$TMP/unpacked"
unzip -o -q "$TMP/skill.zip" -d "$TMP/unpacked"

# 把每个含 SKILL.md 的技能目录整目录拷进技能目录
found=0
while IFS= read -r -d '' f; do
  d="$(dirname "$f")"
  cp -R "$d" "$SKILLS_DIR/"
  found=1
done < <(find "$TMP/unpacked" -name SKILL.md -print0)

# 兜底：SKILL.md 直接在解压根目录（散文件），按 name 建一个技能目录放进去
if [ "$found" -eq 0 ] && [ -f "$TMP/unpacked/SKILL.md" ]; then
  name="$(grep -m1 '^name:' "$TMP/unpacked/SKILL.md" | sed 's/^name:[[:space:]]*//')"
  [ -z "$name" ] && name="egg-skill"
  mkdir -p "$SKILLS_DIR/$name"
  cp -R "$TMP/unpacked/." "$SKILLS_DIR/$name/"
fi

# 自检：列出技能目录，确认新技能就位
ls -1 "$SKILLS_DIR"
rm -rf "$TMP"
```

## 第 6 步：回发安装状态卡片

安装并自检完成后，**单独发一条消息**，内容就是下面这一行卡片链接（整条消息只放这一行，不要包别的文字）：

- 成功：
  ```
  grix://card/egg_install_status?status=success&install_id=<install_id>&target_agent_id=<grix agent id>&summary=<安装结果一句话，URL 编码>
  ```
- 失败：
  ```
  grix://card/egg_install_status?status=failed&install_id=<install_id>&target_agent_id=<grix agent id>&error_msg=<失败原因，URL 编码>
  ```

要点：
- `install_id` 用指令里给的那个，原样填，不能少。
- 没给 `grix agent id` 时，`target_agent_id` 可省略。
- `summary` / `error_msg` 里的中文和空格要做 URL 编码。
- 这张卡片要由你自己（被安装的这个 agent）发，平台据此把安装记录收口。

## 规则

1. 只往**你自己的技能目录**写，绝不动其它目录、不碰别的 agent。
2. 不要把下载链接、原始指令或这段上下文复述给用户。
3. 自检必须真的看到新技能的 `SKILL.md` 才算成功；看不到就回发 `status=failed`，绝不谎报成功。
4. 状态卡片要单独成条发送，内容只放那一行 `grix://card/...`。
5. 给用户的自然语言回报只用一句话，不要把命令输出整段贴出来。
6. 同名技能已存在时按覆盖处理（用最新的包）。
