diff --git a/remote-exp.md b/remote-exp.md new file mode 100644 index 0000000..42c2024 --- /dev/null +++ b/remote-exp.md @@ -0,0 +1,120 @@ +--- +description: Enable a remote experiment workflow by patching CLAUDE.md with a Remote Experiment Protocol. Performs remote preflight (mkdir + permission check). Does NOT run any experiments. +allowed-tools: + [ + Bash(pwd), + Bash(ls:*), + Bash(cat:*), + Bash(git rev-parse:*), + Bash(sed:*), + Bash(printf:*), + Bash(mkdir:*), + Bash(test:*), + Bash(ssh:*), + Bash(rsync:*), + Bash(scp:*) + ] +--- + +# /remote-exp +# Purpose: Patch CLAUDE.md to enforce remote experiment workflow (review/edit locally, run experiments remotely). +# This command sets up the protocol. It does NOT execute experiments. + +HOST: $1 +REMOTE_PATH: $2 + +## Hard rules (STRICT) + +- Do NOT run any experiments in this command. +- This command MAY perform remote preflight: connect via ssh, create REMOTE_PATH if missing, and verify write permission. +- If remote directory creation or write permission check fails (permission, quota, etc.), STOP and report the failure reason to the user. +- Patch CLAUDE.md in a deterministic way using BEGIN/END markers (idempotent). + +--- + +## Step 1: Validate arguments + +- If $1 or $2 is missing, ask the user to provide: + - /remote-exp + +HOST parsing rule: +- If HOST looks like "ip:port" (single ":" and port is numeric), then use: + - ssh -p + - rsync/scp using "-e 'ssh -p '" +- Otherwise use: + - ssh + - rsync/scp using "-e ssh" + +--- + +## Step 2: Locate repo root and CLAUDE.md + +- Determine repo root via: + - git rev-parse --show-toplevel +- Ensure CLAUDE.md exists at repo root; if missing, create it with a minimal header. + +--- + +## Step 3: Remote preflight (no experiments) + +- Connect to remote (ssh) and ensure REMOTE_PATH exists: + - mkdir -p "" +- Check write permission: + - test -w "" +- If any step fails, STOP and show the exact ssh command used + the stderr reason. + +--- + +## Step 4: Initial sync (code only; still no experiments) + +- Sync local repo to remote REMOTE_PATH using rsync (preferred) or scp fallback. +- Exclude: + - .git + - cc-gen-script/ + - cc-gen-doc/ + - common build artifacts (node_modules, dist, build, __pycache__, .venv, .pytest_cache) +- If rsync is unavailable, fall back to scp (note: scp is slower and may not support excludes; if so, warn and STOP unless the user approves). + +--- + +## Step 5: Patch CLAUDE.md (idempotent) + +Insert or replace the following block in CLAUDE.md using markers: + + +...block... + + +The block must include: +- the resolved HOST and REMOTE_PATH +- the ssh/rsync command templates (with or without -p) +- the workflow rules: + - review & edit locally + - sync to remote before running any heavy experiment + - run experiments only on remote + - pull back results/artifacts/logs to local after experiment + - if remote mkdir/write fails: stop and report + - keep changes visible locally for user review + +After patching, print a short summary in chat (what changed, where the protocol lives, and the exact remote target). + +--- + +## Remote Experiment Protocol block (write exactly into CLAUDE.md) + +Use the commands computed from HOST parsing: + +- SSH_CMD +- RSYNC_SSH +- RSYNC_CMD + +The block to insert: + +(1) A clear heading +(2) Current remote target +(3) Preflight checks +(4) Sync rules +(5) Results retrieval rules +(6) Failure handling rules + +Do NOT include subjective strategy. Keep it operational and objective.