Common seat tune-ups

Mouse junk, OpenClaude model pinning, dontAsk vs bypassPermissions, Notification wire, and turn caps — field fixes for day-to-day seats.

Goal#

Fix the recurring OpenClaude / OpenCode seat annoyances without digging through source. Community mirror: COMMON-SETTINGS.md on orchemax-orch.

OpenClaude model picker always snaps back (e.g. orchemax/pareto)#

Cause: ~/.openclaude/settings.json had env.OPENAI_MODEL pinned. OpenClaude merges settings.env onto the process at startup, so that value overrides the model field and the in-UI picker.

Fix: route the gateway in env, pick the model only via model:

{
  "model": "orchemax/deepseek-v4.1-flash",
  "env": {
    "CLAUDE_CODE_USE_OPENAI": "1",
    "OPENAI_BASE_URL": "http://127.0.0.1:8788/v1"
  }
}

Do not put OPENAI_MODEL (or a pasted orch_gk_…) in env when you launch with orch openclaude — the session injects the key, and orch openclaude scrubs a persisted env.OPENAI_MODEL on launch.

No permission prompts (without silent MCP denials)#

defaultMode Asks? What runs
default Yes, often You approve each sensitive tool
acceptEdits Less Edits auto; Bash/MCP may still ask
dontAsk Never Only permissions.allow — everything else is denied
bypassPermissions / fullAccess Never Tools run without prompting

Under Orchemax, prefer bypassPermissions (workshop locks/guards still apply):

"permissions": {
  "defaultMode": "bypassPermissions",
  "allow": [
    "mcp__orch__*",
    "Bash(*)",
    "Read(*)",
    "Edit(*)",
    "Write(*)",
    "MultiEdit(*)"
  ]
}

dontAsk with a short allow-list is what produces Permission to use mcp__orch__verify_status has been denied…. Always include mcp__orch__*. orch guard wire --openclaude / --claude merges that rule into the project settings block. Restart the seat after editing.

Mouse / focus garbage ([I[O, <35;…M)#

agents:
  disable_mouse: true

Injects OPENCODE_DISABLE_MOUSE + CLAUDE_CODE_DISABLE_MOUSE. Tradeoff: native terminal select works; in-TUI wheel scroll usually does not. Opt out: ORCH_ENABLE_AGENT_MOUSE=1.

OpenClaude needs a reply — no desktop toast#

orch guard wire --openclaude

OpenClaude reads .openclaude/, not .claude/. Opening orch openclaude also injects project .openclaude/settings.local.json. Prove the channel: orch notify test --desktop.

OpenClaude stops at 50 turns#

openclaude --max-turns 0
# or OPENCLAUDE_MAX_TURNS=200

Or in orch.yaml:

agents:
  interactive:
    openclaude: openclaude --max-turns 0