vibe-forge 0.3.10 โ†’ 0.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,64 @@
1
+ ---
2
+ description: Update your agent status for the forge dashboard
3
+ argument-hint: <status> [task-id]
4
+ ---
5
+
6
+ # Update Status Command
7
+
8
+ Report your current status to the forge daemon and Planning Hub. This enables real-time visibility into what each worker is doing.
9
+
10
+ ## Usage
11
+
12
+ ```
13
+ /update-status working TASK-001 # Working on a specific task
14
+ /update-status idle # Waiting for tasks
15
+ /update-status blocked # Stuck, may need help
16
+ /update-status reviewing PR-123 # Reviewing something
17
+ /update-status testing TASK-001 # Running tests
18
+ ```
19
+
20
+ ## Status Values
21
+
22
+ | Status | Meaning |
23
+ |--------|---------|
24
+ | `idle` | No current task, ready for work |
25
+ | `working` | Actively working on a task |
26
+ | `blocked` | Stuck, needs input (consider `/need-help`) |
27
+ | `reviewing` | Reviewing code or PR |
28
+ | `testing` | Running tests |
29
+ | `waiting` | Waiting for external dependency |
30
+
31
+ ## Implementation
32
+
33
+ Based on `$ARGUMENTS`:
34
+
35
+ 1. Parse the status and optional task ID from arguments
36
+ 2. Determine your agent identity from your system prompt
37
+ 3. Write status file to `context/agent-status/<agent>.json`:
38
+
39
+ ```json
40
+ {
41
+ "agent": "anvil",
42
+ "status": "working",
43
+ "task": "TASK-001",
44
+ "message": "Implementing user authentication",
45
+ "updated": "2024-01-15T14:30:22Z"
46
+ }
47
+ ```
48
+
49
+ 4. The daemon reads these files and includes them in `forge-state.yaml`
50
+ 5. The Planning Hub sees your status in the dashboard
51
+
52
+ ## Auto-Status Updates
53
+
54
+ Workers should update their status at these key moments:
55
+
56
+ 1. **On startup**: `/update-status idle` (or working if picking up a task)
57
+ 2. **When picking up a task**: `/update-status working TASK-XXX`
58
+ 3. **When completing a task**: `/update-status idle`
59
+ 4. **When blocked**: `/update-status blocked` (then `/need-help` if needed)
60
+ 5. **Before exiting**: Status file can remain (daemon marks stale after timeout)
61
+
62
+ ## Stale Status
63
+
64
+ The daemon considers a status stale if not updated for 5+ minutes. Stale statuses are shown with a warning indicator in the dashboard.
@@ -71,6 +71,26 @@ Not paranoid, but vigilant. Aegis knows that security isn't about saying no - it
71
71
  10. Move to /tasks/completed/
72
72
  ```
73
73
 
74
+ ### Status Reporting
75
+
76
+ Keep the Planning Hub and daemon informed of your status:
77
+
78
+ ```bash
79
+ /update-status idle # When waiting for tasks
80
+ /update-status working TASK-033 # When starting a task
81
+ /update-status blocked TASK-033 # When stuck (then /need-help if needed)
82
+ /update-status reviewing TASK-033 # When reviewing security
83
+ /update-status idle # When task complete
84
+ ```
85
+
86
+ Update status at key moments:
87
+
88
+ 1. **Startup**: Report `idle` (ready for work)
89
+ 2. **Task pickup**: Report `working` with task ID
90
+ 3. **Security review**: Report `reviewing` when auditing code
91
+ 4. **Blocked**: Report `blocked`, then use `/need-help` if human input needed
92
+ 5. **Completion**: Report `idle` after moving task to completed
93
+
74
94
  ### Output Format
75
95
  ```markdown
76
96
  ## Completion Summary
@@ -66,6 +66,25 @@ Derived from Amelia's developer DNA but specialized for the frontend domain. Whe
66
66
  9. Move to /tasks/completed/
67
67
  ```
68
68
 
69
+ ### Status Reporting
70
+
71
+ Keep the Planning Hub and daemon informed of your status:
72
+
73
+ ```bash
74
+ /update-status idle # When waiting for tasks
75
+ /update-status working TASK-019 # When starting a task
76
+ /update-status blocked TASK-019 # When stuck (then /need-help if needed)
77
+ /update-status testing TASK-019 # When running tests
78
+ /update-status idle # When task complete
79
+ ```
80
+
81
+ Update status at key moments:
82
+
83
+ 1. **Startup**: Report `idle` (ready for work)
84
+ 2. **Task pickup**: Report `working` with task ID
85
+ 3. **Blocked**: Report `blocked`, then use `/need-help` if human input needed
86
+ 4. **Completion**: Report `idle` after moving task to completed
87
+
69
88
  ### Output Format
70
89
  ```markdown
