basecamp / basecamp/hey-cli

Claude Code plugin: hooks.json is inside .claude-plugin/, so the SessionStart hook never runs

Open Beginner friendly
#429 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Go
Stars
368
Forks
44
Avg merge
15h 15m
Merged PRs (30d)
189

Description

The `hey` Claude Code plugin ships a `SessionStart` hook that never runs, because `hooks.json` sits one directory too deep.

## What I see

In the installed plugin cache:

```
37signals/hey/1.4.1/
.claude-plugin/
hooks/hooks.json <- the declaration
hooks/session-start.sh
plugin.json
skills/
skills/ <- also present at the root
(no hooks/ at the root)
```

The sibling `basecamp` plugin, whose hooks do run, is laid out the other way:

```
37signals/basecamp/0.10.0/
.claude-plugin/
plugin.json <- only the manifest
hooks/hooks.json <- at the root
skills/
```

## Evidence it never fires

The script itself is fine. Run by hand it works:

```
$ bash .claude-plugin/hooks/session-start.sh

HEY plugin active.

```

But across every Claude Code transcript on this machine since the plugin was installed on 2026-09-08, `HEY plugin active` appears exactly once, and that once is the manual run above. Basecamp's equivalent string appears in 18 sessions over the same period.

A probe session started with `claude -p --include-hook-events --output-format stream-json` records one `hook_started` for `SessionStart`, and its output is Basecamp's, not HEY's. Both plugins were enabled at the time.

## Suggested fix

Move `hooks/` to the repository root, next to `skills/`, matching `basecamp-cli`. `${CLAUDE_PLUGIN_ROOT}/hooks/session-start.sh` inside `hooks.json` then resolves as written.

Low impact, since the hook only prints a status line, but as it stands the plugin advertises a hook it does not deliver.

---

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Contributor guide

Open the contributing guide

Research direction

Compare the HEY layout with the working basecamp layout, starting with .claude-plugin/hooks/hooks.json, .claude-plugin/hooks/session-start.sh, and the root skills/ directory. Move hooks/ to the repository root, then run a probe session with `claude -p --include-hook-events --output-format stream-json` and confirm that `HEY plugin active` appears from the SessionStart hook.

Written by the indexing model from the issue text.

Assessment

Tech stack
shell
Domain
cli, tooling
Issue type
Bug
Difficulty
1/5
Estimated time
Under an hour
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
90/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.