From 63b99130103b23de36c0246aa738d88510889833 Mon Sep 17 00:00:00 2001 From: fOuttaMyPaint Date: Thu, 18 Jun 2026 17:13:44 -0400 Subject: [PATCH 1/2] docs: remove stray context-mode routing block from CLAUDE.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The '# context-mode — MANDATORY routing rules' section (added directly to main in 881e17b) is Claude Code context-mode plugin guidance, not Blender project documentation. Removed it from the H1 through end of file; all Blender content and the Release Hygiene section are kept intact. Signed-off-by: fOuttaMyPaint --- CLAUDE.md | 63 ------------------------------------------------------- 1 file changed, 63 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 9a7488c..02e4197 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -114,66 +114,3 @@ When adding content to a future version: 3. Update ROADMAP.md candidate pool entries. 4. Use `feat:` for new content, `fix:` for corrections. 5. Push. The release pipeline handles VERSION, tags, CHANGELOG, the `**Version:**` line here, and the `**Current:**` line in ROADMAP.md. - -# context-mode — MANDATORY routing rules - -You have context-mode MCP tools available. These rules are NOT optional — they protect your context window from flooding. A single unrouted command can dump 56 KB into context and waste the entire session. - -## BLOCKED commands — do NOT attempt these - -### curl / wget — BLOCKED -Any Bash command containing `curl` or `wget` is intercepted and replaced with an error message. Do NOT retry. -Instead use: -- `ctx_fetch_and_index(url, source)` to fetch and index web pages -- `ctx_execute(language: "javascript", code: "const r = await fetch(...)")` to run HTTP calls in sandbox - -### Inline HTTP — BLOCKED -Any Bash command containing `fetch('http`, `requests.get(`, `requests.post(`, `http.get(`, or `http.request(` is intercepted and replaced with an error message. Do NOT retry with Bash. -Instead use: -- `ctx_execute(language, code)` to run HTTP calls in sandbox — only stdout enters context - -### WebFetch — BLOCKED -WebFetch calls are denied entirely. The URL is extracted and you are told to use `ctx_fetch_and_index` instead. -Instead use: -- `ctx_fetch_and_index(url, source)` then `ctx_search(queries)` to query the indexed content - -## REDIRECTED tools — use sandbox equivalents - -### Bash (>20 lines output) -Bash is ONLY for: `git`, `mkdir`, `rm`, `mv`, `cd`, `ls`, `npm install`, `pip install`, and other short-output commands. -For everything else, use: -- `ctx_batch_execute(commands, queries)` — run multiple commands + search in ONE call -- `ctx_execute(language: "shell", code: "...")` — run in sandbox, only stdout enters context - -### Read (for analysis) -If you are reading a file to **Edit** it → Read is correct (Edit needs content in context). -If you are reading to **analyze, explore, or summarize** → use `ctx_execute_file(path, language, code)` instead. Only your printed summary enters context. The raw file content stays in the sandbox. - -### Grep (large results) -Grep results can flood context. Use `ctx_execute(language: "shell", code: "grep ...")` to run searches in sandbox. Only your printed summary enters context. - -## Tool selection hierarchy - -1. **GATHER**: `ctx_batch_execute(commands, queries)` — Primary tool. Runs all commands, auto-indexes output, returns search results. ONE call replaces 30+ individual calls. -2. **FOLLOW-UP**: `ctx_search(queries: ["q1", "q2", ...])` — Query indexed content. Pass ALL questions as array in ONE call. -3. **PROCESSING**: `ctx_execute(language, code)` | `ctx_execute_file(path, language, code)` — Sandbox execution. Only stdout enters context. -4. **WEB**: `ctx_fetch_and_index(url, source)` then `ctx_search(queries)` — Fetch, chunk, index, query. Raw HTML never enters context. -5. **INDEX**: `ctx_index(content, source)` — Store content in FTS5 knowledge base for later search. - -## Subagent routing - -When spawning subagents (Agent/Task tool), the routing block is automatically injected into their prompt. Bash-type subagents are upgraded to general-purpose so they have access to MCP tools. You do NOT need to manually instruct subagents about context-mode. - -## Output constraints - -- Keep responses under 500 words. -- Write artifacts (code, configs, PRDs) to FILES — never return them as inline text. Return only: file path + 1-line description. -- When indexing content, use descriptive source labels so others can `ctx_search(source: "label")` later. - -## ctx commands - -| Command | Action | -|---------|--------| -| `ctx stats` | Call the `ctx_stats` MCP tool and display the full output verbatim | -| `ctx doctor` | Call the `ctx_doctor` MCP tool, run the returned shell command, display as checklist | -| `ctx upgrade` | Call the `ctx_upgrade` MCP tool, run the returned shell command, display as checklist | From 13146542487416b8c15b01f82261daa2a1461ea6 Mon Sep 17 00:00:00 2001 From: fOuttaMyPaint Date: Thu, 18 Jun 2026 17:16:27 -0400 Subject: [PATCH 2/2] fix: use verbatim bpy.app.handlers doc quote in drivers skill The save/load handler note quoted a non-verbatim 'the file being saved/loaded' combination. Replaced with the exact documented sentence for save_pre plus the authoritative Callable[[str], None] type signature, and noted the load handlers' analogous wording. The '4.5.10 LTS and 5.1.1' empirical claims are accurate (re-verified) and kept. Signed-off-by: fOuttaMyPaint --- skills/drivers-and-app-handlers/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skills/drivers-and-app-handlers/SKILL.md b/skills/drivers-and-app-handlers/SKILL.md index 80ef6d5..a894567 100644 --- a/skills/drivers-and-app-handlers/SKILL.md +++ b/skills/drivers-and-app-handlers/SKILL.md @@ -155,7 +155,7 @@ The handlers live as lists at `bpy.app.handlers.`. To register, append; t | `frame_change_post` | `(scene, depsgraph)` | After frame is set. | | `exit_pre` (new in 5.1) | `(*args)` | Before Blender shuts down. Use for resource cleanup, telemetry flush, etc. The argument is not a Scene; accept `*args`. | -The save/load handlers (`save_pre`, `save_post`, `load_pre`, `load_post`) all receive the **file path as a string** as their single argument, **not** a Scene. (Verified empirically on 4.5.10 LTS and 5.1.1, and against `bpy.app.handlers` docs: "Accepts one argument: the file being saved/loaded.") Only the depsgraph/frame-change handlers receive `(scene, depsgraph)`. +The save/load handlers (`save_pre`, `save_post`, `load_pre`, `load_post`) all receive the **file path as a string** as their single argument, **not** a Scene. (Verified empirically on 4.5.10 LTS and 5.1.1. The [`bpy.app.handlers`](https://docs.blender.org/api/current/bpy.app.handlers.html) docs type these as `Callable[[str], None]`; `save_pre` is described as "on saving a blend file (before). Accepts one argument: the file being saved, an empty string for the startup-file." — the load handlers use the same wording with "the file being loaded".) Only the depsgraph/frame-change handlers receive `(scene, depsgraph)`. The `exit_pre` handler in 5.1 is particularly useful for add-ons that need to release external resources (sockets, log files, child processes) deterministically before the process terminates.