feature/Make-target-local-workshop · L-260926-2b15c9 - #90
Merged
Merged
Conversation
…shop `make claude-local-mcp` renders the Claude target, with the build's own renderer and the workshop's command and args laid over [vars.mcp_server], into the ignored .local-mcp/pipelex/ and starts `claude --plugin-dir` on it. `make codex-local-mcp` starts Codex with -c overrides of its pipelex entry, env_vars included, since such an entry replaces the plugin's whole. MCP names a pipelex-mcp checkout, built first with its `make build-local`; MCP_VERSION a published version, resolved by npm before anything starts. Neither touches a tracked file. The /pipelex-mcp-source skill keeps its status report and names the targets instead of editing targets/defaults.toml, and the install page's one-invocation Codex override now forwards the key. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014AcpM2qUzbWMenP62iSBoS
…nder a lock A session reads the copy's launcher again at every respawn, so the one shared .local-mcp/pipelex/ let a later start with another workshop switch the workshop of a session already running. Two starts at once also shared one staging directory, and could fail or swap in a copy missing files. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014AcpM2qUzbWMenP62iSBoS
The Makefile's build line ran before the script, so a wrong MCP met make's own error and the script's refusal naming MCP could never be reached. The script now checks the checkout, runs its `make build-local` with the make target's variables removed from the environment, then looks for the workshop. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014AcpM2qUzbWMenP62iSBoS
launch-pipelex-mcp.sh wrote each argument in bare double quotes, so a checkout path holding `$`, a backtick, `"` or `\` was expanded or broke the word, and under `set -u` a `$name` aborted the launcher. A renderer filter escapes the four; every shipped output renders as it did. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014AcpM2qUzbWMenP62iSBoS
… one The development page told readers never to start a target from inside a session, while the repository skill runs a headless prompt from one; and its `ARGS='-p "…"'` selects a configuration profile on Codex, whose headless form is `exec`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014AcpM2qUzbWMenP62iSBoS
os.execv handed the session MAKEFLAGS, MAKELEVEL and the target's MCP, MCP_VERSION, WORKDIR and ARGS, so every make the agent ran took them as its own command line: a project's ARGS was overridden, and a nested `make codex-local-mcp MCP=<checkout>` started the outer run's MCP_VERSION. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014AcpM2qUzbWMenP62iSBoS
The recipe spliced both into double quotes, so make expanded a `$` in the path, the shell ran a backtick, and a `"` broke the recipe, before the launcher's own escaping could matter. Each now goes as one single-quoted word of the variable's unexpanded value. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014AcpM2qUzbWMenP62iSBoS
MCP, MCP_VERSION, WORKDIR and ARGS are generic names. Read with `?=`, a WORKDIR or ARGS the shell exported for another tool became the session's directory or the harness's arguments, and the environment filter then removed it from the session. The Makefile now takes each from the command line, unexpanded, and never assigns it; the script removes one only when MAKEFLAGS names it. ARGS is no longer expanded by make, so a `$` in a prompt survives. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014AcpM2qUzbWMenP62iSBoS
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014AcpM2qUzbWMenP62iSBoS
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014AcpM2qUzbWMenP62iSBoS
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014AcpM2qUzbWMenP62iSBoS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
make claude-local-mcpandmake codex-local-mcpstart Claude Code or Codex on this checkout's plugin with the workshop from a local pipelex-mcp checkout (MCP=, default../pipelex-mcp, built with itsmake build-localfirst) or a published version (MCP_VERSION=), without changing a tracked file: Claude loads a copy rendered into the ignored.local-mcp/<workshop>/, and Codex gets-coverrides for itsmcp_servers.pipelexentry. The targets read their variables from make's command line alone and hand the session an environment stripped of make's state, and/pipelex-mcp-sourcekeeps its status report while its switching arms now point at the targets.Closes L-260926-2b15c9
🤖 Generated with Claude Code
https://claude.ai/code/session_014AcpM2qUzbWMenP62iSBoS
Summary by cubic
Adds
make claude-local-mcpandmake codex-local-mcp, one-command ways to start Claude Code or Codex with apipelex-mcpworkshop other than the shipped one — a local checkout (MCP=<path>, built first) or a pinned published version (MCP_VERSION=<version>) — without changing any tracked file. Claude Code loads a rendered copy of this checkout's skills from the ignored.local-mcp/; Codex keeps its installed skills and gets-coverrides for itspipelexserver entry.Details
/pipelex-mcp-sourceno longer switches workshops by editingtargets/defaults.toml; it reports which version each deployment serves and names the target to run.MCP,MCP_VERSION,WORKDIR, andARGSfrom make's command line and strip make's state from the session, so values exported for other tools or nested builds don't leak in.$, backticks, quotes, or backslashes resolve correctly.Written for commit 0e3d3b9. Summary will update on new commits.