71
90
  ## Completion Summary
@@ -78,6 +78,26 @@ Derived from Murat's test architect DNA. Crucible combines systematic test desig
78
78
  6. Route to appropriate agent for fix
79
79
  ```
80
80
 
81
+ ### Status Reporting
82
+
83
+ Keep the Planning Hub and daemon informed of your status:
84
+
85
+ ```bash
86
+ /update-status idle # When waiting for tasks
87
+ /update-status working TASK-025 # When starting a task
88
+ /update-status testing TASK-025 # When running test suites
89
+ /update-status blocked TASK-025 # When stuck (then /need-help if needed)
90
+ /update-status idle # When task complete
91
+ ```
92
+
93
+ Update status at key moments:
94
+
95
+ 1. **Startup**: Report `idle` (ready for work)
96
+ 2. **Task pickup**: Report `working` with task ID
97
+ 3. **Test execution**: Report `testing` during test runs
98
+ 4. **Blocked**: Report `blocked`, then use `/need-help` if human input needed
99
+ 5. **Completion**: Report `idle` after moving task to completed
100
+
81
101
  ### Output Format
82
102
  ```markdown
83
103
  ## Completion Summary
@@ -72,6 +72,25 @@ The name Ember reflects the persistent, quiet fire that powers everything. Not f
72
72
  12. Move to /tasks/completed/
73
73
  ```
74
74
 
75
+ ### Status Reporting
76
+
77
+ Keep the Planning Hub and daemon informed of your status:
78
+
79
+ ```bash
80
+ /update-status idle # When waiting for tasks
81
+ /update-status working TASK-027 # When starting a task
82
+ /update-status blocked TASK-027 # When stuck (then /need-help if needed)
83
+ /update-status testing TASK-027 # When testing changes
84
+ /update-status idle # When task complete
85
+ ```
86
+
87
+ Update status at key moments:
88
+
89
+ 1. **Startup**: Report `idle` (ready for work)
90
+ 2. **Task pickup**: Report `working` with task ID
91
+ 3. **Blocked**: Report `blocked`, then use `/need-help` if human input needed
92
+ 4. **Completion**: Report `idle` after moving task to completed
93
+
75
94
  ### Output Format
76
95
  ```markdown
77
96
  ## Completion Summary
@@ -67,6 +67,25 @@ Like Anvil, derived from Amelia's developer DNA but specialized for the backend
67
67
  10. Move to /tasks/completed/
68
68
  ```
69
69
 
70
+ ### Status Reporting
71
+
72
+ Keep the Planning Hub and daemon informed of your status:
73
+
74
+ ```bash
75
+ /update-status idle # When waiting for tasks
76
+ /update-status working TASK-021 # When starting a task
77
+ /update-status blocked TASK-021 # When stuck (then /need-help if needed)
78
+ /update-status testing TASK-021 # When running tests
79
+ /update-status idle # When task complete
80
+ ```
81
+
82
+ Update status at key moments:
83
+
84
+ 1. **Startup**: Report `idle` (ready for work)
85
+ 2. **Task pickup**: Report `working` with task ID
86
+ 3. **Blocked**: Report `blocked`, then use `/need-help` if human input needed
87
+ 4. **Completion**: Report `idle` after moving task to completed
88
+
70
89
  ### Output Format
71
90
  ```markdown
72
91
  ## Completion Summary
@@ -74,6 +74,26 @@ Not just a button-pusher - Herald understands semantic versioning, changelog man
74
74
  9. Move task to /tasks/completed/
75
75
  ```
76
76
 
77
+ ### Status Reporting
78
+
79
+ Keep the Planning Hub and daemon informed of your status:
80
+
81
+ ```bash
82
+ /update-status idle # When waiting for tasks
83
+ /update-status working TASK-031 # When starting a release task
84
+ /update-status blocked TASK-031 # When release blocked (then /need-help if needed)
85
+ /update-status waiting TASK-031 # When waiting for CI/deployment
86
+ /update-status idle # When release complete
87
+ ```
88
+
89
+ Update status at key moments:
90
+
91
+ 1. **Startup**: Report `idle` (ready for work)
92
+ 2. **Release prep**: Report `working` with task ID
93
+ 3. **Waiting on CI**: Report `waiting` during long CI runs or deployments
94
+ 4. **Blocked**: Report `blocked`, then use `/need-help` if human input needed
95
+ 5. **Completion**: Report `idle` after release announced
96
+
77
97
  ### Output Format
78
98
  ```markdown
79
99
  ## Completion Summary
@@ -66,6 +66,24 @@ Where other agents create, Scribe preserves. The README that saves a future deve
66
66
  9. Move to /tasks/completed/
67
67
  ```
68
68
 
69
+ ### Status Reporting
70
+
71
+ Keep the Planning Hub and daemon informed of your status:
72
+
73
+ ```bash
74
+ /update-status idle # When waiting for tasks
75
+ /update-status working TASK-024 # When starting a task
76
+ /update-status blocked TASK-024 # When stuck (then /need-help if needed)
77
+ /update-status idle # When task complete
78
+ ```
79
+
80
+ Update status at key moments:
81
+
82
+ 1. **Startup**: Report `idle` (ready for work)
83
+ 2. **Task pickup**: Report `working` with task ID
84
+ 3. **Blocked**: Report `blocked`, then use `/need-help` if human input needed
85
+ 4. **Completion**: Report `idle` after moving task to completed
86
+
69
87
  ### Output Format
70
88
  ```markdown
71
89
  ## Completion Summary
@@ -259,6 +259,53 @@ check_attention_needed() {
259
259
  done
260
260
  }
261
261
 
262
+ # Build worker status from agent-status files
263
+ build_worker_status() {
264
+ local status_dir="$FORGE_ROOT/$AGENT_STATUS_DIR"
265
+ local now_epoch
266
+ now_epoch=$(date +%s)
267
+ local stale_threshold=300 # 5 minutes
268
+
269
+ if [[ ! -d "$status_dir" ]]; then
270
+ return 0
271
+ fi
272
+
273
+ echo "workers:"
274
+ for status_file in "$status_dir"/*.json; do
275
+ if [[ -f "$status_file" && ! -L "$status_file" ]]; then
276
+ local agent status task message updated updated_epoch age stale_marker
277
+
278
+ # Parse JSON status file
279
+ agent=$(jq -r '.agent // "unknown"' "$status_file" 2>/dev/null)
280
+ status=$(jq -r '.status // "unknown"' "$status_file" 2>/dev/null)
281
+ task=$(jq -r '.task // ""' "$status_file" 2>/dev/null)
282
+ message=$(jq -r '.message // ""' "$status_file" 2>/dev/null | head -c 80)
283
+ updated=$(jq -r '.updated // ""' "$status_file" 2>/dev/null)
284
+
285
+ # Check if stale (not updated in 5+ minutes)
286
+ stale_marker=""
287
+ if [[ -n "$updated" ]]; then
288
+ # Convert ISO timestamp to epoch (cross-platform)
289
+ updated_epoch=$(date -d "$updated" +%s 2>/dev/null || date -j -f "%Y-%m-%dT%H:%M:%S" "${updated%Z}" +%s 2>/dev/null || echo "0")
290
+ age=$((now_epoch - updated_epoch))
291
+ if [[ "$age" -gt "$stale_threshold" ]]; then
292
+ stale_marker=" (stale)"
293
+ fi
294
+ fi
295
+
296
+ echo " - agent: $agent"
297
+ echo " status: $status$stale_marker"
298
+ if [[ -n "$task" ]]; then
299
+ echo " task: $task"
300
+ fi
301
+ if [[ -n "$message" ]]; then
302
+ echo " message: \"$message\""
303
+ fi
304
+ echo " updated: $updated"
305
+ fi
306
+ done
307
+ }
308
+
262
309
  # =============================================================================
263
310
  # Daemon Functions
264
311
  # =============================================================================
@@ -283,6 +330,12 @@ update_state() {
283
330
  attention_details=$(build_attention_details)
284
331
  fi
285
332
 
333
+ # Build worker status from agent-status files
334
+ local worker_status=""
335
+ if [[ -d "$FORGE_ROOT/$AGENT_STATUS_DIR" ]]; then
336
+ worker_status=$(build_worker_status)
337
+ fi
338
+
286
339
  # Write state file atomically (write to temp, then move)
287
340
  local temp_state="${STATE_FILE}.tmp.$$"
288
341
  cat > "$temp_state" << EOF
@@ -306,6 +359,7 @@ tasks:
306
359
  attention_needed: $attention
307
360
 
308
361
  $attention_details
362
+ $worker_status
309
363
  last_updated: $(date -Iseconds)
310
364
  EOF
311
365
  mv "$temp_state" "$STATE_FILE"
@@ -433,6 +487,7 @@ cmd_start() {
433
487
  mkdir -p "$FORGE_ROOT/$TASKS_NEEDS_CHANGES"
434
488
  mkdir -p "$FORGE_ROOT/$TASKS_MERGED"
435
489
  mkdir -p "$FORGE_ROOT/$TASKS_ATTENTION"
490
+ mkdir -p "$FORGE_ROOT/$AGENT_STATUS_DIR"
436
491
 
437
492
  # Start daemon in background
438
493
  daemon_loop &
@@ -514,6 +569,55 @@ cmd_status() {
514
569
  echo ""
515
570
  fi
516
571
 
572
+ # Show worker status
573
+ if [[ -d "$FORGE_ROOT/$AGENT_STATUS_DIR" ]]; then
574
+ local status_count
575
+ status_count=$(find "$FORGE_ROOT/$AGENT_STATUS_DIR" -maxdepth 1 -name "*.json" -type f 2>/dev/null | wc -l)
576
+ if [[ "$status_count" -gt 0 ]]; then
577
+ echo "Active Workers:"
578
+ local now_epoch stale_threshold
579
+ now_epoch=$(date +%s)
580
+ stale_threshold=300
581
+ for status_file in "$FORGE_ROOT/$AGENT_STATUS_DIR"/*.json; do
582
+ if [[ -f "$status_file" && ! -L "$status_file" ]]; then
583
+ local agent status task updated stale_marker icon
584
+ agent=$(jq -r '.agent // "unknown"' "$status_file" 2>/dev/null)
585
+ status=$(jq -r '.status // "unknown"' "$status_file" 2>/dev/null)
586
+ task=$(jq -r '.task // ""' "$status_file" 2>/dev/null)
587
+ updated=$(jq -r '.updated // ""' "$status_file" 2>/dev/null)
588
+
589
+ # Check staleness
590
+ stale_marker=""
591
+ if [[ -n "$updated" ]]; then
592
+ local updated_epoch age
593
+ updated_epoch=$(date -d "$updated" +%s 2>/dev/null || date -j -f "%Y-%m-%dT%H:%M:%S" "${updated%Z}" +%s 2>/dev/null || echo "0")
594
+ age=$((now_epoch - updated_epoch))
595
+ if [[ "$age" -gt "$stale_threshold" ]]; then
596
+ stale_marker=" ${YELLOW}(stale)${NC}"
597
+ fi
598
+ fi
599
+
600
+ # Status icon
601
+ case "$status" in
602
+ "working") icon="๐Ÿ”จ" ;;
603
+ "idle") icon="๐Ÿ’ค" ;;
604
+ "blocked") icon="๐Ÿšซ" ;;
605
+ "testing") icon="๐Ÿงช" ;;
606
+ "reviewing") icon="๐Ÿ‘๏ธ" ;;
607
+ *) icon="โ“" ;;
608
+ esac
609
+
610
+ if [[ -n "$task" ]]; then
611
+ echo -e " $icon ${CYAN}$agent${NC}: $status ($task)$stale_marker"
612
+ else
613
+ echo -e " $icon ${CYAN}$agent${NC}: $status$stale_marker"
614
+ fi
615
+ fi
616
+ done
617
+ echo ""
618
+ fi
619
+ fi
620
+
517
621
  # Show recent notifications
518
622
  if [[ -f "$NOTIFY_FILE" ]]; then
519
623
  local notify_count
@@ -24,6 +24,7 @@ TASKS_NEEDS_CHANGES="$TASKS_DIR/needs-changes"
24
24
  TASKS_MERGED="$TASKS_DIR/merged"
25
25
  TASKS_ATTENTION="$TASKS_DIR/attention"
26
26
  CONTEXT_DIR="context"
27
+ AGENT_STATUS_DIR="$CONTEXT_DIR/agent-status"
27
28
  AGENTS_DIR="agents"
28
29
 
29
30
  # Config files
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibe-forge",
3
- "version": "0.3.10",
3
+ "version": "0.3.11",
4
4
  "description": "Multi-agent development orchestration system for terminal-native vibe coding",
5
5
  "keywords": [
6
6
  "vibe-coding",