Personal collection of Agent Skills
— self-contained SKILL.md capability packages that Claude Code, opencode,
pi, and other compatible agents load on demand. Each skill lives in its own
directory under skills/.
| Skill | Description |
|---|---|
| gnhf | Launch a bounded, low-supervision overnight coding agent run against one well-specced task, in an isolated worktree. |
| macos-sandbox | Spin up the smallest usable macOS VM with Tart and wire osascript-mcp's desktop automation into it over SSH, sandboxed away from the host desktop. |
The skills CLI is the easiest
path — it detects installed agents and symlinks the skill into each one:
npx skills add pythoninthegrass/ai_skillsUseful flags: -g installs user-level instead of project-level, -a claude-code,opencode,pi targets specific agents, -s <name> installs one
skill by name (e.g. -s gnhf or -s macos-sandbox — this repo has both),
-y skips confirmation prompts, --copy copies files instead of
symlinking. npx skills list, npx skills update, and npx skills remove
manage what's installed.
To try a skill without installing it:
npx skills use pythoninthegrass/ai_skills@gnhf | claude
npx skills use pythoninthegrass/ai_skills@macos-sandbox | claudenpx skills updateChecks every installed skill's lock-file hash against its source and
refreshes only the ones that changed upstream, reporting N skills already up to date otherwise. This is the intended way to pull in new commits from
this repo — npx skills add also overwrites an already-installed skill
(flagged as overwrites: in its install summary) if you re-run it, but it
re-runs the full interactive install flow each time rather than just
refreshing what changed.
If you installed manually (below), git pull in your checkout is enough —
the symlink always points at the working tree.
skills add installs a pinned snapshot (refreshed via npx skills update),
not a live link to a working checkout. For local development, or on a
machine without npx, clone the repo and symlink directly — pi and opencode
both auto-load ~/.agents/skills/, and opencode also auto-loads
~/.claude/skills/, so two symlinks cover all three agents:
git clone https://github.com/pythoninthegrass/ai_skills.git ~/git/ai_skills
mkdir -p ~/.agents/skills ~/.claude/skills
for skill in gnhf macos-sandbox; do
ln -s ~/git/ai_skills/skills/$skill ~/.agents/skills/$skill # pi, opencode
ln -s ~/git/ai_skills/skills/$skill ~/.claude/skills/$skill # Claude Code
doneSymlink just one skill by dropping the loop and naming it directly, e.g.
ln -s ~/git/ai_skills/skills/macos-sandbox ~/.claude/skills/macos-sandbox.
Documented discovery locations, per agent (see each agent's own docs for the current, authoritative list — these locations are more stable than any CLI flags):
| Agent | Personal | Project | Declare extra dirs |
|---|---|---|---|
| Claude Code | ~/.claude/skills/<name>/ |
.claude/skills/<name>/ |
— |
| opencode | ~/.config/opencode/skill(s)/<name>/ |
.opencode/skill(s)/<name>/ |
skills.paths in opencode.json |
| pi | ~/.pi/agent/skills/, ~/.agents/skills/ |
.pi/skills/, .agents/skills/ |
skills array in ~/.pi/agent/settings.json, or pi --skill <path> |
Skills are scanned at startup — restart the agent (or start a new session) after installing. Then:
- Claude Code: run
/gnhfor/macos-sandbox - pi: run
/skill:gnhfor/skill:macos-sandbox - opencode: mention what you want done; opencode picks the skill up from its description
- Either way:
npx skills list -gshows what the CLI has installed
skills/
├── gnhf/
│ ├── SKILL.md
│ ├── README.md
│ ├── .env.example
│ └── scripts/
│ ├── gnhf.py
│ └── test_gnhf.py
└── macos-sandbox/
├── SKILL.md
├── README.md
├── .env.example
├── playbook.example.yml
└── scripts/
├── tart_macos.py
├── test_tart_macos.py
├── grant-tcc.sh
├── run.py
└── test_run.py
To add a new skill, create a directory under skills/ with a SKILL.md
carrying name and description frontmatter (npx skills init <name>
scaffolds one), then install/symlink it the same way as above.
A skill's SKILL.md is instructions the model reads and follows, and any
bundled scripts are code the model can execute. Review both before
installing a skill from anywhere, including this repo. gnhf bundles
scripts/gnhf.py; macos-sandbox bundles scripts/tart_macos.py,
scripts/grant-tcc.sh (writes directly to the guest VM's TCC database over
SSH), and the optional scripts/run.py (runs an Ansible playbook against
the guest in-process).
- kunchenguid/gnhf — an unrelated npm
package that shares this skill's name. This
gnhfskill was written from scratch for how this author runs unattended agents (manual git worktree, a plain background process,timeoutfor the wall-clock bound), but that project's README was useful reference material while naming and scoping this one.