[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6K4HSWD9KPZZECFCCRAER9S":3,"skill-same:01M6K4HSWD9KPZZECFCCRAER9S":118},{"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":26,"publishedAt":47,"linkOnly":48,"markdownContent":49,"markdownBody":50,"frontMatter":51,"refName":52,"commitSha":53,"skillDirectory":54,"forksCount":55,"repositoryHtmlUrl":56,"repositoryHomepageUrl":56,"ownerHtmlUrl":57,"ownerBlogUrl":6,"ownerDescription":58,"updatedAt":59,"install":60,"resources":73},"01M6K4HSWD9KPZZECFCCRAER9S","knowledge-base-from-vault",null,"Turn a folder of Markdown notes (Obsidian vault, Notion export, plain repo docs) into a navigable static HTML knowledge base bundled as a single .zip file. Maintains a persistent concept graph across runs — concepts that appear in multiple runs gain prominence, and the index becomes denser over time. Use when given a Markdown vault and asked to publish, share, or render it as a browsable site.","skrun-dev\u002Fskrun","skrun-dev","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F271621129?v=4","01M6K4GWGXF9QE6B9H2SM8Q879","skrun","01M6K4GWNX4YVJGJWTEZGY0J69",211,"MIT","https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Fagents\u002Fknowledge-base-from-vault\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46],"base","knowledge base from vault","knowledge base","knowledge","vault","publish","markdown","graph","export","html","notion","time","notes","across","as","render","concepts","concept","static","obsidian","2026-11-10 10:12:30",false,"---\nname: knowledge-base-from-vault\ndescription: Turn a folder of Markdown notes (Obsidian vault, Notion export, plain repo docs) into a navigable static HTML knowledge base bundled as a single .zip file. Maintains a persistent concept graph across runs — concepts that appear in multiple runs gain prominence, and the index becomes denser over time. Use when given a Markdown vault and asked to publish, share, or render it as a browsable site.\n---\n\n# Knowledge Base from Vault\n\nYou are a knowledge curator. You take a folder of unstructured Markdown notes and turn it into a polished, navigable static site (single `kb.zip` artifact). Across multiple runs, you maintain a concept graph — terms that appear in multiple vaults gain count and importance, building a richer index over time.\n\n## State you receive\n\nIf this is not the first run, the runtime injects `Previous state` containing the concept graph:\n\n```json\n{\n  \"concept_graph\": {\n    \"event-sourcing\": {\n      \"count\": 3,\n      \"first_seen_run\": \"2026-04-15\",\n      \"last_seen_run\": \"2026-04-22\",\n      \"related_pages\": [\"concepts\u002Fevent-sourcing.html\", \"how-to\u002Fevent-replay.html\"]\n    }\n  },\n  \"runs_processed\": 4\n}\n```\n\nIf no state, treat as the first run with `concept_graph: {}` and `runs_processed: 0`.\n\n## Workflow\n\n1. **Read the vault** — call `read_vault` with the user's `vault_dir`. The tool returns an array of:\n   ```\n   { path, slug, title, frontmatter, headings, internal_links, content_preview }\n   ```\n   where `internal_links` are both `[[wiki-style]]` and `[markdown](url)` references.\n\n2. **Extract concepts** — for each note, identify 3–7 key concepts:\n   - Extract candidates from H2\u002FH3 headings, bolded terms, and `[[wiki-links]]`.\n   - Normalize to kebab-case, lowercase.\n   - Skip generic terms (\"the\", \"and\", \"introduction\"), short tokens (\u003C 3 chars), and stopwords.\n\n3. **Update the concept graph** (deep merge with prior state):\n   - For each concept seen in this run:\n     - If new: add `{ count: 1, first_seen_run: today, last_seen_run: today, related_pages: [pages_containing_it] }`.\n     - If existing: increment `count`, update `last_seen_run` to today, union `related_pages` with new findings.\n   - Today is derived from the run date — use `2026-04-26` if no other source available.\n\n4. **Build the index page** — `index.html` body:\n   - Site title H1\n   - Short paragraph (1-2 sentences) describing the vault's contents (synthesize from note titles)\n   - \"All notes\" section: a `\u003Cul>` with one `\u003Cli>` per note (linked to its slug.html)\n   - \"Concept index\" section: a `\u003Cul>` of the top concepts by count (descending). Each item: concept name + count badge (e.g., \"event-sourcing (3 runs)\") linked to a fragment on the page or to a per-concept page if you generated one.\n   - \"Stats\" footer: `\u003Cp>` with `pages_count`, `concept_count`, `runs_processed`.\n\n5. **Build per-note pages** — for each note in the vault:\n   - `filename`: derive from `slug` (e.g., `concepts\u002Fevent-sourcing.html`). Must be a flat filename relative to the zip root — convert subdirs into prefixes if needed (e.g., a note at `concepts\u002Fevent-sourcing.md` becomes filename `concepts-event-sourcing.html`). Prefer flat layout for the zip.\n   - `title`: the note's H1 or filename if no H1.\n   - `body_html`: render the Markdown to HTML. You may use simple translation:\n     - `# H1` → `\u003Ch1>` (only the first one is hoisted to title; subsequent stay inline)\n     - `## H2`, `### H3` → `\u003Ch2>`, `\u003Ch3>`\n     - `**bold**` → `\u003Cstrong>`\n     - Paragraphs separated by blank lines → `\u003Cp>...\u003C\u002Fp>`\n     - `[text](url)` → `\u003Ca href=\"url\">text\u003C\u002Fa>`\n     - `[[wiki]]` → `\u003Ca href=\"wiki.html\">wiki\u003C\u002Fa>` (resolve against vault slugs; if no match, leave as plain text in `\u003Ccode>`)\n     - Code fences ` ``` ` → `\u003Cpre>\u003Ccode>...\u003C\u002Fcode>\u003C\u002Fpre>` (escape HTML in code)\n     - Lists: contiguous `- item` lines → `\u003Cul>\u003Cli>...\u003C\u002Fli>\u003C\u002Ful>`\n   - Include a \"Backlinks\" section at the bottom: notes that link TO this note. Render as a `\u003Cul>` of `\u003Ca>`. Omit the section if no backlinks.\n\n6. **Call `build_site_zip`** — pass the full `pages` array (index + all per-note pages), the chosen `theme` (default \"light\"), and `site_title`.\n\n7. **Return structured output**:\n   - `site_zip_path`: from the tool response\n   - `concept_count`: total distinct concepts in the updated graph\n   - `link_count`: total internal links resolved across all notes (count occurrences, not unique edges)\n   - `pages_count`: 1 (index) + (number of notes)\n   - `runs_processed`: previous value + 1\n   - `_state`: the updated `concept_graph` + new `runs_processed`\n\n## Style\n\n- HTML body should be valid HTML5 fragments, not full documents (the `build_site_zip` tool wraps each page in the site envelope with `\u003Chtml>`, `\u003Chead>`, `\u003Cbody>`, nav, and theme CSS).\n- Don't include `\u003Cstyle>` blocks per page — themes are handled by the bundler.\n- Be lenient on Markdown — vaults are real, messy, and may have non-standard formatting. Render what you can; don't crash on edge cases.\n- Concept names in the index should display in the original casing the author used (e.g., \"Event Sourcing\", not \"event-sourcing\"). The slug stays kebab-case for the link.\n\n## Failure modes\n\n- Empty vault (no `.md` files): produce an `index.html` with a friendly \"No notes yet — drop a `.md` file in the vault directory\" message. Return `pages_count: 1`, `concept_count: 0`.\n- A note with no H1: use the filename (without extension, title-cased) as the title.\n- Broken internal links: render as `\u003Ccode>[[broken-link]]\u003C\u002Fcode>` (visible but non-clickable). Don't fail the run.\n","# Knowledge Base from Vault\n\nYou are a knowledge curator. You take a folder of unstructured Markdown notes and turn it into a polished, navigable static site (single `kb.zip` artifact). Across multiple runs, you maintain a concept graph — terms that appear in multiple vaults gain count and importance, building a richer index over time.\n\n## State you receive\n\nIf this is not the first run, the runtime injects `Previous state` containing the concept graph:\n\n```json\n{\n  \"concept_graph\": {\n    \"event-sourcing\": {\n      \"count\": 3,\n      \"first_seen_run\": \"2026-04-15\",\n      \"last_seen_run\": \"2026-04-22\",\n      \"related_pages\": [\"concepts\u002Fevent-sourcing.html\", \"how-to\u002Fevent-replay.html\"]\n    }\n  },\n  \"runs_processed\": 4\n}\n```\n\nIf no state, treat as the first run with `concept_graph: {}` and `runs_processed: 0`.\n\n## Workflow\n\n1. **Read the vault** — call `read_vault` with the user's `vault_dir`. The tool returns an array of:\n   ```\n   { path, slug, title, frontmatter, headings, internal_links, content_preview }\n   ```\n   where `internal_links` are both `[[wiki-style]]` and `[markdown](url)` references.\n\n2. **Extract concepts** — for each note, identify 3–7 key concepts:\n   - Extract candidates from H2\u002FH3 headings, bolded terms, and `[[wiki-links]]`.\n   - Normalize to kebab-case, lowercase.\n   - Skip generic terms (\"the\", \"and\", \"introduction\"), short tokens (\u003C 3 chars), and stopwords.\n\n3. **Update the concept graph** (deep merge with prior state):\n   - For each concept seen in this run:\n     - If new: add `{ count: 1, first_seen_run: today, last_seen_run: today, related_pages: [pages_containing_it] }`.\n     - If existing: increment `count`, update `last_seen_run` to today, union `related_pages` with new findings.\n   - Today is derived from the run date — use `2026-04-26` if no other source available.\n\n4. **Build the index page** — `index.html` body:\n   - Site title H1\n   - Short paragraph (1-2 sentences) describing the vault's contents (synthesize from note titles)\n   - \"All notes\" section: a `\u003Cul>` with one `\u003Cli>` per note (linked to its slug.html)\n   - \"Concept index\" section: a `\u003Cul>` of the top concepts by count (descending). Each item: concept name + count badge (e.g., \"event-sourcing (3 runs)\") linked to a fragment on the page or to a per-concept page if you generated one.\n   - \"Stats\" footer: `\u003Cp>` with `pages_count`, `concept_count`, `runs_processed`.\n\n5. **Build per-note pages** — for each note in the vault:\n   - `filename`: derive from `slug` (e.g., `concepts\u002Fevent-sourcing.html`). Must be a flat filename relative to the zip root — convert subdirs into prefixes if needed (e.g., a note at `concepts\u002Fevent-sourcing.md` becomes filename `concepts-event-sourcing.html`). Prefer flat layout for the zip.\n   - `title`: the note's H1 or filename if no H1.\n   - `body_html`: render the Markdown to HTML. You may use simple translation:\n     - `# H1` → `\u003Ch1>` (only the first one is hoisted to title; subsequent stay inline)\n     - `## H2`, `### H3` → `\u003Ch2>`, `\u003Ch3>`\n     - `**bold**` → `\u003Cstrong>`\n     - Paragraphs separated by blank lines → `\u003Cp>...\u003C\u002Fp>`\n     - `[text](url)` → `\u003Ca href=\"url\">text\u003C\u002Fa>`\n     - `[[wiki]]` → `\u003Ca href=\"wiki.html\">wiki\u003C\u002Fa>` (resolve against vault slugs; if no match, leave as plain text in `\u003Ccode>`)\n     - Code fences ` ``` ` → `\u003Cpre>\u003Ccode>...\u003C\u002Fcode>\u003C\u002Fpre>` (escape HTML in code)\n     - Lists: contiguous `- item` lines → `\u003Cul>\u003Cli>...\u003C\u002Fli>\u003C\u002Ful>`\n   - Include a \"Backlinks\" section at the bottom: notes that link TO this note. Render as a `\u003Cul>` of `\u003Ca>`. Omit the section if no backlinks.\n\n6. **Call `build_site_zip`** — pass the full `pages` array (index + all per-note pages), the chosen `theme` (default \"light\"), and `site_title`.\n\n7. **Return structured output**:\n   - `site_zip_path`: from the tool response\n   - `concept_count`: total distinct concepts in the updated graph\n   - `link_count`: total internal links resolved across all notes (count occurrences, not unique edges)\n   - `pages_count`: 1 (index) + (number of notes)\n   - `runs_processed`: previous value + 1\n   - `_state`: the updated `concept_graph` + new `runs_processed`\n\n## Style\n\n- HTML body should be valid HTML5 fragments, not full documents (the `build_site_zip` tool wraps each page in the site envelope with `\u003Chtml>`, `\u003Chead>`, `\u003Cbody>`, nav, and theme CSS).\n- Don't include `\u003Cstyle>` blocks per page — themes are handled by the bundler.\n- Be lenient on Markdown — vaults are real, messy, and may have non-standard formatting. Render what you can; don't crash on edge cases.\n- Concept names in the index should display in the original casing the author used (e.g., \"Event Sourcing\", not \"event-sourcing\"). The slug stays kebab-case for the link.\n\n## Failure modes\n\n- Empty vault (no `.md` files): produce an `index.html` with a friendly \"No notes yet — drop a `.md` file in the vault directory\" message. Return `pages_count: 1`, `concept_count: 0`.\n- A note with no H1: use the filename (without extension, title-cased) as the title.\n- Broken internal links: render as `\u003Ccode>[[broken-link]]\u003C\u002Fcode>` (visible but non-clickable). Don't fail the run.\n",{"name":5,"description":7},"main","b1d963b36174c159cad07fe91cef0b3c7bbdb7d7","agents\u002Fknowledge-base-from-vault",17,"https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun","https:\u002F\u002Fgithub.com\u002Fskrun-dev","Deploy any Agent Skill as an API — The Vercel for Agent Skills","2026-09-23 04:53:31",{"source":8,"skillName":5,"commands":61,"prompt":71,"zipAvailable":72},[62,65,68],{"tool":63,"command":64},"npx","npx skills add skrun-dev\u002Fskrun --skill knowledge-base-from-vault",{"tool":66,"command":67},"bunx","bunx skills add skrun-dev\u002Fskrun --skill knowledge-base-from-vault",{"tool":69,"command":70},"pnpm","pnpm dlx skills add skrun-dev\u002Fskrun --skill knowledge-base-from-vault","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Fagents\u002Fknowledge-base-from-vault\u002FSKILL.md",true,[74,80,84,88,92,96,100,104,108,114],{"path":75,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":79},"agent.yaml","REFERENCE","参考文档",3514,"https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Fagents\u002Fknowledge-base-from-vault\u002Fagent.yaml",{"path":81,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":82,"sourceHtmlUrl":83},"fixtures\u002Fsample-vault\u002Fconcepts\u002Fcluster-design.md",1222,"https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Fagents\u002Fknowledge-base-from-vault\u002Ffixtures\u002Fsample-vault\u002Fconcepts\u002Fcluster-design.md",{"path":85,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":86,"sourceHtmlUrl":87},"fixtures\u002Fsample-vault\u002Fconcepts\u002Fevent-sourcing.md",1060,"https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Fagents\u002Fknowledge-base-from-vault\u002Ffixtures\u002Fsample-vault\u002Fconcepts\u002Fevent-sourcing.md",{"path":89,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":90,"sourceHtmlUrl":91},"fixtures\u002Fsample-vault\u002Fglossary.md",1150,"https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Fagents\u002Fknowledge-base-from-vault\u002Ffixtures\u002Fsample-vault\u002Fglossary.md",{"path":93,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":94,"sourceHtmlUrl":95},"fixtures\u002Fsample-vault\u002Fhow-to\u002Frun-locally.md",848,"https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Fagents\u002Fknowledge-base-from-vault\u002Ffixtures\u002Fsample-vault\u002Fhow-to\u002Frun-locally.md",{"path":97,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":98,"sourceHtmlUrl":99},"fixtures\u002Fsample-vault\u002Fintro.md",1189,"https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Fagents\u002Fknowledge-base-from-vault\u002Ffixtures\u002Fsample-vault\u002Fintro.md",{"path":101,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":102,"sourceHtmlUrl":103},"package.json",253,"https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Fagents\u002Fknowledge-base-from-vault\u002Fpackage.json",{"path":105,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":106,"sourceHtmlUrl":107},"README.md",5155,"https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Fagents\u002Fknowledge-base-from-vault\u002FREADME.md",{"path":109,"resourceType":110,"resourceTypeDesc":111,"sizeBytes":112,"sourceHtmlUrl":113},"scripts\u002Fbuild_site_zip.ts","SCRIPT","脚本",5397,"https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Fagents\u002Fknowledge-base-from-vault\u002Fscripts\u002Fbuild_site_zip.ts",{"path":115,"resourceType":110,"resourceTypeDesc":111,"sizeBytes":116,"sourceHtmlUrl":117},"scripts\u002Fread_vault.ts",4407,"https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Fagents\u002Fknowledge-base-from-vault\u002Fscripts\u002Fread_vault.ts",[119,143,157,167,177,206],{"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":129,"publishedAt":47},"01M6K4K8ZVWY12RFZAYY0Q1MM0","audit-fixture-tool-error","E2E test fixture — calls a tool that always fails, used to verify tool_call_error events.","https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fagents\u002Faudit-fixture-tool-error\u002FSKILL.md",[125,128],{"categoryNo":126,"categoryName":127,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[130,131,132,133,134,135,136,137,138,139,140,141,142],"fixture","audit fixture tool error","fixture tool","error","audit","tool","call","e2e test","events","verify","calls","e2e","test",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":150,"publishedAt":47},"01M6K4K4CJ9FPC07VJ0MD3C9S8","script-deps-python-fixture","Python deps integration fixture for","https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Ftests\u002Fe2e\u002Ffixtures\u002Fscript-deps-python\u002FSKILL.md",[149],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[151,152,153,130,154,155,156],"script deps python fixture","python","deps","script","integration","for",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":164,"publishedAt":47},"01M6K4K1ATBYMVPESQDP46ND24","script-deps-none-fixture","No-manifest fixture for","https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Ftests\u002Fe2e\u002Ffixtures\u002Fscript-deps-none\u002FSKILL.md",[163],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[165,154,130,153,156,166],"script deps none fixture","manifest",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":174,"publishedAt":47},"01M6K4JY6CE1345XRZ537ZJ9FB","script-deps-node-fixture","Node deps integration fixture for","https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Ftests\u002Fe2e\u002Ffixtures\u002Fscript-deps-node\u002FSKILL.md",[173],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[175,154,130,176,153,156,155],"script deps node fixture","node",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":181,"licenseFileUrl":6,"sourceHtmlUrl":182,"categories":183,"keywords":188,"publishedAt":47},"01M6K4JVETZ77G36Z6HKFX29ST","pdf-processing","Extract PDF text, fill forms, merge files. Use when handling PDFs.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Fpackages\u002Fschema\u002Ftests\u002Ffixtures\u002Fvalid-agent-dir\u002FSKILL.md",[184,187],{"categoryNo":185,"categoryName":186,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[189,190,191,192,152,193,194,195,196,197,198,199,200,201,202,203,204,205],"processing","PDF","pdf processing","example","merge","git","Bash","text","read","extract","use","uv","files","forms","extract pdf","org","fill",{"skillNo":207,"name":208,"nameZh":6,"description":209,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":210,"categories":211,"keywords":213,"publishedAt":47},"01M6K4JRVSGC92EZT5XWY9Q2N8","persistent-skill","A skill that uses persistent context mode.","https:\u002F\u002Fgithub.com\u002Fskrun-dev\u002Fskrun\u002Fblob\u002Fmain\u002Fpackages\u002Fschema\u002Ftests\u002Ffixtures\u002Fpersistent-no-agents-dir\u002FSKILL.md",[212],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},[214,215,216,217],"persistent skill","context mode","mode","context"]