vibe-forge 0.3.12 → 0.8.1

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.
Files changed (85) hide show
  1. package/.claude/commands/clear-attention.md +63 -63
  2. package/.claude/commands/compact-context.md +52 -0
  3. package/.claude/commands/configure-vcs.md +102 -0
  4. package/.claude/commands/forge.md +218 -171
  5. package/.claude/commands/need-help.md +77 -77
  6. package/.claude/commands/update-status.md +64 -64
  7. package/.claude/commands/worker-loop.md +106 -106
  8. package/.claude/hooks/worker-loop.js +217 -0
  9. package/.claude/scripts/setup-worker-loop.sh +45 -45
  10. package/.claude/settings.json +89 -0
  11. package/LICENSE +21 -21
  12. package/README.md +253 -230
  13. package/agents/aegis/personality.md +303 -269
  14. package/agents/anvil/personality.md +278 -211
  15. package/agents/architect/personality.md +260 -0
  16. package/agents/crucible/personality.md +362 -285
  17. package/agents/crucible-x/personality.md +210 -0
  18. package/agents/ember/personality.md +293 -245
  19. package/agents/flux/personality.md +248 -0
  20. package/agents/furnace/personality.md +342 -262
  21. package/agents/herald/personality.md +249 -247
  22. package/agents/loki/personality.md +108 -0
  23. package/agents/oracle/personality.md +284 -0
  24. package/agents/pixel/personality.md +140 -0
  25. package/agents/planning-hub/personality.md +473 -251
  26. package/agents/scribe/personality.md +253 -231
  27. package/agents/slag/personality.md +268 -0
  28. package/agents/temper/personality.md +270 -0
  29. package/bin/cli.js +372 -325
  30. package/bin/dashboard/api/agents.js +333 -0
  31. package/bin/dashboard/api/dispatch.js +507 -0
  32. package/bin/dashboard/api/tasks.js +416 -0
  33. package/bin/dashboard/public/assets/index-BpHfsx1r.js +2 -0
  34. package/bin/dashboard/public/assets/index-QODv4Zn9.css +1 -0
  35. package/bin/dashboard/public/index.html +14 -0
  36. package/bin/dashboard/server.js +645 -0
  37. package/bin/forge-daemon.sh +477 -775
  38. package/bin/forge-setup.sh +661 -532
  39. package/bin/forge-spawn.sh +164 -159
  40. package/bin/forge.cmd +83 -83
  41. package/bin/forge.sh +566 -393
  42. package/bin/lib/agents.sh +177 -177
  43. package/bin/lib/check-aliases.js +50 -0
  44. package/bin/lib/colors.sh +44 -44
  45. package/bin/lib/config.sh +347 -271
  46. package/bin/lib/constants.sh +241 -171
  47. package/bin/lib/daemon/budgets.sh +107 -0
  48. package/bin/lib/daemon/dependencies.sh +146 -0
  49. package/bin/lib/daemon/display.sh +128 -0
  50. package/bin/lib/daemon/notifications.sh +273 -0
  51. package/bin/lib/daemon/routing.sh +93 -0
  52. package/bin/lib/daemon/state.sh +163 -0
  53. package/bin/lib/daemon/sync.sh +103 -0
  54. package/bin/lib/database.sh +357 -224
  55. package/bin/lib/frontmatter.js +106 -0
  56. package/bin/lib/heimdall-setup.js +113 -0
  57. package/bin/lib/heimdall.js +265 -0
  58. package/bin/lib/json.sh +264 -0
  59. package/bin/lib/terminal.js +452 -0
  60. package/bin/lib/util.sh +126 -0
  61. package/bin/lib/vcs.js +349 -0
  62. package/config/agent-manifest.yaml +237 -230
  63. package/config/agents.json +207 -85
  64. package/config/task-template.md +159 -87
  65. package/config/task-types.yaml +111 -106
  66. package/config/templates/handoff-template.md +40 -0
  67. package/context/agent-overrides/README.md +41 -0
  68. package/context/architecture.md +42 -0
  69. package/context/modern-conventions.md +129 -129
  70. package/context/project-context-template.md +122 -122
  71. package/docs/agents.md +473 -0
  72. package/docs/architecture.md +194 -0
  73. package/docs/commands.md +451 -0
  74. package/docs/security.md +195 -144
  75. package/package.json +77 -48
  76. package/.claude/hooks/worker-loop.sh +0 -141
  77. package/.claude/settings.local.json +0 -29
  78. package/agents/forge-master/capabilities.md +0 -144
  79. package/agents/forge-master/context-template.md +0 -128
  80. package/agents/forge-master/personality.md +0 -138
  81. package/agents/sentinel/personality.md +0 -194
  82. package/context/forge-state.yaml +0 -19
  83. package/docs/TODO.md +0 -176
  84. package/docs/npm-publishing.md +0 -95
  85. package/tasks/review/task-001.md +0 -78
