diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 6f29b6b..1128a5c 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -1670,6 +1670,19 @@ "security", "compliance" ] + }, + { + "name": "claude-bionify", + "source": "./plugins/claude-bionify", + "description": "Bionic reading for Claude Code responses that bolds the leading part of each word to improve readability and focus.", + "version": "1.0.1", + "author": { + "name": "Samuel Ruairí Bullard", + "url": "https://github.com/abullard1" + }, + "category": "Design UX", + "homepage": "https://github.com/ccplugins/awesome-claude-code-plugins/tree/main/plugins/claude-bionify", + "keywords": ["accessibility", "readability", "bionic-reading", "focus", "claude-code"] } ] -} \ No newline at end of file +} diff --git a/README.md b/README.md index e4de615..c596a0d 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,7 @@ Install or disable them dynamically with the `/plugin` command — enabling you ### Design UX - [brand-guardian](./plugins/brand-guardian) +- [claude-bionify](./plugins/claude-bionify) - [joker](./plugins/joker) - [mobile-ux-optimizer](./plugins/mobile-ux-optimizer) - [onomastophes](./plugins/onomastophes) @@ -212,4 +213,4 @@ Example: ## Contributing Contributions are welcome! - You can add your favorite plugins, share best practices, or submit your own marketplace. \ No newline at end of file + You can add your favorite plugins, share best practices, or submit your own marketplace. diff --git a/plugins/claude-bionify/.claude-plugin/plugin.json b/plugins/claude-bionify/.claude-plugin/plugin.json new file mode 100644 index 0000000..3098d97 --- /dev/null +++ b/plugins/claude-bionify/.claude-plugin/plugin.json @@ -0,0 +1,69 @@ +{ + "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json", + "name": "claude-bionify", + "displayName": "claude-bionify", + "version": "1.0.1", + "description": "Bionic reading for Claude's responses that bolds the leading part of each word to guide your eyes and enable you to read faster.", + "author": { + "name": "Samuel Ruairí Bullard", + "email": "samuel.ruairi.bullard@gmail.com", + "url": "https://github.com/abullard1" + }, + "homepage": "https://github.com/abullard1/claude-bionify", + "repository": "https://github.com/abullard1/claude-bionify", + "license": "MIT", + "keywords": [ + "bionic-reading", + "speed-reading", + "accessibility", + "readability", + "adhd", + "dyslexia", + "focus", + "productivity" + ], + "userConfig": { + "fixation": { + "type": "number", + "title": "Fixation strength", + "description": "Fraction of each word to bold (0.1–0.9). Higher means more bold.", + "default": 0.5, + "min": 0.1, + "max": 0.9 + }, + "min_word_length": { + "type": "number", + "title": "Minimum word length", + "description": "Words shorter than this are left unbolded.", + "default": 4, + "min": 1 + }, + "boundary": { + "type": "string", + "title": "Bold boundary", + "description": "How much of each word to bold: \"fraction\" uses Fixation strength; \"syllable\" ends at the first syllable (e.g. stri-ng); \"log\" grows logarithmically so long words are bolded less.", + "default": "fraction" + }, + "skip_acronyms": { + "type": "boolean", + "title": "Skip acronyms", + "description": "Leave ALL-CAPS acronyms like API or JSON unbolded.", + "default": true + }, + "protect_urls": { + "type": "boolean", + "title": "Protect URLs, paths, and files", + "description": "Don't bold inside URLs, emails, file paths, or filenames.", + "default": true + }, + "skip_headings": { + "type": "boolean", + "title": "Skip headings", + "description": "Leave markdown headings (lines starting with #) unbolded. Headings are already visually prominent, so bolding inside them adds clutter.", + "default": true + } + }, + "experimental": { + "themes": "./themes/" + } +} diff --git a/plugins/claude-bionify/CHANGELOG.md b/plugins/claude-bionify/CHANGELOG.md new file mode 100644 index 0000000..1bd76cd --- /dev/null +++ b/plugins/claude-bionify/CHANGELOG.md @@ -0,0 +1,42 @@ +# Changelog + +All notable changes to claude-bionify are documented here. This project follows +[semantic versioning](https://semver.org) and [Keep a Changelog](https://keepachangelog.com). + +## [1.0.1] - 2026-07-04 + +### Fixed +- Preserve fenced code blocks that use spaced info strings such as + ```` ``` python ````. +- Stop URL protection before surrounding quotes and brackets. +- Reject invalid boolean and minimum-word-length live override values instead + of silently applying surprising settings. +- Save live overrides correctly when `CLAUDE_BIONIFY_STATE_FILE` is set to a + filename in the current working directory. +- Use fully-qualified `/claude-bionify:set ...` examples in the plugin README. + +## [1.0.0] - 2026-06-28 + +Initial release. + +### Added +- `MessageDisplay` hook that bolds the leading part of each word in Claude's + streamed replies as they render. The change is display-only: the saved + transcript and what Claude reads are never altered. +- Unicode-aware bolding that works in any language, while leaving numbers and + identifiers like `value3` or `api_key` alone. +- Three bolding strategies via the `boundary` option: `fraction` (default), + `syllable` (ends at the first syllable), and `log` (long words bolded less). +- Configurable `fixation` strength and `min_word_length`. +- `skip_acronyms` (default on) leaves ALL-CAPS acronyms like `API` whole. +- `protect_urls` (default on) keeps URLs, emails, and file paths unbolded, while + still bolding prose like `and/or` or `e.g.`. +- `skip_headings` (default on) leaves markdown headings unbolded. +- Inline `` `code` ``, fenced code blocks, markdown links, and existing + `**bold**` always render verbatim. +- Live control commands (`/claude-bionify:on`, `:off`, `:toggle`, + `:set