[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XFZ8GCTNQFD26QZ7T7WJB6":3,"skill-same:01M6XFZ8GCTNQFD26QZ7T7WJB6":71},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":14,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":56,"install":57,"resources":70},"01M6XFZ8GCTNQFD26QZ7T7WJB6","data-structure-protocol",null,"Give agents persistent structural memory of a codebase — navigate dependencies, track public APIs, and understand why connections exist without re-reading the whole repo.","sapsapshen\u002Fai-memory-router","sapsapshen","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F20347959?v=4","01M6XDQEF1DP50DKF37H81J3J5","shenmian","01M6XDQEJPE41Y3DT2763X8ZJN",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Fdata-structure-protocol\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"protocol","data","data structure protocol","structure","dependencies","2026","navigate","track","codebase","reading","re","understand","structural","safe","connections","repo","why","https","memory","github","2026-11-10 10:12:30",false,"---\nname: data-structure-protocol\ndescription: \"Give agents persistent structural memory of a codebase — navigate dependencies, track public APIs, and understand why connections exist without re-reading the whole repo.\"\nrisk: safe\nsource: \"https:\u002F\u002Fgithub.com\u002Fk-kolomeitsev\u002Fdata-structure-protocol\"\ndate_added: \"2026-02-27\"\n---\n\n# Data Structure Protocol (DSP)\n\nLLM coding agents lose context between tasks. On large codebases they spend most of their tokens on \"orientation\" — figuring out where things live, what depends on what, and what is safe to change. DSP solves this by externalizing the project's structural map into a persistent, queryable graph stored in a `.dsp\u002F` directory next to the code.\n\nDSP is NOT documentation for humans and NOT an AST dump. It captures three things: **meaning** (why an entity exists), **boundaries** (what it imports and exposes), and **reasons** (why each connection exists). This is enough for an agent to navigate, refactor, and generate code without loading the entire source tree into the context window.\n\n## When to Use\nUse this skill when:\n- The project has a `.dsp\u002F` directory (DSP is already set up)\n- The user asks to set up DSP, bootstrap, or map a project's structure\n- Creating, modifying, or deleting code files in a DSP-tracked project (to keep the graph updated)\n- Navigating project structure, understanding dependencies, or finding specific modules\n- The user mentions DSP, dsp-cli, `.dsp`, or structure mapping\n- Performing impact analysis before a refactor or dependency replacement\n\n## Core Concepts\n\n### Code = graph\n\nDSP models the codebase as a directed graph. Nodes are **entities**, edges are **imports** and **shared\u002Fexports**.\n\nTwo entity kinds exist:\n- **Object**: any \"thing\" that isn't a function (module\u002Ffile\u002Fclass\u002Fconfig\u002Fresource\u002Fexternal dependency)\n- **Function**: an exported function\u002Fmethod\u002Fhandler\u002Fpipeline\n\n### Identity by UID, not by file path\n\nEvery entity gets a stable UID: `obj-\u003C8hex>` for objects, `func-\u003C8hex>` for functions. File paths are attributes that can change; UIDs survive renames, moves, and reformatting.\n\nFor entities inside a file, the UID is anchored with a comment marker in source code:\n\n```js\n\u002F\u002F @dsp func-7f3a9c12\nexport function calculateTotal(items) { ... }\n```\n\n```python\n# @dsp obj-e5f6g7h8\nclass UserService:\n```\n\n### Every connection has a \"why\"\n\nWhen an import is recorded, DSP stores a short reason explaining *why* that dependency exists. This lives in the `exports\u002F` reverse index of the imported entity. A dependency graph without reasons tells you *what imports what*; reasons tell you **what is safe to change and who will break**.\n\n### Storage format\n\nEach entity gets a small directory under `.dsp\u002F`:\n\n```\n.dsp\u002F\n├── TOC                        # ordered list of all entity UIDs from root\n├── obj-a1b2c3d4\u002F\n│   ├── description            # source path, kind, purpose (1-3 sentences)\n│   ├── imports                # UIDs this entity depends on (one per line)\n│   ├── shared                 # UIDs of public API \u002F exported entities\n│   └── exports\u002F               # reverse index: who imports this and why\n│       ├── \u003Cimporter_uid>     # file content = \"why\" text\n│       └── \u003Cshared_uid>\u002F\n│           ├── description    # what is exported\n│           └── \u003Cimporter_uid> # why this specific export is imported\n└── func-7f3a9c12\u002F\n    ├── description\n    ├── imports\n    └── exports\u002F\n```\n\nEverything is plain text. Diffable. Reviewable. No database needed.\n\n### Full import coverage\n\nEvery file or artifact that is imported anywhere must be represented in `.dsp` as an Object — code, images, styles, configs, JSON, wasm, everything. External dependencies (npm packages, stdlib, etc.) are recorded as `kind: external` but their internals are never analyzed.\n\n## How It Works\n\n### Initial Setup\n\nThe skill relies on a standalone Python CLI script `dsp-cli.py`. If it is missing from the project, download it:\n\n```bash\ncurl -O https:\u002F\u002Fraw.githubusercontent.com\u002Fk-kolomeitsev\u002Fdata-structure-protocol\u002Fmain\u002Fskills\u002Fdata-structure-protocol\u002Fscripts\u002Fdsp-cli.py\n```\n\nRequires **Python 3.10+**. All commands use `python dsp-cli.py --root \u003Cproject-root> \u003Ccommand>`.\n\n### Bootstrap (initial mapping)\n\nIf `.dsp\u002F` is empty, traverse the project from root entrypoint(s) via DFS on imports:\n\n1. Identify root entrypoints (`package.json` main, framework entry, `main.py`, etc.)\n2. Document the root file: `create-object`, `create-function` for each export, `create-shared`, `add-import` for all dependencies\n3. Take the first non-external import, document it fully, descend into its imports\n4. Backtrack when no unvisited local imports remain; continue until all reachable files are documented\n5. External dependencies: `create-object --kind external`, add to TOC, but never descend into `node_modules`\u002F`site-packages`\u002Fetc.\n\n### Workflow Rules\n\n- **Before changing code**: Find affected entities via `search`, `find-by-source`, or `read-toc`. Read their `description` and `imports` to understand context.\n- **When creating a file\u002Fmodule**: Call `create-object`. For each exported function — `create-function` (with `--owner`). Register exports via `create-shared`.\n- **When adding an import**: Call `add-import` with a brief `why`. For external deps — first `create-object --kind external` if the entity doesn't exist.\n- **When removing import\u002Fexport\u002Ffile**: Call `remove-import`, `remove-shared`, `remove-entity`. Cascade cleanup is automatic.\n- **When renaming\u002Fmoving a file**: Call `move-entity`. UID does not change.\n- **Don't touch DSP** if only internal implementation changed without affecting purpose or dependencies.\n\n### Key Commands\n\n| Category | Commands |\n|----------|----------|\n| **Create** | `init`, `create-object`, `create-function`, `create-shared`, `add-import` |\n| **Update** | `update-description`, `update-import-why`, `move-entity` |\n| **Delete** | `remove-import`, `remove-shared`, `remove-entity` |\n| **Navigate** | `get-entity`, `get-children --depth N`, `get-parents --depth N`, `get-path`, `get-recipients`, `read-toc` |\n| **Search** | `search \u003Cquery>`, `find-by-source \u003Cpath>` |\n| **Diagnostics** | `detect-cycles`, `get-orphans`, `get-stats` |\n\n### When to Update DSP\n\n| Code Change | DSP Action |\n|---|---|\n| New file\u002Fmodule | `create-object` + `create-function` + `create-shared` + `add-import` |\n| New import added | `add-import` (+ `create-object --kind external` if new dep) |\n| Import removed | `remove-import` |\n| Export added | `create-shared` (+ `create-function` if new) |\n| Export removed | `remove-shared` |\n| File renamed\u002Fmoved | `move-entity` |\n| File deleted | `remove-entity` |\n| Purpose changed | `update-description` |\n| Internal-only change | **No DSP update needed** |\n\n## Examples\n\n### Example 1: Setting up DSP and documenting a module\n\n```bash\npython dsp-cli.py --root . init\n\npython dsp-cli.py --root . create-object \"src\u002Fapp.ts\" \"Main application entrypoint\"\n# Output: obj-a1b2c3d4\n\npython dsp-cli.py --root . create-function \"src\u002Fapp.ts#start\" \"Starts the HTTP server\" --owner obj-a1b2c3d4\n# Output: func-7f3a9c12\n\npython dsp-cli.py --root . create-shared obj-a1b2c3d4 func-7f3a9c12\n\npython dsp-cli.py --root . add-import obj-a1b2c3d4 obj-deadbeef \"HTTP routing\"\n```\n\n### Example 2: Navigating the graph before making changes\n\n```bash\npython dsp-cli.py --root . search \"authentication\"\npython dsp-cli.py --root . get-entity obj-a1b2c3d4\npython dsp-cli.py --root . get-children obj-a1b2c3d4 --depth 2\npython dsp-cli.py --root . get-recipients obj-a1b2c3d4\npython dsp-cli.py --root . get-path obj-a1b2c3d4 func-7f3a9c12\n```\n\n### Example 3: Impact analysis before replacing a library\n\n```bash\npython dsp-cli.py --root . find-by-source \"lodash\"\n# Output: obj-11223344\n\npython dsp-cli.py --root . get-recipients obj-11223344\n# Shows every module that imports lodash and WHY — lets you systematically replace it\n```\n\n## Best Practices\n\n- ✅ **Do:** Update DSP immediately when creating new files, adding imports, or changing public APIs\n- ✅ **Do:** Always add a meaningful `why` reason when recording an import — this is where most of DSP's value lives\n- ✅ **Do:** Use `kind: external` for third-party libraries without analyzing their internals\n- ✅ **Do:** Keep descriptions minimal (1-3 sentences about purpose, not implementation)\n- ✅ **Do:** Treat `.dsp\u002F` diffs like code diffs — review them, keep them accurate\n- ❌ **Don't:** Touch `.dsp\u002F` for internal-only changes that don't affect purpose or dependencies\n- ❌ **Don't:** Change an entity's UID on rename\u002Fmove (use `move-entity` instead)\n- ❌ **Don't:** Create UIDs for every local variable or helper — only file-level Objects and public\u002Fshared entities\n\n## Integration\n\nThis skill connects naturally to:\n- **context-compression** — DSP reduces the need for compression by providing targeted retrieval instead of loading everything\n- **context-optimization** — DSP is a structural optimization: agents pull minimal \"context bundles\" instead of raw source\n- **architecture** — DSP captures architectural boundaries (imports\u002Fexports) that feed system design decisions\n\n## References\n\n- **Full architecture specification**: [ARCHITECTURE.md](https:\u002F\u002Fgithub.com\u002Fk-kolomeitsev\u002Fdata-structure-protocol\u002Fblob\u002Fmain\u002FARCHITECTURE.md)\n- **CLI source + reference docs**: [skills\u002Fdata-structure-protocol](https:\u002F\u002Fgithub.com\u002Fk-kolomeitsev\u002Fdata-structure-protocol\u002Ftree\u002Fmain\u002Fskills\u002Fdata-structure-protocol)\n- **Introduction article**: [article.md](https:\u002F\u002Fgithub.com\u002Fk-kolomeitsev\u002Fdata-structure-protocol\u002Fblob\u002Fmain\u002Farticle.md)\n","# Data Structure Protocol (DSP)\n\nLLM coding agents lose context between tasks. On large codebases they spend most of their tokens on \"orientation\" — figuring out where things live, what depends on what, and what is safe to change. DSP solves this by externalizing the project's structural map into a persistent, queryable graph stored in a `.dsp\u002F` directory next to the code.\n\nDSP is NOT documentation for humans and NOT an AST dump. It captures three things: **meaning** (why an entity exists), **boundaries** (what it imports and exposes), and **reasons** (why each connection exists). This is enough for an agent to navigate, refactor, and generate code without loading the entire source tree into the context window.\n\n## When to Use\nUse this skill when:\n- The project has a `.dsp\u002F` directory (DSP is already set up)\n- The user asks to set up DSP, bootstrap, or map a project's structure\n- Creating, modifying, or deleting code files in a DSP-tracked project (to keep the graph updated)\n- Navigating project structure, understanding dependencies, or finding specific modules\n- The user mentions DSP, dsp-cli, `.dsp`, or structure mapping\n- Performing impact analysis before a refactor or dependency replacement\n\n## Core Concepts\n\n### Code = graph\n\nDSP models the codebase as a directed graph. Nodes are **entities**, edges are **imports** and **shared\u002Fexports**.\n\nTwo entity kinds exist:\n- **Object**: any \"thing\" that isn't a function (module\u002Ffile\u002Fclass\u002Fconfig\u002Fresource\u002Fexternal dependency)\n- **Function**: an exported function\u002Fmethod\u002Fhandler\u002Fpipeline\n\n### Identity by UID, not by file path\n\nEvery entity gets a stable UID: `obj-\u003C8hex>` for objects, `func-\u003C8hex>` for functions. File paths are attributes that can change; UIDs survive renames, moves, and reformatting.\n\nFor entities inside a file, the UID is anchored with a comment marker in source code:\n\n```js\n\u002F\u002F @dsp func-7f3a9c12\nexport function calculateTotal(items) { ... }\n```\n\n```python\n# @dsp obj-e5f6g7h8\nclass UserService:\n```\n\n### Every connection has a \"why\"\n\nWhen an import is recorded, DSP stores a short reason explaining *why* that dependency exists. This lives in the `exports\u002F` reverse index of the imported entity. A dependency graph without reasons tells you *what imports what*; reasons tell you **what is safe to change and who will break**.\n\n### Storage format\n\nEach entity gets a small directory under `.dsp\u002F`:\n\n```\n.dsp\u002F\n├── TOC                        # ordered list of all entity UIDs from root\n├── obj-a1b2c3d4\u002F\n│   ├── description            # source path, kind, purpose (1-3 sentences)\n│   ├── imports                # UIDs this entity depends on (one per line)\n│   ├── shared                 # UIDs of public API \u002F exported entities\n│   └── exports\u002F               # reverse index: who imports this and why\n│       ├── \u003Cimporter_uid>     # file content = \"why\" text\n│       └── \u003Cshared_uid>\u002F\n│           ├── description    # what is exported\n│           └── \u003Cimporter_uid> # why this specific export is imported\n└── func-7f3a9c12\u002F\n    ├── description\n    ├── imports\n    └── exports\u002F\n```\n\nEverything is plain text. Diffable. Reviewable. No database needed.\n\n### Full import coverage\n\nEvery file or artifact that is imported anywhere must be represented in `.dsp` as an Object — code, images, styles, configs, JSON, wasm, everything. External dependencies (npm packages, stdlib, etc.) are recorded as `kind: external` but their internals are never analyzed.\n\n## How It Works\n\n### Initial Setup\n\nThe skill relies on a standalone Python CLI script `dsp-cli.py`. If it is missing from the project, download it:\n\n```bash\ncurl -O https:\u002F\u002Fraw.githubusercontent.com\u002Fk-kolomeitsev\u002Fdata-structure-protocol\u002Fmain\u002Fskills\u002Fdata-structure-protocol\u002Fscripts\u002Fdsp-cli.py\n```\n\nRequires **Python 3.10+**. All commands use `python dsp-cli.py --root \u003Cproject-root> \u003Ccommand>`.\n\n### Bootstrap (initial mapping)\n\nIf `.dsp\u002F` is empty, traverse the project from root entrypoint(s) via DFS on imports:\n\n1. Identify root entrypoints (`package.json` main, framework entry, `main.py`, etc.)\n2. Document the root file: `create-object`, `create-function` for each export, `create-shared`, `add-import` for all dependencies\n3. Take the first non-external import, document it fully, descend into its imports\n4. Backtrack when no unvisited local imports remain; continue until all reachable files are documented\n5. External dependencies: `create-object --kind external`, add to TOC, but never descend into `node_modules`\u002F`site-packages`\u002Fetc.\n\n### Workflow Rules\n\n- **Before changing code**: Find affected entities via `search`, `find-by-source`, or `read-toc`. Read their `description` and `imports` to understand context.\n- **When creating a file\u002Fmodule**: Call `create-object`. For each exported function — `create-function` (with `--owner`). Register exports via `create-shared`.\n- **When adding an import**: Call `add-import` with a brief `why`. For external deps — first `create-object --kind external` if the entity doesn't exist.\n- **When removing import\u002Fexport\u002Ffile**: Call `remove-import`, `remove-shared`, `remove-entity`. Cascade cleanup is automatic.\n- **When renaming\u002Fmoving a file**: Call `move-entity`. UID does not change.\n- **Don't touch DSP** if only internal implementation changed without affecting purpose or dependencies.\n\n### Key Commands\n\n| Category | Commands |\n|----------|----------|\n| **Create** | `init`, `create-object`, `create-function`, `create-shared`, `add-import` |\n| **Update** | `update-description`, `update-import-why`, `move-entity` |\n| **Delete** | `remove-import`, `remove-shared`, `remove-entity` |\n| **Navigate** | `get-entity`, `get-children --depth N`, `get-parents --depth N`, `get-path`, `get-recipients`, `read-toc` |\n| **Search** | `search \u003Cquery>`, `find-by-source \u003Cpath>` |\n| **Diagnostics** | `detect-cycles`, `get-orphans`, `get-stats` |\n\n### When to Update DSP\n\n| Code Change | DSP Action |\n|---|---|\n| New file\u002Fmodule | `create-object` + `create-function` + `create-shared` + `add-import` |\n| New import added | `add-import` (+ `create-object --kind external` if new dep) |\n| Import removed | `remove-import` |\n| Export added | `create-shared` (+ `create-function` if new) |\n| Export removed | `remove-shared` |\n| File renamed\u002Fmoved | `move-entity` |\n| File deleted | `remove-entity` |\n| Purpose changed | `update-description` |\n| Internal-only change | **No DSP update needed** |\n\n## Examples\n\n### Example 1: Setting up DSP and documenting a module\n\n```bash\npython dsp-cli.py --root . init\n\npython dsp-cli.py --root . create-object \"src\u002Fapp.ts\" \"Main application entrypoint\"\n# Output: obj-a1b2c3d4\n\npython dsp-cli.py --root . create-function \"src\u002Fapp.ts#start\" \"Starts the HTTP server\" --owner obj-a1b2c3d4\n# Output: func-7f3a9c12\n\npython dsp-cli.py --root . create-shared obj-a1b2c3d4 func-7f3a9c12\n\npython dsp-cli.py --root . add-import obj-a1b2c3d4 obj-deadbeef \"HTTP routing\"\n```\n\n### Example 2: Navigating the graph before making changes\n\n```bash\npython dsp-cli.py --root . search \"authentication\"\npython dsp-cli.py --root . get-entity obj-a1b2c3d4\npython dsp-cli.py --root . get-children obj-a1b2c3d4 --depth 2\npython dsp-cli.py --root . get-recipients obj-a1b2c3d4\npython dsp-cli.py --root . get-path obj-a1b2c3d4 func-7f3a9c12\n```\n\n### Example 3: Impact analysis before replacing a library\n\n```bash\npython dsp-cli.py --root . find-by-source \"lodash\"\n# Output: obj-11223344\n\npython dsp-cli.py --root . get-recipients obj-11223344\n# Shows every module that imports lodash and WHY — lets you systematically replace it\n```\n\n## Best Practices\n\n- ✅ **Do:** Update DSP immediately when creating new files, adding imports, or changing public APIs\n- ✅ **Do:** Always add a meaningful `why` reason when recording an import — this is where most of DSP's value lives\n- ✅ **Do:** Use `kind: external` for third-party libraries without analyzing their internals\n- ✅ **Do:** Keep descriptions minimal (1-3 sentences about purpose, not implementation)\n- ✅ **Do:** Treat `.dsp\u002F` diffs like code diffs — review them, keep them accurate\n- ❌ **Don't:** Touch `.dsp\u002F` for internal-only changes that don't affect purpose or dependencies\n- ❌ **Don't:** Change an entity's UID on rename\u002Fmove (use `move-entity` instead)\n- ❌ **Don't:** Create UIDs for every local variable or helper — only file-level Objects and public\u002Fshared entities\n\n## Integration\n\nThis skill connects naturally to:\n- **context-compression** — DSP reduces the need for compression by providing targeted retrieval instead of loading everything\n- **context-optimization** — DSP is a structural optimization: agents pull minimal \"context bundles\" instead of raw source\n- **architecture** — DSP captures architectural boundaries (imports\u002Fexports) that feed system design decisions\n\n## References\n\n- **Full architecture specification**: [ARCHITECTURE.md](https:\u002F\u002Fgithub.com\u002Fk-kolomeitsev\u002Fdata-structure-protocol\u002Fblob\u002Fmain\u002FARCHITECTURE.md)\n- **CLI source + reference docs**: [skills\u002Fdata-structure-protocol](https:\u002F\u002Fgithub.com\u002Fk-kolomeitsev\u002Fdata-structure-protocol\u002Ftree\u002Fmain\u002Fskills\u002Fdata-structure-protocol)\n- **Introduction article**: [article.md](https:\u002F\u002Fgithub.com\u002Fk-kolomeitsev\u002Fdata-structure-protocol\u002Fblob\u002Fmain\u002Farticle.md)\n",{"name":5,"risk":37,"source":49,"date_added":50,"description":7},"https:\u002F\u002Fgithub.com\u002Fk-kolomeitsev\u002Fdata-structure-protocol","2026-02-27","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fcopilot\u002Fdata-structure-protocol","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill data-structure-protocol",{"tool":63,"command":64},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill data-structure-protocol",{"tool":66,"command":67},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill data-structure-protocol","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Fdata-structure-protocol\u002FSKILL.md",true,[],[72,94,119,129,142,160],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":81,"publishedAt":44},"01M71ATQRKG48SH06FQ697T5G9","wechat-search","Search WeChat Official Account articles using OpenClaw's web search and fetch capabilities with compliance-focused design.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fwechat-search-release\u002FSKILL.md",[78],{"categoryNo":79,"categoryName":80,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000037","律师与法务",[82,83,84,85,86,87,88,89,90,91,92,93],"wechat search","wechat","search","capabilities","openclaw","design","web search","compliance","web","official","fetch","with",{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":44},"01M71ATNAVGZB35PFYM2GC5N00","trend-tap","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend tap', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-tap\u002FSKILL.md",[],[101,102,103,104,105,106,84,107,108,109,110,111,112,113,25,114,115,116,117,118],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","when","brew","live","google","install","read","across","api",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":125,"publishedAt":44},"01M71ATJ9AM5KM15AA8PS302EB","trend-radar","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend pulse', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-radar\u002FSKILL.md",[],[126,127,101,112,113,25,114,105,84,116,128,117,118,111,109,108,107,115,106,104],"trend radar","radar","pulse",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":44},"01M71ATGF095N3EJM9G8SD0BB5","tech-news-daily","每日科技新闻汇——从全球多个 RSS 源抓取最新科技新闻，翻译（英→中）、去重、排版成每日简报。当用户询问科技新闻、科技新鲜事、每日科技、技术动态、Daily Tech News 或类似表达时触发此技能。","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftech-news-daily\u002FSKILL.md",[],[136,137,138,139,140,141],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":153,"publishedAt":44},"01M71ATFAEAMQ17M70NQNY7SR8","summarize","Summarize URLs or files with the summarize CLI (web, PDFs, images, audio, YouTube).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsummarize\u002FSKILL.md",[148],{"categoryNo":149,"categoryName":150,"taxonomyType":151,"taxonomyTypeDesc":152},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[144,90,154,155,156,93,112,157,41,158,103,159,115],"Audio","cli","youtube","images","files","pdfs",{"skillNo":161,"name":162,"nameZh":6,"description":163,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":164,"categories":165,"keywords":166,"publishedAt":44},"01M71ATDNS3R0M4H936PACQAWZ","sonoscli","Control Sonos speakers (discover\u002Fstatus\u002Fplay\u002Fvolume\u002Fgroup).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsonoscli\u002FSKILL.md",[],[162,167,168,169,115,170,41,43,171,172,173,174],"status","play","go","latest","discover","control","cmd","volume"]