feat: Implement no-tmux mode with beads as data plane (gt-vc3l4)
Enable Gas Town to operate without tmux by using beads for args transport: - Add `attached_args` field to beads AttachmentFields - gt sling: Store args in bead description, graceful fallback if no tmux - gt prime: Display attached args prominently on startup - gt mol status: Include attached_args in status output - gt spawn --naked: Assign work via mail only, skip tmux session Agents discover args via gt prime / bd show when starting manually. Docs added explaining what works vs degraded behavior in no-tmux mode. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
+16
-6
@@ -632,6 +632,7 @@ func (b *Beads) ClearMail(reason string) (*ClearMailResult, error) {
|
||||
type AttachmentFields struct {
|
||||
AttachedMolecule string // Root issue ID of the attached molecule
|
||||
AttachedAt string // ISO 8601 timestamp when attached
|
||||
AttachedArgs string // Natural language args passed via gt sling --args (no-tmux mode)
|
||||
}
|
||||
|
||||
// ParseAttachmentFields extracts attachment fields from an issue's description.
|
||||
@@ -670,6 +671,9 @@ func ParseAttachmentFields(issue *Issue) *AttachmentFields {
|
||||
case "attached_at", "attached-at", "attachedat":
|
||||
fields.AttachedAt = value
|
||||
hasFields = true
|
||||
case "attached_args", "attached-args", "attachedargs":
|
||||
fields.AttachedArgs = value
|
||||
hasFields = true
|
||||
}
|
||||
}
|
||||
|
||||
@@ -694,6 +698,9 @@ func FormatAttachmentFields(fields *AttachmentFields) string {
|
||||
if fields.AttachedAt != "" {
|
||||
lines = append(lines, "attached_at: "+fields.AttachedAt)
|
||||
}
|
||||
if fields.AttachedArgs != "" {
|
||||
lines = append(lines, "attached_args: "+fields.AttachedArgs)
|
||||
}
|
||||
|
||||
return strings.Join(lines, "\n")
|
||||
}
|
||||
@@ -704,12 +711,15 @@ func FormatAttachmentFields(fields *AttachmentFields) string {
|
||||
func SetAttachmentFields(issue *Issue, fields *AttachmentFields) string {
|
||||
// Known attachment field keys (lowercase)
|
||||
attachmentKeys := map[string]bool{
|
||||
"attached_molecule": true,
|
||||
"attached-molecule": true,
|
||||
"attachedmolecule": true,
|
||||
"attached_at": true,
|
||||
"attached-at": true,
|
||||
"attachedat": true,
|
||||
"attached_molecule": true,
|
||||
"attached-molecule": true,
|
||||
"attachedmolecule": true,
|
||||
"attached_at": true,
|
||||
"attached-at": true,
|
||||
"attachedat": true,
|
||||
"attached_args": true,
|
||||
"attached-args": true,
|
||||
"attachedargs": true,
|
||||
}
|
||||
|
||||
// Collect non-attachment lines from existing description
|
||||
|
||||
Reference in New Issue
Block a user