Context
Operator-green-lit (this session): resolve the friction where the Claude Code auto-mode classifier denies legitimate equal-peer substrate work (it applies a generic human-approval prior unaware of AGENTS.md / the flat-peer model). There was no tracked .claude/ config teaching the harness Neo's permission model — each agent re-derived it in a gitignored local file or hit the friction cold.
Scope note (re-scoped 2026-06-17): this ticket delivers the two tracked .claude/ config templates below. The AI_QUICK_START.md refresh originally bundled here is descoped to a separate guide-rework effort — see Out of Scope.
The Problem
With no harness-level encoding of "equal-peer substrate work is normal; only gh pr merge / direct main|dev pushes / public client-names are forbidden," the classifier defaults to a deferential prior and gates routine work — the "Helpful Assistant regression" AGENTS.md §identity_prompt_firewall exists to counter, except the firewall is prose the model reads, not config the harness enforces. And the only committed harness-config template was .gemini/settings.template.json (Gemini CLI); Claude Code / Desktop users (the fleet + external contributors) had no equivalent.
The Architectural Reality
Claude Code settings schema verified via the claude-code-guide agent: an explicit permissions.allow MCP-tool entry suppresses the intent classifier for that tool (the friction fix); permissions.deny (deny > ask > allow, compound-aware) statically blocks gh pr merge; autoMode is prose (LLM-evaluated, runtime-arg-aware), carrying the gates a static pattern can't (main|dev push, client-names). .claude/settings.json holds permissions/autoMode — not mcpServers (those live in .mcp.json / claude_desktop_config.json).
The Fix
- NEW
.claude/settings.template.json — permissions.allow the three neo-mjs MCP substrate servers + permissions.deny: ["Bash(gh pr merge *)"] (closes the mechanical_guard: none gap on §critical_gates #1) + prose autoMode mirroring AGENTS.md (hard_deny / allow / environment / soft_deny, each leading with "$defaults"). Fleet-generic — no hardcoded identity.
- NEW
.claude/claude_desktop_config.example.json — Claude Desktop MCP starter, local-first (V-B-A'd against the operator's actual claude_desktop_config.json): node --env-file=<repo>/.env …; secrets live in .env (never inline — no GEMINI_API_KEY); providers point at NEO_OPENAI_COMPATIBLE_HOST (a local inference endpoint); only memory-core carries NEO_AGENT_IDENTITY.
Contract Ledger
N/A — client-side harness config; changes no consumed-MCP-surface contract, behavior, or error-code.
Decision Record impact
none — config; no ADR mutation (harness-adjacent to ADR 0020).
Acceptance Criteria
Out of Scope
AI_QUICK_START.md refresh — DESCOPED to a separate guide-rework effort. A correct guide update needs: a local-first vs remote/cloud split, the local startup prerequisites (orchestrator + NL bridge), and one consistent config form per harness — plus fixing pre-existing staleness (the "Claude Desktop & Claude Code share one MCP file" claim; the neo.mjs-memory-core typo). The initial bundled guide edits were inconsistent + incomplete and were reverted from PR #13454. The rework is filed/steered separately — the local-vs-cloud structure is an operator decision; the startup mechanics need a V-B-A of the actual scripts.
- Applying/installing the config into any live
settings.json / claude_desktop_config.json / .mcp.json (operator / per-agent trust-root act).
- Neural-link MCP tools in the default allow-list (live-runtime mutation; explicit per-agent opt-in).
Related
- PR #13454 (delivers this ticket)
.gemini/settings.template.json (the precedent this mirrors)
AGENTS.md — §critical_gates (#1 mechanical_guard gap, #8 PR→dev, #9 client-names), §identity_prompt_firewall, §swarm_topology_anchor
- ADR 0020 (agent-harness concept — harness-adjacent)
Release classification
post-release (non-blocking) — internal agent-harness dev-config + contributor onboarding; not a v13 / v14 release artifact.
Retrieval Hint: query_raw_memories "harness auto-mode classifier denied substrate work settings template"; "Claude Code permissions autoMode AGENTS.md mirror"
Context
Operator-green-lit (this session): resolve the friction where the Claude Code auto-mode classifier denies legitimate equal-peer substrate work (it applies a generic human-approval prior unaware of
AGENTS.md/ the flat-peer model). There was no tracked.claude/config teaching the harness Neo's permission model — each agent re-derived it in a gitignored local file or hit the friction cold.Scope note (re-scoped 2026-06-17): this ticket delivers the two tracked
.claude/config templates below. TheAI_QUICK_START.mdrefresh originally bundled here is descoped to a separate guide-rework effort — see Out of Scope.The Problem
With no harness-level encoding of "equal-peer substrate work is normal; only
gh pr merge/ directmain|devpushes / public client-names are forbidden," the classifier defaults to a deferential prior and gates routine work — the "Helpful Assistant regression"AGENTS.md §identity_prompt_firewallexists to counter, except the firewall is prose the model reads, not config the harness enforces. And the only committed harness-config template was.gemini/settings.template.json(Gemini CLI); Claude Code / Desktop users (the fleet + external contributors) had no equivalent.The Architectural Reality
Claude Code settings schema verified via the
claude-code-guideagent: an explicitpermissions.allowMCP-tool entry suppresses the intent classifier for that tool (the friction fix);permissions.deny(deny > ask > allow, compound-aware) statically blocksgh pr merge;autoModeis prose (LLM-evaluated, runtime-arg-aware), carrying the gates a static pattern can't (main|devpush, client-names)..claude/settings.jsonholds permissions/autoMode — notmcpServers(those live in.mcp.json/claude_desktop_config.json).The Fix
.claude/settings.template.json—permissions.allowthe three neo-mjs MCP substrate servers +permissions.deny: ["Bash(gh pr merge *)"](closes themechanical_guard: nonegap on §critical_gates #1) + proseautoModemirroringAGENTS.md(hard_deny/allow/environment/soft_deny, each leading with"$defaults"). Fleet-generic — no hardcoded identity..claude/claude_desktop_config.example.json— Claude Desktop MCP starter, local-first (V-B-A'd against the operator's actualclaude_desktop_config.json):node --env-file=<repo>/.env …; secrets live in.env(never inline — noGEMINI_API_KEY); providers point atNEO_OPENAI_COMPATIBLE_HOST(a local inference endpoint); only memory-core carriesNEO_AGENT_IDENTITY.Contract Ledger
N/A — client-side harness config; changes no consumed-MCP-surface contract, behavior, or error-code.
Decision Record impact
none — config; no ADR mutation (harness-adjacent to ADR 0020).
Acceptance Criteria
.claude/settings.template.jsonexists (tracked, valid JSON) withpermissions.allowfor the three neo-mjs MCP servers,permissions.deny: ["Bash(gh pr merge *)"], and a proseautoModewhosehard_denynames: nogh pr merge, no push/commit tomain|dev, no client-names in public artifacts;environment/soft_deny/hard_denyeach include"$defaults"..claude/claude_desktop_config.example.jsonexists (tracked, valid JSON), local-first, with no committed secrets (env-var names / placeholders only;.envis the secret home).devfor operator merge.Out of Scope
AI_QUICK_START.mdrefresh — DESCOPED to a separate guide-rework effort. A correct guide update needs: a local-first vs remote/cloud split, the local startup prerequisites (orchestrator + NL bridge), and one consistent config form per harness — plus fixing pre-existing staleness (the "Claude Desktop & Claude Code share one MCP file" claim; theneo.mjs-memory-coretypo). The initial bundled guide edits were inconsistent + incomplete and were reverted from PR #13454. The rework is filed/steered separately — the local-vs-cloud structure is an operator decision; the startup mechanics need a V-B-A of the actual scripts.settings.json/claude_desktop_config.json/.mcp.json(operator / per-agent trust-root act).Related
.gemini/settings.template.json(the precedent this mirrors)AGENTS.md— §critical_gates (#1mechanical_guardgap, #8 PR→dev, #9 client-names), §identity_prompt_firewall, §swarm_topology_anchorRelease classification
post-release (non-blocking) — internal agent-harness dev-config + contributor onboarding; not a v13 / v14 release artifact.
Retrieval Hint:
query_raw_memories"harness auto-mode classifier denied substrate work settings template"; "Claude Code permissions autoMode AGENTS.md mirror"