Linking core.hooksPath to the tracked, sandbox-writable .githooks/ let a sandboxed command rewrite a hook that git commit/push then run unsandboxed. Copies in .git/hooks can't be changed from the sandbox. This also keeps existing .git/hooks scripts working and lets npm install succeed outside a git checkout. pre-merge-commit now names itself in errors; hook tests clean up, ignore GIT_* env and cover the installer; docs state what each layer does and doesn't stop. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
838 B
838 B
claude-playground
A tiny zero-dependency Node.js todo CLI, used as a sandbox for trying Claude Code features.
Commands
npm install— once per clone (no dependencies): installs the git hooks that block commits and pushes tomain. If it fails in the sandbox, ask the human to run it.npm test— run the test suite (built-innode:test)npm start -- add "something"/npm start -- ls— run the CLI (data intodos.json, override withTODO_FILE)
Conventions
- ES modules, Node >= 20, no third-party dependencies.
src/todo.jsholds pure functions; keep I/O inload/saveandsrc/cli.js.- Every behavior change gets a test in
test/. - Commit messages: short imperative subject line.
Remote
Gitea at code.westerkam.org — origin = git@code.westerkam.org:christian/claude-playground.git.