🔄 卡若AI 同步 2026-02-22 10:38 | 更新:卡土、总索引与入口、运营中枢参考资料、运营中枢工作台 | 排除 >20MB: 8 个

This commit is contained in:
2026-02-22 10:38:14 +08:00
parent 824cef5d31
commit adf91a688b
8 changed files with 460 additions and 5 deletions

View File

@@ -0,0 +1,85 @@
---
name: 基因胶囊
description: 将验证过的 Skill 打包为可遗传的能力单元(基因胶囊),支持 pack/unpack/list。触发词基因胶囊、打包技能、解包胶囊、继承能力。
group: 土
triggers: 基因胶囊、打包技能、解包胶囊、继承能力、胶囊列表
owner: 土砖
version: "1.0"
updated: "2026-02-22"
---
# 基因胶囊
> **归属**:土砖(技能复制)
> **理念**:将 Skill + 环境指纹 + 审计记录打包成可遗传能力单元,支持本地复用与未来跨 Agent 流通。
---
## 一、概念
**基因胶囊** = 策略SKILL + 环境指纹 + 审计记录 + 资产 IDSHA-256
- 一个 Skill 学会 → 打包成胶囊 → 可被其他 Agent 或本机继承
- 规范见:`运营中枢/参考资料/基因胶囊规范.md`
---
## 二、使用方法
### 2.1 打包Skill → 基因胶囊)
```bash
cd /Users/karuo/Documents/个人/卡若AI
python3 05_卡土/土砖_技能复制/基因胶囊/脚本/gene_capsule.py pack "技能工厂"
# 或指定路径
python3 .../gene_capsule.py pack "05_卡土/土砖_技能复制/技能工厂/SKILL.md"
```
- 输出目录:`/Users/karuo/Documents/卡若Ai的文件夹/导出/基因胶囊/`
- 文件名:`技能名_sha256前8位.json`
### 2.2 解包(基因胶囊 → Skill
```bash
python3 .../gene_capsule.py unpack 技能工厂_abc12345.json
# 指定输出目录
python3 .../gene_capsule.py unpack 技能工厂_abc12345.json -o 02_卡人/水溪_整理归档/
```
- 默认按胶囊内 `manifest.skill_path` 写回
- 可选 `-o` 指定目录,则写入该目录下的 `SKILL.md`
### 2.3 列表
```bash
python3 .../gene_capsule.py list
```
输出本地所有胶囊名称、capsule_id、创建时间。
---
## 三、与技能工厂的联动
| 场景 | 操作 |
|:---|:---|
| **创建 Skill 前** | `list` 查看本地胶囊,有匹配则 `unpack` 继承 |
| **创建 Skill 后** | `pack` 将新 Skill 打包,供后续复用或未来上传 |
---
## 四、相关文件
| 文件 | 说明 |
|:---|:---|
| `运营中枢/参考资料/基因胶囊规范.md` | 概念与格式规范 |
| `脚本/gene_capsule.py` | pack/unpack/list 主脚本 |
| `capsule_index.json` | 继承胶囊索引(解包时更新) |
| `卡若Ai的文件夹/导出/基因胶囊/` | 导出目录 |
---
## 五、依赖
- Python 3.9+
- 可选PyYAML用于精确解析 frontmatter无则用简单解析

View File

