Skip to content

Rework: CLAUDE.local.md per-developer overrides (was #9)#11

Closed
filip-ceos wants to merge 2 commits into
mainfrom
rework/claude-local-md
Closed

Rework: CLAUDE.local.md per-developer overrides (was #9)#11
filip-ceos wants to merge 2 commits into
mainfrom
rework/claude-local-md

Conversation

@filip-ceos

Copy link
Copy Markdown
Collaborator

Rework: CLAUDE.local.md per-developer overrides (was #9)

This carries the CLAUDE.local.md local-override work from #9 (review fixes already applied) for redesign. It was deliberately pulled from the v1.1.0 release (#10); do not merge as-is.

Why it was pulled

The current design adds a config-layering mechanism — a second, gitignored source of truth (CLAUDE.local.md) merged over the committed CLAUDE.md, with an LLM-performed sparse markdown merge in core/config-reader.md Step 0. Concerns:

  1. Mechanism vs. need. Automation Config describes what the pipeline does to shared resources (tracker, remote, base branch, PR rules) — these should be identical for everyone. The legitimately per-developer surface is tiny (local Browser Verification URL / disable, a personal bug query). A whole config-resolution layer threaded through 8 files is disproportionate.
  2. Dual source of truth in the riskiest layer. config-reader is the single place the pipeline learns where to push and what to label. A gitignored override + an LLM-performed merge there weakens the "single committed, inspectable config" property and adds a misparse surface exactly where mistakes are most damaging (wrong remote/base — the incident class feat(publisher): PR-ownership defenses (6a/6b) + PR Rules Title format key — v1.1.0 #7 hardened against).
  3. Run mode. The pipeline runs PR/tracker automation and has an Autopilot mode; "per-developer override" is conceptually undefined in an autopilot/CI run.
  4. Duplicates existing levers. Disabling browser verification is already achievable via Pipeline Profiles (skip stages) or by leaving the section unconfigured.

What to change

  • First decide whether this is needed at all for how agent-flow is actually run (interactive per-dev vs. autopilot/CI). If the per-dev need isn't real, close this and land only the small good piece below.
  • If kept, drastically narrow the scope. Overridable keys = a small, explicit allowlist of developer-local, non-shared keys only (Browser Verification incl. Enabled/Base URL; Issue Tracker Bug query; possibly Local Deployment ports / Module Docs). A hard denylist that can NEVER be overridden: Source Control Remote/Base branch, Notifications Webhook URL, Issue Tracker Instance/Project, and all of PR Rules — config-reader must ignore any local override of these with a [WARN].
  • Avoid the general LLM-performed whole-config merge. Prefer a smaller, more deterministic shape — a fixed set of override keys, or per-togglable-section flags — rather than arbitrary sparse markdown layering.
  • Salvage the genuinely-good small piece separately: the Browser Verification Enabled key is a clean standalone optional key (disable verification without removing the section) and can land on its own, independent of any override layer.
  • Add a guard test ensuring no skill/agent reads CLAUDE.md directly and bypasses config-reader (one such bypass — the fix-bugs tracker-type grep — was found during review).

Already in this branch

The original #9 mechanism plus the multi-perspective review fixes: the awk -F'| ' tracker-type extractor fix, merge-rule clarifications (empty value; multi-value/maps replaced as a whole unit; Step-0-before-Step-4 ordering), a .gitignore block + security note, the verify-phase annotation, and examples/CLAUDE.local.example.md.

🚧 Draft — redesign before merge. Targets main, not the v1.1.0 release branch.

jakubsenk and others added 2 commits June 10, 2026 07:36
Introduce a local override mechanism where an optional, gitignored CLAUDE.local.md is merged over CLAUDE.md (local wins) before parsing Automation Config (core/config-reader.md Step 0). Add claude_local_md_content input and merge rules, document the feature in CLAUDE.md and docs/reference/automation-config.md, and show example usage in onboard docs.

Introduce browser.enabled (default true) and a derived gate browser_verification_enabled = false when the Browser Verification section is absent or Enabled is false; update agents and skills to consume the merged config and to skip/defensively refuse based on the new gate (browser-agent, deployment-verifier, skills/fix-bugs, steps/03-reproduce.md, steps/08-browser-verify.md, skills/check-setup/SKILL.md). Also update tracker-type lookup in fix-bugs to prefer CLAUDE.local.md when present. Files changed: CLAUDE.md, core/config-reader.md, docs/reference/automation-config.md, agents/browser-agent.md, agents/deployment-verifier.md, skills/check-setup/SKILL.md, skills/fix-bugs/SKILL.md, skills/fix-bugs/steps/03-reproduce.md, skills/fix-bugs/steps/08-browser-verify.md, skills/onboard/SKILL.md.
- fix-bugs/SKILL.md: fix the TRACKER_TYPE awk extractor (`awk -F'| '` treats the
  separator as an ERE alternation, yielding a literal `|`); use `awk '{print $4}'`
  so the CLAUDE.local.md Type precedence actually works
- config-reader Step 0: define empty-value override (clears base), whole-unit
  replacement for multi-value/map keys, and the Step-0-before-Step-4 ordering note
- docs: add a copy-paste `.gitignore` block + a security note (local overrides can
  change webhook/remote/base-branch; by design machine-local)
- browser-agent: annotate the verify-phase "Read context" as override-resolved
- add examples/CLAUDE.local.example.md (docs referenced it as a tracked template)

Full local harness: 230 pass / 0 fail / 1 skip.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@filip-ceos

Copy link
Copy Markdown
Collaborator Author

Closing — superseded by the Automation Config relocation decision (#18): the ## Automation Config section moves out of consumer CLAUDE.md entirely into .agent-flow/config.toml (hard cut, no inline fallback), and per-developer overrides will be handled by a gitignored .agent-flow/config.local.toml merged on top (per-key deep merge). The per-dev-overridable key semantics defined here (browser verification, local deployment) will be carried over into the config.toml spec.

🤖 Generated with Claude Code

@filip-ceos filip-ceos closed this Jul 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants