🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

oh-my-customcode

Package Overview
Dependencies
Maintainers
1
Versions
360
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

oh-my-customcode - npm Package Compare versions

Comparing version
1.1.16
to
1.1.17
+1
-1
package.json

@@ -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