excalidraw
Generate an Excalidraw whiteboard in Sean's hand-drawn video style (Excalifont, roughness 1, green signature, socials + watermark, source labels). Use whenever…
Create and tear down the throwaway git worktrees used to test community PRs for waku-agent, without leaking API keys or leaving branches behind. Use when setting up to test a PR, and ALWAYS after a PR is merged, closed, or parked.
$ npx -y skills add ShenSeanChen/waku-agent --skill pr-worktree --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/pr-worktreeContext preview
The summary Claude sees to decide when to auto-load this skill.
Create and tear down the throwaway git worktrees used to test community PRs for waku-agent, without leaking API keys or leaving branches behind. Use when setting up to test a PR, and ALWAYS after a PR is merged, closed, or parked.
name: pr-worktree description: > Create and tear down the throwaway git worktrees used to test community PRs for waku-agent, without leaking API keys or leaving branches behind. Use when setting up to test a PR, and ALWAYS after a PR is merged, closed, or parked.
Testing a contributor's PR must never disturb the live dashboard on 7777, and it must never leave a second copy of Sean's API keys on disk. Both have happened.
REPO=$(git rev-parse --show-toplevel) N=<pr-number> git -C $REPO fetch -q origin pull/$N/head:pr-$N git -C $REPO worktree add -q ~/Developer/waku-prs/pr$N pr-$N ln -sfn $REPO/.waku ~/Developer/waku-prs/pr$N/.waku # real memory/traces/calendar
Never `gh pr checkout` — it switches the branch of the main working tree, and the live dashboard runs from there.
Deterministic evals do not. Skip the symlink for a test-only pass, so untrusted contributor code never runs against real credentials. Link it only after you have read the diff:
ln -sfn $REPO/.env ~/Developer/waku-prs/pr$N/.env
`python-dotenv`'s `set_key` — which the dashboard's Save & switch calls — **replaces a symlinked `.env` with a regular file**. The moment anyone saves a setting from a PR worktree's dashboard, that worktree gains a complete copy of every key in the real `.env`: Anthropic, OpenAI, Gemini, Moonshot, xAI, Zhipu, Tavily, Telegram, Discord.
So: after any test that saved settings, assume the `.env` is a real file and **check before deleting the worktree**, then move anything worth keeping into the main `.env` rather than losing it.
[ -L ~/Developer/waku-prs/pr$N/.env ] && echo "symlink (safe)" || echo "REAL FILE — copy of all keys"
New env vars a PR introduces belong in the **main** `.env`, not the worktree's. Copy the values across without printing them, and leave switches that would change what the live demo shows (e.g. `WAKU_EPISODIC_STORE`) on their old value — Sean films against the local data.
Always a second port, so 7777 stays untouched:
cd ~/Developer/waku-prs/pr$N WAKU_DASHBOARD_PORT=7778 $REPO/.venv/bin/python -m waku.ops.dashboard
Optional extras a PR needs (`[notion]`, `[discord]`, …) install with `uv`, since the venv has no `pip`:
uv pip install --python $REPO/.venv/bin/python "<package>"
A worktree is finished the moment the PR is merged, closed, or parked waiting on the contributor. Leaving it costs disk, confuses future greps, and may be sitting on a copy of every key.
REPO=$(git rev-parse --show-toplevel) # 1. rescue any new env vars into the MAIN .env first (see above) # 2. stop anything still running from it lsof -ti:7778 | xargs kill -9 2>/dev/null # 3. remove worktrees + their local branches for d in ~/Developer/waku-prs/*/; do git -C $REPO worktree remove --force "$d"; done git -C $REPO worktree prune git -C $REPO branch --list 'pr-*' | tr -d ' ' | xargs -r -n1 git -C $REPO branch -D # 4. verify nothing is left holding keys find ~/Developer/waku-prs -name ".env" 2>/dev/null
That `find` must print nothing. If it prints a path, the key copy is still there.
Related: [[review-pr]] for how to review and present the PR itself.
Your own AI assistant. On your laptop. In code you can read in an afternoon. Meet Waku — a local-first personal assistant that shows the four pillars behind every serious agent: Harness · Loop · Memory · Eval/LLM-Ops. No frameworks hiding the good parts.
Generate an Excalidraw whiteboard in Sean's hand-drawn video style (Excalifont, roughness 1, green signature, socials + watermark, source labels). Use whenever…
Add a new tool to Waku the right way — schema, safe execution, deterministic eval, honest output. Use when adding or modifying agent tools or when the user…
Walk Sean through an incoming waku-agent PR or issue and present it his way — four fixed sections: what this is, why it matters, how HE can test it with you as…
Commit and push the current work properly — lint, run the release gate, write a detailed commit message, push to GitHub. Use whenever work reaches a milestone…
Metric anomaly investigation: DAU, GMV, conversion, retention, revenue, KPI or dashboard metric drop, dropped, fell, spike or spiked. Metric attribution and…
Job interview prep: prepare, practice, revise; technical, behavioral or placement interview; mock interview questions.