BenjaminG

daily-standby

Put a task on standby when it's blocked or waiting on someone. This skill should be used when Benjamin says "standby", "waiting on", "put on hold", "blocked", "can't proceed", or needs to park a task that requires external input.

BenjaminG 2 Updated 3mo ago
GitHub

Install

npx skillscat add benjaming/ai-skills/daily-standby

Install via the SkillsCat registry.

SKILL.md

Standby — Park a Blocked Task

Put a task on standby with a required reason describing what it's waiting on.

Configuration

persistence:
  tasksDir: "~/.claude/daily-tasks"

Execution Steps

1. Parse Arguments

Split $ARGUMENTS into an identifier and a reason:

  • Identifier: first token — either a numeric task ID or a Jira key pattern (e.g., RGI-265, MITB-123).
  • Reason: everything after the identifier (strip surrounding quotes if present).

If no reason provided:

⛔ A reason is required. What are you waiting on?
   Example: /daily-standby 3 "waiting on Claire's design review"
   Example: /daily-standby RGI-265 "needs data pipeline rerun"

Stop here.

If no identifier provided: check for a single in_progress task and use that automatically. If zero or multiple in_progress tasks, ask for an explicit task ID. Stop here if ambiguous.

2. Load Task File

Read today's task file:

cat ~/.claude/daily-tasks/$(date +%Y-%m-%d).json 2>/dev/null

If no file exists: "No task file for today. Run /daily-standup first." Stop.

Parse the JSON. Find the target task by numeric ID or jira_key.

If not found: "Task #N not found. Today has tasks 1-M." Stop.

3. Validate Transition

Current status Action
done Reject: "Task #N is already done. Can't put a completed task on standby." Stop.
skipped Reject: "Task #N was skipped. Use /daily-next N to pick it up first." Stop.
standby (no new reason) Show current reason: "Task #N is already on standby. Waiting on: {waiting_on}. Use /daily-unblock N to activate it, or re-run /daily-standby N \"new reason\" to update the reason." Stop.
standby (with new reason) Update waiting_on and paused_at in place. Proceed.
pending or in_progress Proceed.

4. Update Task

Read the current task file (fresh read), update the target task:

  • Set status to "standby"
  • Set waiting_on to the parsed reason string
  • Set paused_at to current ISO timestamp (date -u +%Y-%m-%dT%H:%M:%SZ)
  • Preserve started_at as-is (do not clear — needed for unblock logic)
  • Update updated_at on the root object

Write the updated JSON back using the Write tool.

5. Confirm

Display:

⏸️  Task #N on standby: $JIRA_KEY — $SUMMARY
   └─ Waiting on: $REASON

Show compact remaining actionable tasks (status pending or in_progress only — exclude standby tasks):

Remaining:
  #N. [TIER] $JIRA_KEY — $SUMMARY
  #N. [TIER] $JIRA_KEY — $SUMMARY

If any standby tasks exist (including the one just parked), add a line:

⏸ N task(s) on standby — run /daily-unblock to activate when ready

Suggest next actionable task:

👉 Next up: Task #N ($JIRA_KEY) — $SUMMARY
   Run /daily-next to pick it up.

If no actionable tasks remain:

📭 No actionable tasks remaining.
   ⏸ N task(s) on standby — run /daily-unblock when unblocked, or /daily-standup to refresh.

Edge Cases

  • /daily-standby with no identifier and no in_progress task: Ask for explicit ID. Stop.
  • /daily-standby on already-standby task with new reason: Update waiting_on and paused_at. Confirm update.
  • /daily-standby on already-standby task without new reason: Show current reason, suggest /daily-unblock. Stop.
  • Task ID doesn't exist: "Task #N not found. Today has tasks 1-M."
  • File write fails: Report error, do not silently lose the update.