feat: Simplify permissions and fix statusline slash command display - #92
Conversation
- Add ruff, pytest, pip, python3 permissions for Python development - Add git -C and mkdir utility permissions - Remove cat /tmp/* (no longer needed) Closes #56 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Code ReviewSummaryAdds Python development tool permissions (ruff, pytest, pip, python3) and utility permissions (git -C, mkdir) to the global Claude Code settings, addressing issue #56. Issues FoundCriticalNone Important
Suggestions
VerdictREQUEST_CHANGES - The Python permissions are too restrictive with exact command matches instead of wildcard patterns. This will cause permission prompts for common variations like running pytest on specific test files or ruff on specific directories. Automated review by Claude Code |
Permissions cleanup: - Consolidate 26 MCP permissions to 2 wildcards (mcp__github__*, mcp__event-bus__*) - Simplify Python venv permissions with wildcards (pip, pytest, ruff) - Add contrib scripts, bootstrap/uninstall, cargo +nightly Statusline fix: - Handle slash commands: extract args content or command name - Previously showed raw XML tags like (<command-args>...</command-args>) - Now shows just the args (or /command for no-arg commands) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Code ReviewSummaryThis PR consolidates MCP permissions from 26 individual entries to 2 wildcards, adds Python venv tooling permissions, adds various utility permissions, and fixes a statusline bug that displayed raw XML tags for slash commands. Issues FoundCriticalNone Important
Suggestions
VerdictREQUEST_CHANGES - The Python permissions are limited to Automated review by Claude Code |
Addresses claude-review feedback: - Add generic patterns: pip, pip3, pytest, ruff (not just .venv/bin/*) - Supports globally installed tools via pipx, homebrew, or system packages Statusline enhancement: - Show associated PR number (#92) when branch has an open PR - Uses gh pr view with 2s timeout to avoid blocking 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Code ReviewSummaryThis PR consolidates 26 MCP permissions into 2 wildcards, adds Python tooling permissions (both venv-local and global patterns), adds various utility permissions, and enhances the statusline with PR indicator and slash command display fixes. Issues FoundCriticalNone ImportantNone Suggestions
VerdictREQUEST_CHANGES - The PR overall looks good and addresses issue #56 with both venv and global Python tool patterns. The single suggestion about the Automated review by Claude Code |
Addresses claude-review feedback: ensure PR indicator queries the correct repo by running gh pr view from $cwd. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Code ReviewSummaryThis PR consolidates 26 MCP permissions into 2 wildcards, adds comprehensive Python tooling permissions (both venv-local and global patterns), adds utility permissions (git -C, mkdir, contrib scripts, bootstrap/uninstall), fixes statusline slash command display, and adds a PR indicator showing the associated PR number for feature branches. Previous Feedback StatusAll issues from previous reviews appear to be addressed:
Issues FoundCriticalNone ImportantNone SuggestionsNone - the code looks clean and well-structured. VerdictAPPROVE - Code looks good, no issues found. The MCP wildcard consolidation reduces maintenance burden, Python permissions now cover both venv and global installations addressing issue #56, and the statusline improvements handle slash commands correctly with a sensible 2s timeout on the PR indicator to avoid blocking. Automated review by Claude Code |
Use `timeout` on Linux where available, skip on macOS where it's not. The gh pr view command is fast enough that timeout is optional. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Uses OSC 8 escape sequences for terminal hyperlinks. Supported in iTerm2, GNOME Terminal, Windows Terminal, Konsole, etc. Cmd+click (or ctrl+click) on #92 opens the PR in browser. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Code ReviewSummaryThis PR consolidates 26 MCP permissions into 2 wildcards, adds comprehensive Python tooling permissions (both venv-local and global patterns), adds utility permissions for git, contrib scripts, and bootstrap/uninstall, and enhances the statusline with a PR indicator and proper slash command display. Issues FoundCriticalNone ImportantNone SuggestionsNone VerdictAPPROVE - Code looks good, no issues found. The changes are well-structured:
Automated review by Claude Code |
Code ReviewSummaryThis PR consolidates 26 MCP permissions into 2 wildcards, adds comprehensive Python tooling permissions (both venv-local and global patterns for ruff, pytest, pip), adds utility permissions (git -C, mkdir, contrib scripts, bootstrap/uninstall, cargo +nightly), and enhances the statusline with a PR indicator and proper slash command display. Issues FoundCriticalNone ImportantNone SuggestionsNone VerdictAPPROVE - Code looks good, no issues found. The implementation is well-structured:
Automated review by Claude Code |
Parses branch names for issue patterns: - issue-42, fix-123, feature/42, bug-99 - Branches starting with number: 42-add-feature - Branches ending with number: add-feature-42 Shows as →#42 in cyan with clickable link to issue. Displayed before PR indicator when both exist. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Code ReviewSummaryThis PR consolidates 26 MCP permissions into 2 wildcards ( Issues FoundCriticalNone ImportantNone SuggestionsNone VerdictAPPROVE - Code looks good, no issues found. Permissions changes are well-designed:
Statusline improvements are solid:
Automated review by Claude Code |
- Support multiple issue numbers in branch name (e.g., issue-42-and-56) - Make directory name a clickable link to repo - Reorder: directory → PR → issues → model → git status → context → user msg - Reuse repo_url fetch for efficiency All links use OSC 8 hyperlinks (cmd+click in iTerm2, ctrl+click elsewhere). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Code ReviewSummaryThis PR consolidates 26 MCP permissions into 2 wildcards ( Issues FoundCriticalNone ImportantNone Suggestions
VerdictREQUEST_CHANGES - The issue indicator regex is overly broad and will create false positive issue links for any number in a branch name. While functional, this could create confusing clickable links to unrelated issues. Automated review by Claude Code |
Uses `gh pr list --head <branch>` to find all PRs for current branch. Supports PRs to multiple base branches (e.g., main and develop). Displays as comma-separated clickable links: #92,#93 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Code ReviewSummaryThis PR consolidates 26 MCP permissions into 2 wildcards ( Issues FoundCriticalNone ImportantNone Suggestions
VerdictREQUEST_CHANGES - The issue indicator regex will create false positive hyperlinks for any number in a branch name. While functional, this could link to unrelated issues. Consider tightening the pattern to require common issue prefixes. Automated review by Claude Code |
- Issue detection now checks PR body for "Fixes #N" patterns first, then falls back to tight branch name pattern (issue-42, fix-42, etc.) - User context extraction uses jq slurp mode to avoid picking up tool result messages 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Code ReviewSummaryThis PR consolidates 26 MCP permissions into 2 wildcards ( Issues FoundCriticalNone ImportantNone SuggestionsNone VerdictAPPROVE - Code looks good, no issues found. Permissions changes (settings.json):
Statusline improvements (statusline-command.sh):
Automated review by Claude Code |
When a slash command has empty <command-args></command-args>, fall back to showing the command name instead of empty/garbage text. Also filters out system preambles like "Caveat:..." from plain messages. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Code ReviewSummaryThis PR consolidates 26 MCP permissions into 2 wildcards ( Issues FoundCriticalNone ImportantNone SuggestionsNone VerdictAPPROVE - Code looks good, no issues found. Permissions changes (settings.json):
Statusline improvements (statusline-command.sh):
Automated review by Claude Code |
Session continuation summaries ("This session is being continued from
a previous conversation...") are marked as user messages but are
system-generated. Filter these out from the user context display.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Code ReviewSummaryThis PR consolidates 26 MCP permissions into 2 wildcards ( Issues FoundCriticalNone ImportantNone SuggestionsNone VerdictAPPROVE - Code looks good, no issues found. Permissions changes (settings.json):
Statusline improvements (statusline-command.sh):
Automated review by Claude Code |
Code ReviewSummaryThis PR consolidates 26 MCP permissions into 2 wildcards ( Issues FoundCriticalNone ImportantNone SuggestionsNone VerdictAPPROVE - Code looks good, no issues found. Permissions (settings.json):
Statusline (statusline-command.sh):
Automated review by Claude Code |
* feat: Add Python tooling permissions to global settings - Add ruff, pytest, pip, python3 permissions for Python development - Add git -C and mkdir utility permissions - Remove cat /tmp/* (no longer needed) Closes #56 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: Simplify permissions and fix statusline slash command display Permissions cleanup: - Consolidate 26 MCP permissions to 2 wildcards (mcp__github__*, mcp__event-bus__*) - Simplify Python venv permissions with wildcards (pip, pytest, ruff) - Add contrib scripts, bootstrap/uninstall, cargo +nightly Statusline fix: - Handle slash commands: extract args content or command name - Previously showed raw XML tags like (<command-args>...</command-args>) - Now shows just the args (or /command for no-arg commands) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: Add global Python tool patterns and PR indicator to statusline Addresses claude-review feedback: - Add generic patterns: pip, pip3, pytest, ruff (not just .venv/bin/*) - Supports globally installed tools via pipx, homebrew, or system packages Statusline enhancement: - Show associated PR number (#92) when branch has an open PR - Uses gh pr view with 2s timeout to avoid blocking 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Run gh pr view from correct working directory Addresses claude-review feedback: ensure PR indicator queries the correct repo by running gh pr view from $cwd. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Make PR indicator cross-platform (macOS + Linux) Use `timeout` on Linux where available, skip on macOS where it's not. The gh pr view command is fast enough that timeout is optional. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: Make PR indicator a clickable hyperlink Uses OSC 8 escape sequences for terminal hyperlinks. Supported in iTerm2, GNOME Terminal, Windows Terminal, Konsole, etc. Cmd+click (or ctrl+click) on #92 opens the PR in browser. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: Add issue indicator from branch name Parses branch names for issue patterns: - issue-42, fix-123, feature/42, bug-99 - Branches starting with number: 42-add-feature - Branches ending with number: add-feature-42 Shows as →#42 in cyan with clickable link to issue. Displayed before PR indicator when both exist. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: Enhance statusline with multiple issues and clickable directory - Support multiple issue numbers in branch name (e.g., issue-42-and-56) - Make directory name a clickable link to repo - Reorder: directory → PR → issues → model → git status → context → user msg - Reuse repo_url fetch for efficiency All links use OSC 8 hyperlinks (cmd+click in iTerm2, ctrl+click elsewhere). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: Support multiple PRs in statusline Uses `gh pr list --head <branch>` to find all PRs for current branch. Supports PRs to multiple base branches (e.g., main and develop). Displays as comma-separated clickable links: #92,#93 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Improve statusline issue detection and user context extraction - Issue detection now checks PR body for "Fixes #N" patterns first, then falls back to tight branch name pattern (issue-42, fix-42, etc.) - User context extraction uses jq slurp mode to avoid picking up tool result messages 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Handle empty command-args in statusline When a slash command has empty <command-args></command-args>, fall back to showing the command name instead of empty/garbage text. Also filters out system preambles like "Caveat:..." from plain messages. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Filter out continuation summaries from statusline user context Session continuation summaries ("This session is being continued from a previous conversation...") are marked as user messages but are system-generated. Filter these out from the user context display. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * feat: Add Notion MCP and fix statusline hyperlink issues - Add Notion MCP server installation to bootstrap.sh - Add mcp__notion__* permission to settings.json - Fix statusline hyperlink escape sequences leaking (dotted underlines) - Add atomic output to prevent interleaving with CC status messages - Validate PR/issue numbers before creating hyperlinks - Strip newlines to prevent tmux layout issues 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * chore: Add Makefile for local quality gates - `make check` - run all quality gates (lint + test) - `make lint` - shellcheck on all .sh files (matches CI) - `make test` - bash/zsh syntax checking - `make install` / `make uninstall` - bootstrap/uninstall wrappers Follows same structure as claude-event-bus and claude-session-analytics. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Add CRITICAL reminder to run /pr remote after CI passes Automated reviewers (like claude-review) post new comments on each CI run. Must check for these before declaring a PR ready to merge. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * chore: Trigger CI * refactor: Align CI workflow with other repos - Split into Lint, Test, Bootstrap jobs (matches claude-event-bus pattern) - Each job runs specific make targets - Update branch protection to match new job names 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Strengthen claude-review verdict compliance The review prompt was being ignored - model approved with suggestions despite explicit "REQUEST_CHANGES if any suggestions" rule. Fixes: 1. Make rule a HARD CONSTRAINT with explicit "no exceptions" language 2. Add verification step: count issues before posting, check verdict 3. Add reminder comment in verdict template section 4. Explicitly forbid rationalizing "minor" suggestions as approvable 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * fix: Add reporting philosophy to prevent suggestion suppression The model was hiding suggestions to avoid REQUEST_CHANGES. This adds guidance that: - Report all relevant feedback, don't suppress to achieve a verdict - REQUEST_CHANGES is the normal outcome for thorough reviews - Suggestions are valuable collaboration, not criticism 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * experiment: Temporarily revert prompt to test suggestion suppression * Restore improved review prompt after testing Experiment confirmed: prompt changes did not cause suggestion suppression. Model variance is the cause - different runs evaluate differently. Keeping improvements: - Reporting Philosophy section (encourages finding suggestions) - HARD CONSTRAINT language (enforces verdict rules) - Verify Before Posting step (mechanical check) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * docs: Clarify explicit stdin redirection in statusline 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Summary
mcp__github__*,mcp__event-bus__*)Changes
Permissions (settings.json):
.venv/bin/{pip,pytest,ruff}:*+ global{pip,pip3,pytest,ruff}:*Bash(cat /tmp/*:*)- no longer needed with dedicated Read toolStatusline (statusline-command.sh):
<command-args>content or<command-name>Test plan
🤖 Generated with Claude Code