@@ -1,77 +1,77 @@
1
- ---
2
- description: Signal that you need human attention/input
3
- argument-hint: <brief reason>
4
- ---
5
-
6
- # Need Help Command
7
-
8
- Use this command when you're blocked and need human input. This will:
9
-
10
- 1. Create an attention file in `tasks/attention/`
11
- 2. Ring the terminal bell for immediate notification
12
- 3. Trigger a system toast notification (if daemon is running)
13
- 4. Show in the Planning Hub's status display
14
-
15
- ## Usage
16
-
17
- ```
18
- /need-help Need clarification on auth implementation approach
19
- /need-help Blocked on API design decision - REST vs GraphQL?
20
- /need-help Tests failing, need guidance on expected behavior
21
- ```
22
-
23
- ## Implementation
24
-
25
- Based on `$ARGUMENTS`:
26
-
27
- 1. Determine your agent identity from your system prompt or context
28
- 2. Create an attention file at `tasks/attention/<agent>-<timestamp>.md`:
29
-
30
- ```markdown
31
- ---
32
- agent: <your-agent-name>
33
- created: <ISO timestamp>
34
- status: pending
35
- ---
36
-
37
- # Attention Needed
38
-
39
- **Agent:** <icon> <display-name>
40
- **Time:** <human-readable time>
41
-
42
- ## Issue
43
-
44
- $ARGUMENTS
45
-
46
- ## Context
47
-
48
- <Brief context about what you were working on>
49
- ```
50
-
51
- 3. Ring the terminal bell:
52
-
53
- ```bash
54
- printf '\a'
55
- ```
56
-
57
- 4. Announce that you've signaled for help and will wait.
58
-
59
- ## Resolving Attention
60
-
61
- When a human responds (via Hub or directly), they can:
62
- - Delete the attention file to clear the flag
63
- - Move it to a resolved folder
64
- - Or just respond - the worker can delete their own attention file once unblocked
65
-
66
- ## Example Output
67
-
68
- After running `/need-help Need decision on caching strategy`:
69
-
70
- ```
71
- 🔔 Attention signal sent!
72
-
73
- I've created tasks/attention/anvil-20240115-143022.md
74
- The Planning Hub and daemon have been notified.
75
-
76
- I'll wait for guidance. You can respond here or via the Hub.
77
- ```
1
+ ---
2
+ description: Signal that you need human attention/input
3
+ argument-hint: <brief reason>
4
+ ---
5
+
6
+ # Need Help Command
7
+
8
+ Use this command when you're blocked and need human input. This will:
9
+
10
+ 1. Create an attention file in `tasks/attention/`
11
+ 2. Ring the terminal bell for immediate notification
12
+ 3. Trigger a system toast notification (if daemon is running)
13
+ 4. Show in the Planning Hub's status display
14
+
15
+ ## Usage
16
+
17
+ ```
18
+ /need-help Need clarification on auth implementation approach
19
+ /need-help Blocked on API design decision - REST vs GraphQL?
20
+ /need-help Tests failing, need guidance on expected behavior
21
+ ```
22
+
23
+ ## Implementation
24
+
25
+ Based on `$ARGUMENTS`:
26
+
27
+ 1. Determine your agent identity from your system prompt or context
28
+ 2. Create an attention file at `tasks/attention/<agent>-<timestamp>.md`:
29
+
30
+ ```markdown
31
+ ---
32
+ agent: <your-agent-name>
33
+ created: <ISO timestamp>
34
+ status: pending
35
+ ---
36
+
37
+ # Attention Needed
38
+
39
+ **Agent:** <icon> <display-name>
40
+ **Time:** <human-readable time>
41
+
42
+ ## Issue
43
+
44
+ $ARGUMENTS
45
+
46
+ ## Context
47
+
48
+ <Brief context about what you were working on>
49
+ ```
50
+
51
+ 3. Ring the terminal bell:
52
+
53
+ ```bash
54
+ printf '\a'
55
+ ```
56
+
57
+ 4. Announce that you've signaled for help and will wait.
58
+
59
+ ## Resolving Attention
60
+
61
+ When a human responds (via Hub or directly), they can:
62
+ - Delete the attention file to clear the flag
63
+ - Move it to a resolved folder
64
+ - Or just respond - the worker can delete their own attention file once unblocked
65
+
66
+ ## Example Output
67
+
68
+ After running `/need-help Need decision on caching strategy`:
69
+
70
+ ```
71
+ 🔔 Attention signal sent!
72
+
73
+ I've created tasks/attention/anvil-20240115-143022.md
74
+ The Planning Hub and daemon have been notified.
75
+
76
+ I'll wait for guidance. You can respond here or via the Hub.
77
+ ```
@@ -1,64 +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.
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": "2026-01-15T14:30:22Z" // ISO 8601 timestamp (auto-generated)
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.
@@ -1,106 +1,106 @@
1
- ---
2
- description: Start a persistent worker loop (Ralph-style)
3
- argument-hint: <agent> [--max-idle 10] | stop
4
- ---
5
-
6
- # Worker Loop Command
7
-
8
- Start a persistent worker loop for the specified agent. The worker will:
9
- 1. Check for assigned tasks
10
- 2. Work on tasks until complete
11
- 3. Loop back and check for more tasks
12
- 4. Only exit after N idle checks with no work found
13
-
14
- ## Activation Modes
15
-
16
- Worker Loop can be activated in two ways:
17
-
18
- ### 1. Config-based (Recommended)
19
-
20
- Enable during `forge init` or toggle anytime:
21
-
22
- ```bash
23
- forge config worker-loop on # Enable for all workers
24
- forge config worker-loop off # Disable
25
- forge config worker-loop # Check status
26
- ```
27
-
28
- When enabled, ALL workers will automatically stay running and check for new tasks.
29
-
30
- ### 2. Runtime (Per-session)
31
-
32
- Use this command for fine-grained control:
33
-
34
- ```
35
- /worker-loop anvil # Start Anvil in persistent loop
36
- /worker-loop furnace --max-idle 20 # Custom idle limit
37
- /worker-loop stop # Stop the current loop
38
- ```
39
-
40
- ## Arguments
41
-
42
- - `$1` - Agent name (anvil, furnace, crucible, etc.) or "stop"
43
- - `--max-idle N` - Exit after N checks with no tasks (default: 10)
44
-
45
- ## Implementation
46
-
47
- Based on `$ARGUMENTS`:
48
-
49
- ### If first argument is "stop"
50
-
51
- Remove the worker loop state file and confirm:
52
-
53
- ```bash
54
- rm -f "${CLAUDE_LOCAL_DIR:-$HOME/.claude}/forge-worker-loop.json"
55
- ```
56
-
57
- Output: "Worker loop stopped."
58
-
59
- ### Otherwise, start a loop
60
-
61
- 1. Resolve the agent name to canonical form
62
- 2. Create state file at `${CLAUDE_LOCAL_DIR}/forge-worker-loop.json`:
63
-
64
- ```json
65
- {
66
- "agent": "<resolved-agent>",
67
- "max_idle_checks": 10,
68
- "idle_count": 0,
69
- "poll_interval": 5,
70
- "started_at": "<ISO timestamp>"
71
- }
72
- ```
73
-
74
- 3. Load the agent's personality file
75
- 4. Start working with this system prompt addition:
76
-
77
- ```
78
- You are in PERSISTENT WORKER MODE. After completing each task:
79
- 1. Check for more tasks assigned to you in tasks/pending/ and tasks/needs-changes/
80
- 2. If tasks found, immediately begin working
81
- 3. If no tasks, announce you are idle and waiting
82
-
83
- Do NOT ask permission to continue - work autonomously until no tasks remain.
84
- ```
85
-
86
- 5. The stop hook (hooks/worker-loop.sh) will intercept exit attempts and:
87
- - If tasks exist: feed prompt to continue working
88
- - If no tasks: increment idle counter
89
- - If max idle reached: allow exit
90
-
91
- ## How It Works
92
-
93
- The Worker Loop uses Claude Code's **Stop Hook** feature:
94
-
95
- 1. When a worker tries to exit, the hook script runs
96
- 2. It checks for pending tasks in `tasks/pending/` and `tasks/needs-changes/`
97
- 3. If tasks found: blocks exit and feeds a prompt to continue working
98
- 4. If no tasks: allows exit (or waits, depending on config)
99
-
100
- ## Benefits
101
-
102
- - Workers stay active and pick up new tasks automatically
103
- - No need to manually respawn workers
104
- - Tasks can be added to pending/ and workers will find them
105
- - Config-based mode requires zero per-session setup
106
- - Configurable idle timeout prevents infinite waiting
1
+ ---
2
+ description: Start a persistent worker loop (Ralph-style)
3
+ argument-hint: <agent> [--max-idle 10] | stop
4
+ ---
5
+
6
+ # Worker Loop Command
7
+
8
+ Start a persistent worker loop for the specified agent. The worker will:
9
+ 1. Check for assigned tasks
10
+ 2. Work on tasks until complete
11
+ 3. Loop back and check for more tasks
12
+ 4. Only exit after N idle checks with no work found
13
+
14
+ ## Activation Modes
15
+
16
+ Worker Loop can be activated in two ways:
17
+
18
+ ### 1. Config-based (Recommended)
19
+
20
+ Enable during `forge init` or toggle anytime:
21
+
22
+ ```bash
23
+ forge config worker-loop on # Enable for all workers
24
+ forge config worker-loop off # Disable
25
+ forge config worker-loop # Check status
26
+ ```
27
+
28
+ When enabled, ALL workers will automatically stay running and check for new tasks.
29
+
30
+ ### 2. Runtime (Per-session)
31
+
32
+ Use this command for fine-grained control:
33
+
34
+ ```
35
+ /worker-loop anvil # Start Anvil in persistent loop
36
+ /worker-loop furnace --max-idle 20 # Custom idle limit
37
+ /worker-loop stop # Stop the current loop
38
+ ```
39
+
40
+ ## Arguments
41
+
42
+ - `$1` - Agent name (anvil, furnace, crucible, etc.) or "stop"
43
+ - `--max-idle N` - Exit after N checks with no tasks (default: 10)
44
+
45
+ ## Implementation
46
+
47
+ Based on `$ARGUMENTS`:
48
+
49
+ ### If first argument is "stop"
50
+
51
+ Remove the worker loop state file and confirm:
52
+
53
+ ```bash
54
+ rm -f "${CLAUDE_LOCAL_DIR:-$HOME/.claude}/forge-worker-loop.json"
55
+ ```
56
+
57
+ Output: "Worker loop stopped."
58
+
59
+ ### Otherwise, start a loop
60
+
61
+ 1. Resolve the agent name to canonical form
62
+ 2. Create state file at `${CLAUDE_LOCAL_DIR}/forge-worker-loop.json`:
63
+
64
+ ```json
65
+ {
66
+ "agent": "<resolved-agent>",
67
+ "max_idle_checks": 10,
68
+ "idle_count": 0,
69
+ "poll_interval": 5,
70
+ "started_at": "<ISO timestamp>"
71
+ }
72
+ ```
73
+
74
+ 3. Load the agent's personality file
75
+ 4. Start working with this system prompt addition:
76
+
77
+ ```
78
+ You are in PERSISTENT WORKER MODE. After completing each task:
79
+ 1. Check for more tasks assigned to you in tasks/pending/ and tasks/needs-changes/
80
+ 2. If tasks found, immediately begin working
81
+ 3. If no tasks, announce you are idle and waiting
82
+
83
+ Do NOT ask permission to continue - work autonomously until no tasks remain.
84
+ ```
85
+
86
+ 5. The stop hook (hooks/worker-loop.js) will intercept exit attempts and:
87
+ - If tasks exist: feed prompt to continue working
88
+ - If no tasks: increment idle counter
89
+ - If max idle reached: allow exit
90
+
91
+ ## How It Works
92
+
93
+ The Worker Loop uses Claude Code's **Stop Hook** feature:
94
+
95
+ 1. When a worker tries to exit, the hook script runs
96
+ 2. It checks for pending tasks in `tasks/pending/` and `tasks/needs-changes/`
97
+ 3. If tasks found: blocks exit and feeds a prompt to continue working
98
+ 4. If no tasks: allows exit (or waits, depending on config)
99
+
100
+ ## Benefits
101
+
102
+ - Workers stay active and pick up new tasks automatically
103
+ - No need to manually respawn workers
104
+ - Tasks can be added to pending/ and workers will find them
105
+ - Config-based mode requires zero per-session setup
106
+ - Configurable idle timeout prevents infinite waiting