[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71RZ2Y9KY94NRBV4WMH73G5":3,"skill-same:01M71RZ2Y9KY94NRBV4WMH73G5":73},{"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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":47,"commitSha":48,"skillDirectory":49,"forksCount":14,"repositoryHtmlUrl":50,"repositoryHomepageUrl":6,"ownerHtmlUrl":51,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":52,"install":53,"resources":66},"01M71RZ2Y9KY94NRBV4WMH73G5","linux-admin",null,"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).","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\u002Flinux-admin\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"linux admin","admin","linux","drop","managed","hand","pacman","systemd services","workstation","host","local","preview","back","files","up","remove","permissions","packages","package manager","change","2026-11-10 13:02:02",false,"---\nname: linux-admin\ndescription: 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).\nmetadata:\n  author: blouargant@chapsvision.com\n  tags: \"linux, sysadmin, systemd, packages, apt, dnf, pacman, configuration, playbook\"\n---\n\n# Linux Safe Administration\n\nThe *playbook* for CHANGING a Linux workstation with the smallest blast radius,\nso the host stays consistent (the package manager still owns what it owns) and no\nless secure than before. Read this before any package install\u002Fremove, service\nchange, config edit, or user\u002Fpermission\u002Fnetwork change.\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 the environment\n\n1. **Pin the target:** the *exact* intended change (package + version, unit name,\n   config file + setting, user, rule) and the end state you expect.\n2. **Detect the package manager and init system** (read-only):\n\n   ```bash\n   command -v apt-get dnf yum pacman zypper apk 2>\u002Fdev\u002Fnull   # which package manager\n   cat \u002Fetc\u002Fos-release                                        # distro + version\n   ps -p 1 -o comm=                                           # init system (expect systemd)\n   ```\n\n3. **Note the privilege required.** Most changes need `sudo`. If sudo is\n   unavailable or denied, stop and report — do not switch identity.\n\n## Phase 2 — Determine who OWNS the target\n\nBefore editing a file or replacing a unit, learn whether a package owns it:\n\n```bash\ndpkg -S \u002Fetc\u002Fssh\u002Fsshd_config     # Debian\u002FUbuntu: which package owns this path\nrpm -qf \u002Fetc\u002Fssh\u002Fsshd_config     # RHEL\u002FFedora\u002FSUSE: which package owns this path\n```\n\n- **Package-managed file** — prefer a **drop-in override** to editing the file in\n  place, so a package upgrade does not clobber your change and dpkg\u002Frpm does not\n  flag it as modified:\n  - systemd units → `systemctl edit \u003Cunit>` (writes `…\u002F\u003Cunit>.d\u002Foverride.conf`),\n    never hand-edit the shipped unit under `\u002Fusr\u002Flib\u002Fsystemd\u002Fsystem`.\n  - daemons with a conf.d → drop a file in `\u002Fetc\u002F\u003Csvc>\u002Fconf.d\u002F` (or the\n    program's documented `*.d\u002F` directory) rather than editing the main file.\n- **Hand-maintained file** — edit in place, but **back it up first** (below).\n\n## Phase 3 — Preview before you change (always)\n\nPrefer previews\u002Fvalidators that do **not** mutate:\n\n```bash\n# Package changes — simulate, don't apply\napt-get -s install \u003Cpkg>          # Debian\u002FUbuntu dry-run\ndnf --assumeno install \u003Cpkg>      # Fedora\u002FRHEL: answer \"no\", show the transaction\npacman -p -S \u003Cpkg>                # Arch: print target only\n\n# Config validators — run the tool's own checker\nvisudo -c                         # sudoers syntax\nsshd -t                           # sshd_config\nnginx -t                          # nginx\nsystemd-analyze verify \u003Cunit>     # a systemd unit\n```\n\n**Back up any config file before editing** — copy it to `\u003Cfile>.bak` (or rely on\nthe `revert` tool's snapshotting so the edit is revertible). Never edit a config\nwithout a way back.\n\n## Phase 4 — Apply the smallest change\n\n- Change **only** what the goal requires. Prefer the package manager and drop-in\n  overrides to editing managed files.\n- Re-validate after editing a config **before** restarting the service it feeds\n  (`sshd -t` \u002F `nginx -t` \u002F `visudo -c`), so a syntax error is caught before it\n  takes a daemon down.\n- For services, after a config change: `systemctl daemon-reload` (if a unit or\n  drop-in changed) then `systemctl reload \u003Cunit>` where reload is supported,\n  falling back to `restart` only when it is not.\n\n## Phase 5 — Verify and report\n\n- Re-run the validator; check the end state:\n  `systemctl status \u003Cunit>`, `systemctl is-enabled \u003Cunit>`,\n  `systemctl is-active \u003Cunit>`, `dpkg -l \u003Cpkg>` \u002F `rpm -q \u003Cpkg>`.\n- Report: the environment (package manager + init) and ownership determination,\n  the strategy chosen and why, the exact commands run, the preview\u002Fdiff, and the\n  post-change health. Cite command + output.\n\n## Hard rules\n\n1. **Preview \u002F back up before every real change** — no exceptions.\n2. **Never run catastrophic operations** — `rm -rf \u002F` or any system directory,\n   `dd` to a block device, `mkfs`, redirecting onto `\u002Fdev\u002Fsd*`\u002F`\u002Fdev\u002Fnvme*`,\n   recursive `chmod`\u002F`chown` on system directories. (The Bash safety floor also\n   blocks the worst; never attempt to route around it.)\n3. **Never disable host security** — firewall (`ufw`\u002F`firewalld`\u002F`iptables`),\n   SELinux, or AppArmor — without an explicit user override.\n4. **Never `delete` \u002F `purge` \u002F `userdel` \u002F format without explicit user\n   confirmation** — those are destructive and gated.\n5. **Smallest change.** Prefer the package manager + drop-in overrides over\n   editing package-managed files; keep existing settings you were not asked to\n   change.\n6. **Privilege denial → report and escalate**, do not retry as a different\n   identity.\n\n## Output rule\n\nAlways finish with a single line:\n`Result: applied | previewed | blocked | needs-confirmation`.\n","# Linux Safe Administration\n\nThe *playbook* for CHANGING a Linux workstation with the smallest blast radius,\nso the host stays consistent (the package manager still owns what it owns) and no\nless secure than before. Read this before any package install\u002Fremove, service\nchange, config edit, or user\u002Fpermission\u002Fnetwork change.\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 the environment\n\n1. **Pin the target:** the *exact* intended change (package + version, unit name,\n   config file + setting, user, rule) and the end state you expect.\n2. **Detect the package manager and init system** (read-only):\n\n   ```bash\n   command -v apt-get dnf yum pacman zypper apk 2>\u002Fdev\u002Fnull   # which package manager\n   cat \u002Fetc\u002Fos-release                                        # distro + version\n   ps -p 1 -o comm=                                           # init system (expect systemd)\n   ```\n\n3. **Note the privilege required.** Most changes need `sudo`. If sudo is\n   unavailable or denied, stop and report — do not switch identity.\n\n## Phase 2 — Determine who OWNS the target\n\nBefore editing a file or replacing a unit, learn whether a package owns it:\n\n```bash\ndpkg -S \u002Fetc\u002Fssh\u002Fsshd_config     # Debian\u002FUbuntu: which package owns this path\nrpm -qf \u002Fetc\u002Fssh\u002Fsshd_config     # RHEL\u002FFedora\u002FSUSE: which package owns this path\n```\n\n- **Package-managed file** — prefer a **drop-in override** to editing the file in\n  place, so a package upgrade does not clobber your change and dpkg\u002Frpm does not\n  flag it as modified:\n  - systemd units → `systemctl edit \u003Cunit>` (writes `…\u002F\u003Cunit>.d\u002Foverride.conf`),\n    never hand-edit the shipped unit under `\u002Fusr\u002Flib\u002Fsystemd\u002Fsystem`.\n  - daemons with a conf.d → drop a file in `\u002Fetc\u002F\u003Csvc>\u002Fconf.d\u002F` (or the\n    program's documented `*.d\u002F` directory) rather than editing the main file.\n- **Hand-maintained file** — edit in place, but **back it up first** (below).\n\n## Phase 3 — Preview before you change (always)\n\nPrefer previews\u002Fvalidators that do **not** mutate:\n\n```bash\n# Package changes — simulate, don't apply\napt-get -s install \u003Cpkg>          # Debian\u002FUbuntu dry-run\ndnf --assumeno install \u003Cpkg>      # Fedora\u002FRHEL: answer \"no\", show the transaction\npacman -p -S \u003Cpkg>                # Arch: print target only\n\n# Config validators — run the tool's own checker\nvisudo -c                         # sudoers syntax\nsshd -t                           # sshd_config\nnginx -t                          # nginx\nsystemd-analyze verify \u003Cunit>     # a systemd unit\n```\n\n**Back up any config file before editing** — copy it to `\u003Cfile>.bak` (or rely on\nthe `revert` tool's snapshotting so the edit is revertible). Never edit a config\nwithout a way back.\n\n## Phase 4 — Apply the smallest change\n\n- Change **only** what the goal requires. Prefer the package manager and drop-in\n  overrides to editing managed files.\n- Re-validate after editing a config **before** restarting the service it feeds\n  (`sshd -t` \u002F `nginx -t` \u002F `visudo -c`), so a syntax error is caught before it\n  takes a daemon down.\n- For services, after a config change: `systemctl daemon-reload` (if a unit or\n  drop-in changed) then `systemctl reload \u003Cunit>` where reload is supported,\n  falling back to `restart` only when it is not.\n\n## Phase 5 — Verify and report\n\n- Re-run the validator; check the end state:\n  `systemctl status \u003Cunit>`, `systemctl is-enabled \u003Cunit>`,\n  `systemctl is-active \u003Cunit>`, `dpkg -l \u003Cpkg>` \u002F `rpm -q \u003Cpkg>`.\n- Report: the environment (package manager + init) and ownership determination,\n  the strategy chosen and why, the exact commands run, the preview\u002Fdiff, and the\n  post-change health. Cite command + output.\n\n## Hard rules\n\n1. **Preview \u002F back up before every real change** — no exceptions.\n2. **Never run catastrophic operations** — `rm -rf \u002F` or any system directory,\n   `dd` to a block device, `mkfs`, redirecting onto `\u002Fdev\u002Fsd*`\u002F`\u002Fdev\u002Fnvme*`,\n   recursive `chmod`\u002F`chown` on system directories. (The Bash safety floor also\n   blocks the worst; never attempt to route around it.)\n3. **Never disable host security** — firewall (`ufw`\u002F`firewalld`\u002F`iptables`),\n   SELinux, or AppArmor — without an explicit user override.\n4. **Never `delete` \u002F `purge` \u002F `userdel` \u002F format without explicit user\n   confirmation** — those are destructive and gated.\n5. **Smallest change.** Prefer the package manager + drop-in overrides over\n   editing package-managed files; keep existing settings you were not asked to\n   change.\n6. **Privilege denial → report and escalate**, do not retry as a different\n   identity.\n\n## Output rule\n\nAlways finish with a single line:\n`Result: applied | previewed | blocked | needs-confirmation`.\n",{"name":5,"metadata":44,"description":7},{"tags":45,"author":46},"linux, sysadmin, systemd, packages, apt, dnf, pacman, configuration, playbook","blouargant@chapsvision.com","develop","c9440489468f6bbafc65e9a10811428ac0ef2619","registry\u002Fskills\u002Flinux-admin","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis","https:\u002F\u002Fgithub.com\u002Fblouargant","2026-11-10 16:30:07",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add blouargant\u002Fomnis --skill linux-admin",{"tool":59,"command":60},"bunx","bunx skills add blouargant\u002Fomnis --skill linux-admin",{"tool":62,"command":63},"pnpm","pnpm dlx skills add blouargant\u002Fomnis --skill linux-admin","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Flinux-admin\u002FSKILL.md",true,[67],{"path":68,"resourceType":69,"resourceTypeDesc":70,"sizeBytes":71,"sourceHtmlUrl":72},"permissions.json","REFERENCE","参考文档",3960,"https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Flinux-admin\u002Fpermissions.json",[74,106,126,153,175,204],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":85,"publishedAt":39},"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",[80],{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105],"skill creator","creator","new agent","domain","for","new","define","use","Existing","when","create","update","refine","playbook","edit","a skill","new skill","add","user","existing skill",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":39},"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",[],[108,113,114,115,116,90,117,93,118,119,120,121,122,123,124,125,104],"infra","work","critique","audit","clarity","body","source","manifests","documents","configuration","correctness","code","source code",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":135,"publishedAt":39},"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",[132],{"categoryNo":133,"categoryName":134,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000002","文档处理",[136,137,138,139,140,141,142,143,90,144,145,146,147,148,93,149,95,150,151,152],"PDF","text","multi","quick","simple","parsing","pdf text extractor","layout","liteparse","plain-text","column","only","formats","pdftotext","plain","pdf parsing","file",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":161,"publishedAt":39},"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",[159,160],{"categoryNo":133,"categoryName":134,"taxonomyType":83,"taxonomyTypeDesc":84},{"categoryNo":81,"categoryName":82,"taxonomyType":83,"taxonomyTypeDesc":84},[155,162,136,163,90,164,93,165,121,95,166,167,168,169,170,171,148,172,173,174],"docx","Word","document generation","document","conversion","generation","markdown","format","google","google docs","docs","html","LaTeX",{"skillNo":176,"name":144,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":192,"publishedAt":39},"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",[180,181,184,187],{"categoryNo":133,"categoryName":134,"taxonomyType":83,"taxonomyTypeDesc":84},{"categoryNo":182,"categoryName":183,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":185,"categoryName":186,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000004","电子表格",{"categoryNo":188,"categoryName":189,"taxonomyType":190,"taxonomyTypeDesc":191},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[144,193,194,195,162,196,136,197,198,199,23,29,200,147,149,121,95,201,202,203],"images","app","ocr","which","pptx","extracting","xlsx","pipx","image","you","needs",{"skillNo":205,"name":206,"nameZh":6,"description":207,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":208,"categories":209,"keywords":213,"publishedAt":39},"01M71RYZC5PYJPA9F8A60RYK5F","k8s-triage","Diagnose an unhealthy Kubernetes workload — pods crash-looping, deployments not ready, services not reachable. The triage decision playbook — confirm context, get evidence, classify the failure, propose one safe next action. Use whenever the user mentions kubernetes, k8s, kubectl, pods, deployments, namespaces, or attaches a kubectl error.","https:\u002F\u002Fgithub.com\u002Fblouargant\u002Fomnis\u002Fblob\u002Fdevelop\u002Fregistry\u002Fskills\u002Fk8s-triage\u002FSKILL.md",[210],{"categoryNo":211,"categoryName":212,"taxonomyType":83,"taxonomyTypeDesc":84},"01JBSEEDCAT000000000000011","运维与部署",[214,215,216,217,218,219,220,221,222,223,224,225,93,226,227,228,229,230,231,99],"k8s","k8s triage","triage","error","ready","evidence","get","diagnose","kubernetes","namespaces","decision","deployments","one","coordination","services","classify","next","diagnosis"]