Skip to content

refactor(captain): off deleted dispatch.sh → PushNotification + GitHub Issues + Slack MCP#114

Merged
abdout merged 1 commit into
mainfrom
refactor/captain-off-dispatch
May 25, 2026
Merged

refactor(captain): off deleted dispatch.sh → PushNotification + GitHub Issues + Slack MCP#114
abdout merged 1 commit into
mainfrom
refactor/captain-off-dispatch

Conversation

@abdout
Copy link
Copy Markdown
Contributor

@abdout abdout commented May 25, 2026

Why

PR #111 hard-deleted .claude/scripts/dispatch.sh, but captain.md + cowork-bridge.md + 7 product docs still referenced it. Captain would error at runtime when trying to dispatch. This PR completes the anthropic-native cutover.

Closes #112

Native replacements

Old function Native replacement
Push to Abdout's iPhone PushNotification tool → Anthropic mobile app
Async team comms GitHub Issues (priority/blocking, priority/decision, from-captain, from-abdout labels) + Slack MCP (/slack send)
Cowork ↔ Code handoff ~/.claude/bridge.md (promoted from secondary to primary)
Captain weekly digest Slack #general via slack MCP + PushNotification ping to Abdout

.claude/agents/captain.md — 10 edit sites

  • Added PushNotification to tools: array (frontmatter)
  • Session-start protocol: dispatch.sh read inbox/cowork → read bridge.md + gh issue list --label from-abdout,priority/blocking
  • ACT items: dispatch_to_team_via_slack_or_apple_notesnotify_team_via_slack_mcp_or_pushnotification_to_abdout_mobile
  • Escalation channel paragraph rewritten as 3-step native escalation:
    1. PushNotification to mobile (instant)
    2. GitHub issue with priority/blocking (24h) or priority/decision (72h) label
    3. Slack DM via slack MCP (team-visible)
      24h/72h follow-up cadence preserved
  • Monday plan + Friday review: Apple Notes dispatch lines → Slack post + push
  • Channel 1 section completely rewritten: Native Push + Cowork Bridge (PushNotification + bridge.md + GitHub Issues from-abdout)
  • Autopilot CAN: dropped Apple Notes; explicit grants for PushNotification, bridge.md, Slack MCP
  • Cross-agent example "Ahmed Baha re-engagement" updated: dispatch [decision] → PushNotification(title=..., body=...) + companion GitHub issue (durable record)

.claude/rules/cowork-bridge.md

  • Capability table: dropped Apple Notes row, added PushNotification + Slack MCP rows
  • Session-start: dropped dispatch.sh read; added gh issue list --label from-abdout,priority/blocking for both Code + Cowork sessions
  • "Apple Notes (Code-Only)" section → "Reaching Abdout asynchronously" with 4 native primitives

7 product docs swept

File Change
content/docs/captain.mdx 3-channel summary updated
content/docs/cowork.mdx Shared State table, handoff examples, both session-start protocols
content/docs/workflows.mdx Channel 1 table
content/docs/architecture.mdx 3-channel comm table + bridge flow narrative
content/docs/slack.mdx dispatch slack bash snippet → /slack send MCP
content/docs/voice.mdx "read latest dispatch" → "read latest weekly file"
content/docs/tips.mdx Phone→desktop remote-control example uses GitHub issue with from-abdout label

Memory files left alone

.claude/memory/* (learnings.md, risks.json, 1on1/, decisions/) reference Apple Notes/dispatch historically — these are intentional record per issue #112 acceptance criteria. They document what was, not what is.

Exit gates

```bash

No dispatch.sh refs outside memory/

grep -rnE 'dispatch.sh' .claude content | grep -vE '/memory/|/legacy/'

✅ empty

No Apple Notes refs outside memory/ (except the deliberate "No Apple Notes" line in onboarding.mdx)

grep -rinE 'apple notes|dispatch/(captain|cowork|inbox)' .claude content | grep -vE '/memory/'

✅ only onboarding.mdx:267 "No Tailscale, no Apple Notes..." (intentional)

```

Test plan

  • Captain agent loads cleanly: claude --agent captain — frontmatter parses, all referenced tools present
  • Mock Monday cycle: captain reads session-start sources, allocates team, posts to Slack #general (via mock), sends PushNotification (verify via Anthropic mobile app)
  • Mock escalation: captain decides "King Fahad re-engagement", sends PushNotification + creates priority/decision,from-captain GitHub issue — both arrive
  • pnpm build of docs site green

Net

9 files changed, +84 / -69 lines. Net +15 (more verbose native references replace concise bash one-liners).

🤖 Generated with Claude Code

…b Issues + Slack MCP

PR #111 hard-deleted dispatch.sh; captain.md + cowork-bridge.md + 7
product docs still referenced it. This refactor swaps the shell wrapper
for native Anthropic primitives that don't need bash/osascript.

Native replacements:
- Push to Abdout's iPhone → PushNotification tool → Anthropic mobile app
- Async team comms → GitHub Issues (priority/blocking, priority/decision,
  from-captain, from-abdout labels) + Slack MCP (`/slack send`)
- Cowork ↔ Code handoff → ~/.claude/bridge.md (already existed; this PR
  promotes it from secondary to primary)
- Captain weekly digest → Slack #general via slack MCP + PushNotification
  ping to Abdout

.claude/agents/captain.md (535 lines, ~10 edit sites):
- Added PushNotification to tools array
- Session-start: dispatch.sh read inbox/cowork → read bridge.md +
  gh issue list --label from-abdout
- ACT items: dispatch_to_team_via_slack_or_apple_notes →
  notify_team_via_slack_mcp_or_pushnotification_to_abdout_mobile
- Escalation channel paragraph: 3-step native escalation (push → issue →
  Slack DM); 24h/72h follow-up logic preserved
- Monday/Friday cycle: Apple Notes dispatch lines → Slack post + push
- Channel 1 section completely rewritten (Native Push + Cowork Bridge)
- Autopilot CAN: dropped Apple Notes; added PushNotification, bridge.md,
  Slack MCP explicit grants
- Cross-agent example "Ahmed Baha hasn't responded": dispatch [decision]
  → PushNotification + companion GitHub issue

.claude/rules/cowork-bridge.md:
- Capability table: dropped Apple Notes row, added PushNotification + Slack
- Session-start: dropped dispatch.sh read; added gh issue list label filters
- "Apple Notes (Code-Only)" section → "Reaching Abdout asynchronously"
  with 4 native primitives

7 product docs swept (all dispatch.sh narrative replaced):
- content/docs/captain.mdx — 3-channel summary updated
- content/docs/cowork.mdx — Shared State table, handoff examples, session
  start protocols
- content/docs/workflows.mdx — Channel 1 table
- content/docs/architecture.mdx — 3-channel comm table + bridge flow
- content/docs/slack.mdx — dispatch-to-slack bash snippet → slack MCP
- content/docs/voice.mdx — "read latest dispatch" → "read latest weekly file"
- content/docs/tips.mdx — phone-to-desktop remote-control example

Memory files (.claude/memory/*) intentionally left alone — they're
historical record per PR #112 acceptance criteria.

Closes #112

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel Bot commented May 25, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
kun Ready Ready Preview, Comment May 25, 2026 3:32am

@abdout abdout merged commit 2942ac2 into main May 25, 2026
2 checks passed
@abdout abdout deleted the refactor/captain-off-dispatch branch May 25, 2026 03:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

refactor: captain agent off deleted dispatch.sh → PushNotification + GitHub Issues + Slack MCP

1 participant