From 0fc98a3fd2ad55cbc136bb56716f08c6385f29ed Mon Sep 17 00:00:00 2001 From: pallaoro Date: Sun, 19 Jul 2026 20:30:08 +0200 Subject: [PATCH 1/2] rename /scalable command to /pressure-test The name /scalable named only the first of the command's three pillars (scalable / long-term / efficient), reading like a single-axis check when it runs the full decision test. /pressure-test matches the description's own verb and is honest about scope. Renames commands/scalable.md -> commands/pressure-test.md and updates every reference (installer, activation hook, plugin manifests, package.json, README). The installer now also sweeps a stale scalable.md from prior installs, on both install and uninstall, so existing users don't end up with two commands. README gains a "two main commands" section positioning /pressure-test and /sidenote as the flagship pair. Co-Authored-By: Claude Opus 4.8 --- .claude-plugin/marketplace.json | 4 ++-- .claude-plugin/plugin.json | 2 +- README.md | 20 ++++++++++++-------- bin/install.js | 8 +++++--- commands/{scalable.md => pressure-test.md} | 0 hooks/greybeard-activate.js | 6 +++--- package.json | 2 +- 7 files changed, 24 insertions(+), 18 deletions(-) rename commands/{scalable.md => pressure-test.md} (100%) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 78a0335..d7d0d94 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -1,7 +1,7 @@ { "$schema": "https://anthropic.com/claude-code/marketplace.schema.json", "name": "greybeard", - "description": "Greybeard — Karpathy-inspired coding-agent guidelines, the skillify / check-resolvable meta-skills, and the /scalable decision test.", + "description": "Greybeard — Karpathy-inspired coding-agent guidelines, the skillify / check-resolvable meta-skills, and the /pressure-test decision test.", "owner": { "name": "Clawnify", "url": "https://github.com/clawnify" @@ -9,7 +9,7 @@ "plugins": [ { "name": "greybeard", - "description": "skillify + check-resolvable skills and the /scalable command. Pair with the npx installer for the always-on guidelines.", + "description": "skillify + check-resolvable skills and the /pressure-test command. Pair with the npx installer for the always-on guidelines.", "source": "./", "category": "productivity" } diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 905b9ed..9df8d10 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "greybeard", - "description": "Karpathy-inspired coding-agent skills: skillify (capture repeated work), check-resolvable (keep skills DRY + MECE), and the /scalable decision test.", + "description": "Karpathy-inspired coding-agent skills: skillify (capture repeated work), check-resolvable (keep skills DRY + MECE), and the /pressure-test decision test.", "author": { "name": "Clawnify", "url": "https://github.com/clawnify" diff --git a/README.md b/README.md index 9fdfe5b..ff085c1 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ > Built and maintained by [Clawnify](https://clawnify.com) — a managed platform that provisions AI agents with WhatsApp / Telegram / Email and browser capabilities for non-technical users. -A single `CLAUDE.md` file to improve AI coding-agent behavior, derived from [Andrej Karpathy's observations](https://x.com/karpathy/status/2015883857489522876) on LLM coding pitfalls, plus three sections we added for the AI-assisted-coding era. Ships with two runnable [meta-skills](#skills-skillify-dry--mece-resolvers), the [`/scalable`](#the-scalable-command) decision command, the [`/sidenote`](#the-sidenote-command) park-a-thought command, and a [one-command installer](#install) that fans it all out to every AI coding agent you use. +A single `CLAUDE.md` file to improve AI coding-agent behavior, derived from [Andrej Karpathy's observations](https://x.com/karpathy/status/2015883857489522876) on LLM coding pitfalls, plus three sections we added for the AI-assisted-coding era. Ships with two runnable [meta-skills](#skills-skillify-dry--mece-resolvers), its two main commands — [`/pressure-test`](#the-pressure-test-command), the decision test, and [`/sidenote`](#the-sidenote-command), park-a-thought — and a [one-command installer](#install) that fans it all out to every AI coding agent you use. ## The Problems @@ -182,17 +182,21 @@ The principle above ships as two runnable meta-skills in [`skills/`](./skills) They're standard [Claude Code Agent Skills](https://code.claude.com/docs/en/skills) (portable to Cursor, Codex, OpenClaw). Install and usage: [`skills/README.md`](./skills/README.md). -## The `/scalable` command +## The two main commands -[`commands/scalable.md`](./commands/scalable.md) is a Claude Code slash command that runs the §5 decision test on demand: pressure-test the approach on the table against **scalable / long-term / efficient** — *whatever is scalable, long term, and cannot be done in a more efficient way* — and get one decisive recommendation, with stale-time-budget shortcuts called out. +Greybeard's two flagship slash commands are **`/pressure-test`** and **`/sidenote`** — one guards the *quality* of a decision, the other guards your *focus* while you make it. The skills and always-on guidelines back them up, but these are the two you'll reach for by hand. + +## The `/pressure-test` command + +[`commands/pressure-test.md`](./commands/pressure-test.md) is a Claude Code slash command that runs the §5 decision test on demand: pressure-test the approach on the table against **scalable / long-term / efficient** — *whatever is scalable, long term, and cannot be done in a more efficient way* — and get one decisive recommendation, with stale-time-budget shortcuts called out. ```bash mkdir -p ~/.claude/commands -cp commands/scalable.md ~/.claude/commands/ # personal, all projects +cp commands/pressure-test.md ~/.claude/commands/ # personal, all projects # or: .claude/commands/ for one project ``` -Then `/scalable` (tests the current direction) or `/scalable `. +Then `/pressure-test` (tests the current direction) or `/pressure-test `. ## The `/sidenote` command @@ -218,7 +222,7 @@ Then `/sidenote ` to park one, or `/sidenote` to see what's parked. npx @clawnify/greybeard ``` -It detects the AI coding agents you actually use and installs the right files for each: the seven guidelines into the rule file each one reads (`CLAUDE.md`, `AGENTS.md`, `GEMINI.md`, `.cursor/rules/`, `.windsurf/rules/`, `.clinerules/`, `.github/copilot-instructions.md`), plus the `skillify` / `check-resolvable` skills and the `/scalable` command for Claude Code and OpenClaw. Shared files are edited between markers, so re-running is a safe no-op and your own content is preserved. +It detects the AI coding agents you actually use and installs the right files for each: the seven guidelines into the rule file each one reads (`CLAUDE.md`, `AGENTS.md`, `GEMINI.md`, `.cursor/rules/`, `.windsurf/rules/`, `.clinerules/`, `.github/copilot-instructions.md`), plus the `skillify` / `check-resolvable` skills and the `/pressure-test` command for Claude Code and OpenClaw. Shared files are edited between markers, so re-running is a safe no-op and your own content is preserved. ```bash npx @clawnify/greybeard --list # show detected agents @@ -230,14 +234,14 @@ npx @clawnify/greybeard --uninstall # remove what it added Supported: **Claude Code, Cursor, Windsurf, Cline, GitHub Copilot, Codex, Gemini CLI, OpenClaw** — and any agent that reads `CLAUDE.md` / `AGENTS.md`. -**Claude Code plugin marketplace** (the skills + `/scalable` + always-on guidelines): +**Claude Code plugin marketplace** (the skills + `/pressure-test` + always-on guidelines): ``` /plugin marketplace add clawnify/greybeard /plugin install greybeard ``` -The plugin ships a `SessionStart` / `SubagentStart` hook that injects the three-pillars decision test (scalable / long term / efficient — the core of `/scalable`) into every session automatically — installing the plugin is enough, no per-project `npx` run needed. It's careful not to double up: if the full guidelines are already in your `~/.claude/CLAUDE.md` or a project's `CLAUDE.md` / `AGENTS.md` (via the npx installer or a hand-merge), the hook detects them and stays silent. To turn injection off without uninstalling, set `GREYBEARD=off` in your environment. +The plugin ships a `SessionStart` / `SubagentStart` hook that injects the three-pillars decision test (scalable / long term / efficient — the core of `/pressure-test`) into every session automatically — installing the plugin is enough, no per-project `npx` run needed. It's careful not to double up: if the full guidelines are already in your `~/.claude/CLAUDE.md` or a project's `CLAUDE.md` / `AGENTS.md` (via the npx installer or a hand-merge), the hook detects them and stays silent. To turn injection off without uninstalling, set `GREYBEARD=off` in your environment. **Manual** (just the guidelines, one file — no Node): diff --git a/bin/install.js b/bin/install.js index 2d88bf6..e9e9599 100644 --- a/bin/install.js +++ b/bin/install.js @@ -4,7 +4,7 @@ // greybeard — cross-platform installer. // // Detects the AI coding agents on your machine / in this project and installs -// the Karpathy-inspired guidelines (+ Claude Code skills and the /scalable +// the Karpathy-inspired guidelines (+ Claude Code skills and the /pressure-test // command) into each one's rule location. Pure Node stdlib, zero runtime deps. // // npx @clawnify/greybeard # install for every detected agent @@ -129,14 +129,16 @@ function installClaude(dir, un) { removeFenceFrom(path.join(dir, 'CLAUDE.md')); removePath(path.join(dir, 'skills', 'skillify')); removePath(path.join(dir, 'skills', 'check-resolvable')); - removePath(path.join(dir, 'commands', 'scalable.md')); + removePath(path.join(dir, 'commands', 'scalable.md')); // legacy name, pre-rename + removePath(path.join(dir, 'commands', 'pressure-test.md')); removePath(path.join(dir, 'commands', 'sidenote.md')); return; } fenceInto(path.join(dir, 'CLAUDE.md'), PRINCIPLES); copyDir(path.join(PKG, 'skills', 'skillify'), path.join(dir, 'skills', 'skillify')); copyDir(path.join(PKG, 'skills', 'check-resolvable'), path.join(dir, 'skills', 'check-resolvable')); - writeFile(path.join(dir, 'commands', 'scalable.md'), fs.readFileSync(path.join(PKG, 'commands', 'scalable.md'), 'utf8')); + removePath(path.join(dir, 'commands', 'scalable.md')); // clean up the pre-rename command from prior installs + writeFile(path.join(dir, 'commands', 'pressure-test.md'), fs.readFileSync(path.join(PKG, 'commands', 'pressure-test.md'), 'utf8')); writeFile(path.join(dir, 'commands', 'sidenote.md'), fs.readFileSync(path.join(PKG, 'commands', 'sidenote.md'), 'utf8')); } diff --git a/commands/scalable.md b/commands/pressure-test.md similarity index 100% rename from commands/scalable.md rename to commands/pressure-test.md diff --git a/hooks/greybeard-activate.js b/hooks/greybeard-activate.js index 833576a..644e44b 100644 --- a/hooks/greybeard-activate.js +++ b/hooks/greybeard-activate.js @@ -4,7 +4,7 @@ // greybeard — SessionStart / SubagentStart hook. // // Injects the three-pillars decision test (scalable / long term / efficient — -// the core of the /scalable command) as hidden context so installing the +// the core of the /pressure-test command) as hidden context so installing the // plugin is enough — no per-project `npx @clawnify/greybeard` needed. // Skips injection when the full guidelines are already loaded another way: // @@ -48,7 +48,7 @@ function alreadyLoaded(cwd) { return false; } -// The three pillars, condensed from commands/scalable.md — the single +// The three pillars, condensed from commands/pressure-test.md — the single // question that governs every decision. Keep wording in sync with that file. const PILLARS = `GREYBEARD ACTIVE — judge every decision against the three pillars: whatever is **scalable**, **long term**, and **cannot be done in a more efficient way**. @@ -62,7 +62,7 @@ If the pillars aren't concrete for the decision at hand, define them first: name "No time to do it properly" is usually a stale pre-AI estimate; the proper version often fits this session. If it genuinely doesn't, say so and let the user decide — don't silently downgrade to the shortcut. When a shortcut is right, mark it inline with its ceiling and upgrade trigger. -For contested decisions, run the /scalable command (greybeard:scalable) to pressure-test the approach.`; +For contested decisions, run the /pressure-test command (greybeard:pressure-test) to pressure-test the approach.`; function main() { if ((process.env.GREYBEARD || '').trim().toLowerCase() === 'off') return; diff --git a/package.json b/package.json index 410444d..268a670 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@clawnify/greybeard", "version": "0.1.0", - "description": "Greybeard — Karpathy-inspired guardrails that make your AI coding agent behave like a principled senior engineer. Guidelines + skillify / check-resolvable skills + the /scalable decision test, installable across every AI coding agent.", + "description": "Greybeard — Karpathy-inspired guardrails that make your AI coding agent behave like a principled senior engineer. Guidelines + skillify / check-resolvable skills + the /pressure-test decision test, installable across every AI coding agent.", "license": "MIT", "homepage": "https://github.com/clawnify/greybeard", "repository": { From 0e62318b08b5d03023a48c221979f28d5b6d9ab0 Mon Sep 17 00:00:00 2001 From: pallaoro Date: Sun, 19 Jul 2026 21:50:16 +0200 Subject: [PATCH 2/2] ci: add npm publish workflow (release-triggered) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Publishes @clawnify/greybeard to npm on GitHub Release, modeled on the org-standard clawflow pattern but adapted for this repo: no `npm ci` (zero deps, no lockfile) and no `npm test` (no test script) — substitutes `npm run build` + the build-rules drift check + an installer smoke test. Uses secrets.NPM_TOKEN (repo-level) with --provenance --access public and id-token: write. The token never touches the repo. Co-Authored-By: Claude Opus 4.8 --- .github/workflows/publish.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000..bde047c --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,31 @@ +name: Publish to npm + +on: + release: + types: [published] + +jobs: + publish: + runs-on: ubuntu-latest + permissions: + contents: read + id-token: write # required for --provenance (OIDC) + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: 22 + registry-url: https://registry.npmjs.org + + # Zero runtime deps + no lockfile, so no `npm ci`. Regenerate the per-agent + # rule files, then fail if any copy drifted from CLAUDE.md (the single source). + - run: npm run build + - run: node scripts/build-rules.js --check + + # Smoke-test the installer before shipping it. + - run: node bin/install.js --list + + - run: npm publish --provenance --access public + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}