Conversation
…rmes, Claude Desktop Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
Drop argument-hint (hard error outside Claude Code); Cowork custom marketplaces verified; six-field frontmatter allow-list in the portability test. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
…ayer) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
21 findings folded in: conftest path, Cursor CLI reality, scanner evidence in the smoke matrix, no harness variables in the skill, phased acceptance, zip packager test, guard-pattern list, Hermes flags, claude.ai slash menu, study-count guard. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
…guards Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
…Bugbot PR #8) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
…de evidence - judge() now matches the four row concepts against the third |-separated field (the Tell cell) of distinct table rows under ## Output, and requires four distinct matching rows; drops the exploitable whole-row grep and the CONTAINER_ALT pipeline (I1). - Guard against a vacuous PASS if the scanner's summary wording ever drifts and NUM_TAILS/NUM_REP come back empty (I3). - Every harness's temp install/stream directory is now protected by an EXIT/INT/TERM trap pair, so a ^C or kill mid-run can't leave the Claude plugin disabled, a Hermes copy stuck in $HOME, or a Codex/Cursor temp project behind (I2, I4). - The Claude Code raw stream now writes to a mktemp -d directory instead of docs/acceptance/, and is removed after parsing (I5). - The Claude parser now mirrors the Codex one: a tool_use only becomes evidence when its serialized input names surface_scan.py, and a tool_result only counts when it answers such a call by tool_use_id. A read of a reference file no longer satisfies the tool-evidence rule or leaks into ## Scanner output (C2). - Minor cleanup: dedupe Codex's out.md text against the last agent_message (mirroring Claude's existing dedupe), anchor check_auth's alternatives, strip __pycache__ from each harness's copied skill, and guard against an unknown harness argument. Re-ran `tools/smoke_harnesses.sh claude codex`: PASS claude-code, PASS codex on the first attempt; transcripts regenerated. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
- Step 2 now tells the model to search for scripts/surface_scan.py when a harness doesn't show the skill's path, and to skip the scan (saying so) if it still can't find it — insurance for Cursor, Hermes, Cowork, and claude.ai, none of which have exercised this step yet (I6). The compensating -1 line drops the now-redundant document-skills plugin pointer from the Non-text sources paragraph; it already lives in the README's "Word, PDF, PowerPoint inputs" note. Net 0 lines: SKILL.md stays at 150; curly-character count unchanged at 11. - "## Invocation (`/humanize` only)" -> "## Invocation (explicit only)": the old heading contradicted the very next sentence, which also names Codex's $humanize form (minor). uv run pytest -q -W error: 108 passed (3.13 and --python 3.9). claude plugin validate --strict .: Validation passed. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
- README.md: stop claiming every install command was verified. `npx skills --help` / `npx skills add --help` (skills.sh CLI 1.5.26) confirm `add <package>` accepts the owner/repo shorthand the skills.sh row uses, so that row stays; the sentence now names what was actually checked and points installs that fetch from GitHub (Codex, Hermes) at the acceptance record instead (C1). `claude plugin validate .` -> `--strict` to match CLAUDE.md and CI (minor). - docs/acceptance/v0.3/README.md: the "## Tool calls" sentence is now true for both harnesses (after the smoke-script fix). Renamed the misnumbered "Acceptance step 4" reference to "Acceptance 3 (spec §8)" and added a section recording its verbatim outcome from task-7-report.md (marketplace add from ccf/humanize@feat/v0.3, plugin add resolving to 0.3.0, skill listed, plugin and marketplace removed, list back to the pre-run baseline). Added an "Acceptance 7 (spec §8)" checklist recording this run's results: the storyscope grep over the manifests/pyproject/SKILL.md is empty, the README's seven StoryScope mentions are all sourced positions, every README command was checked (per C1), and the scanner run on the README grounding paragraph shows no wordlist hits. Added a "Pre-merge status" paragraph: Claude Code and Codex PASS, Cursor and Hermes SKIP (unauthenticated on this machine), both moving to phase 2 and re-run after login (C2/C3, I7). - docs/design/2026-09-14-humanize-v0.3-design.md: status line now names the pre-merge acceptance items actually recorded (1, 2 for Claude Code/Codex, 3, 7) and states plainly that Cursor and Hermes move to phase 2 unauthenticated, matching what the acceptance README records. Appended four Post-review amendments: the phase-2 move for Cursor/Hermes, the narrowed acceptance-7 grep scope with the "sourced positions" README check, the Claude parser/row-matching/trap/temp-dir hardening from this wave, and the SKILL.md scan-path fallback (C3, I8). Gate: uv run pytest -q -W error (108, both 3.13 and --python 3.9); bash -n tools/smoke_harnesses.sh; wc -l skills/humanize/SKILL.md (150); claude plugin validate --strict . (passed); claude plugin list shows humanize@humanize enabled; no .jsonl under docs/acceptance/. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 2 potential issues.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 2a39835. Configure here.
…quires a python call - run_hermes now sets its EXIT/INT/TERM trap before mkdir/cp -R instead of after, so a ^C or kill during the copy itself can't leave a partial install stuck in $HOME (rm -rf on a $dest that doesn't exist yet, or exists only partially, is safe). The pre-existence SKIP check stays where it was, before the trap is armed (Bugbot). - The Claude parser's tool-evidence filter now requires name == "Bash" and a command containing both "python" and "surface_scan.py", matching the Codex parser's rule exactly. Matching on the serialized input alone let a Read/Glob/Grep search that merely names surface_scan.py — invited by SKILL.md's new scan-path fallback — satisfy the tool-evidence rule without the scanner ever running (Bugbot). Re-ran `tools/smoke_harnesses.sh claude`: PASS claude-code on the first attempt; transcript regenerated (## Tool calls now holds only the Bash scanner calls). `claude plugin list` shows humanize@humanize enabled before and after. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
ccf
added a commit
that referenced
this pull request
Sep 14, 2026
…Bugbot PR #8) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
v0.3 makes the same
humanizeskill installable on Claude Code, Codex CLI, Cursor, Hermes Agent, and the Claude Desktop app through each harness's own installer, and repositions the public copy: humanize is grounded in the thirteen studies inreferences/SOURCES.mdand covers every layer of a text, with StoryScope named where it is the source of a number.Spec:
docs/design/2026-09-14-humanize-v0.3-design.md(revision 2 after a three-lens adversarial review) · Plan:docs/design/2026-09-14-humanize-v0.3-plan.md(revision 2 after a worktree dry run).Layout and manifests
plugins/humanize/to the repository root:skills/humanize/,.claude-plugin/(marketplacesourceis./), new rootplugin.json(Agent Plugins 1.0) and.codex-plugin/plugin.jsonwith the Codexinterfaceblock.pyproject.toml, and the CHANGELOG heading —tests/test_portability.pyfails on drift.Skill
SKILL.mdis harness-agnostic (still ≤ 150 lines):argument-hintremoved (a hard error outside Claude Code), relativepython3 scripts/surface_scan.pypath, Codex$humanizeand plain-words options noted, document extraction described generically. No harness variables anywhere underskills/(tested).Tests, tooling, docs
tests/test_portability.py: spec-only frontmatter; no harness-specific content; runtime references named; guard-clean scripts (Hermesskills_guardpatterns); manifests agree; zip packager contract; study count matchesSOURCES.md.tools/package_skill_zip.pybuilds the claude.ai skill upload (dist/humanize-skill-0.3.0.zip, attached to the release).tools/smoke_harnesses.sh: local acceptance matrix whose PASS rule needs evidence the scanner ran; transcripts underdocs/acceptance/v0.3/.Migration
Existing Claude Code installs:
claude plugin marketplace update humanize && claude plugin update humanize@humanize.Test plan
uv run pytest -q -W error→ 108 passed on 3.9 and 3.13; ruff clean;claude plugin validate --strict .passescodex plugin marketplace add ccf/humanize@feat/v0.3installs from GitHub (pre-merge)skills install, Claude plugin upgrade 0.2.0 → 0.3.0, Cowork marketplace add; tagv0.3.0+ release with the zip; claude.ai upload🤖 Generated with Claude Code
https://claude.ai/code/session_01KTKYvLEVY4mStJ3iPaB1Mh
Note
Low Risk
Packaging, docs, and compliance tests only;
surface_scan.pybehavior is unchanged. Main operational risk is install-path migration (source: "./") for existing Claude Code marketplace users.Overview
v0.3.0 reframes humanize as a harness-portable agent skill: the package moves from
plugins/humanize/to the repo root (skills/humanize/, marketplacesource: "./"), bumps version everywhere in lockstep, and adds Agent Plugins 1.0 (plugin.json), Claude (.claude-plugin/plugin.json), and Codex (.codex-plugin/plugin.json) manifests so the same skill installs on Claude Code, Codex, Cursor, Hermes, and Claude Desktop.SKILL.mdis made harness-agnostic:argument-hintand${CLAUDE_PLUGIN_ROOT}go away, the scanner uses a relative<skill folder>/scripts/surface_scan.pypath, audit rules require a row for every fired scanner block, and public copy grounds the tool in thirteen studies (SOURCES.md) rather than StoryScope-first positioning.New enforcement and release tooling:
tests/test_portability.py(frontmatter, no harness tokens underskills/, manifest/version/study-count sync, guard-clean scripts, zip contract),tools/package_skill_zip.pyfor claude.ai uploads, andtools/smoke_harnesses.shwith transcripts underdocs/acceptance/v0.3/. README gains a per-harness install table; CLAUDE.md and BUGBOT.md document portability invariants. Migration: existing Claude Code users run marketplace + plugin update after merge.Reviewed by Cursor Bugbot for commit a517f74. Bugbot is set up for automated code reviews on this repo. Configure here.