
file-handler
Persist, fetch, and search local artifacts produced by skills under a predictable .skillz/ / tree. Use whenever a skill needs to save scratch files, plans, notes, or other working artifacts to disk and look them up again in a later turn — for example when a user says "save this as ", "where did we save the ", "find the we saved", or any time another skill in this repo references "the file-handler". Wraps a single dependency-free Bash script (scripts/skillz.sh) that exposes savefile, getfile, and searchfiles (titles + body grep). All other skills should delegate to this skill instead of inventing their own on-disk layout. Do NOT use for source code edits, version-controlled files, or anything that belongs in the project tree — this is for skill artifacts, not application files.
- Installs
- 56
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/paulnsorensen/skillz-that-grillz --skill file-handler- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads file-handler automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
file-handler
One on-disk convention for every skill in this repo:
.skillz/
└── <type>/
└── <slug>
<type> groups artifacts by purpose (note, plan, draft, log,
…). <slug> is the filename. Both are validated — no path separators,
no .., no leading dots — so a skill can hand a user-supplied slug
straight through without sanitizing.
How to use this skill
When another skill needs to save or load a working file, shell out to
scripts/skillz.sh. Three subcommands cover the surface area:
# write content to .skillz/<type>/<slug>
scripts/skillz.sh save_file note todo "things to do"
# write stdin (preferred for multi-line content)
some_command | scripts/skillz.sh save_file plan release-cut
# read it back
scripts/skillz.sh get_file note todo
# search by title and body, optionally narrowed to a type
scripts/skillz.sh search_files todo
scripts/skillz.sh search_files release --type plan
save_file echoes the resolved path on success so callers can quote
it back to the user. get_file and search_files exit 1 when the
target / matches don't exist, so a skill can branch on ||.
Storage root
By default the tree lives at $PWD/.skillz. Override with SKILLZ_DIR
when you want a session-scoped or repo-scoped location:
SKILLZ_DIR="$HOME/.local/share/skillz" scripts/skillz.sh save_file note hello "hi"
Add .skillz/ to the repo's .gitignore if these artifacts shouldn't
be committed.
Conventions for callers
- Pick a type once and reuse it. Don't invent a new
<type>per artifact — types are buckets (note,plan,draft,log,transcript). Slugs are the unique part. - Slugs are ASCII filename-safe. Allowed:
[A-Za-z0-9._-](letters, digits, dot, underscore, hyphen — kebab-case is the preferred style, but dots for extensions and uppercase are accepted). Anything else gets rejected with exit 2. - No extension is required, but adding one (
.md,.txt,.json) helps when a user opens the file directly. - Prefer stdin over the inline content arg for anything multi-line — quoting gets fragile fast.
- Don't write through this skill for tracked source files. This is for skill scratch space, not the project tree.
Subcommand reference
save_file <type> <slug> [content]
Writes to .skillz/<type>/<slug>. If content is omitted, reads from
stdin. Parent directories are created on demand. Prints the resolved
path. Exit 2 on bad args.
get_file <type> <slug>
Prints .skillz/<type>/<slug> to stdout. Exit 1 if the file is
missing, exit 2 on bad args.
search_files <query> [--type <type>]
Two-pass search:
- Titles — case-insensitive
find -iname "*<query>*"across the storage root (or one type if--typeis supplied). - Bodies —
grep -rInfor the same query against the same scope. Binary files are skipped.
Output is sectioned (## titles then ## bodies); body hits are in
the standard <path>:<line>:<text> form so editors can jump to them.
Exit 1 when neither pass finds anything.
Why a single skill for this
Without a shared convention, each skill that needs to persist working
state ends up inventing its own (~/.cache/<skill>/, /tmp/<skill>-*,
a hidden file in $PWD, …). That fragments where users go to find
their stuff and makes cross-skill workflows harder ("the plan we drafted
last turn"). Centralizing on .skillz/<type>/<slug> plus three verbs
keeps the rest of the toolkit tiny.
When NOT to use this skill
- Application code, configs, or anything tracked in git. Edit those in place — this skill is for skill scratch space.
- Secrets.
.skillz/is plaintext on local disk. Use a secret manager (1Password, Bitwarden, age) instead. - Cross-machine sync. Files live on the local filesystem only. If you need them elsewhere, copy them out by hand or commit deliberately.
- Large binaries. The body-grep pass skips binary files, but the storage layout isn't tuned for big artifacts.
Gotchas
SKILLZ_DIRis captured at invocation, not export-once. Each shell-out re-resolves it, so changing the env between calls changes the storage root.- Slug validation rejects spaces. Pass
release-cut, notrelease cut. The regex is documented above. - Body grep uses fixed-string matching (
grep -F). Special characters (.,*,[) are matched literally. That's deliberate — users searching forv1.2.3get exactly what they typed, not a regex. - No locking. Two skills writing the same
<type>/<slug>concurrently will race; last writer wins. Use distinct slugs for parallel work.
FAQ
What does the file-handler skill do?
Persist, fetch, and search local artifacts produced by skills under a predictable .skillz/ / tree. Use whenever a skill needs to save scratch files, plans, notes, or other working artifacts to disk and look them up again in a later turn — for example when a user says "save this as ", "where did we save the ", "find the we saved", or any time another skill in this repo references "the file-handler". Wraps a single dependency-free Bash script (scripts/skillz.sh) that exposes savefile, getfile, and searchfiles (titles + body grep). All other skills should delegate to this skill instead of inventing their own on-disk layout. Do NOT use for source code edits, version-controlled files, or anything that belongs in the project tree — this is for skill artifacts, not application files.
How do I install file-handler?
Run npx skills add https://github.com/paulnsorensen/skillz-that-grillz --skill file-handler in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/file-handler/ (personal) or .claude/skills/file-handler/ (project).
Which AI agents can use file-handler?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is file-handler safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains file-handler?
It is published by paulnsorensen in paulnsorensen/skillz-that-grillz. It has 56 recorded installs.
More from paulnsorensen/skillz-that-grillz
skillz
paulnsorensen/skillz-that-grillz
Add, improve, audit, wedge, or autoimprove a skill. Improve and audit also accept a sub-agent definition. The result runs predictably on Claude Code, Codex, OMP, and other Agent Skills hosts. Use for /skillz , "improve this skill", "autoimprove this skill", "optimize this skill", "tighten this skill", "audit this agent", "new skill for X", "skill not triggering", "fix trigger rate", "wedge this", "turn this repeated work into a CLI", or "what in this skill should be a CLI". Do NOT use for CLAUDE.md or system-prompt edits, or for code changes that a cheese pipeline skill owns.
gh
paulnsorensen/skillz-that-grillz
Complete GitHub tasks using the gh CLI — pull request inspection, review, and merge, issues, CI checks, releases, workflow runs, code search, repo and label management. Use when the user says "merge PR", "check CI", "list issues", "review PR", "PR status", "close issue", "trigger workflow", "view release", "search repos", or invokes /gh. Use git (log, diff, status) for read-only local context only. Do NOT use for committing, staging, pushing, or PR creation — use /plate for those. Do NOT use for code-quality review — use a dedicated review skill.
chezmoi
paulnsorensen/skillz-that-grillz
Manage dotfiles with chezmoi — the source-state dotfile manager that uses filename attributes (dot, private, encrypted, runonce), Go templates, and password-manager integration to keep one set of dotfiles working across many machines. Use when the user says "set up dotfiles", "manage my dotfiles", "bootstrap a new machine", "chezmoi", "encrypt my SSH key in dotfiles", "template dotfiles per OS", "add secrets to dotfiles", "what should be in my .chezmoi.toml.tmpl", or asks how to share configs across macOS / Linux / servers. Also trigger when the user is staring at a fresh machine and wants the one-liner that gets them home, or when they're about to commit something sensitive into a dotfiles repo. Do NOT use for stow / yadm / rcm or other dotfile managers, generic git repo setup, or password-manager setup unrelated to dotfiles.
prek
paulnsorensen/skillz-that-grillz
Onboard prek (Rust-powered pre-commit) into any project and suggest hooks tailored to the language/framework. Use when the user says "add prek", "set up pre-commit hooks", "configure prek", "what hooks should I use", or when you notice a project without a prek.toml that would benefit from pre-commit checks. Also trigger when the user wants to add new hooks to an existing prek.toml, audit their hook config, or migrate from pre-commit to prek. Covers Rust, Python, TypeScript/JavaScript, Go, Ruby, and Shell projects. Do NOT use for husky, lint-staged, or CI pipeline hook configuration — this skill is specifically for prek.
github-copilot-personal-instructions
paulnsorensen/skillz-that-grillz
Add or audit GitHub Copilot personal custom instructions — the per-user prompt configured at github.com/copilot that applies to every Copilot Chat conversation that account has on github.com. Covers where to set them, what they do and don't apply to (github.com Chat only — not IDE, not mobile, not coding agent), how they merge with repository and organization instructions, and verification. Use when the user says "set personal Copilot instructions", "configure my Copilot", "Copilot keeps responding in the wrong language", "make Copilot use my preferred tone", "personal Copilot prompt", "user-level Copilot config", "Copilot is ignoring my preferences", or invokes /github-copilot-personal-instructions. Do NOT use for repository-scoped instructions — that is /github-copilot-repo-instructions.
Popular frontend & design skills
setup-matt-pocock-skills
mattpocock/skills
Configure this repo for the engineering skills: set up its issue tracker, triage label vocabulary, and domain doc layout. Run once before first use of the other engineering skills.
frontend-design
anthropics/skills
Guidance for distinctive, intentional visual design when building new UI or reshaping an existing one. Helps with aesthetic direction, typography, and making choices that don't read as templated defaults.
hyperframes-animation
heygen-com/hyperframes
All animation knowledge for HyperFrames — atomic motion rules, multi-phase scene blueprints, scene transitions, broader motion-design techniques, AND the seven runtime adapters (GSAP default, plus Lottie, Three.js, Anime.js, CSS keyframes, Web Animations API, TypeGPU). Use for any motion or animation task: pick 2-4 rules and compose, or load a blueprint, or look up runtime-specific API (e.g. GSAP eases / Lottie player / Three.js mixer). Also covers auditing an existing composition's choreography (animation map) and 24 named text-animation effects. HyperFrames-native: single paused timeline, seek-safe, deterministic.
prototype
mattpocock/skills
Build a throwaway prototype to answer a design question. Use when the user wants to sanity-check whether a state model or logic feels right, or explore what a UI should look like.
hyperframes-core
heygen-com/hyperframes
The HyperFrames composition contract — build one renderable project. Use for composition structure, the data- timing attributes, class="clip", tracks, sub-compositions, variables, framework-owned media playback, deterministic-render rules, and validation. Read before writing composition HTML.
vercel-react-best-practices
vercel-labs/agent-skills
React and Next.js performance optimization guidelines from Vercel Engineering. This skill should be used when writing, reviewing, or refactoring React/Next.js code to ensure optimal performance patterns. Triggers on tasks involving React components, Next.js pages, data fetching, bundle optimization, or performance improvements.