Skip to content

v1.0.1 — Plugin conversion + hook fix

Latest

Choose a tag to compare

@j-morgan6 j-morgan6 released this 21 Apr 22:20
· 4 commits to main since this release

Highlights

  • Now a proper Claude Code plugin. No more install.sh / hooks-settings.json / ~/.claude file copying. Install, update, and uninstall go through Claude Code's plugin system.
  • All 9 Write|Edit hooks now actually fire. Previous release referenced $CLAUDE_HOOK_FILE_PATH — an env var Claude Code does not set — so every Write|Edit hook was a silent no-op. Now parses tool input from stdin JSON and checks pending content correctly.

Install

/plugin marketplace add j-morgan6/ios-from-web-guide
/plugin install ios-from-web-guide@ios-from-web-guide
/reload-plugins

Already installed? Just run:

/plugin update ios-from-web-guide@ios-from-web-guide
/reload-plugins

What changed

Packaging

  • Added .claude-plugin/plugin.json + .claude-plugin/marketplace.json manifests.
  • Moved hooks to plugin-native hooks/hooks.json, referencing ${CLAUDE_PLUGIN_ROOT} so scripts resolve inside the plugin cache.
  • Deleted install.sh, hooks-settings.json, INSTALL-HOOKS.md, VERSION, and the tests/ directory (all installer-era scaffolding).
  • Updated README with /plugin install path.

Hook fix

  • New scripts/hook-lint.sh dispatcher: parses tool_input.file_path + tool_input.content / .new_string from stdin JSON via python3, runs the named check against pending content, exits with the right code.
  • All 8 PreToolUse Write|Edit hooks + the 1 PostToolUse Write|Edit hook now delegate to the dispatcher.
  • PreToolUse Bash hooks rewritten to extract tool_input.command cleanly (previously worked incidentally by grepping the raw JSON payload — could false-positive on unrelated JSON keys).

Verified working

Block hooks (exit 2) tested live through Claude Code's hook runtime:

  • Storing auth tokens in UserDefaults → blocked
  • NavigationLink(value:) wrapping a Button with .buttonStyle(.plain) → blocked
  • Force-pushing to main/master branches → blocked

Remaining warn / hint hooks verified via the dispatcher script against fixture payloads. SessionStart (project detection) and SubagentStart (rules injection) are unchanged and continue to work.