--- name: hk-local-run-spec description: "Plan and execute an odin spec. Handles working directory, auth, nested-session detection, and post-run diagnostics. Use whenever the user wants to run a spec, test a spec, or do a smoke test. Triggers on: 'run this spec', 'test this spec', 'odin plan', 'smoke test', or /hk-local-run-spec." argument-hint: [--mock] [--quick] [--exec-only ] allowed-tools: Bash, Read --- # /hk-local-run-spec — Spec Runner Run the full odin spec workflow: plan, review, execute. Handles the gotchas so you don't have to remember them. ## Usage ``` /hk-local-run-spec ../sample_specs/poem_spec.md /hk-local-run-spec ../sample_specs/poem_spec.md --quick /hk-local-run-spec ../sample_specs/poem_spec.md --mock /hk-local-run-spec --exec-only a1b2 ``` ## Arguments Parse `$ARGUMENTS` to extract: - **spec_path** (required unless `--exec-only`): path to the spec markdown file - **--quick**: use `--quiet` mode (non-interactive, spinner only) - **--mock**: pass `--mock` to exec (no backend writes) - **--exec-only **: skip planning, just execute a specific task ## The critical gotcha **Odin plan/exec invokes `claude -p` as a subprocess. It cannot run from inside another Claude Code session.** Nested Claude Code calls fail silently or hang. This skill detects the nested session and provides the user with copy-paste commands instead of trying to run them directly. ## Execution ### Step 1: Detect environment Check if we're inside a Claude Code session: ```bash # Claude Code sets this env var when running echo "${CLAUDE_CODE_ENTRYPOINT:-not_set}" ``` If we're inside Claude Code (the var is set or we detect we're in an agent context), we **cannot** run odin plan/exec directly. Instead, provide copy-paste commands. ### Step 2: Resolve paths ```bash REPO_ROOT=$(git rev-parse --show-toplevel) WORK_DIR="$REPO_ROOT/odin/temp_test_dir" ``` Check that `temp_test_dir/` exists and has a `.env`: ```bash ls "$WORK_DIR/.env" 2>/dev/null ``` If missing, tell the user: ``` temp_test_dir/ not found or missing .env. Create it: cd odin && mkdir -p temp_test_dir && cp .env.example temp_test_dir/.env Then edit temp_test_dir/.env with your ODIN_ADMIN_USER and ODIN_ADMIN_PASSWORD. ``` ### Step 3: Generate commands Build the commands based on arguments: **Plan phase** (skip if `--exec-only`): ```bash cd "$WORK_DIR" && odin plan --quiet ``` If `--quick` was passed, use `--quiet` (which implies `--auto`). Otherwise default to `--auto` for non-interactive execution. **Review phase** (skip if `--exec-only`): ```bash cd "$WORK_DIR" && odin specs cd "$WORK_DIR" && odin status ``` **Exec phase**: ```bash cd "$WORK_DIR" && odin exec [--mock] ``` ### Step 4: Output Since we're almost always inside Claude Code (that's where this skill runs), output the commands for the user to copy-paste into a regular terminal: ``` ## Spec Run Commands Run these from a regular terminal (not inside Claude Code): ### 1. Plan cd && odin plan --auto ### 2. Review cd && odin specs cd && odin status ### 3. Execute (run for each task) cd && odin exec [--mock] ### 4. Post-run diagnostic cd /taskit/taskit-backend && python testing_tools/spec_trace.py --brief ``` If `--exec-only` was passed, skip the plan/review sections and only show the exec + diagnostic commands. ### Step 5: Post-run diagnostic hint Always remind the user to run the diagnostic after execution: ``` After execution completes, check results with: /hk-local-diagnose spec --brief ``` This connects the two skills into a natural workflow.