Feature wishlist from managing .claude/ across 12 projects

Resolved 💬 2 comments Opened Apr 5, 2026 by luiseiman Closed May 16, 2026

Context

I maintain dotforge, a configuration governance system for Claude Code. I manage .claude/ across 12 projects (Python/FastAPI, React/Vite, Swift/SwiftUI, Docker, trading bots) with audit scoring, template sync, and a practices pipeline. These requests come from real friction points, not speculation.

P0 — Blocking or requires brittle workarounds

1. Blocking PreCompact hook event

PreCompact exists but is non-blocking (exit code ignored). There's no way to defer compaction during critical sequences — git commits, deployments, multi-file refactors. If context compacts mid-commit, all work is orphaned as uncommitted changes.

Current workaround: PostCompact + SessionStart hook pair that saves/restores state to .claude/session/last-compact.md. It works but it's a patch over a platform gap.

Proposal: Allow PreCompact hooks to return {"defer": true, "reason": "commit in progress"} to delay compaction until the current tool chain completes.

Related: #43886

2. paths: frontmatter YAML list syntax silently fails

Documented YAML list format for rule paths doesn't work. No error, no warning — rules just don't load. Only unquoted CSV on a single line works. This is confirmed in #17204.

# FAILS SILENTLY:
paths:
  - "src/**/*.ts"
  - "lib/**/*.ts"

# WORKS:
paths: src/**/*.ts, lib/**/*.ts

Impact: Users following the documentation get non-functional rules with zero feedback. Hardest kind of bug to debug.

3. Python hooks require manual stdout flush

Python hooks that output JSON to stdout fail silently because the pipe closes before Python's buffered write completes. Every Python hook needs sys.stdout.flush() or flush=True — but nothing in the docs mentions this.

Proposal: Document this clearly, or set PYTHONUNBUFFERED=1 in the hook execution environment.

Related: #43903

4. No way to toggle individual skills on/off

The only way to disable a skill is to delete or rename the file. There's no enabledSkills / disabledSkills in settings.json.

Impact: When managing 18 skills across projects, you sometimes need to disable one for a specific project without removing it from the template.

Related: #43928

5. Bootstrap/sync can't merge hooks from stack partials

settings.json.partial files in technology stacks can define hooks, but the merge process (documented in bootstrap/sync skills) only merges allow and deny arrays. Hooks from stack partials are silently dropped.

Impact: Any stack that provides hooks (TDD auto-test, Python linting, deployment guards) requires manual hook wiring after bootstrap.

P1 — Would significantly reduce friction

6. settings.json silent failure on typos

A malformed or mistyped key in settings.json produces no error. Deny rules with wrong syntax, hooks with string values instead of objects, permission entries with typos — all silently ignored.

Proposal: JSON schema validation on load with clear error messages. Even a claude config validate command would help.

7. Auto mode classifier feedback

When the auto mode classifier blocks a tool call, there's no indication of WHY. The PermissionDenied event fires but the reason is opaque.

Proposal: Include classifier reasoning in the PermissionDenied event payload: which rule triggered, what the classifier evaluated, confidence level.

8. Deny list **/ recursive glob inconsistency

Read(.env) only matches .env at the project root. Read(**/.env) matches at any depth. The documentation doesn't clearly explain this difference. Most users write Read(.env) thinking it covers all .env files — it doesn't.

9. Hook if field with regex support

The if conditional field (v2.1.85+) only supports permission rule syntax. Regex matching on tool arguments would enable much more precise hook targeting without needing matcher + script logic.

10. Rule effectiveness metrics

No way to know which rules actually loaded, how often they influenced behavior, or which ones are inert. Currently requires cross-referencing rule globs against git log --name-only manually.

Proposal: A /rules stats command or diagnostic output showing: loaded rules count, glob match frequency, rules that never matched.

P2 — Nice to have

| Feature | Notes |
|---------|-------|
| Compaction budget per section | Preserve rules at 100%, compact tool results aggressively |
| PreCommit semantic event | Before git commit specifically, not just PreToolUse+Bash matcher |
| Cross-session error tracking | Automatic error log with root cause across sessions (CLAUDE_ERRORS.md is manual) |
| Agent memory API | Structured persistence for agent knowledge (currently file-based) |
| Plugin marketplace search/filter | /plugin discover with no search becomes unusable at scale |
| Native config export | Built-in export to .cursorrules, AGENTS.md, .windsurfrules |
| Config diff between projects | Compare settings.json/rules across repos directly |

What already works great

The hook system (26 events), rules with globs frontmatter, permission model (6 modes), subagents with independent context, and the plugin system are all solid foundations. These requests are about closing gaps in the last 10% that make multi-project management viable at scale.

---

Happy to provide more detail or test implementations for any of these. Feedback from managing 12 production projects with 16 technology stacks.

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