[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6NKCE6WN2WK1MQ8CNNG3612":3,"skill-same:01M6NKCE6WN2WK1MQ8CNNG3612":56},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":25,"publishedAt":28,"linkOnly":29,"markdownContent":30,"markdownBody":31,"frontMatter":32,"refName":33,"commitSha":34,"skillDirectory":35,"forksCount":36,"repositoryHtmlUrl":37,"repositoryHomepageUrl":6,"ownerHtmlUrl":38,"ownerBlogUrl":39,"ownerDescription":40,"updatedAt":41,"install":42,"resources":55},"01M6NKCE6WN2WK1MQ8CNNG3612","add-gather-agent",null,"joelbarmettlerUZH\u002Fultrainit.sh","joelbarmettlerUZH","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F24369532?v=4","01M6NK9DS0035TVQP3EQ36E14N","Joel Barmettler","01M6NK9DXBM5D1GYV4414HX06T",8,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FjoelbarmettlerUZH\u002Fultrainit.sh\u002Fblob\u002Fmain\u002F.ultrainit\u002Fvalidation\u002Fskills\u002Fadd-gather-agent\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[26,27],"add","add gather agent","2026-11-10 10:12:30",false,"---\nname: add-gather-agent\ndescription: \"\n  Scaffold a new Phase 1 gather agent: prompt in prompts\u002F, schema in schemas\u002F,\n  wired into lib\u002Fgather.sh, fixture in tests\u002Ffixtures\u002Ffindings\u002F, and\n  integration test dispatch entry. Use when asked to add a new gather agent,\n  create a new analysis agent, add a Phase 1 agent, or extend what ultrainit\n  detects. Do NOT use for Phase 3 research agents (those go in\n  lib\u002Fresearch.sh) or for modifying synthesis passes.\n---\n\n## Before You Start\n\nRead these files before touching anything:\n- `prompts\u002Fpatterns.md` — anatomy of a gather prompt (evidence requirement, numbered output fields)\n- `schemas\u002Ftooling.json` — example schema with `additionalProperties: false` and enum fields\n- `lib\u002Fgather.sh` lines 24-65 — where to add your `run_agent` call in `run_agents_parallel`\n- `lib\u002Fgather.sh` lines 67-102 — critical-failure gating and `get_failed_agents` check list\n- `tests\u002Fhelpers\u002Fmock_claude.bash` — how dispatch mode matches agent names to fixture files\n- `tests\u002Funit\u002Fagent_run.bats` — the test setup pattern (envelope, dispatch, assertions)\n\n## Steps\n\n### 1. Name and scope the agent\n\nChoose a `kebab-case` name (e.g., `dependency-graph`). Decide:\n\n- **Model tier**: `haiku` for simple file scanning (matches identity, tooling, commands, docs-scanner, security-scan); `sonnet` for reasoning (matches git-forensics, patterns, structure-scout)\n- **Tool allowlist**: `Read,Bash(find:*),Bash(cat:*)` for file reading; add `Bash(git:*)` only for git history; add `Glob` for pattern matching\n- **Critical agent?** Only add to the critical list if synthesis cannot proceed without this agent's findings\n\n### 2. Write the system prompt\n\nCreate `prompts\u002F\u003Cagent-name>.md`:\n\n```markdown\nYou are analyzing a software codebase. Your goal: [one sentence].\n\nFor this codebase, determine:\n1. [output field 1 — instructions on what to look for and where]\n2. [output field 2]\n...\n\nFor every finding, cite the specific file path(s) where you found evidence.\nDo NOT invent patterns. Only report what you can prove exists in the files.\n\nReturn results as structured JSON matching the schema provided.\n```\n\nThe evidence-requirement sentence is **mandatory** in every gather prompt — see `prompts\u002Fpatterns.md` for the exact phrasing used across agents.\n\n### 3. Write the JSON schema\n\nCreate `schemas\u002F\u003Cagent-name>.json`. All schemas **must** use `\"additionalProperties\": false` at every nested object level:\n\n```json\n{\n  \"$schema\": \"http:\u002F\u002Fjson-schema.org\u002Fdraft-07\u002Fschema#\",\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\"findings\"],\n  \"properties\": {\n    \"findings\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": false,\n        \"required\": [\"name\", \"category\"],\n        \"properties\": {\n          \"name\": { \"type\": \"string\" },\n          \"category\": { \"type\": \"string\", \"enum\": [\"A\", \"B\", \"C\"] },\n          \"evidence_files\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } }\n        }\n      }\n    }\n  }\n}\n```\n\n- Use `\"enum\"` for all categorical fields — downstream `jq select()` relies on exact string matching\n- Use `\"type\": \"array\"` (never nullable) for optional collections — consumers use `.field[]?` safely\n- Use `\"$defs\"` for repeated item shapes (see `schemas\u002Fcommands.json`)\n- Validate before wiring: `jq empty schemas\u002F\u003Cagent-name>.json`\n\n### 4. Wire into gather.sh\n\nOpen `lib\u002Fgather.sh`. Find the `run_agents_parallel` call in `gather_evidence()` (lines 24-65). Add your agent as a new argument string:\n\n```bash\nrun_agents_parallel \\\n    \"run_agent identity ...\" \\\n    ... \\\n    \"run_agent \u003Cagent-name> \\\n        '@${SCRIPT_DIR}\u002Fprompts\u002F\u003Cagent-name>.md' \\\n        '${SCRIPT_DIR}\u002Fschemas\u002F\u003Cagent-name>.json' \\\n        'Read,Bash(find:*),Bash(cat:*)' \\\n        haiku gather\"\n```\n\n**Always use the `@` prefix** for the prompt path — this is required for prompts with shell-special characters (apostrophes, parens, backticks) and prevents ARG_MAX issues on large prompts. Always use `$SCRIPT_DIR` for absolute paths.\n\nAlso add `\u003Cagent-name>` to the `core_agents` array and the `get_failed_agents` check (lines 67-77). If critical, add to `critical_agents` array too.\n\n### 5. Create the test fixture\n\nCreate `tests\u002Ffixtures\u002Ffindings\u002F\u003Cagent-name>.json` with realistic data matching your schema:\n\n```json\n{\n  \"findings\": [\n    {\n      \"name\": \"example-finding\",\n      \"category\": \"A\",\n      \"evidence_files\": [\"lib\u002Fexample.sh\", \"schemas\u002Fexample.json\"]\n    }\n  ]\n}\n```\n\nThe filename **must exactly match** the agent name passed to `run_agent()`. This is the three-way identity: fixture filename = agent name = findings file name. A mismatch silently breaks mock dispatch routing. This file contains only the `structured_output` value — the mock dispatch wraps it via `make_claude_envelope`.\n\n### 6. Add the dispatch entry to integration tests\n\nIn `tests\u002Fintegration\u002Fgather_phase.bats`, find the dispatch setup block and add:\n\n```bash\nmake_claude_envelope \\\n    \"$(cat \"$BATS_TEST_DIRNAME\u002F..\u002Ffixtures\u002Ffindings\u002F\u003Cagent-name>.json\")\" \"0.15\" \\\n    > \"$MOCK_CLAUDE_DISPATCH_DIR\u002F\u003Cagent-name>.json\"\n```\n\nAlso update the systemic-failure test that pre-creates exactly 4 of 8 findings — if you add a 9th core agent, the threshold math changes (3+ of 9 now requires updating).\n\n### 7. Add a unit test\n\nCreate `tests\u002Funit\u002F\u003Cagent-name>_run.bats`:\n\n```bash\nsetup() {\n    load '..\u002Fhelpers\u002Ftest_helper'\n    _common_setup\n    load '..\u002Fhelpers\u002Fmock_claude'\n    setup_mock_claude\n}\nteardown() { _common_teardown; }\n\n@test \"run_agent \u003Cagent-name>: writes findings on success\" {\n    make_claude_envelope \\\n        \"$(cat \"$BATS_TEST_DIRNAME\u002F..\u002Ffixtures\u002Ffindings\u002F\u003Cagent-name>.json\")\" \"0.15\" \\\n        > \"$MOCK_CLAUDE_RESPONSE\"\n    run run_agent \"\u003Cagent-name>\" \\\n        \"@${SCRIPT_DIR}\u002Fprompts\u002F\u003Cagent-name>.md\" \\\n        \"${SCRIPT_DIR}\u002Fschemas\u002F\u003Cagent-name>.json\" \\\n        \"Read,Bash(find:*)\" \"haiku\" \"gather\"\n    assert_success\n    assert_file_exists \"$WORK_DIR\u002Ffindings\u002F\u003Cagent-name>.json\"\n}\n\n@test \"run_agent \u003Cagent-name>: skips when findings exist and FORCE=false\" {\n    echo '{\"findings\":[]}' > \"$WORK_DIR\u002Ffindings\u002F\u003Cagent-name>.json\"\n    FORCE=false run run_agent \"\u003Cagent-name>\" \"...\" \"...\" \"...\" \"haiku\"\n    assert_success\n    run grep 'CALL:' \"$MOCK_CLAUDE_LOG\"\n    assert_failure  # mock was not called\n}\n```\n\n## Verify\n\n```bash\n# Validate schema is well-formed\njq empty schemas\u002F\u003Cagent-name>.json\n\n# Syntax-check gather.sh after wiring\nbash -n lib\u002Fgather.sh\n\n# Run all tests\nmake test-unit\nmake test-integration\nmake test-all\n```\n\n## Common Mistakes\n\n1. **Missing `additionalProperties: false` on nested objects** — this is the single most common schema error. Every `\"type\": \"object\"` at every nesting level needs it, or Claude can hallucinate extra fields.\n\n2. **Inline prompt with shell-special characters** — prompts containing apostrophes, parens, backticks, or `$` break parallel temp-script expansion. Always use the `@\u002Fabsolute\u002Fpath` form. See PR #2 and `tests\u002Fedge\u002Fspecial_characters.bats`.\n\n3. **Wrong fixture filename** — the fixture must be named exactly `\u003Cagent-name>.json` where `\u003Cagent-name>` matches the first arg to `run_agent()`. A mismatch silently falls through to `MOCK_CLAUDE_RESPONSE`.\n\n4. **Not updating `core_agents` array** — if you add the agent to `run_agents_parallel` but not to `core_agents` (and optionally `critical_agents`) in `lib\u002Fgather.sh`, the failure-gating logic ignores it completely.\n","## Before You Start\n\nRead these files before touching anything:\n- `prompts\u002Fpatterns.md` — anatomy of a gather prompt (evidence requirement, numbered output fields)\n- `schemas\u002Ftooling.json` — example schema with `additionalProperties: false` and enum fields\n- `lib\u002Fgather.sh` lines 24-65 — where to add your `run_agent` call in `run_agents_parallel`\n- `lib\u002Fgather.sh` lines 67-102 — critical-failure gating and `get_failed_agents` check list\n- `tests\u002Fhelpers\u002Fmock_claude.bash` — how dispatch mode matches agent names to fixture files\n- `tests\u002Funit\u002Fagent_run.bats` — the test setup pattern (envelope, dispatch, assertions)\n\n## Steps\n\n### 1. Name and scope the agent\n\nChoose a `kebab-case` name (e.g., `dependency-graph`). Decide:\n\n- **Model tier**: `haiku` for simple file scanning (matches identity, tooling, commands, docs-scanner, security-scan); `sonnet` for reasoning (matches git-forensics, patterns, structure-scout)\n- **Tool allowlist**: `Read,Bash(find:*),Bash(cat:*)` for file reading; add `Bash(git:*)` only for git history; add `Glob` for pattern matching\n- **Critical agent?** Only add to the critical list if synthesis cannot proceed without this agent's findings\n\n### 2. Write the system prompt\n\nCreate `prompts\u002F\u003Cagent-name>.md`:\n\n```markdown\nYou are analyzing a software codebase. Your goal: [one sentence].\n\nFor this codebase, determine:\n1. [output field 1 — instructions on what to look for and where]\n2. [output field 2]\n...\n\nFor every finding, cite the specific file path(s) where you found evidence.\nDo NOT invent patterns. Only report what you can prove exists in the files.\n\nReturn results as structured JSON matching the schema provided.\n```\n\nThe evidence-requirement sentence is **mandatory** in every gather prompt — see `prompts\u002Fpatterns.md` for the exact phrasing used across agents.\n\n### 3. Write the JSON schema\n\nCreate `schemas\u002F\u003Cagent-name>.json`. All schemas **must** use `\"additionalProperties\": false` at every nested object level:\n\n```json\n{\n  \"$schema\": \"http:\u002F\u002Fjson-schema.org\u002Fdraft-07\u002Fschema#\",\n  \"type\": \"object\",\n  \"additionalProperties\": false,\n  \"required\": [\"findings\"],\n  \"properties\": {\n    \"findings\": {\n      \"type\": \"array\",\n      \"items\": {\n        \"type\": \"object\",\n        \"additionalProperties\": false,\n        \"required\": [\"name\", \"category\"],\n        \"properties\": {\n          \"name\": { \"type\": \"string\" },\n          \"category\": { \"type\": \"string\", \"enum\": [\"A\", \"B\", \"C\"] },\n          \"evidence_files\": { \"type\": \"array\", \"items\": { \"type\": \"string\" } }\n        }\n      }\n    }\n  }\n}\n```\n\n- Use `\"enum\"` for all categorical fields — downstream `jq select()` relies on exact string matching\n- Use `\"type\": \"array\"` (never nullable) for optional collections — consumers use `.field[]?` safely\n- Use `\"$defs\"` for repeated item shapes (see `schemas\u002Fcommands.json`)\n- Validate before wiring: `jq empty schemas\u002F\u003Cagent-name>.json`\n\n### 4. Wire into gather.sh\n\nOpen `lib\u002Fgather.sh`. Find the `run_agents_parallel` call in `gather_evidence()` (lines 24-65). Add your agent as a new argument string:\n\n```bash\nrun_agents_parallel \\\n    \"run_agent identity ...\" \\\n    ... \\\n    \"run_agent \u003Cagent-name> \\\n        '@${SCRIPT_DIR}\u002Fprompts\u002F\u003Cagent-name>.md' \\\n        '${SCRIPT_DIR}\u002Fschemas\u002F\u003Cagent-name>.json' \\\n        'Read,Bash(find:*),Bash(cat:*)' \\\n        haiku gather\"\n```\n\n**Always use the `@` prefix** for the prompt path — this is required for prompts with shell-special characters (apostrophes, parens, backticks) and prevents ARG_MAX issues on large prompts. Always use `$SCRIPT_DIR` for absolute paths.\n\nAlso add `\u003Cagent-name>` to the `core_agents` array and the `get_failed_agents` check (lines 67-77). If critical, add to `critical_agents` array too.\n\n### 5. Create the test fixture\n\nCreate `tests\u002Ffixtures\u002Ffindings\u002F\u003Cagent-name>.json` with realistic data matching your schema:\n\n```json\n{\n  \"findings\": [\n    {\n      \"name\": \"example-finding\",\n      \"category\": \"A\",\n      \"evidence_files\": [\"lib\u002Fexample.sh\", \"schemas\u002Fexample.json\"]\n    }\n  ]\n}\n```\n\nThe filename **must exactly match** the agent name passed to `run_agent()`. This is the three-way identity: fixture filename = agent name = findings file name. A mismatch silently breaks mock dispatch routing. This file contains only the `structured_output` value — the mock dispatch wraps it via `make_claude_envelope`.\n\n### 6. Add the dispatch entry to integration tests\n\nIn `tests\u002Fintegration\u002Fgather_phase.bats`, find the dispatch setup block and add:\n\n```bash\nmake_claude_envelope \\\n    \"$(cat \"$BATS_TEST_DIRNAME\u002F..\u002Ffixtures\u002Ffindings\u002F\u003Cagent-name>.json\")\" \"0.15\" \\\n    > \"$MOCK_CLAUDE_DISPATCH_DIR\u002F\u003Cagent-name>.json\"\n```\n\nAlso update the systemic-failure test that pre-creates exactly 4 of 8 findings — if you add a 9th core agent, the threshold math changes (3+ of 9 now requires updating).\n\n### 7. Add a unit test\n\nCreate `tests\u002Funit\u002F\u003Cagent-name>_run.bats`:\n\n```bash\nsetup() {\n    load '..\u002Fhelpers\u002Ftest_helper'\n    _common_setup\n    load '..\u002Fhelpers\u002Fmock_claude'\n    setup_mock_claude\n}\nteardown() { _common_teardown; }\n\n@test \"run_agent \u003Cagent-name>: writes findings on success\" {\n    make_claude_envelope \\\n        \"$(cat \"$BATS_TEST_DIRNAME\u002F..\u002Ffixtures\u002Ffindings\u002F\u003Cagent-name>.json\")\" \"0.15\" \\\n        > \"$MOCK_CLAUDE_RESPONSE\"\n    run run_agent \"\u003Cagent-name>\" \\\n        \"@${SCRIPT_DIR}\u002Fprompts\u002F\u003Cagent-name>.md\" \\\n        \"${SCRIPT_DIR}\u002Fschemas\u002F\u003Cagent-name>.json\" \\\n        \"Read,Bash(find:*)\" \"haiku\" \"gather\"\n    assert_success\n    assert_file_exists \"$WORK_DIR\u002Ffindings\u002F\u003Cagent-name>.json\"\n}\n\n@test \"run_agent \u003Cagent-name>: skips when findings exist and FORCE=false\" {\n    echo '{\"findings\":[]}' > \"$WORK_DIR\u002Ffindings\u002F\u003Cagent-name>.json\"\n    FORCE=false run run_agent \"\u003Cagent-name>\" \"...\" \"...\" \"...\" \"haiku\"\n    assert_success\n    run grep 'CALL:' \"$MOCK_CLAUDE_LOG\"\n    assert_failure  # mock was not called\n}\n```\n\n## Verify\n\n```bash\n# Validate schema is well-formed\njq empty schemas\u002F\u003Cagent-name>.json\n\n# Syntax-check gather.sh after wiring\nbash -n lib\u002Fgather.sh\n\n# Run all tests\nmake test-unit\nmake test-integration\nmake test-all\n```\n\n## Common Mistakes\n\n1. **Missing `additionalProperties: false` on nested objects** — this is the single most common schema error. Every `\"type\": \"object\"` at every nesting level needs it, or Claude can hallucinate extra fields.\n\n2. **Inline prompt with shell-special characters** — prompts containing apostrophes, parens, backticks, or `$` break parallel temp-script expansion. Always use the `@\u002Fabsolute\u002Fpath` form. See PR #2 and `tests\u002Fedge\u002Fspecial_characters.bats`.\n\n3. **Wrong fixture filename** — the fixture must be named exactly `\u003Cagent-name>.json` where `\u003Cagent-name>` matches the first arg to `run_agent()`. A mismatch silently falls through to `MOCK_CLAUDE_RESPONSE`.\n\n4. **Not updating `core_agents` array** — if you add the agent to `run_agents_parallel` but not to `core_agents` (and optionally `critical_agents`) in `lib\u002Fgather.sh`, the failure-gating logic ignores it completely.\n",{},"main","197708b955e457c87d304fdf3389621f7e2f202a",".ultrainit\u002Fvalidation\u002Fskills\u002Fadd-gather-agent",1,"https:\u002F\u002Fgithub.com\u002FjoelbarmettlerUZH\u002Fultrainit.sh","https:\u002F\u002Fgithub.com\u002FjoelbarmettlerUZH","https:\u002F\u002Fjoelbarmettler.xyz","M. Sc. Artificial Intelligence \r\n& Senior A.I. Architect","2026-11-02 02:33:53",{"source":7,"skillName":5,"commands":43,"prompt":53,"zipAvailable":54},[44,47,50],{"tool":45,"command":46},"npx","npx skills add joelbarmettlerUZH\u002Fultrainit.sh --skill add-gather-agent",{"tool":48,"command":49},"bunx","bunx skills add joelbarmettlerUZH\u002Fultrainit.sh --skill add-gather-agent",{"tool":51,"command":52},"pnpm","pnpm dlx skills add joelbarmettlerUZH\u002Fultrainit.sh --skill add-gather-agent","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FjoelbarmettlerUZH\u002Fultrainit.sh\u002Fblob\u002Fmain\u002F.ultrainit\u002Fvalidation\u002Fskills\u002Fadd-gather-agent\u002FSKILL.md",true,[],[57,87,97,112,122,132],{"skillNo":58,"name":59,"nameZh":6,"description":60,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":61,"categories":62,"keywords":67,"publishedAt":28},"01M6NKEDBGZBAT592SECRS8E4N","valid-skill","Use when building or modifying API endpoints in src\u002Fapi\u002F. Covers route creation, middleware wiring, and request validation. Do NOT use for frontend components or static pages.","https:\u002F\u002Fgithub.com\u002FjoelbarmettlerUZH\u002Fultrainit.sh\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskills\u002Fvalid-skill\u002FSKILL.md",[63,66],{"categoryNo":64,"categoryName":65,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86],"valid","valid skill","endpoints","request","do","route","creation","pages","middleware","frontend components","for","wiring","static","use","src","api","validation","components","frontend",{"skillNo":88,"name":89,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":93,"publishedAt":28},"01M6NKEAC2NAMBFHT0S0PRYQKN","invalid-skill-no-desc","https:\u002F\u002Fgithub.com\u002FjoelbarmettlerUZH\u002Fultrainit.sh\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskills\u002Finvalid-skill-no-desc\u002FSKILL.md",[92],{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[94,95,96],"invalid skill no desc","invalid","invalid skill",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":104,"publishedAt":28},"01M6NKE7MF1YCS3WCQA5AY3ZXP","invalid-skill-angle-brackets","Use when working with \u003Ccomponent> templates. Do NOT use for \u003Cother> things.","https:\u002F\u002Fgithub.com\u002FjoelbarmettlerUZH\u002Fultrainit.sh\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskills\u002Finvalid-skill-angle-brackets\u002FSKILL.md",[103],{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},[105,106,107,95,96,108,109,78,110,72,81,111],"invalid skill angle brackets","angle brackets","brackets","component","things","with","templates",{"skillNo":113,"name":114,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":117,"publishedAt":28},"01M6NKE4EJ5EWNN7S5FJ1SFZR5","validate-generated-artifact","https:\u002F\u002Fgithub.com\u002FjoelbarmettlerUZH\u002Fultrainit.sh\u002Fblob\u002Fmain\u002F.ultrainit\u002Fvalidation\u002Fskills\u002Fvalidate-generated-artifact\u002FSKILL.md",[],[118,119,120,121],"validate generated artifact","artifact","generated","validate",{"skillNo":123,"name":124,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":127,"publishedAt":28},"01M6NKE157C519F1W8WHGXPRTK","tune-synthesis-context","https:\u002F\u002Fgithub.com\u002FjoelbarmettlerUZH\u002Fultrainit.sh\u002Fblob\u002Fmain\u002F.ultrainit\u002Fvalidation\u002Fskills\u002Ftune-synthesis-context\u002FSKILL.md",[],[128,129,130,131],"tune synthesis context","tune","Synthesis","context",{"skillNo":133,"name":134,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":137,"publishedAt":28},"01M6NKDT0VD32KKE2HTHT30FWH","run-tests","https:\u002F\u002Fgithub.com\u002FjoelbarmettlerUZH\u002Fultrainit.sh\u002Fblob\u002Fmain\u002F.ultrainit\u002Fvalidation\u002Fskills\u002Frun-tests\u002FSKILL.md",[],[138,139,140],"run","run tests","tests"]