Atlas / Skills / paulnsorensen / skillz-that-grillz

skillz-that-grillzBLOCK

skills/paulnsorensen/skillz-that-grillz

Agent skill repository that don't fit cleanly into any of my other cheese-related repositories

Verdict
BLOCK
Grade
D
Trust score
69 /100
Version
—
Hosts
5 documented
License
MIT
Stars
1
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://github.com/paulnsorensen/skillz-that-grillz/actions/workflows/validate.yml) [](LICENSE) [](https://github.com/paulnsorensen/skillz-that-grillz/releases/latest) [](https://skills.sh/paulnsorensen/skillz-that-grillz) [](https://www.conventionalcommits.org) [](https://github.com/paulnsorensen/skillz-that-grillz/pulls)

Skill-authoring and skill-packaging toolbelt: skillz, wedge, fromargs, and the wedge GitHub Action.

This repository publishes one Agent Skill, skillz. It also hosts two Python libraries in a uv workspace under packages/ — wedge (packages a skill CLI as a content-addressed .pyz) and fromargs (the CLI library wedge builds on) — plus the public actions/wedge GitHub Action that runs wedge in a consumer repository.

The companion repo easy-cheese covers the design / implement / review workflow (mold, cook, press, age, cure) and local-to-review publication (/plate: staging, commits, pushes, and PR creation — single or stacked).

Skills

Read from source at commit 89fccedda2ccOBSERVED · 2026-10-11
Advertisement
02

Install

Commands as the repository documents them. They are shown, not run.

uvx uv@<ci-uv-version> lock
uv run --locked --project packages/wedge wedge lock --root packages/wedge/examples/skills
uv run --locked --project packages/wedge wedge bundle skills/skillz
git clone https://github.com/paulnsorensen/skillz-that-grillz.git
git clone https://github.com/paulnsorensen/skillz-that-grillz.git
uv run --locked --project tools/wedge wedge lock --root skills
03

Host compatibility

What the documentation claims. We have not run a compatibility test.

HostStatusNotes
claude-codementioned
codexmentioned
copilotmentioned
cursormentioned
gemini-climentioned
04

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
name: skillz
description: >
  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 <add|improve|audit|wedge|autoimprove>, "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.
disable-model-invocation: true
argument-hint: "<add|improve|audit|wedge|autoimprove> [<path>|<name>]"
license: MIT
metadata:
  author: paulnsorensen
  dispatches-agents: audit and improve, when the host offers sub-agents
---

# skillz

Add, improve, audit, wedge, and autoimprove skills.
Improve and audit also accept agent definitions.
The product is a **predictable** definition: the same process on every run and on every harness.
Every lens asks one question of each line: *does this make the run more predictable, or is it sediment?*

The mode is the first word after the skill name.
The Aliases column lists the names that select the same mode.
Require a target for each mode.
Ask for the mode when it is missing.
Ask for a target when the mode requires one.

## Modes

| Mode | Aliases | Target | Analytics | Writes | Product |
|---|---|---|---|---|---|
| `add <name>` | none | a new skill name | no | creates `skills/<name>/` | a registered skill that passes the rubric |
| `improve <path>` | `optimize`, `tighten` | a `SKILL.md` or agent file | yes, unless it reuses a current audit | the analytics cache; the target after approval | approved fixes + residual findings |
| `audit <path>` | none | a `SKILL.md` or agent file | yes | the analytics cache only; never the target | calibrated report |
| `wedge <path>` | none | a `SKILL.md` | no | the target skill: each selected CLI, its delivery files, its call site, and any dependency write | an offload brief, then one CLI per selected candidate, each in its own directory when wedged, or with a stated reason |
| `autoimprove <path>` | `experiment` | a skill directory; no contract or manifest | cases that the user approves; agent-drafted session cases when analytics exists | isolated run directory | a holdout gate verdict and a private candidate patch |

`audit` never modifies the target. The Usage ceremony of `audit` and `improve` runs `ingest.py`, which creates or refreshes the analytics cache.
`references/analytics-ceremony.md` has the details. Skip Usage and the raw-log fallback write no cache.

