[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6993J3AFP37BZ8NHZBQ0VR8":3,"skill-same:01M6993J3AFP37BZ8NHZBQ0VR8":47},{"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":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":30,"ownerDescription":31,"updatedAt":32,"install":33,"resources":46},"01M6993J3AFP37BZ8NHZBQ0VR8","citadel",null,"The Citadel guard suite. Use when adding a guard, a linter, or a source surface, or when a citadel test fails and you need to know what it is protecting.","google\u002Fcapsem","google","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1342004?v=4","01M698VYEFDM0VJBZDYYJ2T83S","Google","01M69939YZJTP726NQK4NZNB48",186,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fcapsem\u002Fblob\u002Fmain\u002Fskills\u002Fcitadel\u002FSKILL.md",[],[5],"2026-11-10 10:12:30",false,"---\nname: citadel\ndescription: The Citadel guard suite. Use when adding a guard, a linter, or a source surface, or when a citadel test fails and you need to know what it is protecting.\n---\n\n# The Citadel\n\n`tests\u002Fcitadel\u002F` is where Capsem records architectural mistakes that must not\nbe repeated. Guards are source-level, run in the fast phase, and each one\ncarries its reasoning in the failure message.\n\nThe organising idea is **shape**. Every guard here says: constrain the form so\na property stays provable. A recipe is a dispatch. A module has a ceiling. A\nshell body is a sequence of simple commands. An enforcement line is the whole\ncommand. When shape lapses, something grows past the point where a tool, a\nreviewer or a test can take it in, and then nothing checks it at all.\n\n## Why it runs first\n\nEvery guard reads source and asserts on it. None needs an artifact, a VM or a\ndaemon. They were reachable only through the broad suite's `root`, which\ncarries `require_artifacts` and runs after the whole asset build -- so a\nDB-boundary violation surfaced once the VMs were up, roughly forty minutes\nafter the source that caused it was read.\n\n`fast.citadel` now runs beside Ruff. `tests\u002Fcitadel` is in `broad_ignores`, so\nthe suite has one collector and its failures have one owner.\n`test_guard_scheduling.py` fails if it is moved back.\n\n## The guards\n\n| guard | what it holds |\n|---|---|\n| `test_db_boundary.py` | only `capsem-logger` executes ledger queries |\n| `test_lint_coverage.py` | every declared surface has a checker that exists and runs early |\n| `test_shape_boundaries.py` | every `[boundary.*]` ceiling and its exact debt inventory |\n| `test_workflow_enforcement.py` | a gating step cannot pass while failing |\n| `test_container_workspace.py` | the guest builder's `\u002Fsrc\u002F*` glob skips dotfiles |\n| `test_cross_platform_tool_lock.py` | platform-specific Python tools stay on one reviewed artifact cohort |\n| `test_release_test_environment.py` | nested tests cannot inherit their parent release's source identity |\n| `test_skill_context_budget.py` | the skill description budget every session pays |\n| `test_hot_build_contract.py` | hot codecs stay optimized in the dev profile |\n| `test_package_architecture_boundary.py` | package and machine architecture never cross |\n| `test_guard_scheduling.py` | the Citadel itself runs before the expensive work |\n| `test_run_digest_echo.py` | the cross-run digest reaches whoever works next |\n| `test_tree_copy_boundary.py` | only `filesystem` copies a tree, and never through a link |\n| `test_rust_check_coverage.py` | clippy, nextest and doctests between them cover all Rust |\n| `test_agent_contract_is_one_file.py` | every agent is held to the same contract |\n| `test_step_attributes.py` | a step says what it is; nothing infers it from a label |\n| `test_work_graph_invariants.py` | the plan's graph properties, asked of the graph |\n| `test_workflow_script_checkout.py` | a workflow checks out its source before running a checked-in script |\n| `test_release_requires_local_proof.py` | no agent-facing text says a release can skip `just test` |\n| `test_no_vm_profiles.py` | the removed VM profile concept does not grow back under its old vocabulary |\n| `test_runtime_limit_authority.py` | cross-process network ceilings stay config-owned and shared |\n\n## Adding a guard\n\nThree rules, each learned by getting it wrong.\n\n**State the reason in a named `*_RATIONALE`, appended to the assertion.** A\nviolation must teach, because the reader is usually someone who does not\nalready know. `test_db_boundary.py` is the model. Where the reason is already\nstated canonically -- `config\u002Fgate.toml`, AGENTS.md, a skill -- cite it rather\nthan restate it: a second wording is a second thing to keep in step.\n\n**Write the adversarial case, not just the conformance case.** A guard proved\nonly by inputs it was built for is not proved. `test_workflow_enforcement.py`\nenumerated ways to neutralise an enforcement check and an adversarial pass got\nfive past it -- `; :`, a trailing `&`, `| cat`, `set +ex`, `set +o errexit`.\nThe rule is now a whitelist for that reason: the comparison must be the whole\ncommand, so any token that could consume its exit status fails, predicted or\nnot. Enumeration cannot be completed; inversion is complete by construction.\n\n**Break it once and watch it go red.** A guard built from the current state\nasserts nothing until it has been seen failing.\n\n## Adding a surface\n\n`[[lint_surfaces]]` is the map: one entry per kind of first-party file, naming\nevery step that must check it. It is the answer to \"what checks what\", so read\nit before grepping for a checker.\n\nTwo fields, because two different promises. `enforced_by` must exist *and*\nanswer in the fast phase -- that is for checks needing no build, where running\nlate means reporting after the expensive work they should have preceded.\n`checked_by` must exist in any phase, for checks that legitimately cannot be\nearly: the Rust test runners need a compiled workspace, so they sit beside the\ncoverage run rather than beside Ruff. Late is acceptable; missing is not, and\nbefore `checked_by` existed the inventory recorded which surfaces were *linted*\nwhile saying nothing about which were *tested*.\n\n`test_lint_coverage.py` proves the surface has files, that every named step\nexists in the plan, and that the `enforced_by` ones run early.\n\nShell went unchecked across 6,821 lines while four `# shellcheck disable=`\ndirectives sat in the tree, written for a linter no lane ran. Markdown was\n79,000 lines with nothing pointed at it. Neither was decided; both surfaces\narrived without a gate and nothing was watching for the gap. Adding a language\nnow means adding its gate in the same change, or the Citadel fails.\n\n## The lint harness\n\n`build_system\u002Fscripts\u002Faudit\u002Flint_harness.py` is the one spelling of \"run a linter\": a `Tool`\ndeclares argv and how to read its output, `Sources` yields `(name, text)`\nhowever it must, and every finding renders identically. `build_system\u002Fscripts\u002Faudit\u002Fcheck-surfaces.py`\nis the entry point, one surface per invocation.\n\n`Sources` exists because the shapes differ. `*.sh` is a file. A workflow `run:`\nbody lives inside YAML. A Dockerfile `RUN` body lives inside an instruction,\nand for a `.j2` template it does not exist until rendered -- so it is rendered\nthrough `render_dockerfile`, the same entry point the image build uses. A\nmasked template is a fiction, and linting a fiction reports on a file nobody\nbuilds.\n\n`capsem.gate.shellsurfaces` owns extraction, shared by the linter and the shape\nguard so they cannot disagree about what a body is. Getting it right took five\ncorrections, and each is worth knowing before adding a sixth surface:\n\n- flattening `\\` continuations pulls an inline `#` into the middle of a logical\n  line and comments out the rest\n- comments must be stripped *before* continuations are joined, the order Docker\n  uses; reversing it leaves a dangling `\\`\n- `${{ }}` masks to a variable reference, not a literal -- a literal turns real\n  comparisons constant and produces phantom `SC2050` findings\n- Jinja is rendered, never masked\n- workflow bodies are keyed by index as well as name, because step names are\n  not unique within a job and a collision silently dropped five of 184 steps\n\n**Every surface fails closed.** A surface that yields no sources raises\n`EmptySurface`. \"Found nothing so it was skipped\" is how a gate stops being\none.\n\n## The run digest\n\nA guard catches a mistake at the moment it is made. The digest catches the\nclass a guard cannot: the ones only visible across runs -- a step that fails\none time in four, a phase that doubled three days ago, a critical path made of\nqueueing. Each of those looks like bad luck in the single run anybody looks at.\n\n`cache\u002Ftarget\u002Fgate-runs\u002FDIGEST.md` is regenerated by `fast.digest` and again at\n`RunLog.close`, computed from `cache\u002Ftarget\u002Fgate-runs\u002Fledger.jsonl` -- one distilled\nrow per finished run, kept because the run directories are not (`keep_runs` is\ntwenty). A session-start hook prints it, and all three agent contracts name it,\nbecause only one agent gets the hook.\n\nThree questions, three scopes, and conflating them is the mistake worth\nknowing about. A **duration** may only be compared against an identical plan\nshape, argv and host class -- `runledger.identity`, the same rule the release\nratchet uses. A **critical path** needs the same command. A **failure count**\nneeds neither, and scoping it like the other two hid a step that had failed\nthree times that week behind one unrelated green fast-test run.\n\nAn empty baseline says so. \"Nothing anomalous\" when nothing was compared is\nthe one thing this document must never print.\n\n## Debt inventories\n\nEvery ceiling and every known-missing target is an exact inventory, not an\nexemption list. An entry may not grow. A file that shrinks updates or removes\nits entry in the same change -- an inventory that drifts from the tree has\nstopped ratcheting. `[boundary.scripts]`, `[boundary.rust]`,\n`[boundary.shell_bodies]` and `[lint.markdown]` all use this shape.\n\nA ceiling is an outlier detector, not a rewrite mandate, so it comes from the\ntree's own distribution. Rust's median tracked file is 232 lines; borrowing\nPython's 300 would flag 43% of the tree and be deleted the first time it\nblocked someone.\n\n## See also\n\n`\u002Fdev-gate` for the gate the guards run inside, `\u002Fdev-testing` for where a new\ntest belongs, `\u002Fironbank` for black-box acceptance proof.\n","# The Citadel\n\n`tests\u002Fcitadel\u002F` is where Capsem records architectural mistakes that must not\nbe repeated. Guards are source-level, run in the fast phase, and each one\ncarries its reasoning in the failure message.\n\nThe organising idea is **shape**. Every guard here says: constrain the form so\na property stays provable. A recipe is a dispatch. A module has a ceiling. A\nshell body is a sequence of simple commands. An enforcement line is the whole\ncommand. When shape lapses, something grows past the point where a tool, a\nreviewer or a test can take it in, and then nothing checks it at all.\n\n## Why it runs first\n\nEvery guard reads source and asserts on it. None needs an artifact, a VM or a\ndaemon. They were reachable only through the broad suite's `root`, which\ncarries `require_artifacts` and runs after the whole asset build -- so a\nDB-boundary violation surfaced once the VMs were up, roughly forty minutes\nafter the source that caused it was read.\n\n`fast.citadel` now runs beside Ruff. `tests\u002Fcitadel` is in `broad_ignores`, so\nthe suite has one collector and its failures have one owner.\n`test_guard_scheduling.py` fails if it is moved back.\n\n## The guards\n\n| guard | what it holds |\n|---|---|\n| `test_db_boundary.py` | only `capsem-logger` executes ledger queries |\n| `test_lint_coverage.py` | every declared surface has a checker that exists and runs early |\n| `test_shape_boundaries.py` | every `[boundary.*]` ceiling and its exact debt inventory |\n| `test_workflow_enforcement.py` | a gating step cannot pass while failing |\n| `test_container_workspace.py` | the guest builder's `\u002Fsrc\u002F*` glob skips dotfiles |\n| `test_cross_platform_tool_lock.py` | platform-specific Python tools stay on one reviewed artifact cohort |\n| `test_release_test_environment.py` | nested tests cannot inherit their parent release's source identity |\n| `test_skill_context_budget.py` | the skill description budget every session pays |\n| `test_hot_build_contract.py` | hot codecs stay optimized in the dev profile |\n| `test_package_architecture_boundary.py` | package and machine architecture never cross |\n| `test_guard_scheduling.py` | the Citadel itself runs before the expensive work |\n| `test_run_digest_echo.py` | the cross-run digest reaches whoever works next |\n| `test_tree_copy_boundary.py` | only `filesystem` copies a tree, and never through a link |\n| `test_rust_check_coverage.py` | clippy, nextest and doctests between them cover all Rust |\n| `test_agent_contract_is_one_file.py` | every agent is held to the same contract |\n| `test_step_attributes.py` | a step says what it is; nothing infers it from a label |\n| `test_work_graph_invariants.py` | the plan's graph properties, asked of the graph |\n| `test_workflow_script_checkout.py` | a workflow checks out its source before running a checked-in script |\n| `test_release_requires_local_proof.py` | no agent-facing text says a release can skip `just test` |\n| `test_no_vm_profiles.py` | the removed VM profile concept does not grow back under its old vocabulary |\n| `test_runtime_limit_authority.py` | cross-process network ceilings stay config-owned and shared |\n\n## Adding a guard\n\nThree rules, each learned by getting it wrong.\n\n**State the reason in a named `*_RATIONALE`, appended to the assertion.** A\nviolation must teach, because the reader is usually someone who does not\nalready know. `test_db_boundary.py` is the model. Where the reason is already\nstated canonically -- `config\u002Fgate.toml`, AGENTS.md, a skill -- cite it rather\nthan restate it: a second wording is a second thing to keep in step.\n\n**Write the adversarial case, not just the conformance case.** A guard proved\nonly by inputs it was built for is not proved. `test_workflow_enforcement.py`\nenumerated ways to neutralise an enforcement check and an adversarial pass got\nfive past it -- `; :`, a trailing `&`, `| cat`, `set +ex`, `set +o errexit`.\nThe rule is now a whitelist for that reason: the comparison must be the whole\ncommand, so any token that could consume its exit status fails, predicted or\nnot. Enumeration cannot be completed; inversion is complete by construction.\n\n**Break it once and watch it go red.** A guard built from the current state\nasserts nothing until it has been seen failing.\n\n## Adding a surface\n\n`[[lint_surfaces]]` is the map: one entry per kind of first-party file, naming\nevery step that must check it. It is the answer to \"what checks what\", so read\nit before grepping for a checker.\n\nTwo fields, because two different promises. `enforced_by` must exist *and*\nanswer in the fast phase -- that is for checks needing no build, where running\nlate means reporting after the expensive work they should have preceded.\n`checked_by` must exist in any phase, for checks that legitimately cannot be\nearly: the Rust test runners need a compiled workspace, so they sit beside the\ncoverage run rather than beside Ruff. Late is acceptable; missing is not, and\nbefore `checked_by` existed the inventory recorded which surfaces were *linted*\nwhile saying nothing about which were *tested*.\n\n`test_lint_coverage.py` proves the surface has files, that every named step\nexists in the plan, and that the `enforced_by` ones run early.\n\nShell went unchecked across 6,821 lines while four `# shellcheck disable=`\ndirectives sat in the tree, written for a linter no lane ran. Markdown was\n79,000 lines with nothing pointed at it. Neither was decided; both surfaces\narrived without a gate and nothing was watching for the gap. Adding a language\nnow means adding its gate in the same change, or the Citadel fails.\n\n## The lint harness\n\n`build_system\u002Fscripts\u002Faudit\u002Flint_harness.py` is the one spelling of \"run a linter\": a `Tool`\ndeclares argv and how to read its output, `Sources` yields `(name, text)`\nhowever it must, and every finding renders identically. `build_system\u002Fscripts\u002Faudit\u002Fcheck-surfaces.py`\nis the entry point, one surface per invocation.\n\n`Sources` exists because the shapes differ. `*.sh` is a file. A workflow `run:`\nbody lives inside YAML. A Dockerfile `RUN` body lives inside an instruction,\nand for a `.j2` template it does not exist until rendered -- so it is rendered\nthrough `render_dockerfile`, the same entry point the image build uses. A\nmasked template is a fiction, and linting a fiction reports on a file nobody\nbuilds.\n\n`capsem.gate.shellsurfaces` owns extraction, shared by the linter and the shape\nguard so they cannot disagree about what a body is. Getting it right took five\ncorrections, and each is worth knowing before adding a sixth surface:\n\n- flattening `\\` continuations pulls an inline `#` into the middle of a logical\n  line and comments out the rest\n- comments must be stripped *before* continuations are joined, the order Docker\n  uses; reversing it leaves a dangling `\\`\n- `${{ }}` masks to a variable reference, not a literal -- a literal turns real\n  comparisons constant and produces phantom `SC2050` findings\n- Jinja is rendered, never masked\n- workflow bodies are keyed by index as well as name, because step names are\n  not unique within a job and a collision silently dropped five of 184 steps\n\n**Every surface fails closed.** A surface that yields no sources raises\n`EmptySurface`. \"Found nothing so it was skipped\" is how a gate stops being\none.\n\n## The run digest\n\nA guard catches a mistake at the moment it is made. The digest catches the\nclass a guard cannot: the ones only visible across runs -- a step that fails\none time in four, a phase that doubled three days ago, a critical path made of\nqueueing. Each of those looks like bad luck in the single run anybody looks at.\n\n`cache\u002Ftarget\u002Fgate-runs\u002FDIGEST.md` is regenerated by `fast.digest` and again at\n`RunLog.close`, computed from `cache\u002Ftarget\u002Fgate-runs\u002Fledger.jsonl` -- one distilled\nrow per finished run, kept because the run directories are not (`keep_runs` is\ntwenty). A session-start hook prints it, and all three agent contracts name it,\nbecause only one agent gets the hook.\n\nThree questions, three scopes, and conflating them is the mistake worth\nknowing about. A **duration** may only be compared against an identical plan\nshape, argv and host class -- `runledger.identity`, the same rule the release\nratchet uses. A **critical path** needs the same command. A **failure count**\nneeds neither, and scoping it like the other two hid a step that had failed\nthree times that week behind one unrelated green fast-test run.\n\nAn empty baseline says so. \"Nothing anomalous\" when nothing was compared is\nthe one thing this document must never print.\n\n## Debt inventories\n\nEvery ceiling and every known-missing target is an exact inventory, not an\nexemption list. An entry may not grow. A file that shrinks updates or removes\nits entry in the same change -- an inventory that drifts from the tree has\nstopped ratcheting. `[boundary.scripts]`, `[boundary.rust]`,\n`[boundary.shell_bodies]` and `[lint.markdown]` all use this shape.\n\nA ceiling is an outlier detector, not a rewrite mandate, so it comes from the\ntree's own distribution. Rust's median tracked file is 232 lines; borrowing\nPython's 300 would flag 43% of the tree and be deleted the first time it\nblocked someone.\n\n## See also\n\n`\u002Fdev-gate` for the gate the guards run inside, `\u002Fdev-testing` for where a new\ntest belongs, `\u002Fironbank` for black-box acceptance proof.\n",{"name":5,"description":7},"main","d357170bb677125c80cebed720e62bf47bf083ad","skills\u002Fcitadel",26,"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fcapsem","https:\u002F\u002Fgithub.com\u002Fgoogle","https:\u002F\u002Fopensource.google\u002F","Google ❤️ Open Source","2026-11-04 04:36:10",{"source":8,"skillName":5,"commands":34,"prompt":44,"zipAvailable":45},[35,38,41],{"tool":36,"command":37},"npx","npx skills add google\u002Fcapsem --skill citadel",{"tool":39,"command":40},"bunx","bunx skills add google\u002Fcapsem --skill citadel",{"tool":42,"command":43},"pnpm","pnpm dlx skills add google\u002Fcapsem --skill citadel","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fcapsem\u002Fblob\u002Fmain\u002Fskills\u002Fcitadel\u002FSKILL.md",true,[],[48,62,78,87,94,101],{"skillNo":49,"name":50,"nameZh":6,"description":51,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":52,"categories":53,"keywords":59,"publishedAt":19},"01M699558T2T4DJMBN08ZCQ79K","use-capsem","Run tasks in Capsem VMs through MCP. Use when an agent needs isolated execution, file analysis, or reports returned to the host.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fcapsem\u002Fblob\u002Fmain\u002Fskills\u002Fuse-capsem\u002FSKILL.md",[54],{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[60,61],"use capsem","MCP",{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":76,"publishedAt":19},"01M69953Z1CSVQ4N07QX529CZY","site-marketing","The marketing website, capsem.org. Use when editing copy, adding sections, or changing the site theme.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fcapsem\u002Fblob\u002Fmain\u002Fskills\u002Fsite-marketing\u002FSKILL.md",[68,71],{"categoryNo":69,"categoryName":70,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000019","营销推广",{"categoryNo":72,"categoryName":73,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000035","市场营销","PROFESSION","适用职业",[77],"site marketing",{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":19},"01M69952B33KBBV37N8QTC4191","site-infra","The documentation site, docs.capsem.org. Use for user-directed Diátaxis documentation and Astro Starlight changes.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fcapsem\u002Fblob\u002Fmain\u002Fskills\u002Fsite-infra\u002FSKILL.md",[],[85,86],"site infra","docs",{"skillNo":88,"name":89,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":19},"01M69950YKCZKCDB98JDQNBBRJ","site-architecture","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fcapsem\u002Fblob\u002Fmain\u002Fskills\u002Fsite-architecture\u002FSKILL.md",[],[93],"site architecture",{"skillNo":95,"name":96,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":19},"01M6994Z61JWZ0G2YRJTWFH933","release-process","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fcapsem\u002Fblob\u002Fmain\u002Fskills\u002Frelease-process\u002FSKILL.md",[],[100],"release process",{"skillNo":102,"name":103,"nameZh":6,"description":104,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":105,"categories":106,"keywords":114,"publishedAt":19},"01M6994XKHADM6FBTYTAPG7FYC","meta-skill-creation","Create, improve, and evaluate skills. Use when writing a new skill, editing an existing one, or tuning a description for better triggering.","https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fcapsem\u002Fblob\u002Fmain\u002Fskills\u002Fmeta-skill-creation\u002FSKILL.md",[107,110,111],{"categoryNo":108,"categoryName":109,"taxonomyType":57,"taxonomyTypeDesc":58},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":55,"categoryName":56,"taxonomyType":57,"taxonomyTypeDesc":58},{"categoryNo":112,"categoryName":113,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000036","内容创作者",[115,116],"meta skill creation","writing"]