oh-my-customcode
Advanced tools
+1
-1
@@ -6,3 +6,3 @@ { | ||
| ], | ||
| "version": "1.1.16", | ||
| "version": "1.1.17", | ||
| "description": "Batteries-included agent harness for Claude Code", | ||
@@ -9,0 +9,0 @@ "type": "module", |
@@ -225,3 +225,3 @@ { | ||
| { | ||
| "type": "prompt", | ||
| "type": "command", | ||
| "command": "bash .claude/hooks/scripts/session-autofix-prompt.sh" | ||
@@ -228,0 +228,0 @@ } |
| #!/bin/bash | ||
| # Stage-blocking hook: blocks Write/Edit in non-implement stages | ||
| # Mutual Exclusion: This hook is mutually exclusive with autonomous mode (R010). | ||
| # When /tmp/.claude-dev-stage exists, autonomous mode cannot be activated. | ||
| # When /tmp/.claude-dev-stage-$PPID exists, autonomous mode cannot be activated. | ||
| # When /tmp/.claude-autonomous-$PPID exists, /structured-dev-cycle should not be started. | ||
| # See: MUST-orchestrator-coordination.md "Autonomous Execution Mode" section. | ||
| if [ -f /tmp/.claude-dev-stage ]; then | ||
| stage=$(cat /tmp/.claude-dev-stage | tr -d '[:space:]') | ||
| if [ -f /tmp/.claude-dev-stage-$PPID ]; then | ||
| stage=$(cat /tmp/.claude-dev-stage-$PPID | tr -d '[:space:]') | ||
| if [ -z "$stage" ]; then exit 0; fi | ||
| case "$stage" in | ||
| plan|verify-plan|verify-impl|compound|done) | ||
| echo "⛔ BLOCKED: Write/Edit disabled in '$stage' stage. Only allowed during 'implement' stage. Use 'echo implement > /tmp/.claude-dev-stage' to transition." | ||
| echo "⛔ BLOCKED: Write/Edit disabled in '$stage' stage. Only allowed during 'implement' stage. Use 'echo implement > /tmp/.claude-dev-stage-$PPID' to transition." | ||
| exit 2 | ||
@@ -14,0 +14,0 @@ ;; |
@@ -23,3 +23,3 @@ #!/bin/bash | ||
| # Dev stage (structured-dev-cycle) | ||
| [ -f "/tmp/.claude-dev-stage" ] && dev_stage=$(cat "/tmp/.claude-dev-stage" 2>/dev/null) | ||
| [ -f "/tmp/.claude-dev-stage-$PPID" ] && dev_stage=$(cat "/tmp/.claude-dev-stage-$PPID" 2>/dev/null) | ||
@@ -26,0 +26,0 @@ # Tool call counter |
@@ -182,3 +182,3 @@ # [MUST] Orchestrator Coordination Rules | ||
| 1. User gives explicit autonomous signal (not inferred from task complexity) | ||
| 2. Verify stage-blocker is NOT active (`/tmp/.claude-dev-stage` must not exist) | ||
| 2. Verify stage-blocker is NOT active (`/tmp/.claude-dev-stage-$PPID` must not exist) | ||
| 3. Create marker: `echo 1 > /tmp/.claude-autonomous-$PPID` | ||
@@ -215,3 +215,3 @@ 4. Announce: `[Autonomous Mode] Activated for current task scope` | ||
| - Autonomous mode and `/structured-dev-cycle` (stage-blocker) are **mutually exclusive** | ||
| - If `/tmp/.claude-dev-stage` exists → autonomous mode CANNOT be activated | ||
| - If `/tmp/.claude-dev-stage-$PPID` exists → autonomous mode CANNOT be activated | ||
| - If autonomous mode is active → `/structured-dev-cycle` should not be started | ||
@@ -230,3 +230,3 @@ | ||
| ║ 2. Is stage-blocker inactive? ║ | ||
| ║ (/tmp/.claude-dev-stage does NOT exist) ║ | ||
| ║ (/tmp/.claude-dev-stage-$PPID does NOT exist) ║ | ||
| ║ YES → Continue ║ | ||
@@ -233,0 +233,0 @@ ║ NO → Cannot activate (mutually exclusive) ║ |
@@ -73,40 +73,8 @@ --- | ||
| 6. Apply changes via /tmp script: | ||
| 6. Apply changes via direct Edit on `~/.claude/settings.json` (`mode: "bypassPermissions"`, CC v2.1.121+): | ||
| - Read `~/.claude/settings.json`, merge the computed diff into `enabledPlugins` (set enabled plugins to `true`, disabled plugins to `false`), then Write the updated JSON back. | ||
| ```bash | ||
| cat > /tmp/profile-apply-$$.sh << 'APPLY' | ||
| #!/usr/bin/env python3 | ||
| import json, sys | ||
| 7. Write active marker via direct Write on `.claude/profiles/.active` (`mode: "bypassPermissions"`): | ||
| - Write the profile `<name>` as plain text content to `.claude/profiles/.active`. | ||
| settings_path = "/Users/<user>/.claude/settings.json" # resolve from $HOME | ||
| with open(settings_path) as f: | ||
| settings = json.load(f) | ||
| profile_path = ".claude/profiles/<name>.json" | ||
| with open(profile_path) as f: | ||
| profile = json.load(f) | ||
| for plugin in profile["plugins"]["enabled"]: | ||
| settings.setdefault("enabledPlugins", {})[plugin] = True | ||
| for plugin in profile["plugins"]["disabled"]: | ||
| settings.setdefault("enabledPlugins", {})[plugin] = False | ||
| with open(settings_path, "w") as f: | ||
| json.dump(settings, f, indent=2) | ||
| f.write("\n") | ||
| print("Settings updated.") | ||
| APPLY | ||
| python3 /tmp/profile-apply-$$.sh | ||
| ``` | ||
| 7. Write active marker via /tmp script: | ||
| ```bash | ||
| cat > /tmp/profile-marker-$$.sh << 'MARKER' | ||
| echo "<name>" > .claude/profiles/.active | ||
| MARKER | ||
| bash /tmp/profile-marker-$$.sh | ||
| ``` | ||
| 8. Confirm: | ||
@@ -122,3 +90,3 @@ | ||
| 1. Remove `.claude/profiles/.active` marker via /tmp script | ||
| 1. Remove `.claude/profiles/.active` marker via direct `Bash: /bin/rm .claude/profiles/.active` (`mode: "bypassPermissions"`) | ||
| 2. Print: `[Done] Profile marker removed. Full plugin set will be active after restart.` | ||
@@ -132,3 +100,3 @@ 3. Note: does NOT revert `~/.claude/settings.json` — user should re-run `/profile load <other>` or manually restore | ||
| - Profile JSON `enabled`/`disabled` lists use full plugin keys: `<name>@<marketplace>` format | ||
| - All `.claude/` writes use the /tmp bypass pattern (see Implementation rules above) | ||
| - All `.claude/` writes use direct Write/Edit/Bash (CC v2.1.121+, no `/tmp` wrapping — see Implementation rules above) | ||
@@ -135,0 +103,0 @@ ## Manifest Profile Integration |
@@ -49,3 +49,3 @@ --- | ||
| # Set stage (used by orchestrator or skill) | ||
| echo "plan" > /tmp/.claude-dev-stage | ||
| echo "plan" > /tmp/.claude-dev-stage-$PPID | ||
@@ -56,3 +56,3 @@ # Valid stage values (all block Write/Edit except 'implement'): | ||
| # Clear stage (disable blocking) | ||
| rm -f /tmp/.claude-dev-stage | ||
| rm -f /tmp/.claude-dev-stage-$PPID | ||
| ``` | ||
@@ -145,3 +145,3 @@ | ||
| ### With PreToolUse Hooks | ||
| The stage marker file (`/tmp/.claude-dev-stage`) is read by a PreToolUse hook that enforces tool restrictions. This provides a safety net beyond instruction-based compliance. | ||
| The stage marker file (`/tmp/.claude-dev-stage-$PPID`) is read by a PreToolUse hook that enforces tool restrictions. This provides a safety net beyond instruction-based compliance. | ||
@@ -171,9 +171,9 @@ ### With Agent Teams | ||
| # Orchestrator manages transitions: | ||
| echo "plan" > /tmp/.claude-dev-stage # Enter planning | ||
| echo "verify-plan" > /tmp/.claude-dev-stage # Enter plan verification | ||
| echo "implement" > /tmp/.claude-dev-stage # Enter implementation | ||
| echo "verify-impl" > /tmp/.claude-dev-stage # Enter impl verification | ||
| echo "compound" > /tmp/.claude-dev-stage # Enter compound testing | ||
| echo "done" > /tmp/.claude-dev-stage # Mark done | ||
| rm -f /tmp/.claude-dev-stage # Clear (disable blocking) | ||
| echo "plan" > /tmp/.claude-dev-stage-$PPID # Enter planning | ||
| echo "verify-plan" > /tmp/.claude-dev-stage-$PPID # Enter plan verification | ||
| echo "implement" > /tmp/.claude-dev-stage-$PPID # Enter implementation | ||
| echo "verify-impl" > /tmp/.claude-dev-stage-$PPID # Enter impl verification | ||
| echo "compound" > /tmp/.claude-dev-stage-$PPID # Enter compound testing | ||
| echo "done" > /tmp/.claude-dev-stage-$PPID # Mark done | ||
| rm -f /tmp/.claude-dev-stage-$PPID # Clear (disable blocking) | ||
| ``` | ||
@@ -183,4 +183,4 @@ | ||
| - **Single session**: The fixed path `/tmp/.claude-dev-stage` does not support concurrent Claude Code sessions. Running multiple sessions simultaneously may cause stage state conflicts. | ||
| - **World-writable path**: The `/tmp/` directory is accessible to all users. For multi-user environments, consider using a user-scoped path like `/tmp/.claude-dev-stage-$(id -u)`. | ||
| - **Session scoping**: The marker path is scoped by parent PID (`/tmp/.claude-dev-stage-$PPID`), so concurrent Claude Code sessions use distinct markers and do not conflict. The reader hooks (`stage-blocker.sh`, `task-state-precompact.sh`) and the writer commands above all resolve `$PPID` to the same Claude Code process, keeping the gate consistent. | ||
| - **World-writable path**: The `/tmp/` directory is accessible to all users. The `-$PPID` suffix isolates per-session state but does not restrict filesystem permissions; avoid storing sensitive data in the marker file. | ||
@@ -187,0 +187,0 @@ ## Permission Mode |
| { | ||
| "version": "1.1.16", | ||
| "version": "1.1.17", | ||
| "lastUpdated": "2026-07-14T00:00:00.000Z", | ||
@@ -4,0 +4,0 @@ "omcustomMinClaudeCode": "2.1.121", |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
3659148
0