For `autoimprove`, read `references/experiments.md`. Follow its workflow, not the shared audit protocol.
The agent drafts the cases. The user needs no contract and no case manifest.
Run `scripts/skillz-experiment.pyz run`, answer each coded stop, and then run `export`.
Ask at most three questions: harness and model, case approval, and budget approval.
When the user selects the `claude` adapter or a custom command check, also read `references/experiment-harness.md`.
Use the installed `scripts/skillz-experiment.pyz`. Do not require a source checkout.

## Shared protocol

### 1. Read and classify

Read the target. Read a linked reference only when its stated trigger matches the run.
A full-package audit may explicitly read every file in the target package.
For a skill directory, run `python3 <this-skill-directory>/scripts/skillz-experiment.pyz audit-facts <skill-directory>` before applying the rubric.
Also run `python3 -I <this-skill-directory>/scripts/inspect-skill.pyz <target>` for the prose facts.
Use both JSON outputs as objective package facts, not a fitness score. An agent file has no package, so skip `audit-facts`.
Read `references/experiments.md § Audit facts contract` for the check ids and statuses.
Report a helper error without treating it as a successful audit.
Classify it as **agent** (`tools:` / `disallowedTools:` or an `agents/registry.yaml` entry) or **skill** (`name:` + `description:`).
For a skill, run `git ls-files -z -co --exclude-standard <skill-dir> | LC_ALL=C sort -z | xargs -0 git hash-object | git hash-object --stdin`.
Its output is the content id. It covers every package file, so a sidecar or reference edit changes it.
For an agent file, run `git hash-object <target>`. Its output is the content id.
When a command fails, the content id is `unavailable`.
Report the body size as `~N tok` against the 5k budget.
For a skill, copy it from the `body.token-estimate` check. For an agent file, count bytes/4 after the frontmatter block.
List the deploy targets the definition reaches (`references/harness-layout.md § Layout`).

### 2. Rubric

Score each lens.
Each row names the principle, the failure mode it catches, and a checkable test.
Read `references/anti-patterns.md` when a finding needs the expanded form.

| Lens | Principle → catches | Check |
|---|---|---|
| **Predictability** | Fixed protocol with checkable completion → «premature completion» | Every step ends on a done-condition an agent can verify. |
| **Invocation** | `description` = trigger conditions, front-loaded, third person → «workflow summary», «summary description» | Trigger phrases + "Do NOT use for"; no internal workflow; skills take length from `description.length`, agent files stay at ≤1024 chars by hand; first sentence carries the trigger. `references/description-optimization.md`. |
| **Portability** | Spec-core frontmatter plus additive Claude fields; user-only policy on every host → «Claude-only assumption», «sidecar missing», «`$ARGUMENTS` dependence» | Cite failed `audit-facts` checks for keys, sidecar pairing, and argument, skill-directory, or file-mention syntax. Judge by hand: args are parsed from the text after the skill name; skills are cross-referenced by `/name`; dispatch and GitHub ops name the contract 
05

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (9 observation(s))
Network
declared (1 observation(s))
Shell
none-observed
Dependencies
pinned
Secrets in source
none-found

Findings (25)

HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/skillz/src/skillz_experiments/_claude.py:84
HOME_DENY = (".ssh", ".gnupg", ".aws", ".config", ".docker", ".kube", ".netrc", ".claude.json", ".bashrc", ".zshrc", ".zshenv",
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/skillz/src/skillz_experiments/_claude.py:85
".profile", ".bash_profile", ".bash_history", ".zsh_history", ".git-credentials", ".npmrc", ".pypirc",
Why it matters. touches a credential store
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.claude/skills/python-authoring
.claude/skills/python-authoring
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.claude/skills/release
.claude/skills/release
Why it matters. link not followed
MEDIUMInventory / provenance · inv.symlink · CWE-1104
.claude/skills/skillz-self-update
.claude/skills/skillz-self-update
Why it matters. link not followed
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
packages/fromargs/src/fromargs/_argv.py:66
print(f"note: split quoted argument {token!r} into {pieces!r}", file=sys.stderr)
LOWInventory / provenance · inv.hidden_file · CWE-1104
.coderabbit.yaml
.coderabbit.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.markdownlint.jsonc
.markdownlint.jsonc
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.yamlfmt
.yamlfmt
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.yamllint.yml
.yamllint.yml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/skillz/tests/skillz_experiments/test_mode_fixtures.py:293
exec(match[0], scope)  # noqa: S102 - the grader source from the repository manifest
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/wedge/tests/wedge/test_launcher.py:291
exec(compile(LAUNCHER_SOURCE, "launcher", "exec"), namespace)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
skills/skillz/evals/mode-fixtures.json:33
"import hashlib, json, pathlib, re\ndef read(name):\n    try:\n        return pathlib.Path(name).read_text()\n    except OSError:\n        return None\nout = {p.relative_to('output').as_posix(): p.rea
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/skillz/tests/skillz_experiments/test_claude.py:294
names = (".bashrc", ".zshrc", ".zshenv", ".profile", ".bash_profile", ".bash_history", ".zsh_history", ".git-credentials",
Why it matters. touches a credential store
LOWFilesystem / path · fs.credential_store · CWE-22, CWE-59
packages/skillz/tests/skillz_experiments/test_claude.py:317
if name.endswith("json") or name == ".netrc":
Why it matters. touches a credential store
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/skillz/tests/skillz_experiments/test_facts.py:194
assert (hit["status"], hit["line"], hit["path"]) == ("pass", 7, "../../README.md")
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/skillz/tests/skillz_experiments/test_facts.py:213
link.symlink_to("../../.agents/skills/demo")
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/skillz/tests/skillz_experiments/test_facts.py:218
link.symlink_to("../../.agents/skills/missing")
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/skillz/tests/skillz_experiments/test_facts_wedge.py:36
'project = "../.."\nrepo = "o/n"\n\n[[target]]\nname = "alpha"\nentry = "alpha:main"\nsource = "../../alpha"\n\n'
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/skillz/tests/skillz_experiments/test_facts_wedge.py:37
+ '[[target]]\nname = "beta"\nentry = "beta:main"\nsource = "../../beta"\n')
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/skillz/tests/skillz_experiments/test_claude.py:718
assert "http://localhost:" in prompt and "http://127.0.0.1:" in prompt
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/skillz/tests/skillz_experiments/test_mode_fixtures.py:67
UNROUTABLE = "http://127.0.0.1:9"
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
packages/wedge/tests/wedge/test_launcher.py:57
yield f"http://127.0.0.1:{server.server_port}", serve_root, handler_cls
LOWObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
packages/skillz/tests/skillz_experiments/test_press_contract.py:69
"skill-unicode-lookalike": broken(skill="еcho-skill"),
LOWObfuscation / stealth · obf.rtl_override · CWE-506, CWE-94
packages/skillz/tests/skillz_experiments/test_press_family_budgets.py:118
@pytest.mark.parametrize("name", ["café", "\U0001f9c0 brie", "a:b:c", "line\nbreak", "x" * 10_000, " ", "RTL",

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 89fccedda2ccfull audit observations/trust-audit/skill/paulnsorensen__skillz-that-grillz.json · Report an issue / request a re-scan
06

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-1189fccedda2ccBLOCKD69first audit
07

Questions

What does the skillz-that-grillz skill do?

Agent skill repository that don't fit cleanly into any of my other cheese-related repositories

Is skillz-that-grillz safe to install?

No — not without reading the findings first. The audit graded it D (69/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What can skillz-that-grillz access on my machine?

The audit observed that it reaches the network and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: none found.

Which assistants does skillz-that-grillz work with?

Its documentation mentions claude-code, codex, copilot, cursor and gemini-cli. That is what the text claims, not a compatibility test we ran.

How current is this page?

The grade is for one exact copy of the source (89fccedda2cc), read on 2026-10-11. The repository is watched, and a new audit runs when it changes — this is the first audit.

Advertisement