Ready
prekuter/dryforge
Understand what you mean before anything is built. An agent skill from prekuter/dryforge.
Set up first-pass for a main folder that holds many repos, or for one repo.
$ npx skills add joetawil7/first-pass --skill setup-first-pass -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install joetawil7/first-pass setup-first-pass --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/joetawil7/first-pass.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/setup-first-pass .claude/skills/setup-first-pass && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "setup-first-pass" agent skill from https://github.com/joetawil7/first-pass/tree/main/skills/setup-first-pass into .claude/skills/setup-first-pass/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "setup-first-pass", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/joetawil7/first-pass/tree/main/skills/setup-first-passType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add joetawil7/first-pass --skill setup-first-pass -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install joetawil7/first-pass setup-first-pass --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/joetawil7/first-pass.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/setup-first-pass .agents/skills/setup-first-pass && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "setup-first-pass" agent skill from https://github.com/joetawil7/first-pass/tree/main/skills/setup-first-pass into .agents/skills/setup-first-pass/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "setup-first-pass", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add joetawil7/first-pass --skill setup-first-pass -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install joetawil7/first-pass setup-first-pass --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/joetawil7/first-pass.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/setup-first-pass .cursor/skills/setup-first-pass && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "setup-first-pass" agent skill from https://github.com/joetawil7/first-pass/tree/main/skills/setup-first-pass into .cursor/skills/setup-first-pass/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "setup-first-pass", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/joetawil7/first-pass.git --path skills/setup-first-pass--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add joetawil7/first-pass --skill setup-first-pass -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install joetawil7/first-pass setup-first-pass --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/joetawil7/first-pass.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/setup-first-pass .gemini/skills/setup-first-pass && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "setup-first-pass" agent skill from https://github.com/joetawil7/first-pass/tree/main/skills/setup-first-pass into .gemini/skills/setup-first-pass/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "setup-first-pass", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install joetawil7/first-pass setup-first-passInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add joetawil7/first-pass --skill setup-first-pass -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/joetawil7/first-pass.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/setup-first-pass .github/skills/setup-first-pass && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "setup-first-pass" agent skill from https://github.com/joetawil7/first-pass/tree/main/skills/setup-first-pass into .github/skills/setup-first-pass/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "setup-first-pass", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add joetawil7/first-pass --skill setup-first-pass -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install joetawil7/first-pass setup-first-pass --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/joetawil7/first-pass.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/setup-first-pass .opencode/skills/setup-first-pass && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "setup-first-pass" agent skill from https://github.com/joetawil7/first-pass/tree/main/skills/setup-first-pass into .opencode/skills/setup-first-pass/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "setup-first-pass", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
setup-first-passSet up first-pass for a main folder that holds many repos, or for one repo.
Setup First Pass is an agent skill from joetawil7/first-pass. Set up first-pass for a main folder that holds many repos, or for one repo. In a main folder it writes one set of working rules at the root that every session loads, a workspace map, and a section in each repo with that repo's real commands, test limits and invariants, and it lists each repo's own hooks so first-pass can run them from the main folder. In one repo it writes the rules and the section into that repo. Use when asked to set up, install, add, update or re-run first-pass, to "add the shipping rules", or…
Its SKILL.md is about 5.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including assets (for example `assets/INVARIANTS.md`, `assets/breaker.md` and `assets/profile-block.md`).
It sits in Agent Workflows, covering Hooks and plugins. It works with Git. The repository describes itself as: Rules and checks that make Claude Code look around a change, not just at the lines it writes: ten questions before code, a reviewer that didn't write it, proof before done, bugs… The licence is MIT.
9 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 2d3e839. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadGlobGrepFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
nodeclaudegitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Setup First Pass loads about 5.2k tokens when it runs. Until then it costs about 152 tokens; SKILL.md has 2,976 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from joetawil7/first-pass at commit 2d3e839, republished under its MIT licence (© joetawil7). 2,976 words, ~5,245 tokens.
.claude/skills/setup-first-pass/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.Installs first-pass so every session, in every tool the team uses, starts with the rules, and each repo's own facts load when work reaches that repo.
The files this skill copies are in its own folder, ${CLAUDE_SKILL_DIR}/assets/:
rules-block.md, profile-block.md, words-block.md, workspace-block.md,
project-block.md, INVARIANTS.md and breaker.md. (Claude Code fills in that path. In other tools it is the
folder this SKILL.md was loaded from.) Read them from there and copy them exactly; never
write them from memory. If they cannot be read, stop and say so.
With the Claude Code plugin, ${CLAUDE_SKILL_DIR}/../../scripts/cli.mjs exists: it does
the deterministic parts (survey, record, cursor-rules, check). Without it (a skills
install in another tool), do the survey by reading, and skip the steps marked plugin.
Nothing is committed, pushed or branched: the owner reviews and commits.
.first-pass/workspace.json. Sessions start here, and a repo's own agents and hooks
never load (Claude Code finds them only in the folder a session starts in and above it),
while its CLAUDE.md loads once a file in it is read.Plugin: node "${CLAUDE_SKILL_DIR}/../../scripts/cli.mjs" survey . prints, as JSON, every
repo (including folders a .code-workspace file adds from outside), with: stack and
frameworks, a UI guess and why, package scripts, CI files and the commands each job runs,
test configs, test folders and compose files, monitoring packages, where words live,
instruction files and their imports, instruction files Claude Code will not load
(loadProblems, cursorRuleProblems), the repo's own Claude Code hooks (identical copies
share a contentKey), its agents and skills, and problems (unreadable files). Save it to a temp file and read it; for more than 20 repos,
summarise it with a script.
Then, for each repo, read what the survey only points at: the CI file itself (which jobs
gate a merge or a deploy), the test setup (what the real-database or end-to-end tests
need running and how to run one file), and the existing instruction files, so the new
blocks do not contradict them. Where they do, keep the repo's rule and note the conflict.
For more than 4 repos, give each repo to its own subagent (at most 3 at a time) with
project-block.md and INVARIANTS.md, and have it return the filled block, the drafted
invariants and the conflicts; the main session writes the files. Say first how many agents
that is and roughly what it costs.
Without the plugin, find the same facts by reading: AI tool files (AGENTS.md,
CLAUDE.md, .cursor/rules/, .github/copilot-instructions.md, GEMINI.md), CI config
(.github/workflows/, .gitlab-ci.yml, bitbucket-pipelines.yml, .circleci/,
azure-pipelines.yml), tests and what they need, monitoring (Sentry, Datadog,
OpenTelemetry), and where user-facing words live (UI strings, emails, help, docs, website,
legal and pricing pages, other repos included).
In one message, only what matters and is not inferable:
contentKey), with its event, matcher, command, the script it runs and what it does
(read the script). For each, ask whether first-pass should run it from the main folder,
and whether it applies to the whole session (a mode or a guard, like a ticket guard) or
only to files in its repos (a formatter, a linter, a design check). A files hook on Bash
sees a command as its repo's only when the command names the repo (git -C <repo> ...,
or a leading cd <repo> &&); a session hook applies to every repo.habit-words skill read the owner's last 20
Claude Code sessions (only what they typed; pasted text, tool output and anything that looks
like a key left out) to find the words they write that make answers worse, and map each to
the checks it should mean? (Default: ask. No: the default words block.)ship-check can then ask Jev whether a review finding is real harm (it can add harm, never
clear it), which small ones to fix now, and what proof a small fix needs. If yes: the
variable that holds it, whether it is in the environment or in a gitignored env file, and
for which repos (a key per account when repos belong to separate accounts). Never ask for
the key itself. (Default: not set up; /first-pass:jev sets it up later.)Write AGENTS.md at the root (Cursor, Codex and most agents read it) with, in this order:
assets/rules-block.md, verbatim;assets/profile-block.md, verbatim, if the owner wants it;habit-words skill's, if the owner agreed to have
their sessions read (run it now, steps 1 to 6), otherwise assets/words-block.md
verbatim. A words block whose marker says through is the owner's own: keep it. One
whose marker says default is managed like the other blocks: replace it (with the
skill's block if the owner now agrees);assets/workspace-block.md, filled: a one-line summary, one table row
per repo (what it is in a few words, stack, UI yes/no, and its group when the repos fall
into groups the owner named, such as two companies; drop the Group column otherwise),
which depends on which, and the hooks first-pass runs.In one-repo mode the root is the repo, a file teammates share: the profile and words blocks
go in ~/.claude/CLAUDE.md instead, and only the rules block goes in the repo.
Each block sits between its markers. If a block is already there, replace it (that is how
updates work); never edit text outside the markers, where the owner keeps their own rules.
Then CLAUDE.md at the root:
@AGENTS.md;@AGENTS.md: nothing to do;@AGENTS.md as its first line, and report every block of
its own text that now repeats or contradicts the rules.Once this root CLAUDE.md exists, Claude Code loads a repo's AGENTS.md only when that repo's CLAUDE.md imports it (tested on Claude Code 2.1.280): step 5 makes sure every repo's does.
Write .first-pass/workspace.json, then stamp it:
{
"firstPass": 1,
"repos": [
{ "name": "api", "path": "api", "ui": false },
{ "name": "web", "path": "web", "ui": true },
{ "name": "site", "path": "../site", "ui": true }
],
"ignore": ["scratch-repo"],
"hooks": [
{
"id": "ticket-guard", "from": "api", "scope": "session",
"events": { "UserPromptSubmit": "", "PreToolUse": "Edit|Write|MultiEdit|NotebookEdit|Bash" },
"command": "node \"${CLAUDE_PROJECT_DIR}/.claude/hooks/ticket-guard.js\"",
"approve": true
}
]
}repos: every repo the survey found that the owner keeps, path relative to the root.
ignore: repos in the folder to leave out.hooks: one entry per approved hook: events maps each event to its matcher ("" for
all), and command, args, shell and timeout are copied from the repo's settings
exactly. ${CLAUDE_PROJECT_DIR} means the repo the hook runs for; ${FIRST_PASS_WORKSPACE}
means the root. Scope session runs from from on every matching event; scope files
runs only for tool calls on files in repos (default [from]) and, on Stop, once for each
of them the session edited, from that repo's folder.sameAs: when the survey shows the same hook (same contentKey) in several repos, write
one entry, from one of them, and list the others in sameAs. A session started inside
any of them then gets that repo's own copy from Claude Code, and first-pass does not run
it a second time.record refuses it, and the report says so.Then run node "${CLAUDE_SKILL_DIR}/../../scripts/cli.mjs" record .. It stamps each hook
marked "approve": true with the hash of its definition and of every file in the folder of
each script it runs, plus the repo's commit (a changed file pauses the hook until it is
approved again), records each repo's CI hash and hooks hash (so a later change is noticed),
and the plugin version. It never replaces a CI hash that changed: once a repo's section has
its CI line updated (step 5), run record . --ci <repo>.
To re-approve a paused hook, show the owner what changed first:
git -C <repo> diff <the approved commit> -- <the pinned files>, then set "approve": true
again and run record.
If the root's own .claude/settings.json already runs a repo hook by hand (a copy lifted
up earlier), report it: once first-pass runs that hook, the copy runs it a second time.
Remove it only with the owner's yes.
First, the file the repo's section goes in, the same on every run: the file that already
holds its first-pass:project block; otherwise AGENTS.md if the repo has one (every
tool reads it); otherwise CLAUDE.md. Then make sure Claude Code loads it: the repo's
CLAUDE.md starts with @AGENTS.md whenever the repo has an AGENTS.md (create a
CLAUDE.md holding just that line if there is none). @INVARIANTS.md goes once, in the
same file as the section (in AGENTS.md it loads through CLAUDE.md's @AGENTS.md, tested).
When CLAUDE.md and AGENTS.md are one file (the survey's claudeMdIsAgentsMd: a hard link or
a symlink), writing either rewrites both: never replace one with an import of the other.
Write the section and @INVARIANTS.md once, into that file, appending in place with the
shell (>>, Add-Content): the Edit and Write tools save a new file, which splits a hard
link into two (tested on Windows). Then run the survey again and check claudeMdIsAgentsMd
is still true; if the link split, the old name holds the old text: put the link back
(ln -f AGENTS.md CLAUDE.md, or on Windows delete CLAUDE.md and
mklink /H CLAUDE.md AGENTS.md), and say so in the report.
One exception: a repo that is itself a Claude Code plugin (it has
.claude-plugin/plugin.json) gets no CLAUDE.md, because claude plugin validate --strict
rejects one at a plugin's root. Its section goes in AGENTS.md, which the breaker reads;
say in the report that Claude Code does not load it on its own.
assets/project-block.md, its {{...}} placeholders filled with exact
commands and paths, not descriptions: CI's checks as the commands CI runs, one test file,
the real tests and what they need running and how to stop it, test limits (from the
repo's own rules), heavy-run rules, monitoring, where its words live (sibling repos
included), the same job done in two places (every pair you found: two delete paths, a
webhook and a reconcile job, two clients for one vendor), extra pre-mortem cases the repo
has (its queue's retry, its second worker, its own endings), and owner rules already
written in the repo. Unknown stays as "unknown: <what to find out>". When the owner keeps
groups of repos apart (two companies that must not be linked), a repo's files never name a
repo of another group, even where code is shared or copied: say it in the report instead.
If a first-pass:project
block exists, leave it (it belongs to the team now) and only report what looks out of
date, with one exception: when the survey or the start-of-session check says the repo's CI
changed, rewrite that block's CI line from the CI files (show the owner the old and new
line) and then run record . --ci <repo>.~/.claude/CLAUDE.md.INVARIANTS.md exists, do not overwrite it; suggest additions in the
report. Otherwise start from assets/INVARIANTS.md and draft 6 to 12 from the code:.mdc imports (Claude Code never loads them): plugin
node "${CLAUDE_SKILL_DIR}/../../scripts/cli.mjs" cursor-rules <repo> points each import at
a generated .md copy in .claude/cursor-rules/ and writes the copies; the start-of-session
check then reports any copy that falls behind its .mdc. Without the plugin, write the
copies by hand (the .mdc text without its frontmatter).first-pass:breaker in every session; nothing to
install. Without the plugin (a skills install in Cursor or another tool), copy
assets/breaker.md to .claude/agents/breaker.md in the folder sessions start in (the
root in a main folder). Also copy it into a repo teammates open on its own. If a different
breaker.md is already there, leave it and report the difference: a repo's own agent is
only found by a session started inside that repo.Claude Code treats .claude/ as protected and asks before writing there: ask for that
approval rather than skipping the step. If it is refused, or the session cannot ask (a
headless run), report it under "Not done" with the exact command.
If a design skill with its own hooks is installed in one repo (for example Impeccable in
<repo>/.claude/skills/impeccable), it only works for sessions started in that repo. Offer:
<repo>/.claude/skills/impeccable/scripts/impeccable install --project --providers=claude -y --no-hooks
run from the root), so its skill and agents load in every session from the start;files hook in workspace.json for the UI repos, running its hook command from the
root copy, for example
{ "id": "impeccable", "scope": "files", "repos": [<UI repos>], "events": { "PostToolUse": "Edit|Write", "Stop": "" }, "command": "\"${FIRST_PASS_WORKSPACE}/.claude/skills/impeccable/scripts/impeccable\" hook", "timeout": 30, "approve": true }.
Its end-of-turn pass only finds the session's edits when run from the edited repo's
folder, which is what a files hook does;Its commands then run from inside the project being designed: say so in the root
CLAUDE.md (outside the markers), with the script's full path.
Follow ${CLAUDE_SKILL_DIR}/../jev/SKILL.md steps 3 and 4 with what the owner said in step 2:
write its config, then jev status and jev test once per key.
{{ left, and @AGENTS.md in
every repo CLAUDE.md whose repo has an AGENTS.md.node "${CLAUDE_SKILL_DIR}/../../scripts/cli.mjs" check . prints nothing out of
date, or explain each line it prints.claude -p "Without tools: quote pre-mortem question 2 from your instructions" at the root,
and claude -p "Read <repo>/package.json, then quote that repo's CI checks line from your instructions".first-pass <version> set up in <folder> (<main folder with N repos | one repo>)
Written: <file> (created | block added | block updated | import added), one per line
Hooks run from the main folder: <id: scope, repos>, or "none"
Habit words: <n> mapped from <n> sessions | the default list | not installed
Invariants: <n> drafted in <repo>/INVARIANTS.md, review before relying on them (one line per repo)
Real tests: <per repo: what exists, or "none: the biggest gap">
Jev judge: <on for <repos> (key from <NAME>) | not set up>
Verified: <command> → <result>
Not done: <each step that could not run, and the command to finish it>
Conflicts with existing rules: <each, or "none">
Duplicates to remove (with your yes): <each hand-made copy of a hook or rule, or "none">
Teammates: Claude Code, `/plugin marketplace add joetawil7/first-pass` then
`/plugin install first-pass@first-pass`; Cursor, `npx skills add joetawil7/first-pass -a cursor --copy`
Nothing committed.© joetawil7, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 7 other files (assets) in skills/setup-first-pass of joetawil7/first-pass.
Open the folder on GitHubat commit 2d3e839
Setup First Pass next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Setup First Pass this skilljoetawil7/first-pass | 92 | — | ~5.2k | Automated safety check: Pass | MIT | |
| Readyprekuter/dryforge | 410 | 1 repos | ~6.8k | Automated safety check: Pass | Apache-2.0 | |
| Publish Plugins Version Bumpvinta/hal-9000 | 138 | 1 repos | ~1k | Automated safety check: Pass | MIT | |
| Goprekuter/dryforge | 410 | 1 repos | ~7.2k | Automated safety check: Pass | Apache-2.0 | |
| LazyCodex Doctorcode-yeongyu/oh-my-openagent | 70k | — | ~2.6k | Automated safety check: Pass | Custom licence | |
| Rule Catalogathola/claude-night-market | 342 | — | ~1.6k | Automated safety check: Pass | MIT |
prekuter/dryforge
Understand what you mean before anything is built. An agent skill from prekuter/dryforge.
vinta/hal-9000
Finds which plugins in the repository changed, bumps only the ones not already bumped since origin/main, and checks that each plugin's two manifests stay in sync.
prekuter/dryforge
Carry out the intent approved in ready, as meant, and prove it with checks that actually ran.
code-yeongyu/oh-my-openagent
Audits a local LazyCodex and Codex CLI install against the latest upstream sources and reports PASS, WARN or FAIL per check without changing anything.
athola/claude-night-market
Browse hookify rule catalog. An agent skill from athola/claude-night-market.
fossasia/eventyay-interpretation
Set up Claude Code hooks to block dangerous git commands (push, reset --hard, clean, branch -D, etc.) before they execute.
joetawil7/first-pass
Learns the words a user habitually writes to their coding agent that make its answers worse ("be 100% sure", "don't assume", "full review", "are you sure?", "all fine, right?"), from what they…
joetawil7/first-pass
Bug-fix routine that fixes the whole class of bug, not just the reported instance.
joetawil7/first-pass
Sets up, checks or changes the optional Jev judge, the TypeSafe decision model that ship-check asks about review findings (is this real harm, is a small one worth fixing now, what proof does a small…
joetawil7/first-pass
Run before writing or changing code for any feature, bug fix or refactor that touches data, jobs, money, outside services or user-facing behaviour.
joetawil7/first-pass
Rewrites the prompt typed after the command before any work starts, then works from the rewrite.
joetawil7/first-pass
The definition of done. An agent skill from joetawil7/first-pass.
Works with
Categories
Set up first-pass for a main folder that holds many repos, or for one repo. Setup First Pass is an agent skill from joetawil7/first-pass. Set up first-pass for a main folder that holds many repos, or for one repo.
Setup First Pass fits situations like: asked to set up; re-run first-pass; add the shipping rules; the start-of-session check says something drifted.
Run `npx skills add joetawil7/first-pass --skill setup-first-pass -a claude-code`. Or copy the skill folder (skills/setup-first-pass in joetawil7/first-pass) into .claude/skills/setup-first-pass in your project. Claude Code loads it when a task matches its description.
Run `npx skills add joetawil7/first-pass --skill setup-first-pass -a codex`. Or copy the skill folder (skills/setup-first-pass in joetawil7/first-pass) into .agents/skills/setup-first-pass in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add joetawil7/first-pass --skill setup-first-pass -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/setup-first-pass, .gemini/skills/setup-first-pass, .github/skills/setup-first-pass and .opencode/skills/setup-first-pass in your project.
Going by SKILL.md and its folder, Setup First Pass needs the command-line tools its instructions call (node, claude and git). Its frontmatter pre-approves these tools: Read, Glob, Grep.
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Setup First Pass is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.2k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Setup First Pass: Ready (prekuter/dryforge, 410 stars), Publish Plugins Version Bump (vinta/hal-9000, 138 stars), Go (prekuter/dryforge, 410 stars) and LazyCodex Doctor (code-yeongyu/oh-my-openagent, 70k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
joetawil7 (a GitHub user) maintains it in joetawil7/first-pass, which has 92 GitHub stars. The repository holds 9 skills in this directory. The repository was last updated on October 7, 2026.
Source: joetawil7/first-pass on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.