Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add AmineDjeghri/personal-os-setup --skill skill-deploymentgit clone --depth 1 https://github.com/AmineDjeghri/personal-os-setupWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/aminedjeghri/personal-os-setup/skill-deployment)<a href="https://agentmods.dev/skills/aminedjeghri/personal-os-setup/skill-deployment"><img src="https://agentmods.dev/badge/skills/aminedjeghri/personal-os-setup/skill-deployment/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/aminedjeghri/personal-os-setup/skill-deployment"><img src="https://agentmods.dev/badge/skills/aminedjeghri/personal-os-setup/skill-deployment.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00024 | $0.03149 |
| Opus 5.5 | $0.00010 | $0.01260 |
| Sonnet 5.5 | $0.00005 | $0.00630 |
| Haiku 4.5 | $0.00002 | $0.00315 |
Grade A, and why
skill-deployment scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 170 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Skill Deployment via chezmoi
Authored skills (ONE tree): repo src/personal_os_setup/config/chezmoi/dot_claude/skills/ → ~/.claude/skills
(Claude Code + Hermes external_dirs). Desktops: TUI dotfiles tab. Container/CLI:
REPO=/config/workspace/personal-os-setup
cd ~ && chezmoi apply -v --force --source "$REPO" .claude # deploy ONLY the skills
Scope: repo-specific skills are NOT deployed here — they live in
.claude/skills/+.agents/skills/(make skills-link/make skills-check; see theskill-layoutskill).
Repo-scoped skills (<repo>/.hermes/skills + .agents/skills) load only when the session's
working dir resolves to the repo's git root and that root is in skills.trusted_project_dirs.
A session rooted at HOME (global terminal.cwd) resolves no repo, so nothing loads — upstream
Hermes bug #103423, fix in review as PR #103424. Never park repo skills in external_dirs
(N repos × M skills doesn't scale): promote a repo's skills to the global tree if they must be
always-on, otherwise they're read on demand.
Loading internals: agent-skills-architecture → "What actually loads".
No chezmoi (HA container/CLI): cd <repo> && make skills-deploy — copies the same source
to ~/.claude/skills. The make target lives in makefiles/skills.mk (same file as
skills-link/skills-check).
Rules: --source = repo ROOT (git-backed, .chezmoiroot points at the nested dir — never the nested dir); run from HOME (targets resolve against CWD).
⚠️ The nested config/chezmoi dir must never contain its own .chezmoiroot: the app
(src/personal_os_setup/tasks/system/chezmoi.py) passes that dir directly as --source, so a
nested .chezmoiroot would double-redirect and break the app's deploy path.
Refresh after git pull. On the container deploy only .claude: the package source also holds the desktop
config (dot_config/hypr, ghostty, mpv, OpenRGB, coolercontrol, mimeapps…), and /config/.claude/ also holds
Claude Code's own credentials/sessions — deploy into the skills/ subdir only.
File-level fallback (source dir is not a git repo): --source-path with ABSOLUTE source paths works on any dir.
S=/config/workspace/personal-os-setup/src/personal_os_setup/config/chezmoi
chezmoi --source "$S" apply -v --force --parent-dirs --refresh-externals=never \
--source-path "$S/dot_claude/skills/<name>/SKILL.md"
- If it hangs mid-apply with
--parent-dirs, retry the missing file alone without it (the dirs already exist). chezmoi managed --source "$S"lists entries (live scan);chezmoi cat/apply <target>use target resolution, which is what fails on a non-git source. Idempotent: re-run for the skills agit pullchanged.- The TUI (
tasks/system/chezmoi.py) runs the same flags withchezmoi_source_dir()as--source.
Pin the deployed names against the Curator per machine after each deploy: hermes curator pin <skill> (unpin/status/run/pause/list-unmanaged also exist).
Sync direction — repo → live, one way. The repo copy is the truth; make skills-deploy is
copy-only: it overwrites whatever is live and deletes nothing.
- Never deploy a skill that already lives elsewhere in the repo and is symlinked into the store
(e.g. a
docs/...-hosted one):cp -Rfollows the symlink and writes through it into the tracked source. Keep the symlink, don't duplicate the directory.
Drift: make skills-diff (read-only; non-zero on MISSING/DIFFERS), make skills-status, make skills-drift (the deploy's gate: only a DIFFERS aborts). Override with make skills-deploy SKILLS_FORCE=1 only after porting the live edit into the repo — see references/deploy-drift-and-reconciliation.md. Save a live skill: make skills-keep NAME=<name>.
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 5d ago Changed · +62 lines 946848298747
- 28d ago Changed · +8 lines 79c5f24809c0
- 1mo ago Changed · +55 lines 628fa4439426
- 1mo ago Changed · +11 lines b8d35ce6e321
- 1mo ago Changed · +4 lines b0ee47986029
- 1mo ago First seen · 30 lines · 24 tokens per session scan A 220a8f4c120b
skill-deployment is a skill published in the GitHub repository AmineDjeghri/personal-os-setup (662 stars, last pushed 2d ago), licensed MIT. It adds 24 tokens to every session and 3,149 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-08.
Other skills, from other repositories
hula-skill
HuLa project skill for frontend (Vue 3 + Vite + UnoCSS + Naive UI/Vant), backend (Tauri v2 + Rust + SeaORM/SQLite), full-stack flows, and build/release work. Use when the user mentions hula or HuLa or requests changes in this repository; after triggering, ask which scope (frontend/backend/fullstack/build-release) to…
flow-launcher
Build Flow Launcher plugins with C# or Python JSON-RPC, configure plugin manifests, and integrate Everything search.
microsoft-powertoys
Configure PowerToys FancyZones, Run, Keyboard Manager, and Awake; automate settings and troubleshoot Windows utility behavior.
eartrumpet
Inspect and route per-application audio with EarTrumpet, WASAPI, and pycaw; troubleshoot audio sessions and output devices.
wsl-bash-crlf-or-tempfile
When a Windows shell (PowerShell/cmd) feeds a bash script into WSL, CRLF line endings can corrupt the first shell builtin; force LF or pipe via a temp file.
wsl-networking-mode-dns-fallback
When WSL's mirrored networking fails and falls back to "None", plus /etc/wsl.conf has generateResolvConf=false, the distro has no DNS; fix both layers.