@@ -0,0 +1,219 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
基因胶囊 · 打包/解包/列表
卡若AI 基因胶囊管理脚本,归属土砖。
"""
import argparse
import hashlib
import json
import os
import platform
import sys
from datetime import datetime
from pathlib import Path
# 卡若AI 工作台根目录
KARUO_AI_ROOT = Path(__file__).resolve().parent.parent.parent.parent.parent
EXPORT_DIR = Path("/Users/karuo/Documents/卡若Ai的文件夹/导出/基因胶囊")
CAPSULE_INDEX = Path(__file__).resolve().parent.parent / "capsule_index.json"
def _collect_env():
"""收集环境指纹(可选)"""
return {
"python_version": f"{sys.version_info.major}.{sys.version_info.minor}",
"platform": platform.system().lower(),
}
def _calc_capsule_id(skill_path: str, content: str) -> str:
"""计算资产 IDSHA256(skill_path + content 前 8192 字符)"""
data = (skill_path + content[:8192]).encode("utf-8")
h = hashlib.sha256(data).hexdigest()
return f"sha256:{h}"
def _find_skill_path(name_or_path: str) -> Path:
"""根据技能名或路径找到 SKILL.md"""
if name_or_path.endswith("SKILL.md"):
p = KARUO_AI_ROOT / name_or_path
elif os.path.sep in name_or_path or name_or_path.startswith("0"):
# 形如 05_卡土/土砖_技能复制/技能工厂
p = KARUO_AI_ROOT / name_or_path
if p.is_dir():
p = p / "SKILL.md"
else:
# 按名称在 SKILL_REGISTRY 中查找(简化:扫描常见路径)
registry = KARUO_AI_ROOT / "SKILL_REGISTRY.md"
if registry.exists():
text = registry.read_text(encoding="utf-8")
# 简单匹配:找包含 name_or_path 的 SKILL 路径
for line in text.splitlines():
if "SKILL.md" in line and name_or_path in line:
# 提取路径,如 `05_卡土/土砖_技能复制/技能工厂/SKILL.md`
start = line.find("`") + 1
end = line.rfind("`")
if start > 0 and end > start:
rel = line[start:end].strip()
p = KARUO_AI_ROOT / rel
if p.exists():
return p
raise FileNotFoundError(f"未找到技能: {name_or_path}")
if not p.exists():
raise FileNotFoundError(f"SKILL 不存在: {p}")
return p
def _parse_frontmatter(content: str) -> tuple:
"""解析 YAML frontmatter返回 (frontmatter_dict, body)。无 PyYAML 时用简单解析。"""
if not content.strip().startswith("---"):
return {}, content
parts = content.split("---", 2)
if len(parts) < 3:
return {}, content
fm = {}
try:
import yaml
fm = yaml.safe_load(parts[1]) or {}
except Exception:
for line in parts[1].strip().splitlines():
if ":" in line:
k, v = line.split(":", 1)
k, v = k.strip(), v.strip().strip("'\"").strip()
if k == "triggers":
fm[k] = [x.strip() for x in v.replace("", ",").split(",") if x.strip()]
else:
fm[k] = v
return fm, parts[2].strip()
def pack(skill_ref: str, include_audit: bool = True) -> str:
"""打包:将 SKILL 转为基因胶囊 JSON"""
skill_path = _find_skill_path(skill_ref)
content = skill_path.read_text(encoding="utf-8")
rel_path = str(skill_path.relative_to(KARUO_AI_ROOT))
fm, body = _parse_frontmatter(content)
manifest = {
"name": fm.get("name", skill_path.stem),
"description": fm.get("description", ""),
"triggers": fm.get("triggers", [])
if isinstance(fm.get("triggers"), list)
else (fm.get("triggers", "") or "").split(""),
"owner": fm.get("owner", ""),
"group": fm.get("group", ""),
"skill_path": rel_path,
}
capsule_id = _calc_capsule_id(rel_path, content)
now = datetime.now().strftime("%Y-%m-%dT%H:%M:%S+08:00")
capsule = {
"version": "1.0",
"capsule_id": capsule_id,
"manifest": manifest,
"skill_content": content,
"created_at": now,
"updated_at": now,
"environment": _collect_env(),
"source": "karuo-ai",
}
if include_audit:
# 尝试从复盘目录读取最近一条(若有)
capsule["audit"] = {"last_retro": "", "source": "pack"}
EXPORT_DIR.mkdir(parents=True, exist_ok=True)
safe_name = manifest["name"].replace(" ", "_").replace("/", "_")[:30]
out_file = EXPORT_DIR / f"{safe_name}_{capsule_id[7:15]}.json"
out_file.write_text(json.dumps(capsule, ensure_ascii=False, indent=2), encoding="utf-8")
return str(out_file)
def unpack(capsule_path: str, target_dir: str | None = None) -> str:
"""解包:将胶囊 JSON 解压为 SKILL.md"""
p = Path(capsule_path)
if not p.exists():
p = EXPORT_DIR / capsule_path
if not p.exists():
raise FileNotFoundError(f"胶囊不存在: {capsule_path}")
data = json.loads(p.read_text(encoding="utf-8"))
manifest = data.get("manifest", {})
skill_content = data.get("skill_content", "")
if target_dir:
dest = Path(target_dir)
else:
# 按 manifest.skill_path 写回
rel = manifest.get("skill_path", "")
dest = KARUO_AI_ROOT / Path(rel).parent
dest.mkdir(parents=True, exist_ok=True)
skill_file = dest / "SKILL.md"
skill_file.write_text(skill_content, encoding="utf-8")
# 更新 capsule_index
idx = {}
if CAPSULE_INDEX.exists():
idx = json.loads(CAPSULE_INDEX.read_text(encoding="utf-8"))
cid = data.get("capsule_id", "")[:19]
idx[cid] = {
"name": manifest.get("name", ""),
"source": data.get("source", "local"),
"unpacked_at": dest,
"created_at": data.get("created_at", ""),
}
CAPSULE_INDEX.write_text(json.dumps(idx, ensure_ascii=False, indent=2), encoding="utf-8")
return str(skill_file)
def list_capsules() -> list[dict]:
"""列表:扫描导出目录与索引"""
result = []
if EXPORT_DIR.exists():
for f in sorted(EXPORT_DIR.glob("*.json")):
try:
data = json.loads(f.read_text(encoding="utf-8"))
m = data.get("manifest", {})
result.append({
"file": f.name,
"name": m.get("name", ""),
"capsule_id": data.get("capsule_id", "")[:19],
"created_at": data.get("created_at", ""),
})
except Exception:
pass
return result
def main():
parser = argparse.ArgumentParser(description="基因胶囊 · pack/unpack/list")
sub = parser.add_subparsers(dest="cmd", required=True)
# pack
p_pack = sub.add_parser("pack", help="将 SKILL 打包为基因胶囊")
p_pack.add_argument("skill", help="技能路径或名称,如 技能工厂 或 05_卡土/土砖_技能复制/技能工厂/SKILL.md")
p_pack.add_argument("--no-audit", action="store_true", help="不包含审计信息")
# unpack
p_unpack = sub.add_parser("unpack", help="将胶囊解包为 SKILL")
p_unpack.add_argument("capsule", help="胶囊文件路径或文件名")
p_unpack.add_argument("-o", "--output", help="输出目录,默认按 manifest.skill_path")
# list
p_list = sub.add_parser("list", help="列出本地胶囊")
args = parser.parse_args()
if args.cmd == "pack":
out = pack(args.skill, include_audit=not args.no_audit)
print(f"✅ 已打包: {out}")
elif args.cmd == "unpack":
out = unpack(args.capsule, target_dir=args.output)
print(f"✅ 已解包: {out}")
elif args.cmd == "list":
items = list_capsules()
for i in items:
print(f" {i['name']} {i['capsule_id']} {i['created_at']}")
print(f"{len(items)} 个胶囊")
if __name__ == "__main__":
main()

View File

@@ -162,3 +162,12 @@ description: 飞书日程转周报。触发词:生成周报、飞书日程、
```
/Users/karuo/Documents/个人/卡若AI/.cursor/skills/
```
## 与基因胶囊联动
创建 Skill 前可先查本地胶囊,有则继承;创建后可将 Skill 打包为基因胶囊:
- **继承**`python3 05_卡土/土砖_技能复制/基因胶囊/脚本/gene_capsule.py list``unpack 胶囊文件`
- **打包**`python3 .../gene_capsule.py pack "技能名"` → 输出到 `卡若Ai的文件夹/导出/基因胶囊/`
详见:`05_卡土/土砖_技能复制/基因胶囊/SKILL.md`

View File

@@ -1,7 +1,7 @@
# 卡若AI 技能注册表Skill Registry
> **一张表查所有技能**。任何 AI 拿到这张表,就能按关键词找到对应技能的 SKILL.md 路径并执行。
> 47 技能 | 14 成员 | 5 负责人
> 48 技能 | 14 成员 | 5 负责人
> 版本5.0 | 更新2026-02-16
---
@@ -84,6 +84,7 @@
|:--|:---|:---|:---|:---|:---|
| E01 | 商业工具集 | 土基 | 商业分析、竞品 | `05_卡土/土基_商业分析/商业工具集/SKILL.md` | 竞品分析、商业画布 |
| E02 | 技能工厂 | 土砖 | 创建技能、生成Skill | `05_卡土/土砖_技能复制/技能工厂/SKILL.md` | 批量创建/复制 SKILL |
| E07 | 基因胶囊 | 土砖 | **基因胶囊、打包技能、解包胶囊、继承能力** | `05_卡土/土砖_技能复制/基因胶囊/SKILL.md` | Skill 打包为可遗传胶囊pack/unpack/list |
| E03 | 流量自动化 | 土渠 | 刷流量、SEO | `05_卡土/土渠_流量招商/流量自动化/SKILL.md` | SEO、流量投放自动化 |
| E04 | 手机流量自动操作 | 土渠 | 手机自动化、AutoGLM | `05_卡土/土渠_流量招商/手机与网页流量自动操作/SKILL.md` | 手机 App 自动化操作 |
| E05 | 财务管理 | 土簿 | 财务、报表、银行 | `05_卡土/土簿_财务管理/财务管理/SKILL.md` | 收支记录、财务报表 |
@@ -114,5 +115,5 @@
| 水 | 卡人 | 3 | 10 |
| 木 | 卡木 | 3 | 6 |
| 火 | 卡火 | 4 | 13 |
| 土 | 卡土 | 4 | 6 |
| **合计** | **5** | **14** | **55** |
| 土 | 卡土 | 4 | 7 |
| **合计** | **5** | **14** | **56** |

View File

@@ -24,6 +24,13 @@
3. **输入**23 月):技能工厂「先查 EvoMap」再创建
4. **深度**3+ 月定期同步、声誉经济、GEP 节点
## 触发词( SKILL_REGISTRY 扩展
## 触发词(已录入 SKILL_REGISTRY
EvoMap、GEP、基因胶囊、经验遗传、Agent 进化
EvoMap、GEP、**基因胶囊**、打包技能、解包胶囊、继承能力、经验遗传、Agent 进化
## 已实现:基因胶囊(土砖)
卡若AI 已抽象并实现基因胶囊概念:
- 规范:`运营中枢/参考资料/基因胶囊规范.md`
- 技能:`05_卡土/土砖_技能复制/基因胶囊/SKILL.md`
- 脚本:`gene_capsule.py` → pack / unpack / list

View File

@@ -0,0 +1,132 @@
# 基因胶囊规范 · 卡若AI 抽象概念
> **版本**1.0 | 更新2026-02-22
> **归属**:土砖(技能复制)
> **理念来源**EvoMap GEP 协议适配卡若AI 本地与未来流通
---
## 一、概念定义
**基因胶囊**Gene Capsule是卡若AI 对「可遗传能力单元」的抽象:将验证过的 Skill + 执行环境 + 审计记录打包成不可篡改的资产,支持本地复用与未来跨 Agent 流通。
```
基因胶囊 = 策略SKILL + 环境指纹 + 审计记录 + 资产 ID
```
| 层 | 含义 |
|:---|:---|
| **策略** | SKILL.md 完整内容,含触发词、步骤、脚本路径 |
| **环境指纹** | Python 版本、平台、依赖(便于继承时校验) |
| **审计记录** | 最近一次复盘的「目标·结果·达成率」或执行摘要 |
| **资产 ID** | 对策略内容做 SHA-256用于去重与溯源 |
---
## 二、胶囊格式JSON
### 2.1 必填字段
```json
{
"version": "1.0",
"capsule_id": "sha256:abc123...",
"manifest": {
"name": "技能名称",
"description": "一句话描述",
"triggers": ["触发词1", "触发词2"],
"owner": "土砖",
"group": "土",
"skill_path": "05_卡土/土砖_技能复制/技能工厂/SKILL.md"
},
"skill_content": "---\nname: ...\n---\n\n# 技能名\n\n...",
"created_at": "2026-02-22T21:30:00+08:00",
"updated_at": "2026-02-22T21:30:00+08:00"
}
```
### 2.2 可选字段
```json
{
"environment": {
"python_version": "3.11",
"platform": "darwin",
"dependencies": ["requests", "beautifulsoup4"]
},
"audit": {
"last_retro": "目标·结果·达成率 ≤30字",
"success_rate": "100%",
"execution_count": 3
},
"source": "karuo-ai",
"tags": ["文档", "自动化"]
}
```
### 2.3 资产 ID 计算规则
```
capsule_id = "sha256:" + SHA256(manifest.skill_path + skill_content 前 8192 字符)
```
保证内容变动则 ID 变动,便于去重与版本追溯。
---
## 三、存储与流通
| 用途 | 存放位置 |
|:---|:---|
| **本地导出的胶囊** | `/Users/karuo/Documents/卡若Ai的文件夹/导出/基因胶囊/` |
| **继承的胶囊(解包后)** | 按 SKILL 归属写入对应 `0105` 成员目录 |
| **胶囊索引** | `05_卡土/土砖_技能复制/基因胶囊/capsule_index.json` |
---
## 四、与 SKILL 的映射
| SKILL 元素 | 基因胶囊字段 |
|:---|:---|
| frontmattername/description/triggers/owner/group | manifest |
| 正文 Markdown | skill_content |
| 脚本目录 scripts/ | 打包时一并纳入(可选,或仅记录路径) |
| 复盘块 | audit.last_retro |
---
## 五、操作流程
### 5.1 打包pack
1. 指定 SKILL 路径或技能名
2. 读取 SKILL.md解析 frontmatter
3. 收集环境信息(可选)
4. 若存在最近复盘,写入 audit
5. 计算 capsule_id输出 JSON 到导出目录
### 5.2 解包unpack
1. 读取胶囊 JSON
2. 按 manifest.skill_path 或用户指定路径写入 SKILL.md
3. 若有 scripts 等附加文件,按需创建目录
4. 更新 capsule_index.json若为继承的胶囊
### 5.3 列表list
1. 扫描导出目录 + capsule_index
2. 输出胶囊名、capsule_id 前 12 位、创建时间、来源
---
## 六、与技能工厂的联动
- **创建 Skill 前**:可先 `list` 本地胶囊,若有匹配则 `unpack` 继承
- **创建 Skill 后**:可 `pack` 将新 Skill 打包为胶囊,供后续复用或未来上传
---
## 七、引用
- 战略分析:`卡若Ai的文件夹/报告/EvoMap与卡若AI结合战略分析_20260222.md`
- 技能:`05_卡土/土砖_技能复制/基因胶囊/SKILL.md`

View File

@@ -72,3 +72,4 @@
| 2026-02-22 10:28:14 | 🔄 卡若AI 同步 2026-02-22 10:28 | 更新:金仓、运营中枢工作台 | 排除 >20MB: 8 个 |
| 2026-02-22 10:35:52 | 🔄 卡若AI 同步 2026-02-22 10:35 | 更新:金仓、水溪整理归档、卡土、总索引与入口、运营中枢参考资料、运营中枢工作台、运营中枢 | 排除 >20MB: 8 个 |
| 2026-02-22 10:37:28 | 🔄 卡若AI 同步 2026-02-22 10:37 | 更新:金仓、水溪整理归档、卡土、总索引与入口、运营中枢参考资料、运营中枢工作台、运营中枢 | 排除 >20MB: 8 个 |
| 2026-02-22 10:37:37 | 🔄 卡若AI 同步 2026-02-22 10:37 | 更新:金仓、运营中枢工作台 | 排除 >20MB: 8 个 |

View File

@@ -75,3 +75,4 @@
| 2026-02-22 10:28:14 | 成功 | 成功 | 🔄 卡若AI 同步 2026-02-22 10:28 | 更新:金仓、运营中枢工作台 | 排除 >20MB: 8 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 2026-02-22 10:35:52 | 成功 | 成功 | 🔄 卡若AI 同步 2026-02-22 10:35 | 更新:金仓、水溪整理归档、卡土、总索引与入口、运营中枢参考资料、运营中枢工作台、运营中枢 | 排除 >20MB: 8 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 2026-02-22 10:37:28 | 成功 | 成功 | 🔄 卡若AI 同步 2026-02-22 10:37 | 更新:金仓、水溪整理归档、卡土、总索引与入口、运营中枢参考资料、运营中枢工作台、运营中枢 | 排除 >20MB: 8 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |
| 2026-02-22 10:37:37 | 成功 | 成功 | 🔄 卡若AI 同步 2026-02-22 10:37 | 更新:金仓、运营中枢工作台 | 排除 >20MB: 8 个 | [仓库](http://open.quwanzhi.com:3000/fnvtk/karuo-ai) [百科](http://open.quwanzhi.com:3000/fnvtk/karuo-ai/wiki) |