From d24f39e3084082f8f1798dcba50120961e414519 Mon Sep 17 00:00:00 2001 From: "Robert Kent Jr." Date: Fri, 14 Aug 2026 13:02:26 -0400 Subject: [PATCH] feat(marketplace): add No AI Slop and correct marketplace versioning Packages Peter Yang's MIT-licensed no-ai-slop skill (petergyang/no-ai-slop) unmodified, and corrects how this marketplace declares versions and validates itself. New plugin - plugins/no-ai-slop/ at v1.0.0, skill and eval copied verbatim - Original LICENSE and Peter Yang's copyright preserved and credited - README covers install, both modes, the pattern list, and versioning Versioning - A plugin's version is declared once, in its own plugin.json. Claude Code always prefers that value over a marketplace entry, so duplicates are dead text that can silently contradict the real version. Removed the version from every marketplace entry and rewrote the guidance in CONTRIBUTING and README that claimed the opposite. - Documented the {plugin-name}--v{version} release tag convention and claude plugin tag, which is how dependency version constraints resolve. Validation - Replaced the hand-rolled scripts/validate-marketplace.py with the official claude plugin validate --strict, run in CI over the marketplace and every plugin under plugins/. Marketplace metadata - Description now covers plugins, skills, hooks, agents, and MCP servers across Claude Code, Claude Desktop, claude.ai, and Codex CLI - no-ai-slop categorized as productivity, matching the official taxonomy - Added $schema to both plugin manifests for editor validation Docs - Removed every em dash from README, CONTRIBUTING, and the plugin README Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01RLw5qprnqJri4JwtuU8Amz --- .claude-plugin/marketplace.json | 27 ++- .claude-plugin/plugin.json | 13 +- .github/workflows/validate-plugin.yml | 93 ++--------- AGENTS.md | 15 ++ CONTRIBUTING.md | 75 ++++++++- README.md | 100 +++++++++-- plugins/no-ai-slop/.claude-plugin/plugin.json | 21 +++ plugins/no-ai-slop/LICENSE | 21 +++ plugins/no-ai-slop/README.md | 157 ++++++++++++++++++ plugins/no-ai-slop/skills/no-ai-slop/SKILL.md | 97 +++++++++++ plugins/no-ai-slop/skills/no-ai-slop/eval.md | 44 +++++ skills/help/SKILL.md | 10 +- 12 files changed, 563 insertions(+), 110 deletions(-) create mode 100644 plugins/no-ai-slop/.claude-plugin/plugin.json create mode 100644 plugins/no-ai-slop/LICENSE create mode 100644 plugins/no-ai-slop/README.md create mode 100644 plugins/no-ai-slop/skills/no-ai-slop/SKILL.md create mode 100644 plugins/no-ai-slop/skills/no-ai-slop/eval.md diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 534c668..9f2f6c8 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -1,21 +1,44 @@ { "name": "helixlab", - "description": "A growing collection of developer tools and skills for AI-powered coding workflows", + "description": "AI agent tooling marketplace. Plugins, skills, hooks, agents, and MCP servers for Claude Code, Claude Desktop, claude.ai, and Codex CLI.", "owner": { "name": "Robert Kent Jr.", "url": "https://helixlab.app" }, + "metadata": { + "version": "1.3.0", + "description": "AI agent tooling marketplace. Plugins, skills, hooks, agents, and MCP servers for Claude Code, Claude Desktop, claude.ai, and Codex CLI." + }, "plugins": [ { "name": "helixlab", "description": "A growing collection of developer tools and skills for AI-powered coding workflows", - "version": "1.2.0", "source": "./", "author": { "name": "Robert Kent Jr.", "url": "https://helixlab.app" }, "category": "development" + }, + { + "name": "no-ai-slop", + "description": "Removes 20+ patterns of AI slop from any piece of writing while preserving the writer's voice", + "source": "./plugins/no-ai-slop", + "author": { + "name": "Robert Kent Jr.", + "url": "https://helixlab.app" + }, + "homepage": "https://github.com/mrrobertkent/helixlab-plugin/tree/main/plugins/no-ai-slop", + "license": "MIT", + "keywords": [ + "writing", + "editing", + "voice", + "ai-slop", + "prose", + "ai-skills" + ], + "category": "productivity" } ] } diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 40999cf..c42fff8 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,7 +1,8 @@ { + "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", "name": "helixlab", "description": "A growing collection of developer tools and skills for AI-powered coding workflows", - "version": "1.2.0", + "version": "1.2.1", "author": { "name": "Robert Kent Jr.", "url": "https://helixlab.app" @@ -9,5 +10,13 @@ "homepage": "https://github.com/mrrobertkent/helixlab-plugin", "repository": "https://github.com/mrrobertkent/helixlab-plugin", "license": "MIT", - "keywords": ["developer-tools", "video", "vision", "frames", "analysis", "ffmpeg", "ai-skills"] + "keywords": [ + "developer-tools", + "video", + "vision", + "frames", + "analysis", + "ffmpeg", + "ai-skills" + ] } diff --git a/.github/workflows/validate-plugin.yml b/.github/workflows/validate-plugin.yml index 7e19e69..a9b5ca5 100644 --- a/.github/workflows/validate-plugin.yml +++ b/.github/workflows/validate-plugin.yml @@ -12,90 +12,21 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Validate JSON syntax - run: | - echo "=== Validating plugin.json ===" - python3 -c "import json; json.load(open('.claude-plugin/plugin.json'))" - echo " PASS: plugin.json is valid JSON" - - echo "" - echo "=== Validating marketplace.json ===" - python3 -c "import json; json.load(open('.claude-plugin/marketplace.json'))" - echo " PASS: marketplace.json is valid JSON" + - name: Install Claude Code + run: curl -fsSL https://claude.ai/install.sh | bash - - name: Check required fields + - name: Validate marketplace and every plugin run: | - echo "=== Checking plugin.json required fields ===" - python3 -c " - import json, sys - data = json.load(open('.claude-plugin/plugin.json')) - errors = [] - if 'name' not in data: - errors.append('Missing required field: name') - if 'version' not in data: - errors.append('Missing required field: version') - if errors: - for e in errors: - print(f' FAIL: {e}') - sys.exit(1) - print(f' PASS: name={data[\"name\"]}, version={data[\"version\"]}') - " - + export PATH="$HOME/.local/bin:$PATH" + echo "=== marketplace ===" + claude plugin validate . --strict echo "" - echo "=== Checking marketplace.json required fields ===" - python3 -c " - import json, sys - data = json.load(open('.claude-plugin/marketplace.json')) - errors = [] - if 'name' not in data: - errors.append('Missing required field: name') - if 'plugins' not in data or len(data['plugins']) == 0: - errors.append('Missing or empty plugins array') - if errors: - for e in errors: - print(f' FAIL: {e}') - sys.exit(1) - print(f' PASS: marketplace={data[\"name\"]}, plugins={len(data[\"plugins\"])}') - " - - - name: Check version sync - run: | - echo "=== Checking version sync between plugin.json and marketplace.json ===" - python3 -c " - import json, sys - plugin = json.load(open('.claude-plugin/plugin.json')) - marketplace = json.load(open('.claude-plugin/marketplace.json')) - - plugin_version = plugin.get('version') - marketplace_version = None - for p in marketplace.get('plugins', []): - if p.get('name') == plugin.get('name'): - marketplace_version = p.get('version') - break - - if not plugin_version: - print(' FAIL: No version in plugin.json') - sys.exit(1) - if not marketplace_version: - print(' FAIL: No version in marketplace.json for plugin') - sys.exit(1) - if plugin_version != marketplace_version: - print(f' FAIL: Version mismatch — plugin.json={plugin_version}, marketplace.json={marketplace_version}') - sys.exit(1) - print(f' PASS: Versions in sync at {plugin_version}') - " - - - name: Validate semver format - run: | - echo "=== Checking semver format ===" - python3 -c " - import json, re, sys - version = json.load(open('.claude-plugin/plugin.json')).get('version', '') - if not re.match(r'^\d+\.\d+\.\d+(-[a-zA-Z0-9.]+)?$', version): - print(f' FAIL: \"{version}\" is not valid semver (expected MAJOR.MINOR.PATCH)') - sys.exit(1) - print(f' PASS: {version} is valid semver') - " + for manifest in plugins/*/.claude-plugin/plugin.json; do + [ -e "$manifest" ] || continue + plugin_dir=$(dirname "$(dirname "$manifest")") + echo "=== $plugin_dir ===" + claude plugin validate "$plugin_dir" --strict + done test-scripts: runs-on: ubuntu-latest diff --git a/AGENTS.md b/AGENTS.md index dbd8ec1..da98a5b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -204,3 +204,18 @@ Print the saved file path FIRST, then call AskUserQuestion using **Template 1** **Step 6: Post-analysis cleanup (MANDATORY — wait for response)** Call AskUserQuestion using **Template 4** from the same file. Only delete if user chooses "Delete recording". + +--- + +## No AI Slop (separate plugin) + +The HelixLab marketplace also ships a `no-ai-slop` plugin at `plugins/no-ai-slop/`. It needs no scripts and no dependencies. + +To use it with a non-Claude agent, point your agent at `plugins/no-ai-slop/skills/no-ai-slop/SKILL.md` and follow it directly: + +- **Edit (default):** return the edited draft plus a **What changed** section +- **Detect:** name each slop pattern with a quoted line and a short fix, without rewriting + +Check the result against `plugins/no-ai-slop/skills/no-ai-slop/eval.md` before returning it, and fix any failed check. + +The skill is by Peter Yang (https://github.com/petergyang/no-ai-slop), MIT licensed and included unmodified. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5c53be8..9fba6b5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -60,7 +60,7 @@ All scripts must: - Start with `#!/bin/bash` and `set -euo pipefail` - Print usage to stderr and exit 1 when called with no or invalid arguments - Be executable (`chmod +x`) -- Accept any ffmpeg-supported video format — never filter by file extension +- Accept any ffmpeg-supported video format. Never filter by file extension - Use `/tmp/claude-video-frames//` for frame output directories - Include a header comment with script name, purpose, and usage @@ -81,9 +81,9 @@ All scripts must: 2. Add any scripts to `skills//scripts/` 3. Add workflow guides to `skills//workflows/` if applicable 4. Update these files with your skill's instructions: - - `AGENTS.md` — used by Cursor, Codex, Kiro, and most agents - - `GEMINI.md` — used by Google Gemini - - `.cursor/rules/` — add a `.mdc` file for automatic Cursor context injection + - `AGENTS.md` for Cursor, Codex, Kiro, and most agents + - `GEMINI.md` for Google Gemini + - `.cursor/rules/`, add a `.mdc` file for automatic Cursor context injection 5. Add your skill to the table in `skills/help/SKILL.md` 6. Add tests to `tests/` 7. Update `README.md` with a section under "Available Skills" @@ -99,9 +99,43 @@ skills// examples/ # Example output reports (if applicable) ``` +### Adding a New Plugin + +This repository is a marketplace. The root directory is the `helixlab` plugin; every other plugin lives in its own folder under `plugins/`. + +1. Create the plugin folder: + ``` + plugins// + .claude-plugin/plugin.json # name, version, description, author, license + skills//SKILL.md + README.md # what it does, install, usage, versioning + LICENSE # if the plugin carries a different copyright + ``` +2. Add an entry to `.claude-plugin/marketplace.json` with a relative source: + ```json + { + "name": "", + "description": "...", + "version": "1.0.0", + "source": "./plugins/", + "category": "..." + } + ``` + Set the version in the plugin's `plugin.json` only, never in the marketplace entry. See [Versioning](#versioning). +3. Bump `metadata.version` in `.claude-plugin/marketplace.json` (MINOR for a new plugin) +4. Add the plugin to the **Plugins** table and the **Repository Layout** block in `README.md` +5. Add it to the marketplace table in `skills/help/SKILL.md` +6. Validate: + ```bash + claude plugin validate . --strict + ``` + +> [!IMPORTANT] +> When a plugin repackages third-party work, keep the original `LICENSE` and credit the author in the plugin `README.md`. + ### Versioning -We use [Semantic Versioning](https://semver.org/) in `.claude-plugin/plugin.json`: +We use [Semantic Versioning](https://semver.org/) in each plugin's `plugin.json`: | Change Type | Bump | Example | |------------|------|---------| @@ -109,11 +143,38 @@ We use [Semantic Versioning](https://semver.org/) in `.claude-plugin/plugin.json | New skills, new scripts, new capabilities | MINOR (0.x.0) | `1.0.1` → `1.1.0` | | Breaking changes (removed/renamed commands) | MAJOR (x.0.0) | `1.1.0` → `2.0.0` | -Maintainers handle version bumps — contributors do not need to update the version number in PRs. +A version belongs in **one** place: the plugin's own `.claude-plugin/plugin.json`. + +Do not repeat it in the plugin's `marketplace.json` entry. Claude Code resolves a plugin's version from the first source that is set, in this order: + +1. `version` in the plugin's `plugin.json` +2. `version` in the plugin's marketplace entry +3. The git commit SHA of the plugin's source + +Because `plugin.json` always wins, a version left behind in `marketplace.json` is dead text that can silently contradict the real one. The Claude Code docs state this directly: + +> Avoid setting `version` in both `plugin.json` and the marketplace entry. Claude Code always uses the `plugin.json` value without warning, so a stale manifest version can mask a version you set in `marketplace.json`. + +Bumping `plugin.json` is what reaches installed users. Note that auto-update is off by default for non-Anthropic marketplaces, so users pick up a release either by enabling auto-update for the marketplace in `/plugin`, or by running `claude plugin update `. + +Maintainers handle version bumps. Contributors do not need to update the version number in PRs. + +### Tagging a release + +Tag each release as `{plugin-name}--v{version}`. This is the naming convention Claude Code uses to resolve plugin dependency version constraints, and it lets one marketplace repository host several plugins with independent version lines. + +From the plugin directory: + +```bash +claude plugin tag --dry-run # preview +claude plugin tag --push # create and push +``` + +The command derives the tag from the manifest, validates the plugin, and refuses on a dirty working tree or an existing tag. ## Pull Request Guidelines -- Keep PRs focused — one feature or fix per PR +- Keep PRs focused on one feature or fix per PR - Include a clear description of what changed and why - Link any related issues - Ensure all tests pass before requesting review diff --git a/README.md b/README.md index 24428ca..c22c24a 100644 --- a/README.md +++ b/README.md @@ -2,14 +2,32 @@ > Open-source developer tools and skills for AI coding agents -HelixLab is a growing collection of developer tools that work with any AI coding agent. Each tool is a self-contained set of bash scripts and markdown workflow guides — no dependencies beyond standard Unix tools and ffmpeg. +HelixLab is a growing collection of developer tools that work with any AI coding agent. Each tool is a self-contained set of bash scripts and markdown workflow guides, with no dependencies beyond standard Unix tools and ffmpeg. + +This repository is also a **Claude Code marketplace**. Add it once and install any plugin below. + +## Plugins + +| Plugin | Version | What it does | Install | +|--------|---------|--------------|---------| +| [`helixlab`](#available-skills) | 1.2.1 | Video and browser tooling for AI agents: vision replay, record browser, setup, help | `/plugin install helixlab@helixlab` | +| [`no-ai-slop`](plugins/no-ai-slop/) | 1.0.0 | Removes 20+ patterns of AI slop from writing while preserving the writer's voice | `/plugin install no-ai-slop@helixlab` | + +Add the marketplace first: + +``` +/plugin marketplace add https://github.com/mrrobertkent/helixlab-plugin +``` + +> [!TIP] +> Already have the marketplace? Run `/plugin marketplace update helixlab` to pick up new plugins and version bumps. --- ## Prerequisites > [!IMPORTANT] -> ffmpeg must be installed before using any HelixLab tools. Without it, video analysis scripts will fail immediately. +> ffmpeg is required by the **`helixlab`** plugin only. Without it, the video analysis scripts fail immediately. The `no-ai-slop` plugin has no dependencies. > > The setup skill can detect your OS and handle installation automatically: > ``` @@ -40,18 +58,21 @@ bash tests/test-scripts.sh --check-ffmpeg ## Installation -### Claude Code (Plugin) +### Claude Code (Plugins) -Add the marketplace and install: +Add the marketplace once, then install the plugins you want: ``` /plugin marketplace add https://github.com/mrrobertkent/helixlab-plugin -/plugin install helixlab +/plugin install helixlab@helixlab +/plugin install no-ai-slop@helixlab ``` Then invoke skills directly: ``` /helixlab:vision-replay +/helixlab:record-browser /helixlab:help +/no-ai-slop:no-ai-slop ``` > Any ffmpeg-supported format works: mp4, webm, mov, mkv, avi, flv, etc. @@ -59,7 +80,7 @@ Then invoke skills directly: > [!TIP] > Use `--scope project` when installing to share the plugin configuration with teammates via Git: > ``` -> /plugin install helixlab --scope project +> /plugin install helixlab@helixlab --scope project > ```
@@ -72,7 +93,7 @@ Then invoke skills directly: HelixLab ships `.cursor/rules/` for automatic context injection. Clone the repo and Cursor will detect the rules when video files are in context. -Alternatively, copy `AGENTS.md` to your project root — Cursor reads `AGENTS.md` natively. +Alternatively, copy `AGENTS.md` to your project root. Cursor reads `AGENTS.md` natively. #### OpenAI Codex @@ -83,7 +104,7 @@ Codex reads `AGENTS.md` automatically. Clone or copy `AGENTS.md` to your project Gemini reads `GEMINI.md` automatically. Clone or copy `GEMINI.md` to your project root. > [!TIP] -> Gemini supports hierarchical config — a global `~/.gemini/GEMINI.md` plus a project-level `GEMINI.md`. You can also configure Gemini CLI to read `AGENTS.md`: +> Gemini supports hierarchical config: a global `~/.gemini/GEMINI.md` plus a project-level `GEMINI.md`. You can also configure Gemini CLI to read `AGENTS.md`: > ```json > // ~/.gemini/settings.json > { "context": { "fileName": ["AGENTS.md", "GEMINI.md"] } } @@ -102,7 +123,7 @@ All of these agents support the `AGENTS.md` standard. Clone or copy `AGENTS.md`
Manual (Any Agent) -All scripts work standalone — no plugin system required: +All scripts work standalone. No plugin system required: ```bash git clone https://github.com/mrrobertkent/helixlab-plugin.git @@ -137,6 +158,8 @@ Or use the skill in Claude Code: ## Available Skills +Skills below ship in the **`helixlab`** plugin. The `no-ai-slop` plugin is documented separately in [`plugins/no-ai-slop/README.md`](plugins/no-ai-slop/README.md). + ### Vision Replay Extract frames from video files using ffmpeg and analyze them with AI vision capabilities. @@ -179,7 +202,7 @@ bash skills/vision-replay/scripts/cleanup.sh /tmp/frames Launch a headed Chrome browser with built-in recording and annotation tools. Navigate manually while recording, draw annotations directly on the page, and save WebM recordings for AI analysis. > [!NOTE] -> Record Browser requires **Node.js 22+**. The install script downloads a self-contained Chrome for Testing binary — no npm packages or global browser install needed. +> Record Browser requires **Node.js 22+**. The install script downloads a self-contained Chrome for Testing binary, so no npm packages or global browser install are needed. **Features:** @@ -188,12 +211,12 @@ Launch a headed Chrome browser with built-in recording and annotation tools. Nav | Glassmorphism toolbar | Record, On Action, pause/stop, restart | | 6 drawing tools | Select, Pen, Line, Rectangle, Circle, Text (via fabric.js) | | Lines & arrows | Plain line, arrow at end, arrow at start, double arrow | -| 5 color presets | Red, yellow, blue, green, white — optimized for AI vision | +| 5 color presets | Red, yellow, blue, green, white, optimized for AI vision | | Stroke & fill | 4 stroke widths (1/2/3/5px), semi-transparent fill toggle for shapes | | Text formatting | 4 sizes (S/M/L/XL), background toggle (BG), border toggle (BD) | | Keyboard shortcuts | Space, D, Esc, Ctrl+Z, C, 1-4, Delete, Shift (constrain), ⌘/Ctrl+Click (multi-select) | | Post-recording dialog | Video playback, expand overlay, rename, save & close | -| Welcome page | Launches when no URL provided — includes full tool reference | +| Welcome page | Launches when no URL is provided. Includes full tool reference | **How it works with Vision Replay:** @@ -206,10 +229,10 @@ Record Browser captures annotated recordings. Vision Replay analyzes them. The t Quick start ```bash -# Install browser dependencies (one-time — downloads Chrome for Testing) +# Install browser dependencies (one-time, downloads Chrome for Testing) bash skills/record-browser/scripts/install-browser.sh -# Launch recorder (opens welcome page — navigate via address bar) +# Launch recorder (opens welcome page, navigate via address bar) bash skills/record-browser/scripts/launch-recorder.sh # Or launch directly at a URL @@ -231,7 +254,7 @@ bash skills/record-browser/scripts/launch-recorder.sh "https://example.com" | Windows (WSL2 + WSLg) | Supported | Windows 11 with WSLg provides GUI support automatically | | Windows (WSL2, older) | Requires setup | Install an X server (VcXsrv, X410) and set `DISPLAY` | -Record Browser launches a **headed** (visible) Chrome window — it cannot run headless since the user needs to interact with the browser to navigate and annotate. +Record Browser launches a **headed** (visible) Chrome window. It cannot run headless because the user needs to interact with the browser to navigate and annotate.
@@ -244,7 +267,7 @@ Record Browser launches a **headed** (visible) Chrome window — it cannot run h | `Node.js 22+ is required` | Install Node.js 22+ from [nodejs.org](https://nodejs.org) | | Chrome window doesn't appear (WSL2) | Install WSLg (Windows 11) or an X server and set `DISPLAY=:0` | | Blank recording | Ensure you clicked Record or On Action before interacting | -| Annotations not visible in recording | Annotations are captured automatically — ensure Draw mode was active when drawing | +| Annotations not visible in recording | Annotations are captured automatically. Ensure Draw mode was active when drawing |
@@ -253,6 +276,49 @@ Record Browser launches a **headed** (visible) Chrome window — it cannot run h --- +## No AI Slop + +A separate plugin in this marketplace. It edits drafts into sharper, more human writing by cutting 20+ AI-slop patterns, and it keeps the writer's voice intact. + +``` +/plugin install no-ai-slop@helixlab +/no-ai-slop:no-ai-slop +``` + +| Mode | Trigger | Output | +|------|---------|--------| +| Edit (default) | "Clean this up", "make this less AI-sounding", or a pasted draft | Edited draft plus a **What changed** section | +| Detect | "Is this AI slop?", "audit this", "flag the patterns" | Each pattern named with a quoted line and a short fix. No rewrite. | + +It removes binary contrasts ("It's not X. It's Y."), throat-clearing openers, faux-insight setups, colon reveals, importance puffery, weasel attribution, fake-profound kickers, summary-recap endings, formatting slop, em dash overuse, and a banned word list including delve, leverage, robust, and transformative. + +> [!NOTE] +> The `no-ai-slop` skill is by [Peter Yang](https://github.com/petergyang/no-ai-slop), MIT licensed and included unmodified. HelixLab repackages it as an installable, version-tracked Claude Code plugin. See [`plugins/no-ai-slop/README.md`](plugins/no-ai-slop/README.md) for the full pattern list and attribution. + +--- + +## Repository Layout + +``` +.claude-plugin/ + marketplace.json # Marketplace manifest, lists every plugin + plugin.json # Manifest for the root `helixlab` plugin +skills/ # `helixlab` plugin skills +scripts/ # `helixlab` setup script +tests/ # `helixlab` script tests +plugins/ + no-ai-slop/ # `no-ai-slop` plugin (self-contained) + .claude-plugin/plugin.json + skills/no-ai-slop/ + README.md + LICENSE +``` + +> [!IMPORTANT] +> A plugin's version lives in its own `.claude-plugin/plugin.json` and nowhere else. Claude Code always prefers that value over a `version` in the marketplace entry, so a copy left in `marketplace.json` is dead text that can silently contradict the real one. Releases are tagged `{plugin-name}--v{version}` with `claude plugin tag --push`. See [CONTRIBUTING.md](CONTRIBUTING.md#versioning). + +--- + ## Contributing We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for full guidelines on: @@ -264,4 +330,4 @@ We welcome contributions! See [CONTRIBUTING.md](CONTRIBUTING.md) for full guidel ## License -[MIT](LICENSE) — Robert Kent Jr. +[MIT](LICENSE). Copyright (c) 2026 Robert Kent Jr. diff --git a/plugins/no-ai-slop/.claude-plugin/plugin.json b/plugins/no-ai-slop/.claude-plugin/plugin.json new file mode 100644 index 0000000..de110c5 --- /dev/null +++ b/plugins/no-ai-slop/.claude-plugin/plugin.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", + "name": "no-ai-slop", + "description": "Removes 20+ patterns of AI slop from any piece of writing while preserving the writer's voice", + "version": "1.0.0", + "author": { + "name": "Robert Kent Jr.", + "url": "https://helixlab.app" + }, + "homepage": "https://github.com/mrrobertkent/helixlab-plugin/tree/main/plugins/no-ai-slop", + "repository": "https://github.com/mrrobertkent/helixlab-plugin", + "license": "MIT", + "keywords": [ + "writing", + "editing", + "voice", + "ai-slop", + "prose", + "ai-skills" + ] +} diff --git a/plugins/no-ai-slop/LICENSE b/plugins/no-ai-slop/LICENSE new file mode 100644 index 0000000..644ebee --- /dev/null +++ b/plugins/no-ai-slop/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Peter Yang + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/plugins/no-ai-slop/README.md b/plugins/no-ai-slop/README.md new file mode 100644 index 0000000..095ac82 --- /dev/null +++ b/plugins/no-ai-slop/README.md @@ -0,0 +1,157 @@ +# No AI Slop + +> Removes 20+ patterns of AI slop from any piece of writing while preserving the writer's voice + +A Claude Code plugin that turns Claude into a sharp human editor. It cuts the phrasing that makes text read as machine-generated, and it leaves the parts that make the writing sound like a person. + +Part of the [HelixLab](https://github.com/mrrobertkent/helixlab-plugin) marketplace. + +--- + +## Attribution + +This plugin packages the `no-ai-slop` skill by [Peter Yang](https://creatoreconomy.so), originally published at [petergyang/no-ai-slop](https://github.com/petergyang/no-ai-slop) under the MIT License. + +The skill content in `skills/no-ai-slop/` is unmodified. HelixLab repackages it as a Claude Code plugin so it can be installed and version-tracked through the HelixLab marketplace. Copyright remains with Peter Yang; see [LICENSE](LICENSE). + +If you find it useful, star the [original repository](https://github.com/petergyang/no-ai-slop). + +--- + +## Installation + +Add the HelixLab marketplace and install the plugin: + +``` +/plugin marketplace add https://github.com/mrrobertkent/helixlab-plugin +/plugin install no-ai-slop@helixlab +``` + +> [!TIP] +> Use `--scope project` to share the plugin with teammates through your repository's Git history: +> ``` +> /plugin install no-ai-slop@helixlab --scope project +> ``` + +No dependencies. The plugin is a single skill file plus its evaluation checklist. + +--- + +## Usage + +Invoke the skill directly, or just paste a draft and ask Claude to clean it up: + +``` +/no-ai-slop:no-ai-slop +``` + +The skill has two modes. + +| Mode | Trigger | Output | +|------|---------|--------| +| Edit (default) | "Clean this up", "make this less AI-sounding", or a pasted draft | The edited draft plus a **What changed** section | +| Detect | "Is this AI slop?", "audit this", "flag the patterns" | Each pattern found, the quoted line, and a short fix. No rewrite. | + +### Examples + +Edit a draft: + +``` +/no-ai-slop:no-ai-slop + +Here's the thing: our new dashboard doesn't just show data. It empowers +teams to delve into their metrics. The best part: it learns. This is huge. +``` + +Audit without rewriting: + +``` +Is this slop? Scan it and name the patterns, don't rewrite it. + +[paste draft] +``` + +Chain it after your own writing: + +``` +Draft a release note for v2.1, then run it through /no-ai-slop:no-ai-slop +``` + +--- + +## What it removes + +**Banned words.** delve, foster, leverage, utilize, facilitate, empower, streamline, robust, cutting-edge, paradigm shift, game changer, tapestry, realm, beacon, multifaceted, meticulous, intricate, paramount, transformative, elevate, embark, supercharge, harness, ever-evolving. + +**Patterns**, with the fix applied in each case: + +| Pattern | Example | Fix | +|---------|---------|-----| +| Binary contrasts | "It's not X. It's Y." | State Y directly | +| Throat-clearing openers | "Here's the thing," "Let me be clear" | Cut, state the point | +| Faux-insight setups | "What nobody tells you," "The part everyone misses" | Make the claim stand alone | +| Colon reveals | "The best part: it learns." | Rewrite as a plain sentence | +| Superficial analysis | "...highlighting the team's commitment" | Replace with the actual consequence | +| Importance puffery | "marks a pivotal moment" | State the fact, let the reader judge | +| Interpretive metadiscourse | "That last part matters more than it sounds" | Delete, or replace with support | +| Weasel attribution | "Experts agree," "studies show" | Name the source or cut the claim | +| Synonym cycling | agent → assistant → tool for one thing | Repeat the clear word | +| Negative listing | "Not a X. Not a Y. A Z." | Say Z | +| Dramatic fragmentation | "That's it. That's the whole thing." | Complete sentences | +| Rhetorical setups | "What if I told you...", "Plot twist:" | Drop and make the point | +| Fake-profound kickers | "The future isn't coming. It's already here." | Delete, end on the last concrete line | +| Summary-recap endings | "In conclusion," "Ultimately," | End on a takeaway or next action | +| Formatting slop | Emoji headings, decorative bold, bullets that should be prose | Format follows content | +| Em dash overuse | Dashes as a rhythm crutch | None in short copy, 1-2 in long drafts | + +Full list, with the editing principles and the portability test, is in [`skills/no-ai-slop/SKILL.md`](skills/no-ai-slop/SKILL.md). + +--- + +## What it protects + +The skill makes the minimum effective edit. It is built to keep: + +- Your vocabulary, cadence, bluntness, humor, and digressions +- Strong opinions, profanity, self-interruptions, and honest admissions +- "I think," "maybe," and "to be honest" when they carry real uncertainty +- Specific facts, numbers, names, dates, and mechanisms +- Your structure, unless the structure is hurting the piece + +It will not invent claims, examples, statistics, or opinions. If a source is missing, it asks instead of filling one in. + +--- + +## How the quality check works + +After every edit the skill runs itself against [`skills/no-ai-slop/eval.md`](skills/no-ai-slop/eval.md), a 27-point checklist covering editing principles, banned words, patterns, and a final read. Any failed check sends the draft back for another pass before you see it. No second agent is required. + +--- + +## Components + +| Path | Purpose | +|------|---------| +| `.claude-plugin/plugin.json` | Plugin manifest | +| `skills/no-ai-slop/SKILL.md` | Skill definition: principles, banned words, patterns, workflow | +| `skills/no-ai-slop/eval.md` | Self-check the skill runs before returning a draft | + +--- + +## Versioning + +This plugin follows [Semantic Versioning](https://semver.org/). The version is declared once, in `.claude-plugin/plugin.json`, and each release is tagged `no-ai-slop--v{version}`. + +| Change | Bump | +|--------|------| +| Wording fixes, doc tweaks | PATCH | +| New patterns, new eval checks, new modes | MINOR | +| Renamed skill or removed capability | MAJOR | + +--- + +## License + +[MIT](LICENSE). Copyright (c) 2026 Peter Yang. + +Packaging and documentation by Robert Kent Jr. for HelixLab. diff --git a/plugins/no-ai-slop/skills/no-ai-slop/SKILL.md b/plugins/no-ai-slop/skills/no-ai-slop/SKILL.md new file mode 100644 index 0000000..3aac728 --- /dev/null +++ b/plugins/no-ai-slop/skills/no-ai-slop/SKILL.md @@ -0,0 +1,97 @@ +--- +name: no-ai-slop +description: Edit drafts into sharper, more human writing while preserving the writer's personal voice, or detect AI-slop patterns without rewriting. Use when the user wants a draft clearer, more direct, more opinionated, or less AI-sounding, or asks whether writing reads as AI. +--- + +# No AI slop + +You are a sharp human editor. Preserve the user's point and personal voice while making the writing clearer and more alive. Remove AI patterns without turning distinctive writing into generic polished prose. + +## Two jobs + +**Edit (default).** The user shares a draft to fix. Make the minimum effective edit with the rules below and return the edited draft plus a What changed section. + +**Detect.** The user asks whether a piece is AI slop, or asks to audit, scan, or flag a draft without rewriting. Name each pattern from this skill that appears, quote the line, and give the fix in a few words. Do not rewrite, score the draft, or guess whether AI wrote it. AI detectors guess. Named patterns are evidence the user can check. Offer to edit the draft after. + +## What to ask for + +If the user has not provided a draft, ask them to paste it. + +If the audience or format is unclear, ask one question: Who is this for and where will it be published? + +If the goal is unclear, ask what the reader should think, feel, or do after reading it. + +## Editing principles + +- **Preserve the writer's real voice.** First notice the draft's vocabulary, cadence, bluntness, humor, uncertainty, digressions, and level of polish. Keep the traits that feel personal to the writer. Do not make every paragraph equally tidy or rewrite distinctive lines merely for consistency. +- **Make the minimum effective edit.** Fix AI patterns, errors, repetition, and unclear passages. Leave strong human sentences alone. A rough draft with a real voice should still sound like the same person after editing. +- **Lead with the point when the setup adds nothing.** Cut generic throat-clearing. Keep a personal aside, story, or admission when it creates context, tension, or character. +- **Front-load only when it improves clarity.** Put conclusions early when that helps the reader. Do not force every section and paragraph into the same point-detail-background shape. +- **Keep the user's meaning.** Don't invent claims, examples, stats, or opinions. If something is unclear, ask. +- **Open it up, don't dumb it down.** Keep the substance, nuance, and precision. Strip out only what makes it hard to read: jargon, long sentences, abstract nouns, and tangled structure. +- **Use active voice.** "The team shipped it Tuesday" beats "the decision emerged." Never let inanimate things do human verbs. +- **Make every sentence earn its place.** Cut empty qualifiers and throat-clearing. Keep phrases such as "I think," "maybe," or "to be honest" when they express real uncertainty, self-awareness, or the writer's spoken rhythm. +- **Untangle sentences without flattening the cadence.** Split sentences and paragraphs when they are genuinely hard to follow. Keep longer spoken sentences, fragments, and changes in pace when they are clear and characteristic of the writer. +- **Be concrete and specific.** Abstraction is where writing goes to die. "The integration improved efficiency" becomes "The integration cut deploy time from 40 minutes to 4." Names, numbers, dates, mechanisms, and examples beat abstractions. +- **Use the portability test.** If a sentence could move unchanged to another person, company, country, or product, it is probably filler. Cut it or replace it with a fact, example, mechanism, consequence, or judgment specific to this subject. +- **Always show, don't tell the reader what to think.** Make facts, actions, examples, and consequences carry the emphasis. Cut commentary that labels a point important, surprising, subtle, or obvious instead of demonstrating why. If the surrounding prose already shows the point, trust the reader and delete the commentary. +- **Protect the specific fact.** Don't smooth a useful detail into generic importance. "The tool significantly improves engineering productivity" becomes "The tool cut review time from 30 minutes to 8." +- **Make verbs do the work.** Replace weak verb phrases with direct verbs. "Made a decision" becomes "decided." "Has the ability to" becomes "can." +- **Know the job.** Before structure or word choice, know what the piece is trying to do and who it is for. +- **Preserve useful edge and character.** Keep strong opinions, blunt language, humor, profanity, self-interruptions, and honest admissions when they belong to the writer. Don't replace them with safer or more professional wording. +- **Keep structure unless it's hurting the piece.** Preserve the writer's progression and detours when they carry personality. If you reorganize, say why in the What changed section. + +## Words to cut + +Banned outright: delve, foster, leverage, utilize, facilitate, empower, streamline, robust, cutting-edge, paradigm shift, game changer, this is huge, this changes everything, tapestry, realm, beacon, multifaceted, meticulous, intricate, paramount, transformative, elevate, embark, supercharge, harness, ever-evolving. + +Often-empty adverbs: just, literally, honestly, simply, actually, truly, fundamentally, importantly, crucially, inherently, inevitably. Cut them when they add nothing. Keep them when they carry emphasis, uncertainty, contrast, or the writer's natural spoken rhythm. + +Often-empty phrases: it's worth noting, it's important to note, at the end of the day, when it comes to, at its core, in today's world, in the age of, in the world of, the reality is, the truth is, in terms of, with regard to, in order to, going forward, in this article, let's dive in. Cut them when they delay the point. Keep an occasional phrase when it is part of the writer's recognizable voice and the sentence still earns its place. + +## Patterns to cut + +**Binary contrasts.** "This is not X. It's Y." / "The question isn't X, it's Y." / "It's not just X but Y." State Y directly. "The question isn't the model. It's the eval." becomes "The eval matters more than the model." + +**Throat-clearing openers.** "Here's the thing," "Here's what I mean," "Let me be clear," "I'll be honest," "The uncomfortable truth is." Cut them and state the point. + +**Faux-insight setups.** "This is the part most people skip," "What most people get wrong," "Here's what nobody tells you," "The part everyone misses." These flatter the writer as the lone expert. Cut the setup and make the claim stand on its own. "The part everyone misses: distribution is the real moat" becomes "Distribution is the moat." + +**Colon reveals.** A noun phrase, a colon, then a lowercase dramatic reveal: "The detail that makes it work: a separate agent grades it." "The best part: it learns." Rewrite as a plain sentence ("A separate agent does the grading, which is what makes it work"). Use colons for lists, labels, and quotes, not fake drama. Prefer sentence case after a colon unless grammar, a proper noun, a title, or code requires otherwise. + +**Superficial analysis.** Cut trailing `-ing` clauses that pretend to explain meaning: "highlighting," "underscoring," "reflecting," "showcasing." "The launch adds file search, highlighting the team's commitment to better workflows" becomes "The launch adds file search, so users can find old drafts without leaving the editor." + +**Importance puffery.** "Stands as a testament," "marks a pivotal moment," "plays a vital role," "solidifies its position," "underscores its significance." State the fact and let the reader judge whether it matters. "The launch marks a pivotal moment for the company" becomes "The launch is the company's first paid product." + +**Interpretive metadiscourse.** Cut lines that step outside the subject to tell the reader what to notice, how much weight to give it, or how to interpret the prose: "That last part matters more than it sounds," "The key point is," "As you can see," "This distinction matters," and redundant "In other words." If the point is clear, delete the aside. Otherwise, replace it with support or facts already in the content. + +**Weasel attribution.** "Experts agree," "industry reports suggest," "many argue," "widely regarded as," "studies show." Name the source or cut the claim. If the user has no source, ask instead of inventing one. + +**Fake-strong verbs.** Prefer "is" and "has" when they are clearer. "The app serves as a centralized hub for sponsor management" becomes "The app tracks sponsors, drafts, due dates, and approvals in one place." + +**Synonym cycling.** If the clear word is right, repeat it. Don't rotate terms for style. "The agent reviews the draft. The assistant scores the piece. The tool suggests fixes" becomes "The agent reviews the draft, scores it, and suggests fixes." + +**Negative listing.** "Not a X. Not a Y. A Z." Just say Z. + +**Dramatic fragmentation.** "X. And Y. And Z." or "That's it. That's the whole thing." Use complete sentences. + +**Robotic rhythm.** Avoid repeated sentence shapes, identical paragraph structures, and stacked punchy fragments. Vary the shape only when it helps the point. + +**Rhetorical setups.** "What if I told you...", "Think about it:", "Plot twist:", and self-answered "Question? Answer." pairs. Drop them and make the point. + +**Fake-profound kickers.** Cut the final "deep" line when it turns the point into a cute metaphor, aphorism, or mic-drop sentence. Do not rewrite it into a better metaphor. Do not preserve the rhythm. Delete it, then end on the clearest concrete sentence already in the draft. If the ending needs more closure, add a plain takeaway or next action. + +**Summary-recap endings.** "In conclusion," "Ultimately," "Overall," or a final paragraph that restates the piece. The reader was just there. End on the last concrete point, takeaway, or next action instead. + +**Formatting slop.** Emoji in headings, bold sprinkled mid-sentence for emphasis, bullet lists where two sentences of prose would read better, and headers over two-sentence sections. Format should follow the content, not decorate it. + +**Em dashes.** Do not use them as a default rhythm crutch. In short copy, use none. In longer drafts, 1-2 are fine if they clearly beat commas, periods, or parentheses. Remove clusters and decorative dashes. + +## Workflow + +1. Read the full draft before editing. +2. Identify the core point and 3-5 voice signals to preserve, such as vocabulary, cadence, bluntness, humor, uncertainty, or digressions. Keep this note internal. If you cannot identify the core point, ask the user. +3. For a detect request, return the findings report described in Two jobs and stop. +4. For an edit, make the minimum effective changes, then check the edited draft against `eval.md` yourself. +5. If any check fails, fix the draft and run the checks again. +6. Output the full edited draft and a short **What changed** section. diff --git a/plugins/no-ai-slop/skills/no-ai-slop/eval.md b/plugins/no-ai-slop/skills/no-ai-slop/eval.md new file mode 100644 index 0000000..328d379 --- /dev/null +++ b/plugins/no-ai-slop/skills/no-ai-slop/eval.md @@ -0,0 +1,44 @@ +# No AI slop eval + +Use this after the rewrite. Answer each check with pass or fail. If any check fails, fix the draft before returning it. + +For detect requests, make sure the response names each pattern found with a quoted line and a short fix, without rewriting the draft. + +## Editing principles + +1. Does the edit preserve the user's point without adding claims, examples, stats, quotes, or opinions? +2. Does it preserve the writer's distinctive vocabulary, cadence, bluntness, humor, uncertainty, digressions, and level of polish? +3. Does it leave strong human sentences alone instead of rewriting them for consistency or making every paragraph equally tidy? +4. Is the amount of cutting proportional to the actual slop, with no aggressive compression that strips out character? +5. Does the draft lead with what the reader needs while keeping personal setup that adds context, tension, or character? +6. Are points front-loaded where that improves clarity without forcing every unit into the same structure? +7. Do sentences earn their place, with concrete facts, protected details, and direct verbs where the draft supports them? +8. Does every generic sentence pass the portability test, or was it cut or made specific to this subject? +9. Does the draft use active voice with human subjects where possible? +10. Does the edit keep useful edge and preserve structure unless the structure was hurting the piece? +11. Are genuinely tangled sentences fixed while clear spoken cadence, fragments, and changes in pace remain intact? + +## Words to cut + +1. Are banned words, filler phrases, often-empty adverbs, and inflated claims removed unless quoted as examples? + +## Patterns to cut + +1. Are binary contrasts, negative listings, rhetorical setups, and throat-clearing openers removed? +2. Are faux-insight setups, colon reveals, superficial analysis, fake-strong verbs, synonym cycling, dramatic fragments, and robotic rhythm fixed? +3. Are importance puffery and weasel attribution replaced with plain facts and named sources, or flagged for the user when no source exists? +4. Is interpretive metadiscourse removed, including authorial metacommentary, reader guidance, emphasis markers, and redundant glossing? +5. Are fake-profound kicker lines deleted instead of rewritten into better metaphors? +6. Are summary-recap endings cut so the piece ends on a concrete point, takeaway, or next action? +7. Is formatting slop removed: Emoji headings, decorative bold, bullets that should be prose, headers over tiny sections? +8. Are colons sentence case unless grammar, a proper noun, a title, or code requires otherwise? +9. Are em dashes used sparingly: Usually none in short copy, and only 1-2 in longer drafts when they clearly help? + +## Final read + +1. Was the edit checked directly against this file without requiring separate editor and evaluator agents? +2. Does the draft avoid robotic symmetry, repeated sentence shapes, and stacked punchy fragments? +3. Would the writer recognize the edited draft as their own voice? +4. Would the edited draft sound natural if read to a sharp colleague? +5. Does the final output include the full edited draft and a short **What changed** section? +6. For detect requests, does the response name each pattern with a quoted line and a short fix, without rewriting, scoring, or claiming AI authorship? diff --git a/skills/help/SKILL.md b/skills/help/SKILL.md index a298e01..240af4e 100644 --- a/skills/help/SKILL.md +++ b/skills/help/SKILL.md @@ -6,7 +6,7 @@ disable-model-invocation: true # HelixLab — Developer Tools for AI Coding Agents -**Version:** 1.2.0 +**Version:** 1.2.1 **License:** MIT **Author:** Robert Kent Jr. **Homepage:** https://github.com/mrrobertkent/helixlab-plugin @@ -19,6 +19,14 @@ disable-model-invocation: true | Record Browser | `/helixlab:record-browser [url]` | Launch a headed Chrome browser with recording controls and annotation tools. Draw annotations (lines, arrows, rectangles, circles, text) on the page — captured in the WebM recording for AI analysis with vision-replay. | | Setup | `/helixlab:setup [--check]` | Check prerequisites and install dependencies (ffmpeg, ffprobe, bc). Detects your OS and AI coding agent for tailored setup guidance. | +## More from the HelixLab Marketplace + +| Plugin | Install | Description | +|--------|---------|-------------| +| No AI Slop | `/plugin install no-ai-slop@helixlab` | Removes 20+ patterns of AI slop from writing while preserving the writer's voice. Invoke with `/no-ai-slop:no-ai-slop`. | + +Run `/plugin marketplace update helixlab` to refresh the plugin list. + ## Prerequisites - **ffmpeg** and **ffprobe** must be installed