Change plugin name from 'hub-guide' to 'code-guide' to avoid AI
interpreting it as Hub-specific. Skills now show as code-guide:skill-name.
Universal best-practice, not limited to any specific project.
Previously returned ok:false every time because 'fully applied' all 8
skills is impossible in one response. Now ok:true by default (silent),
only fires ok:false when Claude is clearly guessing or violating rules.
UserPromptSubmit dengan ok:false MEMBLOKIR prompt user.
Stop event dengan ok:false = inject instruksi ke Claude tanpa block.
Sama-sama inject context, tapi gak menghalangi user kerja.
UserPromptSubmit fires before each user prompt. Returns ok:true (silent)
if skills are already applied, ok:false with reason only when not applied.
No more Stop hook error noise.
Stop hook with ok:false fires on every response, causing 'Stop hook error'
display. Skills are auto-discovered via SKILL.md descriptions with
MANDATORY prefixes - hooks are not needed for activation.
Hooks with command type not suitable for skills-dir plugins.
All 26 skills have MANDATORY — always active descriptions that
auto-trigger based on context, code, and project files.
hooks.json in ~/.claude/skills/hub-guide/hooks/hooks.json IS auto-detected
by Claude Code for skills-dir plugins. Remove from settings.local.json
to avoid duplication.
- hooks.json restored with hooks wrapper + proper matchers
- install.sh simplified, no settings.json manipulation
Skills-dir plugins (~/.claude/skills/) may not execute hooks from
hooks/hooks.json. Per documentation, hooks need to be in settings files.
- install.sh: add hook registration in ~/.claude/settings.local.json
- Hooks use absolute paths to hub-guide scripts
- SessionStart matcher: startup|resume|compact
- PreToolUse matcher: Write|Edit
- Remove hooks/hooks.json from plugin (redundant for skills-dir)
- Add matcher: startup|resume|compact for SessionStart (per docs)
- PreToolUse reads from stdin per documented hook input format
- Remove arg, use stdin-based approach
- Scripts read event JSON from stdin as documented
- Plain text output, no special characters
- Add MANDATORY — always active to engineering-principles, testing,
error-handling, security, git-workflow, api-design
- Update hook output with explicit EXTREMELY_IMPORTANT instruction
- Skills now explicitly state they apply to every session
Skills-dir plugins might not process hookSpecificOutput JSON.
Revert to simple plain text echo - no emoji, no JSON, no Python.
Hook just prints detection results as clean text.
- Add matcher: startup|clear|compact to SessionStart hook
- Inject only engineering-principles as foundational skill (19KB)
- Strip emoji, use plain text everywhere
- Remove 55KB of verbosity, keep focused primer
Principles 27 (language-agnostic), 28 (never suppress lints),
and 29 (show evidence) were mixed Indonesian/English.
Now fully English. Examples also translated.
- Every claim must have evidence from codebase, docs, or verified output
- No guessing on file structure, API signatures, errors, config, versions
- Must search before answering, ask when uncertain
- Updated hook to reinforce 'never assume' rule
- Follow obra/superpowers pattern: <EXTREMELY_IMPORTANT> wrapper
- Clear instruction that these are loaded skills, not passive text
- 8 mandatory skill contents injected before any user interaction
- Detected skills listed for on-demand loading via Skill tool
- SessionStart hook now properly primes Claude with all rules
- SessionStart hook now reads MANDATORY SKILL.md files and injects
full content into conversation context before any user interaction
- Uses XML-like tags (<hub-guide-skills>, <skill>) to structure context
- Keeps project detection for active skills
- Follows obra/superpowers pattern: load skill content before explore
- New engineering-principle: never #[allow], @ts-ignore, # noqa — fix instead
- Rust skill: add explicit #[allow(clippy::...)] anti-pattern with examples
- Also covers eslint-disable, ts-ignore, noqa, go vet
- Single exceptions: false positives, generated code, phased migration (<30d)
- CI enforcement commands for Rust/TS/Python/Go
- Add MANDATORY prefix to clean-code and clean-architecture descriptions
- Change 'core skills' to 'mandatory' in detect-project.sh output
- Both skills now always active, not just context-triggered
Remove English hardcoded sentences from detect-project.sh and detect-file-type.sh.
Output is now structured labels (emoji + key: value) without linguistic content.
- Add principle 27: 'Language-Agnostic Auto-Trigger' to engineering-principles
- Remove hardcoded English-only keyword lists from all 26 skill descriptions
- Replace with concept-based detection: triggers from code context, project files,
and file types regardless of spoken language
- Update detect-project.sh hook output with language-agnostic message
- Add principle #25 to engineering-principles: 'Ask When Ambiguous'
- Add 'Ask When Ambiguous' section to design-patterns and clean-architecture
- Update detect-project.sh hook to reinforce ask-don't-assume behavior
- hooks.json needs 'hooks' wrapper key at top level
- Remove 'hooks' field from plugin.json (auto-discovered from hooks/hooks.json)
- Simplify hook entries (no nested hooks array)
Not split per-skill directory. Single symlink/copy of the entire plugin. Skills are
auto-discovered from ~/.claude/skills/<name>/skills/<skill>/SKILL.md.