feat(plugins): fall back to user-level ~/.claude settings for Claude Code hook config#924
Conversation
|
thanks @samuellawerentz. I had not gotten around to adding the user level settings. Thats much needed. Do you mind signing off on your commits? and signing the cla? We need that before we can merge this. In your local branch, run: git rebase HEAD~1 --signoff |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: dc6fc776f6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 868d2094c7
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a853652c4b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
Sure, I'll get these fixed and signed as well. This is a good plugin and a good tool that I use, which has solved my memory problems across the different harnesses. Thank you. |
|
Labeling needs-review: there are unresolved review threads on the hook fallback behavior that need a decision before this merges (merge precedence between project and user-level settings, and the skill doc updates). No action needed from the author yet — maintainers will follow up on the threads. |
|
@samuellawerentz Thanks for the contribution — the user-level settings fallback is a direction we're interested in, and your follow-up commits addressing the review were appreciated. One mechanical blocker before we can take this further: the DCO check requires every commit to carry a git fetch origin main
git rebase origin/main --signoff
git push --force-with-lease origin global-settings-fallback(If your fork's remote is named differently, swap Once DCO is green we'll pick the review threads back up. Thanks again! |
There was a problem hiding this comment.
Pull request overview
This PR updates the Claude Code plugin hooks to support user-level ~/.claude/settings.json as a baseline basicMemory configuration, with project .claude/settings.json / .claude/settings.local.json overriding it, so users don’t need to repeat the same config block per repository.
Changes:
- Implement layered settings resolution in
session-start.shandpre-compact.sh(user-level base → nearest project settings overrides). - Update plugin README and skill instructions to document the new precedence and behavior.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| plugins/claude-code/hooks/session-start.sh | Load basicMemory config from user-level settings, then override with nearest project .claude settings. |
| plugins/claude-code/hooks/pre-compact.sh | Same layered settings resolution as SessionStart, enabling PreCompact to work with user-level config. |
| plugins/claude-code/README.md | Document user-level basicMemory option and precedence rules. |
| plugins/claude-code/skills/bm-status/SKILL.md | Update skill instructions to reflect the hooks’ new config precedence. |
| plugins/claude-code/skills/bm-share/SKILL.md | Update config-resolution instructions to match hook precedence. |
| plugins/claude-code/skills/bm-remember/SKILL.md | Update config-resolution instructions to match hook precedence. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…nfig The SessionStart and PreCompact hooks read basicMemory config only from <cwd>/.claude/settings.json, so every project needs its own block (or a bm-setup run) before briefs resolve a pinned project and checkpoints write at all. Users with one primary knowledge graph end up repeating the same config in every repo. Make load_settings in both hooks merge user-level ~/.claude/settings.json and settings.local.json as the base, with the project's .claude files overriding per key — same layering Claude Code itself uses for settings. A single user-level basicMemory block now covers every project, while any project can still pin its own mapping, which wins. Documented in the plugin README. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Samuel Lawrentz <samuel.lawerence@plivo.com>
- User-level pass reads only ~/.claude/settings.json (no user-level settings.local.json — it isn't a real Claude Code source), so a stale global local file can't silently reroute the brief/checkpoint. - Resolve project settings from the nearest .claude dir at or above cwd, so a repo-root mapping wins when Claude starts in a subdirectory. - bm-remember / bm-share / bm-status skills now read the same precedence (user-level base, project overrides), matching the README claim that one user-level block covers every command. - README: drop user-level settings.local.json from the precedence note and document the ancestor-walk behaviour. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Samuel Lawrentz <samuel.lawerence@plivo.com>
- Drop redundant except FileNotFoundError in _read_block (subclass of Exception, already caught). - Drop redundant os.path.abspath in load_settings; _project_dir already returns an absolute path. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: Samuel Lawrentz <samuel.lawerence@plivo.com>
…settings file Signed-off-by: Samuel Lawrentz <samuel.lawerence@plivo.com>
ae84591 to
551e124
Compare
|
Thanks @phernandez! Done:
|
|
Thanks @samuellawerentz! appreciate it. I'll take a look at this real soon |
Problem
The Claude Code plugin's SessionStart and PreCompact hooks read the
basicMemoryblock only from<cwd>/.claude/settings.json. Every project therefore needs its own config block (or abm-setuprun) before the brief resolves a pinned project — and the PreCompact checkpoint is a silent no-op everywhere until then. Users with a single primary knowledge graph end up repeating the same block in every repo.Change
load_settingsin both hooks now merges the user-level~/.claude/settings.jsonandsettings.local.jsonas the base, with the project's.claudefiles overriding per key — the same layering Claude Code itself uses for settings:One user-level
basicMemoryblock covers every project; a project that pins its ownprimaryProjectstill wins. When cwd is the home directory the user level is read once, not twice.Also documents the user-level option in the plugin README.
Testing
bash -non both hooks.session-start.shwith a payload cwd of a repo with no.claude/settings.json: brief resolves the project from the user-level block (previously: "default project" + setup nudge).pre-compact.shresolvesprimaryProjectfrom the user level the same way (previously exited silently).🤖 Generated with Claude Code
Reviewed SHA:
868d2094c77aae23d1de92c72be3708ea8c3b293Verdict:
needs_humanStatus:
failure- BM Bossbot review did not finishSummary:
BM Bossbot intentionally did not run Codex because this PR was not opened by an owner, member, or collaborator.
Blocking findings:
Non-blocking findings: