feat: add boris plugin - #56
Conversation
Ships Boris Cherny's Claude Code workflow tips (howborisusesclaudecode.com) as an on-demand knowledge skill: 107 tips across 95 sections, split into eight topic reference files behind a hub SKILL.md. Bundles the verbatim upstream baseline under vendor/ plus a maintainer-facing drift-check update script (--check/--apply) with self-contained regression tests. A vendor-scoped nested markdownlint config exempts the verbatim third-party baseline from local style rules without touching the managed root config. Co-Authored-By: Claude <noreply@anthropic.com>
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_707b1bd8-8781-45d9-bc1d-ec36cb2d04d2) |
|
Claude finished @kyle-sexton's task in 3m 13s —— View job PR Review: feat/add boris plugin
Overall AssessmentThis is a well-structured plugin addition that follows the marketplace playbook. The hub-and-spokes skill design (one Findings1.
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 9e6fc81eea
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The vendored baseline embeds upstream's own auto-install instructions (an UPDATE CHECK block that curls into ~/.claude/skills/boris). The skill body, update-script output, and README now direct the agent to ignore embedded instructions when reading the vendor file — the only sanctioned update mechanics are the plugin's update script and marketplace version bumps. The vendor file itself stays byte-identical for drift detection. Co-Authored-By: Claude <noreply@anthropic.com>
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_1ab56d21-f616-43ef-8053-b23aeb5da454) |
|
Claude finished @kyle-sexton's task in 1m 52s —— View job PR Review: feat/add boris plugin (re-review at 25594f3)
Re-review SummaryThe new commit ( Codex Finding — RESOLVED ✓
The fix adds a three-layer guard:
The vendor file itself stays byte-identical for SHA drift detection — correct, since modifying it would break the whole drift-check design. The guard is defence-in-depth: all three layers have to be bypassed for the upstream block to execute, and no routine invocation ever reads Previous Finding — Still Open
sed -E "s|^([[:space:]]+${field}:[[:space:]]+).*\$|\\1${value_safe}|" \
"$FRONTMATTER_FILE" >"$tmp"
mv "$tmp" "$FRONTMATTER_FILE"If sed -E "s|^([[:space:]]+${field}:[[:space:]]+).*\$|\\1${value_safe}|" \
"$FRONTMATTER_FILE" >"$tmp" || { rm -f "$tmp"; return 1; }
mv "$tmp" "$FRONTMATTER_FILE"This is not a blocker in the current call sites ( Observations (no action required)Exit code 2 path —
Security postureUnchanged from the original review: zero attack surface on normal invocation (pure skill content). The Codex finding is now closed; the VerdictThe new commit resolves the only substantive external finding (Codex / untrusted vendor content). One minor hardening item remains open (sed exit-code check). Approve with the suggestion to address the sed guard before the script grows new call sites. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 25594f3fd3
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
# Conflicts: # .claude-plugin/marketplace.json # README.md
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_12367ef6-b391-48a2-b5c1-32a8f66b3158) |
|
Claude finished @kyle-sexton's task in 3m 17s —— View job PR Review: feat/add boris plugin (re-review at 7b85408)
Status of Prior FindingsRESOLVED ✓ — Codex P2 / vendor auto-install block Open Findings (two — both need author action before merge)1.
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 7b85408f82
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| upstream-version: 8.8.1 | ||
| synced: 2026-06-12 |
There was a problem hiding this comment.
Refresh upstream before the initial publish
This publishes the new skill as synced to upstream v8.8.1 on 2026-06-12, but the linked source currently advertises 118 tips and includes newer sections such as Finding Your Unknowns, Getting Started With Loops, and /checkup; the split reference files here still stop at sections 78–95/Fable 5. Users installing the plugin now will get stale workflow guidance from the first release, so please refresh the vendor baseline and manually port the new sections before publishing 0.1.0.
Useful? React with 👍 / 👎.
|
|
||
| section "Replace vendor/SKILL.md" | ||
| mkdir -p "$(dirname "$VENDOR_FILE")" | ||
| cp "$upstream_md" "$VENDOR_FILE" |
There was a problem hiding this comment.
Stop --apply when the vendor copy fails
When --apply runs with an unwritable/full destination, this cp failure is ignored because the script intentionally does not use set -e; the following log and metadata bump still run and run_apply returns 0, which can leave vendor/SKILL.md unsynced while SKILL.md is stamped to the new upstream version. Please make the mutating steps (mkdir, cp, and the metadata writes) return a non-zero error before reporting success.
Useful? React with 👍 / 👎.
Closes melodic-software/medley#1285. Publishes the `docs-hygiene` plugin per `docs/MIGRATION-PLAYBOOK.md` (per-plugin gate + acceptance security review). One cohesive capability — documentation hygiene — bundling five skills. ## What ships - `/docs-hygiene:compress` — flavor-trims markdown behind a mandatory fresh-context semantic-diff audit that reverts any semantic loss; optional `caveman` plugin backend (qualified `/caveman:compress` invocation, graceful in-session Edit fallback); optional snapshots persist under the plugin data directory. - `/docs-hygiene:declutter` — read-only classifier for five markdown noise shapes with internalized shape definitions, tier semantics, exemptions, and opt-out markers (no source-repo rule dependencies). - `/docs-hygiene:extract-ssot` — Rule-of-Three deduplication into a single source of truth with refuse-fast verification gates and internalized evidence discipline. - `/docs-hygiene:encapsulation-audit` — detects citations into skill-private surfaces; ships its own `context/public-surface-contract.md`; detector generalized to scan any consumer repo's instruction surfaces. - `/docs-hygiene:rename-references` — 12-form stale-reference pattern library (slash tokens, moved-file relative paths, frontmatter chains/globs) with audit, half-rename, and apply modes. Adaptation notes: source-repo rule citations internalized or routed to the consuming repo's own CLAUDE.md/rules; scripts resolve paths via BASH_SOURCE and scan the repo they run in; `${CLAUDE_SKILL_DIR}` anchors all script invocations; taught placeholder names written without dollar-brace wrappers (substitution lesson from PR #53); eval suites intentionally NOT shipped (the eval runner is authoring-repo-side; shipping them would be dead weight with broken references). ## Gate evidence - `claude plugin validate ./plugins/docs-hygiene --strict` — PASS; `claude plugin validate . --strict` (catalog) — PASS - `claude plugin details` token cost: **~1,161 tok always-on** (compress ~340, declutter ~280, encapsulation-audit ~150, extract-ssot ~170, rename-references ~230); on-invoke ~2.6k–6.4k per skill - Script tests: 73 checks across 4 self-contained suites (compress 9, declutter 17, encapsulation-audit 32, extract-ssot 15) — all pass, network-free, fixture-repo based - shellcheck (repo rcfile) clean on all 9 shell files; shfmt clean; markdownlint 0 errors (24 files); typos clean; editorconfig-checker clean - `--plugin-dir` smoke test in a clean non-source repo — PASS: `/docs-hygiene:declutter` invoked, answered the five noise shapes, namespace confirmed as `docs-hygiene:declutter` ## Security review (playbook acceptance) - No hooks, no MCP servers, no agents, no `userConfig`. - Code execution surface: bundled scripts are read-only detectors and fact emitters (grep/awk over the consuming repo's tracked files). **Zero network egress** — verified by grep over all shell files (no curl/wget/nc; the only `http` hit is a URL string inside a test fixture). - Cross-plugin trust: `compress` can delegate mechanical compression to the third-party `caveman` plugin ONLY when the consumer has installed it; detection is capability-probing, invocation is the qualified `/caveman:compress` form, and the built-in fallback keeps the skill fully functional without it. No other plugin is referenced. - Cache isolation: no `../` reach-outs; state (optional compress snapshots) goes to the plugin data directory. - No PII / secrets. Merge note: PRs #53 and #56 also touch `marketplace.json` + root `README.md` — the playbook prescribes serializing final merges; whichever lands later rebases the two shared files. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Documentation and read-only/local shell tooling only—no hooks, MCP, network calls, or automatic repo writes beyond what users invoke via skills; optional third-party `caveman` compression is opt-in. > > **Overview** > Adds the **`docs-hygiene`** plugin to the marketplace catalog and root README, bundling five on-demand skills for keeping tracked markdown lean, deduplicated, and correctly referenced in any consumer repo. > > **`/docs-hygiene:compress`** tightens prose by cutting flavor while a mandatory fresh-context semantic-diff pass reverts semantic loss; it optionally uses the **`caveman`** plugin as a mechanical backend with an in-session Edit fallback, snapshots, and `markdownlint-cli2` gates. **`declutter`** is read-only noise classification (five shapes, tiered findings) backed by **`detect.sh`** and shared shape detectors. **`extract-ssot`** encodes Rule-of-Three markdown dedup with `identify` / `verify` / `plan` / `execute` / `batch` / `unwind`, private action docs, and **`emit-verify-facts.sh`**. **`encapsulation-audit`** ships **`public-surface-contract.md`** plus **`detect.sh`** (private skill paths, heading anchors, schemas; `scripts/` carve-out). **`rename-references`** is documented as the post-rename sweep skill (12-form patterns); sibling skills cite it after migrations. > > Scripts are repo-local, read-only where applicable, always-exit-0 or explicit exit codes for audits, and covered by self-contained bash test suites (`detect-caveman`, declutter, encapsulation-audit, extract-ssot). > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit e19b05c. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY --> --------- Co-authored-by: Claude <noreply@anthropic.com>
Closes melodic-software/medley#1293. Publishes the `fable-5-playbook` plugin per `docs/MIGRATION-PLAYBOOK.md` (per-plugin gate + acceptance security review). ## What ships - `plugins/fable-5-playbook/` — one knowledge skill (`/fable-5-playbook:fable-5-playbook`): Claude Fable 5's operating doctrine, authored by Fable 5 as introspected standing instructions. Core doctrine arms the session on invocation; twelve trigger-routed chapters under `context/` (calibration, reasoning-moves, problem-framing, planning, execution, debugging, orchestration, verification, communication, recovery, context-economy, trust-and-authority) plus `context/opus-adaptation.md` for non-Fable models. - Marketplace entry: `category: learning`, tags `knowledge` + component tags. Explicit `version: 0.1.0` in `plugin.json` only. - The source skill was already repo-agnostic (no repo-specific paths, tools, or slash references); the only content deltas from the source are the frontmatter description compressed to two sentences and one typo fix (`mis-framed` → `misframed`). ## Gate evidence - `claude plugin validate ./plugins/fable-5-playbook --strict` — PASS; `claude plugin validate . --strict` (catalog) — PASS - `claude plugin details` token cost: **~207 tok always-on**, ~4.7k on-invoke (single skill) - markdownlint 0 errors (15 files); typos clean; editorconfig-checker clean - `--plugin-dir` smoke test in a clean non-source repo — PASS: skill invoked, answered the four meta-rules (Precedence, One home per doctrine, Model adaptation, Silent application), namespace confirmed as `fable-5-playbook:fable-5-playbook` ## Security review (playbook acceptance) - Pure knowledge skill: no hooks, no MCP servers, no agents, no `userConfig`, no scripts, no state, zero network access. - Cache isolation: all references are skill-internal (`context/*.md` self-citations); no `../` reach-outs. - No PII / secrets. Merge note: open PRs #53, #56, #57 also touch `marketplace.json` + root `README.md` — merge serially; later ones rebase/merge the two shared files (this branch is based on post-context7 main, so it conflicts only with those unmerged siblings). <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Markdown-only plugin packaging and catalog updates; no executable code, credentials, or runtime side effects beyond skill text loaded into Claude Code. > > **Overview** > Adds the **`fable-5-playbook`** plugin to the marketplace and root catalog — a pure knowledge skill (no hooks, MCP, scripts, or `userConfig`) that arms sessions with Claude Fable 5’s operating doctrine. > > **`SKILL.md`** loads core standing instructions on invoke (bare / `full` / chapter name), defines four meta-rules, effort floors, a chapter routing table, and cites twelve on-demand **`context/*.md`** chapters (calibration through trust-and-authority) plus mandatory **`opus-adaptation.md`** for non-Fable models. Plugin **`README.md`** and **`plugin.json`** (`0.1.0`, learning category) document install and scope. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 03fa989. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY --> Co-authored-by: Claude <noreply@anthropic.com>
Closes melodic-software/medley#1296. Publishes the `firecrawl` plugin per `docs/MIGRATION-PLAYBOOK.md` (per-plugin gate + acceptance security review). ## What ships - `plugins/firecrawl/` — one skill (`/firecrawl:firecrawl`): wraps the `firecrawl-cli` binary for scrape/search/crawl/map/parse/interact/agent/monitor with the core write-to-disk-then-Read pattern (results land in tempfiles via `-o`; the agent reads only the needed slice — 32–35× token savings vs the MCP per the Scalekit benchmark cited in the skill). - `context/commands.md` (full flag tables, carried verbatim), `context/configuration.md` + `context/update-flow.md` (adapted repo-agnostic). - Maintainer-facing `scripts/update.sh` (`--check` read-only CLI-version + upstream-SHA drift report; `--apply` npm upgrade + `UPSTREAM.md` rewrite behind approval gates; never touches SKILL.md — content integration is a gated manual step) with a new self-contained `update.test.sh` (17 checks, network-free). - `UPSTREAM.md` sidecar (SHA-tracking sync state + rollback version). - Marketplace entry: `category: utilities`. Explicit `version: 0.1.0` in `plugin.json` only. ## Gate evidence - `claude plugin validate ./plugins/firecrawl --strict` — PASS; catalog `--strict` — PASS - `claude plugin details` token cost: **~253 tok always-on**, ~4.9k on-invoke - `update.test.sh` 17/17 PASS; shellcheck (repo rcfile) clean; shfmt clean; markdownlint 0 errors; typos clean; editorconfig-checker clean - Smoke test via `--plugin-dir` — PASS: skill body loaded, answered the write-to-disk flag (`-o`) from the body, namespace confirmed as `firecrawl:firecrawl`. The smoke run surfaced two real headless-permission defects that are fixed in this PR: a credential-shaped `printenv FIRECRAWL_API_KEY` preamble line was rejected by permission preflight (removed — `firecrawl --status` already reports auth), and the status/sync preamble lines needed narrow `allowed-tools` grants (`Bash(command -v firecrawl*)`, `Bash(firecrawl --status*)`, `Bash(grep -m1 *UPSTREAM.md*)`). Caveat: in a fully sandboxed scratch dir the preamble lines may still fall back to their error text; the skill body loads and functions regardless. ## Security review (playbook acceptance) - No hooks, no MCP servers, no agents, no `userConfig`. - Data egress (normal invocation): the user-installed `firecrawl-cli` calls `api.firecrawl.dev` (or a self-hosted `FIRECRAWL_API_URL`) — that is the plugin's documented purpose. The credential is the consumer-owned `FIRECRAWL_API_KEY` env var; never stored in or written by the plugin. Env-var auth is preferred over `firecrawl login`/`config` explicitly to avoid a second credential store. - Data egress (update path, maintainer-invoked only): `registry.npmjs.org` (version metadata) + `www.firecrawl.dev` (upstream skill source, hashed in a tmpdir). `npm install -g` and any SKILL.md rewrite sit behind two explicit approval gates; `--check` is read-only. - The skill hard-prohibits `firecrawl init` (would install a parallel MCP + skill copy) and documents the login/config divergence risk. - Cache isolation: script resolves paths relative to itself; preamble reads its own `UPSTREAM.md` via the skill-dir substitution; no `../` reach-outs. - No PII / secrets. Merge note: open PRs #53, #56, #57, #59 also touch `marketplace.json` + root `README.md` — merge serially; later ones need a conflict-merge of the two shared files. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Medium Risk** > New plugin steers agents toward external Firecrawl API egress and credit use via a user-installed CLI and `FIRECRAWL_API_KEY`; maintainer `--apply` runs `npm install -g`, but there are no hooks/MCP and updates are gated. > > **Overview** > **Adds a new `firecrawl` plugin** to the marketplace and root catalog, shipping `/firecrawl:firecrawl` as the maintained `firecrawl-cli` integration (scrape, search, crawl, map, parse, interact, agent, monitor) instead of the Firecrawl MCP. > > The skill centers on **write-to-disk then `Read`** (`-o` tempfiles) with escalation tables for when to use Firecrawl vs WebFetch, narrow **`allowed-tools`** for the status/sync preamble (`firecrawl --status`, `UPSTREAM.md` grep), and prohibitions against `firecrawl init` / login-style config drift. Supporting **`context/`** docs cover flags, env defaults, and the maintainer update pipeline; **`UPSTREAM.md`** records upstream SHA and CLI rollback versions. > > **Maintainer tooling:** `scripts/update.sh` (`--check` read-only drift vs npm + upstream skill; `--apply` global `npm install` + `UPSTREAM.md` rewrite only, not `SKILL.md`) and network-free **`update.test.sh`** regression checks. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 3184b4e. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY --> Co-authored-by: Claude <noreply@anthropic.com>


Closes melodic-software/medley#1292.
Publishes the
borisplugin perdocs/MIGRATION-PLAYBOOK.md(per-plugin gate + acceptance security review).What ships
plugins/boris/— one knowledge skill (/boris:boris): Boris Cherny's Claude Code workflow tips (howborisusesclaudecode.com), 107 tips across 95 sections, hub SKILL.md + eight topic reference files (progressive disclosure).skills/boris/vendor/SKILL.md(SHA-verified byte-identical to the source repo copy) for drift detection.scripts/update.sh(--checkread-only drift report /--applyvendor + frontmatter sync; reference-file integration stays manual) with self-containedupdate.test.sh(19 checks, network-free).category: learning, tagsknowledge+ component tags. Explicitversion: 0.1.0inplugin.jsononly..markdownlint-cli2.jsonc(default: false) — verbatim third-party content exempted from local style rules without touching the managed root config (same pattern as PR feat: add thariq-skills plugin #53).Gate evidence
claude plugin validate ./plugins/boris --strict— PASSclaude plugin validate . --strict(catalog manifest) — PASSclaude plugin detailstoken cost: ~211 tok always-on, ~3.7k on-invoke (single skill)--plugin-dirsmoke test in a clean non-source repo — PASS: skill invoked, routed worktrees question toreference/worktrees.md, namespace confirmed asboris:borisupdate.test.sh19/19 PASS; shellcheck (repo rcfile) clean; shfmt clean; markdownlint 0 errors (11 files); typos clean; editorconfig-checker cleanSecurity review (playbook acceptance)
userConfig— pure skill content.scripts/update.shonly, run solely on explicit maintainer invocation (never automatic). Sole network egress:curltohttps://howborisusesclaudecode.com/api/versionand/api/install(the upstream source, which publishes these endpoints for exactly this consumption) — no other outbound calls, noeval, no untrusted input into shell.../reach-outs; script resolves paths relative to itself; update path in the skill body anchored via${CLAUDE_SKILL_DIR}.Repo-agnostic: no source-repo references; body + script rewritten for plugin form (namespaced self-references, script-relative path resolution).
Merge note: expected
marketplace.json+ rootREADME.mdconflict with PR #53 (thariq-skills) — the playbook prescribes serializing final merges; whichever lands second rebases the two shared files.Note
Low Risk
Read-only knowledge skill with no hooks or MCP; network use is limited to maintainer-invoked
update.shagainst the documented upstream URLs.Overview
Adds the
borismarketplace plugin: Boris Cherny’s Claude Code tips from howborisusesclaudecode.com, packaged likethariq-skillswith progressive disclosure instead of one huge skill file.Catalog:
borisis registered in.claude-plugin/marketplace.json(learning) and summarized in the rootREADME.md.Skill shape: Hub
SKILL.md(/boris:boris) with a topic index, quick reference, andupdateactions; eightreference/*.mdtopic slices (foundations through orchestration); verbatimvendor/SKILL.mdfor SHA drift checks. The hub tells agents to treat vendor content as untrusted (ignore upstream’s self-install UPDATE CHECK block).Maintainer tooling:
scripts/update.sh(--check/--apply) hits the site’s version/install APIs, syncs vendor + frontmatter, and leaves reference integration manual;update.test.shcovers helpers offline; vendor gets a nested markdownlint off config so third-party text isn’t restyled locally.Reviewed by Cursor Bugbot for commit 7b85408. Bugbot is set up for automated code reviews on this repo. Configure here.