[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71RYTYPDVSEPYQHE774DV3B":3,"skill-same:01M71RYTYPDVSEPYQHE774DV3B":78},{"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":52,"commitSha":53,"skillDirectory":54,"forksCount":14,"repositoryHtmlUrl":55,"repositoryHomepageUrl":6,"ownerHtmlUrl":56,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":57,"install":58,"resources":71},"01M71RYTYPDVSEPYQHE774DV3B","k8s-modification",null,"Safely modify a live Kubernetes resource — detect whether it is Helm-, GitOps- (Flux\u002FArgo), or kubectl-managed; preview every change with kubectl\u002Fhelm diff and dry-run; prefer Helm-native changes for Helm releases; and fall back to server-side apply \u002F strategic-merge patch with care so future helm upgrades are not broken. Use whenever a change to a live cluster is required (apply, patch, scale, set image, edit values, helm upgrade).","blouargant\u002Fomnis","blouargant","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F5691896?v=4","01M71RWETBTYXSMT6FFC4Q7HPW","Bertrand Louargant","01M71RWEV3G47S696JYH8EA7W2",0,"MIT","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Fk8s-modification\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"k8s modification","k8s","releases","managed","native","dry","argo","preview","upgrade","back","image","patch","edit","broken","SET","playbook","server","run","merge","change","2026-11-10 13:02:02",false,"---\nname: k8s-modification\ndescription: Safely modify a live Kubernetes resource — detect whether it is Helm-, GitOps- (Flux\u002FArgo), or kubectl-managed; preview every change with kubectl\u002Fhelm diff and dry-run; prefer Helm-native changes for Helm releases; and fall back to server-side apply \u002F strategic-merge patch with care so future helm upgrades are not broken. Use whenever a change to a live cluster is required (apply, patch, scale, set image, edit values, helm upgrade).\nmetadata:\n  author: blouargant@chapsvision.com\n  tags: \"kubernetes, helm, modification, apply, server-side-apply, gitops, playbook\"\n---\n\n# Kubernetes Safe Modification\n\nThe *playbook* for CHANGING a live Kubernetes resource with the smallest blast\nradius and without breaking the tool that owns it (especially Helm). Read this\nbefore any `apply`, `patch`, `scale`, `set`, `edit`, or `helm upgrade`.\n\nEvery mutating command is **permission-gated** — it prompts the user for\nconfirmation before it runs. Do not try to work around the prompt. If a call is\ndenied, report it and stop; never retry with a different flag or identity.\n\n## Phase 1 — Establish the target and guardrails\n\n1. **Confirm the cluster context.** `kubectl config current-context` and quote\n   it back before doing anything else. If the leader\u002Fuser named a target\n   context, thread it as `--context=\u003Cctx>` on every command instead — never\n   `kubectl config use-context` (it rewrites the shared kubeconfig).\n2. **Pin the target:** namespace + kind\u002Fname + the *exact* intended change.\n3. **Production guardrail.** Never modify production namespaces or contexts\n   (name contains `prod`, `prd`, `production`) without an explicit user override.\n\n## Phase 2 — Determine who OWNS the resource\n\nRead the resource's labels\u002Fannotations before choosing a method:\n\n```bash\nkubectl get \u003Ckind> \u003Cname> -n \u003Cns> \\\n  -o jsonpath='labels={.metadata.labels}{\"\\n\"}annotations={.metadata.annotations}{\"\\n\"}'\n```\n\n- **Helm-managed** — label `app.kubernetes.io\u002Fmanaged-by=Helm` **and**\n  annotations `meta.helm.sh\u002Frelease-name`, `meta.helm.sh\u002Frelease-namespace`.\n  Confirm with `helm status \u003Crelease> -n \u003Crel-ns>` and\n  `helm get values \u003Crelease> -n \u003Crel-ns>`.\n- **GitOps-managed (Flux\u002FArgo)** — labels like\n  `kustomize.toolkit.fluxcd.io\u002Fname`, `helm.toolkit.fluxcd.io\u002Fname` (Flux) or\n  `argocd.argoproj.io\u002Finstance` \u002F annotation `argocd.argoproj.io\u002Ftracking-id`\n  (Argo CD). The desired state lives in **Git**.\n- **kubectl \u002F manual** — annotation\n  `kubectl.kubernetes.io\u002Flast-applied-configuration` (client-side apply) or no\n  manager markers at all.\n\n## Phase 3 — Choose the change strategy by owner\n\n- **Helm →** change *through Helm*: `helm upgrade \u003Crelease> \u003Cchart> -n \u003Crel-ns>`\n  with `-f values.yaml` or `--set`, using `--reuse-values` so you do not drop\n  other settings. **Never** `kubectl edit`\u002F`patch` a Helm-owned resource for a\n  persistent change — the next `helm upgrade` will revert it (drift) or hit a\n  field-manager conflict. If the chart\u002Fvalues source is not available to you,\n  say so: a persistent change needs the chart; a direct kubectl change will be\n  reconciled away on the next upgrade, so do it only as an explicitly\n  acknowledged stop-gap.\n- **GitOps →** the source of truth is Git; a direct cluster change will be\n  reconciled away (often within minutes). Recommend changing the Git source (or\n  deliberately suspending reconciliation). Apply directly only as an\n  acknowledged temporary measure, and state that it is temporary.\n- **kubectl \u002F manual →** prefer `kubectl apply --server-side -f \u003Cmanifest>`\n  (declarative, tracks field ownership) or a targeted `kubectl patch`\n  (strategic-merge by default; `--type=merge`\u002F`json` when needed). Save the\n  manifest to a file first (Write tool) so the change is reviewable and\n  revertible. Avoid `kubectl edit` (no diff, no audit trail).\n\n## Phase 4 — Preview before you change (always)\n\nPrefer previews that do **not** prompt:\n\n```bash\nkubectl diff -f change.yaml                 # exactly what apply would change\nhelm diff upgrade \u003Crelease> \u003Cchart> -n \u003Cns> -f values.yaml   # helm-diff plugin\nhelm template \u003Cchart> -f values.yaml        # render locally\n```\n\nOnly when a diff is insufficient, fall back to a dry-run apply\n(`kubectl apply --server-side --dry-run=server -f change.yaml` or\n`helm upgrade --dry-run=server`). If the `helm-diff` plugin is missing, use\n`helm upgrade --dry-run=server` and inspect the rendered output.\n\n## Phase 5 — Apply the smallest change\n\n- Change **only** the intended fields. Do not re-apply a whole fetched manifest\n  (that steals field ownership and can wipe other managers' fields).\n- Keep existing labels\u002Fannotations, especially `app.kubernetes.io\u002Fmanaged-by`\n  and `meta.helm.sh\u002F*`.\n- **Server-side apply conflicts:** if `apply --server-side` reports a conflict\n  with another manager (e.g. `helm`, `argocd`), STOP. Do **not**\n  `--force-conflicts` on a field owned by Helm\u002FArgo\u002FFlux — stealing ownership\n  breaks that tool. Resolve through the owner (helm upgrade \u002F git) instead.\n  `--force-conflicts` is only for a manually-owned resource, and only with\n  explicit user approval.\n- **Immutable fields** (Service `.spec.clusterIP`, Deployment `.spec.selector`,\n  Job template, …) cannot be patched — they require recreate. For a Helm\n  release that means `helm upgrade`; never manually delete+recreate a\n  Helm-owned resource.\n\n## Phase 6 — Verify and report\n\n- `kubectl rollout status` \u002F `kubectl get` the target; for Helm,\n  `helm status` + `helm history` (confirm a NEW, deployed revision — not a\n  failed one).\n- Report: the ownership determination, the strategy chosen and why, the exact\n  commands run, the diff, and the post-change health. Cite command + output.\n\n## Hard rules\n\n1. **Preview (diff\u002Fdry-run) before every real change** — no exceptions.\n2. **Never break the owner.** Do not diverge a Helm-owned resource from its\n   chart; do not `--force-conflicts` a field owned by helm\u002Fargo\u002Fflux; do not\n   manually delete+recreate a Helm resource.\n3. **Prod protection.** Never modify production namespaces\u002Fcontexts without an\n   explicit user override.\n4. **Never `delete` without explicit user confirmation** (deletion is\n   destructive; it is gated).\n5. **Smallest change.** Touch the fewest fields that achieve the goal; preserve\n   existing labels\u002Fannotations.\n6. **RBAC denial → escalate**, do not retry with a different account.\n\n## Output rule\n\nAlways finish with a single line:\n`Result: applied | previewed | blocked | needs-confirmation`.\n","# Kubernetes Safe Modification\n\nThe *playbook* for CHANGING a live Kubernetes resource with the smallest blast\nradius and without breaking the tool that owns it (especially Helm). Read this\nbefore any `apply`, `patch`, `scale`, `set`, `edit`, or `helm upgrade`.\n\nEvery mutating command is **permission-gated** — it prompts the user for\nconfirmation before it runs. Do not try to work around the prompt. If a call is\ndenied, report it and stop; never retry with a different flag or identity.\n\n## Phase 1 — Establish the target and guardrails\n\n1. **Confirm the cluster context.** `kubectl config current-context` and quote\n   it back before doing anything else. If the leader\u002Fuser named a target\n   context, thread it as `--context=\u003Cctx>` on every command instead — never\n   `kubectl config use-context` (it rewrites the shared kubeconfig).\n2. **Pin the target:** namespace + kind\u002Fname + the *exact* intended change.\n3. **Production guardrail.** Never modify production namespaces or contexts\n   (name contains `prod`, `prd`, `production`) without an explicit user override.\n\n## Phase 2 — Determine who OWNS the resource\n\nRead the resource's labels\u002Fannotations before choosing a method:\n\n```bash\nkubectl get \u003Ckind> \u003Cname> -n \u003Cns> \\\n  -o jsonpath='labels={.metadata.labels}{\"\\n\"}annotations={.metadata.annotations}{\"\\n\"}'\n```\n\n- **Helm-managed** — label `app.kubernetes.io\u002Fmanaged-by=Helm` **and**\n  annotations `meta.helm.sh\u002Frelease-name`, `meta.helm.sh\u002Frelease-namespace`.\n  Confirm with `helm status \u003Crelease> -n \u003Crel-ns>` and\n  `helm get values \u003Crelease> -n \u003Crel-ns>`.\n- **GitOps-managed (Flux\u002FArgo)** — labels like\n  `kustomize.toolkit.fluxcd.io\u002Fname`, `helm.toolkit.fluxcd.io\u002Fname` (Flux) or\n  `argocd.argoproj.io\u002Finstance` \u002F annotation `argocd.argoproj.io\u002Ftracking-id`\n  (Argo CD). The desired state lives in **Git**.\n- **kubectl \u002F manual** — annotation\n  `kubectl.kubernetes.io\u002Flast-applied-configuration` (client-side apply) or no\n  manager markers at all.\n\n## Phase 3 — Choose the change strategy by owner\n\n- **Helm →** change *through Helm*: `helm upgrade \u003Crelease> \u003Cchart> -n \u003Crel-ns>`\n  with `-f values.yaml` or `--set`, using `--reuse-values` so you do not drop\n  other settings. **Never** `kubectl edit`\u002F`patch` a Helm-owned resource for a\n  persistent change — the next `helm upgrade` will revert it (drift) or hit a\n  field-manager conflict. If the chart\u002Fvalues source is not available to you,\n  say so: a persistent change needs the chart; a direct kubectl change will be\n  reconciled away on the next upgrade, so do it only as an explicitly\n  acknowledged stop-gap.\n- **GitOps →** the source of truth is Git; a direct cluster change will be\n  reconciled away (often within minutes). Recommend changing the Git source (or\n  deliberately suspending reconciliation). Apply directly only as an\n  acknowledged temporary measure, and state that it is temporary.\n- **kubectl \u002F manual →** prefer `kubectl apply --server-side -f \u003Cmanifest>`\n  (declarative, tracks field ownership) or a targeted `kubectl patch`\n  (strategic-merge by default; `--type=merge`\u002F`json` when needed). Save the\n  manifest to a file first (Write tool) so the change is reviewable and\n  revertible. Avoid `kubectl edit` (no diff, no audit trail).\n\n## Phase 4 — Preview before you change (always)\n\nPrefer previews that do **not** prompt:\n\n```bash\nkubectl diff -f change.yaml                 # exactly what apply would change\nhelm diff upgrade \u003Crelease> \u003Cchart> -n \u003Cns> -f values.yaml   # helm-diff plugin\nhelm template \u003Cchart> -f values.yaml        # render locally\n```\n\nOnly when a diff is insufficient, fall back to a dry-run apply\n(`kubectl apply --server-side --dry-run=server -f change.yaml` or\n`helm upgrade --dry-run=server`). If the `helm-diff` plugin is missing, use\n`helm upgrade --dry-run=server` and inspect the rendered output.\n\n## Phase 5 — Apply the smallest change\n\n- Change **only** the intended fields. Do not re-apply a whole fetched manifest\n  (that steals field ownership and can wipe other managers' fields).\n- Keep existing labels\u002Fannotations, especially `app.kubernetes.io\u002Fmanaged-by`\n  and `meta.helm.sh\u002F*`.\n- **Server-side apply conflicts:** if `apply --server-side` reports a conflict\n  with another manager (e.g. `helm`, `argocd`), STOP. Do **not**\n  `--force-conflicts` on a field owned by Helm\u002FArgo\u002FFlux — stealing ownership\n  breaks that tool. Resolve through the owner (helm upgrade \u002F git) instead.\n  `--force-conflicts` is only for a manually-owned resource, and only with\n  explicit user approval.\n- **Immutable fields** (Service `.spec.clusterIP`, Deployment `.spec.selector`,\n  Job template, …) cannot be patched — they require recreate. For a Helm\n  release that means `helm upgrade`; never manually delete+recreate a\n  Helm-owned resource.\n\n## Phase 6 — Verify and report\n\n- `kubectl rollout status` \u002F `kubectl get` the target; for Helm,\n  `helm status` + `helm history` (confirm a NEW, deployed revision — not a\n  failed one).\n- Report: the ownership determination, the strategy chosen and why, the exact\n  commands run, the diff, and the post-change health. Cite command + output.\n\n## Hard rules\n\n1. **Preview (diff\u002Fdry-run) before every real change** — no exceptions.\n2. **Never break the owner.** Do not diverge a Helm-owned resource from its\n   chart; do not `--force-conflicts` a field owned by helm\u002Fargo\u002Fflux; do not\n   manually delete+recreate a Helm resource.\n3. **Prod protection.** Never modify production namespaces\u002Fcontexts without an\n   explicit user override.\n4. **Never `delete` without explicit user confirmation** (deletion is\n   destructive; it is gated).\n5. **Smallest change.** Touch the fewest fields that achieve the goal; preserve\n   existing labels\u002Fannotations.\n6. **RBAC denial → escalate**, do not retry with a different account.\n\n## Output rule\n\nAlways finish with a single line:\n`Result: applied | previewed | blocked | needs-confirmation`.\n",{"name":5,"metadata":49,"description":7},{"tags":50,"author":51},"kubernetes, helm, modification, apply, server-side-apply, gitops, playbook","blouargant@chapsvision.com","develop","c9440489468f6bbafc65e9a10811428ac0ef2619","registry\u002Fskills\u002Fk8s-modification","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis","https:\u002F\u002Fgithub.com\u002Fblouargant","2026-11-10 16:30:07",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add blouargant\u002Fomnis --skill k8s-modification",{"tool":64,"command":65},"bunx","bunx skills add blouargant\u002Fomnis --skill k8s-modification",{"tool":67,"command":68},"pnpm","pnpm dlx skills add blouargant\u002Fomnis --skill k8s-modification","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Fk8s-modification\u002FSKILL.md",true,[72],{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"permissions.json","REFERENCE","参考文档",1498,"https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Fk8s-modification\u002Fpermissions.json",[79,107,127,154,176,205],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":88,"publishedAt":44},"01M71RZKQ64WTDCV48Z4Y071FA","skill-creator","Create or update a skill playbook (SKILL.md) for the agent. Use when the user wants to create a new skill, add a skill, define a new agent capability, update an existing skill, edit a skill, refine a skill playbook, or specialise the agent for a new domain.","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Fskill-creator\u002FSKILL.md",[85],{"categoryNo":86,"categoryName":87,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[89,90,91,92,93,94,95,96,97,98,99,100,101,39,36,102,103,104,105,106],"skill creator","creator","new agent","domain","for","new","define","use","Existing","when","create","update","refine","a skill","new skill","add","user","existing skill",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":44},"01M71RZJ15NMV6FXBZD1AQF3K7","review","Review a body of work (source code, configuration, documents, infra manifests, …) for correctness, clarity, and obvious risks. Use this skill whenever the user asks for a review, audit or critique.","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Freview\u002FSKILL.md",[],[109,114,115,116,117,93,118,96,119,120,121,122,123,124,125,126,105],"infra","work","critique","audit","clarity","body","source","manifests","documents","configuration","correctness","code","source code",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":136,"publishedAt":44},"01M71RZFP8KJEANYXAH6AX68G0","pdf","Fallback PDF text extractor using pdftotext (poppler). Use ONLY when the preferred `liteparse` skill is unavailable or for a quick plain-text dump of a simple text PDF — for the best PDF parsing (scanned, multi-column, layout-heavy, or non-PDF formats) prefer the `liteparse` skill.","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Fpdf\u002FSKILL.md",[133],{"categoryNo":134,"categoryName":135,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",[137,138,139,140,141,142,143,144,93,145,146,147,148,149,96,150,98,151,152,153],"PDF","text","multi","quick","simple","parsing","pdf text extractor","layout","liteparse","plain-text","column","only","formats","pdftotext","plain","pdf parsing","file",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":162,"publishedAt":44},"01M71RZDAHNX7JC52P5HH5XPEG","pandoc","This skill should be used when converting documents between formats (Markdown, DOCX, PDF, HTML, LaTeX, etc.) using pandoc. Use for format conversion, document generation, and preparing markdown for Google Docs or other word processors.","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Fpandoc\u002FSKILL.md",[160,161],{"categoryNo":134,"categoryName":135,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":86,"categoryName":87,"taxonomyType":21,"taxonomyTypeDesc":22},[156,163,137,164,93,165,96,166,122,98,167,168,169,170,171,172,149,173,174,175],"docx","Word","document generation","document","conversion","generation","markdown","format","google","google docs","docs","html","LaTeX",{"skillNo":177,"name":145,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":193,"publishedAt":44},"01M71RZ7PSG17ES4CQWA6860F5","Preferred local parser for extracting text from PDFs, images, and scanned\u002Flayout-heavy documents (OCR, screenshots, complex PDFs) — far better than pdftotext. Use this FIRST for any PDF, image, or OCR text-extraction or conversion task. NOTE for Office documents (DOCX, PPTX, XLSX, ODT) — for plain text extraction prefer the `pandoc` skill, which needs no LibreOffice; only use LiteParse for Office docs when you need its layout\u002FOCR\u002Fscreenshot output. The `pdf` skill (pdftotext) is only a fallback for when LiteParse cannot be installed.","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Fliteparse\u002FSKILL.md",[181,182,185,188],{"categoryNo":134,"categoryName":135,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":183,"categoryName":184,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":186,"categoryName":187,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000004","电子表格",{"categoryNo":189,"categoryName":190,"taxonomyType":191,"taxonomyTypeDesc":192},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[145,194,195,196,163,197,137,198,199,200,27,201,202,148,150,122,98,34,203,204],"images","app","ocr","which","pptx","extracting","xlsx","local","pipx","you","needs",{"skillNo":206,"name":207,"nameZh":6,"description":208,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":209,"categories":210,"keywords":211,"publishedAt":44},"01M71RZ2Y9KY94NRBV4WMH73G5","linux-admin","Safely make a change to a Linux workstation — install\u002Fremove packages, manage systemd services and timers, edit and validate configuration files, manage users\u002Fpermissions and networking. Detect the distro and package manager, determine whether the target is package-managed or hand-maintained, preview or simulate every change, back up configs before editing, and prefer the package manager and drop-in overrides so the host stays consistent and secure. Use whenever a change to the local Linux host is required (install, remove, enable, disable, start, stop, edit a config, add a user, change permissions or networking).","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Flinux-admin\u002FSKILL.md",[],[212,213,214,33,215,216,217,218,219,27,201,220,221,222,223,31,224,225,226,43],"linux","linux admin","admin","workstation","package manager","pacman","remove","up","systemd services","files","host","drop","hand","permissions","packages"]