[silverwood] Make sessions record how to run; give spawn an algebraic tree master
Rename AgentKind to SessionKind and add two durable kinds: claude-code-noninteractive (carrying an explicit run_direnv_exec) and disk-space. Replace the flat `spawn <ws> [sid] [--resume]` with a subcommand tree — from-id, plain-shell, disk-space, claude-code {first-run|resume}, and claude-code-noninteractive --run-direnv-exec <bool> {first-run|resume} — with --override-working-directory on the cwd-derived kinds. The interactive kinds run inside the user's login-interactive shell (<shell> -l -i -c '<prompt-hooks>; exec …') and synchronously run the shell's own prompt hooks, so silverwood is direnv-blind: a checkout's .envrc loads exactly as it would at the user's prompt, and a user with no direnv hook gets none. The old `direnv exec` behavior moves to the explicit claude-code-noninteractive kind. `spawn from-id` resolves a durable session into a plan, deciding first-run vs resume from whether a Claude transcript exists on disk. Wire format and schema version are unchanged (additive enum variants). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01DY9N9STx6HMGtSEJauX1KG