feat: rename to ddev-claude-cli, drop Codex CLI, add opt-in headless browser

This commit is contained in:
Björn Fromme committed 2026-11-08 12:13:11 +01:00
1 parent b6d88ce4dc
commit d8076fa5a0
8 files changed
+322 -64

No files matched your search

+46
View File
@@ -0,0 +1,46 @@
#!/usr/bin/env bash
#ddev-generated
# Keeps Claude Code's MCP config in step with the opt-in headless browser.
#
# Enabled (.ddev/docker-compose.claude-browser.yaml exists): registers the
# "playwright" MCP server at user scope, and refreshes an add-on-managed compose
# copy from the template after an add-on upgrade. Disabled: removes the
# registration, but only if it is still the one this script created.
#
# Called by install.sh with HOME already pointing at the persisted profile. Never
# fatal: a browser problem must not fail "ddev start" or "ddev claude".
set -uo pipefail
DDEV_DIR="${DDEV_APPROOT}/.ddev"
TEMPLATE="${DDEV_DIR}/claude-code/browser/docker-compose.claude-browser.yaml"
ENABLED="${DDEV_DIR}/docker-compose.claude-browser.yaml"
NAME="playwright"
URL="http://claude-browser:8931/mcp"
CLAUDE_JSON="${HOME}/.claude.json"
if ! command -v jq >/dev/null 2>&1; then
[ -f "${ENABLED}" ] && echo "claude-browser: jq missing, skipping MCP registration" >&2
exit 0
fi
# Read ~/.claude.json directly: "claude mcp get" would try to connect.
registered=0
jq -e --arg n "${NAME}" '.mcpServers[$n]' "${CLAUDE_JSON}" >/dev/null 2>&1 && registered=1
current_url="$(jq -r --arg n "${NAME}" '.mcpServers[$n].url // empty' "${CLAUDE_JSON}" 2>/dev/null)"
if [ -f "${ENABLED}" ]; then
if [ -f "${TEMPLATE}" ] && grep -q '#ddev-generated' "${ENABLED}" && ! cmp -s "${TEMPLATE}" "${ENABLED}"; then
cat "${TEMPLATE}" >"${ENABLED}"
echo "claude-browser: refreshed .ddev/docker-compose.claude-browser.yaml from the add-on; run 'ddev restart' to apply" >&2
fi
if [ "${registered}" -eq 0 ]; then
claude mcp add --transport http --scope user "${NAME}" "${URL}" >/dev/null \
&& echo "claude-browser: registered MCP server '${NAME}' (${URL})"
elif [ "${current_url}" != "${URL}" ]; then
echo "claude-browser: an MCP server named '${NAME}' already exists and is not the add-on's; leaving it alone" >&2
fi
elif [ "${registered}" -eq 1 ] && [ "${current_url}" = "${URL}" ]; then
claude mcp remove "${NAME}" -s user >/dev/null \
&& echo "claude-browser: unregistered MCP server '${NAME}'"
fi
exit 0