fix: use proper SKILL.md folder format for plan-tasks skill - #4
Conversation
The flat .claude/skills/plan-tasks.md was never actually discovered by Claude Code as a skill - skills need a named folder with SKILL.md inside, with frontmatter (name, description, disable-model-invocation). This was left uncommitted from an earlier incomplete migration off the old .claude/commands/ format. Also: - fix plan.sh: set MSYS_NO_PATHCONV=1 so Git Bash on Windows doesn't mangle --add-dir's path argument, and reorder args to put the prompt before flags. - update README references from the old .claude/commands/plan-tasks.md path to .claude/skills/plan-tasks/SKILL.md, and sync the quoted skill body with the actual current content.
|
Warning Review limit reached
Next review available in: 15 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (3)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
* feat: fresh-subprocess-per-task execution model for overnight.sh Task #2. overnight.sh previously ran one continuous claude -p session across a whole repo's TASKS.md, so context (and cache-read cost) compounded across every task in a run -- confirmed against the 2026-08-06 c0d3ster run that hit its usage limit at 42.8M cache-read tokens / $16.61 after just 2 tasks in one session. Restructures the loop in overnight.sh to dispatch one fresh claude -p subprocess per open task, plus one more for end-of-run housekeeping: - split_tasks() parses TASKS.md's Agent-Ready/Verify/Research sections into per-task blocks, computing each task's effective stack (own tag or inherited) so --stack/--stop-after/--limit can filter in bash before any subprocess launches, instead of asking a mega-session to self-filter. - Stacked tasks read predecessor context from docs/stack-notes/<stack>.md in the target repo (append-only, one entry per task: decisions, interfaces/exports, deviations, and its own branch name) instead of a raw diff/commit dump. resolve_base_branch() resolves which branch a task builds on -- the stack's latest branch this run, or the last Branch: line in stack-notes when resuming a stack from an earlier run. - Each task subprocess reports a TASK_RESULT: #<n> status=... line at the end of its final message; overnight.sh collects these across the run and feeds them to the housekeeping subprocess as its starting point (housekeeping still confirms real PR/branch state via git/gh before trusting it). - --override-prompt now explicitly bypasses the dispatch loop for a single one-off session, same as before. - logs/ keeps its existing per-repo-per-day file layout (task #4 owns splitting those further); stats/<repo>.json now also tracks cache_read/cache_creation token totals, needed to judge whether this actually keeps cache-read volume down per the task's NEEDS HUMAN gate. CLAUDE.md and README.md updated to document the new execution model, the stack-notes/TASK_RESULT contracts, and updated stats.sh's rollup to match. NEEDS HUMAN: this needs the supervised trial run specified in task #2's acceptance criteria before it's adopted as default -- a --limit 2 run on a low-stakes repo across at least two different stacks, comparing total_cache_read_tokens in stats/<repo>.json against the 42.8M baseline above. Don't skip it. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix: address CodeRabbit review findings on PR #24 - split_tasks(): an untagged leading task (no [stack: x], no predecessor in file order) now defaults to "solo" instead of an empty stack name, which previously produced "This task starts stack \"\"" prompts and a docs/stack-notes/.md path. - dispatch(): capture claude's own exit status via PIPESTATUS[0] instead of the trailing tee's, and return it. run_repo's task loop now aborts the repo's run after 2 consecutive dispatch failures instead of ploughing through every remaining task the same way (e.g. an auth error or a missing format-stream.jq); the override-prompt and housekeeping call sites surface a warning on failure too. - Anchor the TASK_RESULT branch= extraction to the structured field (^TASK_RESULT: #<n> status=... branch=...) instead of a greedy match that could pick up a literal "branch=" inside the free-form note field, and verify the reported branch actually exists locally before recording it as a stack's next base. - Document Bash 4.3+ as a requirement (local -n namerefs, local -A associative arrays) and switch every script's shebang to /usr/bin/env bash. - README: correct stack-notes ownership -- the task subprocess creates and appends its own entry, overnight.sh only reads it. Task #2. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix: address second round of CodeRabbit findings on PR #24 - Record the second failed dispatch's stats (update_stats) before aborting on 2 consecutive failures, not just discarding it. - Anchor TASK_RESULT validation to the current task's own #<n> before trusting it for run_summary or a stack's next base branch, instead of accepting any TASK_RESULT line regardless of which task number it names -- a stale or malformed one now falls back to the same synthesized status=unknown line a missing TASK_RESULT would produce. Task #2. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
Summary
/plan-tasks: it was never actually discovered by Claude Code, since skills require a named folder withSKILL.mdinside (withname/description/disable-model-invocationfrontmatter), not a flat.mdfile directly under.claude/skills/. This was left uncommitted from an earlier incomplete migration off the old.claude/commands/format.plan.shfor Windows: setMSYS_NO_PATHCONV=1so Git Bash doesn't mangle the--add-dirpath argument, and reorder args to put the prompt before flags..claude/commands/plan-tasks.mdpath to.claude/skills/plan-tasks/SKILL.md, and sync the quoted skill body with the actual current content.Test plan
/plan-tasksresolves via the Skill tool with the newSKILL.mdin place (it was showing up as available throughout this session, unlike the old flat file)🤖 Generated with Claude Code