npx claudepluginhub nwave-ai/nwave --plugin nwDefined in hooks/hooks.json
Agentpython3 -c "import os,sys,pwd;from pathlib import Path;r=os.environ.get('CLAUDE_PLUGIN_ROOT','');p=r+'/scripts' if r else '';h=os.environ.get('HOME') or '';h=h if len(h)>1 else pwd.getpwuid(os.getuid()).pw_dir;p=p or next((str(s) for s in sorted(Path(h).joinpath('.claude/plugins/cache').glob('*/nw/*/scripts')) if (s/'des'/'__init__.py').exists()),None);p=p or str(Path(h)/'.claude/lib/python');sys.path.insert(0,p);sys.argv=['des-hook','pre-task'];from des.adapters.drivers.hooks.claude_code_hook_adapter import main;main()"WriteINPUT=$(cat); echo "$INPUT" | grep -q 'execution-log\.json' && { echo "$INPUT" | python3 -c "import os,sys,pwd;from pathlib import Path;r=os.environ.get('CLAUDE_PLUGIN_ROOT','');p=r+'/scripts' if r else '';h=os.environ.get('HOME') or '';h=h if len(h)>1 else pwd.getpwuid(os.getuid()).pw_dir;p=p or next((str(s) for s in sorted(Path(h).joinpath('.claude/plugins/cache').glob('*/nw/*/scripts')) if (s/'des'/'__init__.py').exists()),None);p=p or str(Path(h)/'.claude/lib/python');sys.path.insert(0,p);sys.argv=['des-hook','pre-write'];from des.adapters.drivers.hooks.claude_code_hook_adapter import main;main()"; exit $?; }; test -f .nwave/des/deliver-session.json || exit 0; echo "$INPUT" | python3 -c "import os,sys,pwd;from pathlib import Path;r=os.environ.get('CLAUDE_PLUGIN_ROOT','');p=r+'/scripts' if r else '';h=os.environ.get('HOME') or '';h=h if len(h)>1 else pwd.getpwuid(os.getuid()).pw_dir;p=p or next((str(s) for s in sorted(Path(h).joinpath('.claude/plugins/cache').glob('*/nw/*/scripts')) if (s/'des'/'__init__.py').exists()),None);p=p or str(Path(h)/'.claude/lib/python');sys.path.insert(0,p);sys.argv=['des-hook','pre-write'];from des.adapters.drivers.hooks.claude_code_hook_adapter import main;main()"EditINPUT=$(cat); echo "$INPUT" | grep -q 'execution-log\.json' && { echo "$INPUT" | python3 -c "import os,sys,pwd;from pathlib import Path;r=os.environ.get('CLAUDE_PLUGIN_ROOT','');p=r+'/scripts' if r else '';h=os.environ.get('HOME') or '';h=h if len(h)>1 else pwd.getpwuid(os.getuid()).pw_dir;p=p or next((str(s) for s in sorted(Path(h).joinpath('.claude/plugins/cache').glob('*/nw/*/scripts')) if (s/'des'/'__init__.py').exists()),None);p=p or str(Path(h)/'.claude/lib/python');sys.path.insert(0,p);sys.argv=['des-hook','pre-edit'];from des.adapters.drivers.hooks.claude_code_hook_adapter import main;main()"; exit $?; }; test -f .nwave/des/deliver-session.json || exit 0; echo "$INPUT" | python3 -c "import os,sys,pwd;from pathlib import Path;r=os.environ.get('CLAUDE_PLUGIN_ROOT','');p=r+'/scripts' if r else '';h=os.environ.get('HOME') or '';h=h if len(h)>1 else pwd.getpwuid(os.getuid()).pw_dir;p=p or next((str(s) for s in sorted(Path(h).joinpath('.claude/plugins/cache').glob('*/nw/*/scripts')) if (s/'des'/'__init__.py').exists()),None);p=p or str(Path(h)/'.claude/lib/python');sys.path.insert(0,p);sys.argv=['des-hook','pre-edit'];from des.adapters.drivers.hooks.claude_code_hook_adapter import main;main()"Bash# des-hook:pre-bash
INPUT=$(cat); CMD=$(echo "$INPUT" | python3 -c "import sys,json; print(json.load(sys.stdin).get('tool_input',{}).get('command',''))"); echo "$CMD" | grep -q 'execution-log' || exit 0; echo "$CMD" | grep -qE 'des\.cli\.(log_phase|init_log|verify_deliver_integrity)' && exit 0; echo '{"decision":"block","reason":"Direct modification of execution-log.json via Bash is blocked.\nTo read it, use the Read tool.\nTo modify it, use des.cli.log_phase."}'; exit 2Agentpython3 -c "import os,sys,pwd;from pathlib import Path;r=os.environ.get('CLAUDE_PLUGIN_ROOT','');p=r+'/scripts' if r else '';h=os.environ.get('HOME') or '';h=h if len(h)>1 else pwd.getpwuid(os.getuid()).pw_dir;p=p or next((str(s) for s in sorted(Path(h).joinpath('.claude/plugins/cache').glob('*/nw/*/scripts')) if (s/'des'/'__init__.py').exists()),None);p=p or str(Path(h)/'.claude/lib/python');sys.path.insert(0,p);sys.argv=['des-hook','post-tool-use'];from des.adapters.drivers.hooks.claude_code_hook_adapter import main;main()"startuppython3 -c "import os,sys,pwd;from pathlib import Path;r=os.environ.get('CLAUDE_PLUGIN_ROOT','');p=r+'/scripts' if r else '';h=os.environ.get('HOME') or '';h=h if len(h)>1 else pwd.getpwuid(os.getuid()).pw_dir;p=p or next((str(s) for s in sorted(Path(h).joinpath('.claude/plugins/cache').glob('*/nw/*/scripts')) if (s/'des'/'__init__.py').exists()),None);p=p or str(Path(h)/'.claude/lib/python');sys.path.insert(0,p);sys.argv=['des-hook','session-start'];from des.adapters.drivers.hooks.claude_code_hook_adapter import main;main()"python3 -c "import os,sys,pwd;from pathlib import Path;r=os.environ.get('CLAUDE_PLUGIN_ROOT','');p=r+'/scripts' if r else '';h=os.environ.get('HOME') or '';h=h if len(h)>1 else pwd.getpwuid(os.getuid()).pw_dir;p=p or next((str(s) for s in sorted(Path(h).joinpath('.claude/plugins/cache').glob('*/nw/*/scripts')) if (s/'des'/'__init__.py').exists()),None);p=p or str(Path(h)/'.claude/lib/python');sys.path.insert(0,p);sys.argv=['des-hook','subagent-stop'];from des.adapters.drivers.hooks.claude_code_hook_adapter import main;main()"python3 -c "import os,sys,pwd;from pathlib import Path;r=os.environ.get('CLAUDE_PLUGIN_ROOT','');p=r+'/scripts' if r else '';h=os.environ.get('HOME') or '';h=h if len(h)>1 else pwd.getpwuid(os.getuid()).pw_dir;p=p or next((str(s) for s in sorted(Path(h).joinpath('.claude/plugins/cache').glob('*/nw/*/scripts')) if (s/'des'/'__init__.py').exists()),None);p=p or str(Path(h)/'.claude/lib/python');sys.path.insert(0,p);sys.argv=['des-hook','deliver-progress'];from des.adapters.drivers.hooks.claude_code_hook_adapter import main;main()"python3 -c "import os,sys,pwd;from pathlib import Path;r=os.environ.get('CLAUDE_PLUGIN_ROOT','');p=r+'/scripts' if r else '';h=os.environ.get('HOME') or '';h=h if len(h)>1 else pwd.getpwuid(os.getuid()).pw_dir;p=p or next((str(s) for s in sorted(Path(h).joinpath('.claude/plugins/cache').glob('*/nw/*/scripts')) if (s/'des'/'__init__.py').exists()),None);p=p or str(Path(h)/'.claude/lib/python');sys.path.insert(0,p);sys.argv=['des-hook','subagent-start'];from des.adapters.drivers.hooks.claude_code_hook_adapter import main;main()"Intercepts PreToolUse for Agent tasks, Writes, and Edits via Python des-hook adapter, processing input conditionally for deliver-session workflow. Covers SessionStart, Subagent events. Runs bash commands, handles file writes.
Share bugs, ideas, or general feedback.