Files
claudetools/.claude/commands/ask-forum.md
Howard Enos 9340cdec17 ask-forum: promote to a full skill + wire into skill-first routing
Add .claude/skills/ask-forum/SKILL.md (usage contract, correlation model,
forum-only scope, access/permissions) and route to it from CLAUDE.md
(skill-first covered domains) + SKILL_ROUTING.md, so sessions invoke the
skill instead of hand-rolling the Discord API — the footgun that produced a
broken background wait. Capture that footgun as memory
feedback_background_task_no_ampersand (run_in_background, never a shell &).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 20:12:18 -07:00

2.4 KiB

name, description
name description
ask-forum Ask a teammate (e.g. Mike) a question in the private

/ask-forum — human-in-the-loop question via #ct-forum

Entry point to the ask-forum skill — full contract in .claude/skills/ask-forum/SKILL.md. Engine: .claude/scripts/ask-forum.sh. Lets THIS session put a question to a human in the private #ct-forum forum and get their answer back in-session, so it can keep going. The forum post's thread id is the correlation key — the session reads only the thread it created, so an answer is never confused with another question's.

Forum-only by design (Mike's call, 2026-07-08): DM replies are intentionally not used, so answers stay visible to the team. The BEAST bot ignores #ct-forum, so the asking session is the only agent that consumes replies there.

Usage

# Ask and block until a human replies (default timeout 600s, poll 8s):
bash .claude/scripts/ask-forum.sh "your question" --tag @264814939619721216

# Re-read a thread you already asked in (one-shot, no waiting):
bash .claude/scripts/ask-forum.sh --read <thread_id>

# Resume blocking on a thread already posted (e.g. after a timeout):
bash .claude/scripts/ask-forum.sh --wait <thread_id> --timeout 1800 --poll 10

Flags: --title "short title" (forum post name; defaults to first 60 chars of the question), --timeout SEC, --poll SEC, --tag @<discord_id> (repeatable — pings that person; ids in .claude/users.json: mike 264814939619721216, howard 624667664501178379, winter 624666486362996755, rob 261978810713505792).

How to run it well

  • Long waits → background it with run_in_background: true (NO shell & — that forks the wait off and exits early). You get the answer when the human replies.
  • Only non-bot replies count as answers, so bot chatter can never be mistaken for the human's answer.
  • Exit codes: 0 answered · 2 no token · 3 Discord API error · 4 timeout (thread stays open — resume with --wait <thread_id>).

Channel: #ct-forum (1522960388432465950), private — @everyone denied; Howard, Mike, and the bot allowed. Add someone via a channel permission overwrite if they need access.