fix(session): add fallback instructions to start/restart beacons

Add fallback instructions to start/restart topics in FormatStartupNudge()
so agents have actionable instructions even if SessionStart hook fails.

Previously, "start" and "restart" beacons only contained metadata like:
  [GAS TOWN] beads/crew/fang <- human • 2025-01-12 • start

If the SessionStart hook failed to inject context via `gt prime`, agents
would sit idle at "No recent activity" screen with no instructions.

Now these topics include:
  Run `gt prime` now for full context, then check your hook and mail.

Also warn instead of silently discarding settings provisioning errors in
crew_at.go.

Fixes: gt-uoc64

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
gastown/crew/george
2026-01-12 02:51:02 -08:00
committed by Steve Yegge
parent 3caf32f9f7
commit 605eeec84e
3 changed files with 41 additions and 1 deletions

View File

@@ -81,5 +81,13 @@ func FormatStartupNudge(cfg StartupNudgeConfig) string {
beacon += "\n\nWork is on your hook. Run `gt hook` now and begin immediately."
}
// For start/restart, add fallback instructions in case SessionStart hook fails
// to inject context via gt prime. This prevents the "No recent activity" state
// where agents sit idle because they received only metadata, no instructions.
// See: gt-uoc64 (crew workers starting without proper context injection)
if cfg.Topic == "start" || cfg.Topic == "restart" {
beacon += "\n\nRun `gt prime` now for full context, then check your hook and mail."
}
return beacon
}

View File

@@ -86,6 +86,35 @@ func TestFormatStartupNudge(t *testing.T) {
"ready",
},
},
{
name: "start includes fallback instructions",
cfg: StartupNudgeConfig{
Recipient: "beads/crew/fang",
Sender: "human",
Topic: "start",
},
wantSub: []string{
"[GAS TOWN]",
"beads/crew/fang",
"<- human",
"start",
"gt prime", // fallback instruction for when SessionStart hook fails
},
},
{
name: "restart includes fallback instructions",
cfg: StartupNudgeConfig{
Recipient: "gastown/crew/george",
Sender: "human",
Topic: "restart",
},
wantSub: []string{
"[GAS TOWN]",
"gastown/crew/george",
"restart",
"gt prime", // fallback instruction for when SessionStart hook fails
},
},
}
for _, tt := range tests {