feat(spawn): Replace tmux injection with persistent mail-based work assignment (ga-yp3)

- gt spawn now sends work assignment to polecat inbox instead of tmux injection
- Add --identity flag to gt mail inbox and gt mail check
- Add --force flag to gt spawn to override existing unread mail
- Update polecat template with startup protocol for reading inbox
- Fix pre-existing lint issue in start.go

The new flow is more reliable:
1. Spawn sends work assignment mail to polecat inbox
2. Polecat starts and runs gt prime
3. gt prime automatically runs gt mail check --inject
4. Polecat reads work assignment from inbox

Benefits:
- Persistence across session restarts
- No racing against Claude initialization
- Audit trail in beads
- Edge case handling for existing unread mail

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Steve Yegge
2025-12-19 22:07:38 -08:00
parent c7e83b1619
commit 5622abbdfe
6 changed files with 129 additions and 28 deletions
+6 -4
View File
@@ -284,12 +284,14 @@ func outputPolecatContext(ctx RoleContext) {
fmt.Printf("%s\n\n", style.Bold.Render("# Polecat Context"))
fmt.Printf("You are polecat **%s** in rig: %s\n\n",
style.Bold.Render(ctx.Polecat), style.Bold.Render(ctx.Rig))
fmt.Println("## Responsibilities")
fmt.Println("- Work on assigned issues")
fmt.Println("- Commit work to your branch")
fmt.Println("- Signal completion for merge queue")
fmt.Println("## Startup Protocol")
fmt.Println("1. Run `gt prime` - loads context and checks mail automatically")
fmt.Println("2. Check inbox - if mail shown, read with `gt mail read <id>`")
fmt.Println("3. Look for '📋 Work Assignment' messages for your task")
fmt.Println("4. If no mail, check `bd list --status=in_progress` for existing work")
fmt.Println()
fmt.Println("## Key Commands")
fmt.Println("- `gt mail inbox` - Check your inbox for work assignments")
fmt.Println("- `bd show <issue>` - View your assigned issue")
fmt.Println("- `bd close <issue>` - Mark issue complete")
fmt.Println("- `gt done` - Signal work ready for merge")