strray-ai 1.22.15 → 1.22.16
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.
- package/AGENTS.md +1 -44
- package/dist/AGENTS.md +1 -44
- package/dist/CHANGELOG.md +8 -0
- package/opencode.json +78 -60
- package/package.json +1 -1
- package/scripts/node/postinstall.cjs +5 -6
package/AGENTS.md
CHANGED
|
@@ -614,56 +614,13 @@ npx strray-ai status
|
|
|
614
614
|
### Common Issues
|
|
615
615
|
|
|
616
616
|
| Issue | Symptom | Solution |
|
|
617
|
-
|
|
617
|
+
|-------|---------|----------|
|
|
618
618
|
| Agents not spawning | Timeout on @invoke | Run `npx strray-ai health` |
|
|
619
619
|
| Validation failures | Pre-commit blocks | Run `npx strray-ai validate --fix` |
|
|
620
620
|
| Memory issues | Slow performance | `npx strray-ai session clear-cache` |
|
|
621
621
|
| Config not loading | Settings ignored | Check `.opencode/opencode.json` syntax |
|
|
622
622
|
| MCP servers unavailable | Tools missing | `npx strray-ai capabilities --mcp` |
|
|
623
623
|
|
|
624
|
-
### Nudge Watchdog
|
|
625
|
-
|
|
626
|
-
The Nudge Watchdog detects and breaks stuck AI patterns that prevent progress. It monitors agent actions in real-time and injects corrective nudges when patterns are detected.
|
|
627
|
-
|
|
628
|
-
**Stuck Patterns Detected:**
|
|
629
|
-
|
|
630
|
-
| Pattern | Detection | Nudge Action |
|
|
631
|
-
|---------|-----------|-------------|
|
|
632
|
-
| **think-loop** | >3 thinking tags without code changes | "STOP THINKING. Write code now." |
|
|
633
|
-
| **syntax-loop** | >3 fix attempts on same error | "git checkout HEAD -- file && re-apply" |
|
|
634
|
-
| **death-spiral** | >3 explanations without fixes | "Delegate to different agent" |
|
|
635
|
-
| **tool-loop** | >5 same tool calls with similar args | "Try alternative tool" |
|
|
636
|
-
| **repair-failure** | Fix indicated but error persists | "Trigger different processor" |
|
|
637
|
-
|
|
638
|
-
**Configuration (features.json):**
|
|
639
|
-
```json
|
|
640
|
-
{
|
|
641
|
-
"nudge_watchdog": {
|
|
642
|
-
"enabled": true,
|
|
643
|
-
"think_loop_threshold": 3,
|
|
644
|
-
"syntax_loop_threshold": 3,
|
|
645
|
-
"tool_loop_threshold": 5,
|
|
646
|
-
"death_spiral_threshold": 3,
|
|
647
|
-
"cooldown_ms": 120000
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
```
|
|
651
|
-
|
|
652
|
-
**Commands:**
|
|
653
|
-
```bash
|
|
654
|
-
# Check nudge stats
|
|
655
|
-
npx strray-ai status | grep nudge
|
|
656
|
-
|
|
657
|
-
# Disable nudge watchdog
|
|
658
|
-
npx strray-ai config set --feature nudge_watchdog.enabled --value false
|
|
659
|
-
```
|
|
660
|
-
|
|
661
|
-
**Integration:**
|
|
662
|
-
- Runs as post-processor via `nudge-processor.ts`
|
|
663
|
-
- Logs to framework logger
|
|
664
|
-
- Non-blocking: only suggests, never forces
|
|
665
|
-
- 2-minute cooldown between nudges
|
|
666
|
-
|
|
667
624
|
### Getting Help
|
|
668
625
|
|
|
669
626
|
```bash
|
package/dist/AGENTS.md
CHANGED
|
@@ -614,56 +614,13 @@ npx strray-ai status
|
|
|
614
614
|
### Common Issues
|
|
615
615
|
|
|
616
616
|
| Issue | Symptom | Solution |
|
|
617
|
-
|
|
617
|
+
|-------|---------|----------|
|
|
618
618
|
| Agents not spawning | Timeout on @invoke | Run `npx strray-ai health` |
|
|
619
619
|
| Validation failures | Pre-commit blocks | Run `npx strray-ai validate --fix` |
|
|
620
620
|
| Memory issues | Slow performance | `npx strray-ai session clear-cache` |
|
|
621
621
|
| Config not loading | Settings ignored | Check `.opencode/opencode.json` syntax |
|
|
622
622
|
| MCP servers unavailable | Tools missing | `npx strray-ai capabilities --mcp` |
|
|
623
623
|
|
|
624
|
-
### Nudge Watchdog
|
|
625
|
-
|
|
626
|
-
The Nudge Watchdog detects and breaks stuck AI patterns that prevent progress. It monitors agent actions in real-time and injects corrective nudges when patterns are detected.
|
|
627
|
-
|
|
628
|
-
**Stuck Patterns Detected:**
|
|
629
|
-
|
|
630
|
-
| Pattern | Detection | Nudge Action |
|
|
631
|
-
|---------|-----------|-------------|
|
|
632
|
-
| **think-loop** | >3 thinking tags without code changes | "STOP THINKING. Write code now." |
|
|
633
|
-
| **syntax-loop** | >3 fix attempts on same error | "git checkout HEAD -- file && re-apply" |
|
|
634
|
-
| **death-spiral** | >3 explanations without fixes | "Delegate to different agent" |
|
|
635
|
-
| **tool-loop** | >5 same tool calls with similar args | "Try alternative tool" |
|
|
636
|
-
| **repair-failure** | Fix indicated but error persists | "Trigger different processor" |
|
|
637
|
-
|
|
638
|
-
**Configuration (features.json):**
|
|
639
|
-
```json
|
|
640
|
-
{
|
|
641
|
-
"nudge_watchdog": {
|
|
642
|
-
"enabled": true,
|
|
643
|
-
"think_loop_threshold": 3,
|
|
644
|
-
"syntax_loop_threshold": 3,
|
|
645
|
-
"tool_loop_threshold": 5,
|
|
646
|
-
"death_spiral_threshold": 3,
|
|
647
|
-
"cooldown_ms": 120000
|
|
648
|
-
}
|
|
649
|
-
}
|
|
650
|
-
```
|
|
651
|
-
|
|
652
|
-
**Commands:**
|
|
653
|
-
```bash
|
|
654
|
-
# Check nudge stats
|
|
655
|
-
npx strray-ai status | grep nudge
|
|
656
|
-
|
|
657
|
-
# Disable nudge watchdog
|
|
658
|
-
npx strray-ai config set --feature nudge_watchdog.enabled --value false
|
|
659
|
-
```
|
|
660
|
-
|
|
661
|
-
**Integration:**
|
|
662
|
-
- Runs as post-processor via `nudge-processor.ts`
|
|
663
|
-
- Logs to framework logger
|
|
664
|
-
- Non-blocking: only suggests, never forces
|
|
665
|
-
- 2-minute cooldown between nudges
|
|
666
|
-
|
|
667
624
|
### Getting Help
|
|
668
625
|
|
|
669
626
|
```bash
|
package/dist/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,14 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Conventional Commits](https://www.conventionalcommits.org/).
|
|
6
6
|
|
|
7
|
+
## [1.22.16] - 2026-04-27
|
|
8
|
+
|
|
9
|
+
### 🔄 Changes
|
|
10
|
+
|
|
11
|
+
- Version bump
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
7
15
|
## [1.22.15] - 2026-04-27
|
|
8
16
|
|
|
9
17
|
### 🔄 Changes
|
package/opencode.json
CHANGED
|
@@ -5,241 +5,259 @@
|
|
|
5
5
|
"prune": true
|
|
6
6
|
},
|
|
7
7
|
"mcp": {
|
|
8
|
-
"context7": {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
"global-
|
|
8
|
+
"context7": {
|
|
9
|
+
"enabled": false
|
|
10
|
+
},
|
|
11
|
+
"global-everything": {
|
|
12
|
+
"enabled": false
|
|
13
|
+
},
|
|
14
|
+
"global-filesystem": {
|
|
15
|
+
"enabled": false
|
|
16
|
+
},
|
|
17
|
+
"global-git": {
|
|
18
|
+
"enabled": false
|
|
19
|
+
}
|
|
12
20
|
},
|
|
13
21
|
"agent": {
|
|
14
22
|
"architect": {
|
|
15
23
|
"description": "Architect agent for system design - PRIMARY for design decisions",
|
|
16
|
-
"temperature": 1
|
|
24
|
+
"temperature": 1,
|
|
17
25
|
"mode": "primary"
|
|
18
26
|
},
|
|
19
27
|
"strategist": {
|
|
20
|
-
"description": "Expert in system design, architecture decisions, and technical roadmaps
|
|
21
|
-
"temperature": 1
|
|
28
|
+
"description": "Expert in system design, architecture decisions, and technical roadmaps",
|
|
29
|
+
"temperature": 1,
|
|
22
30
|
"mode": "subagent"
|
|
23
31
|
},
|
|
24
32
|
"testing-lead": {
|
|
25
33
|
"description": "Testing lead for testing strategy",
|
|
26
|
-
"temperature": 1
|
|
34
|
+
"temperature": 1,
|
|
27
35
|
"mode": "subagent"
|
|
28
36
|
},
|
|
29
37
|
"bug-triage-specialist": {
|
|
30
38
|
"description": "Bug triage specialist",
|
|
31
|
-
"temperature": 1
|
|
39
|
+
"temperature": 1,
|
|
32
40
|
"mode": "subagent"
|
|
33
41
|
},
|
|
34
42
|
"code-reviewer": {
|
|
35
43
|
"description": "Code reviewer for quality",
|
|
36
|
-
"temperature": 1
|
|
44
|
+
"temperature": 1,
|
|
37
45
|
"mode": "subagent"
|
|
38
46
|
},
|
|
39
47
|
"security-auditor": {
|
|
40
48
|
"description": "Security auditor",
|
|
41
|
-
"temperature": 1
|
|
49
|
+
"temperature": 1,
|
|
42
50
|
"mode": "subagent"
|
|
43
51
|
},
|
|
44
52
|
"refactorer": {
|
|
45
53
|
"description": "Refactorer for code improvement",
|
|
46
|
-
"temperature": 1
|
|
54
|
+
"temperature": 1,
|
|
47
55
|
"mode": "subagent"
|
|
48
56
|
},
|
|
49
57
|
"researcher": {
|
|
50
58
|
"description": "Researcher for codebase exploration",
|
|
51
|
-
"temperature": 1
|
|
59
|
+
"temperature": 1,
|
|
52
60
|
"mode": "subagent"
|
|
53
61
|
},
|
|
54
62
|
"log-monitor": {
|
|
55
63
|
"description": "Log monitor for diagnostics",
|
|
56
|
-
"temperature": 1
|
|
64
|
+
"temperature": 1,
|
|
57
65
|
"mode": "subagent"
|
|
58
66
|
},
|
|
59
67
|
"explore": {
|
|
60
68
|
"description": "Codebase exploration agent",
|
|
61
|
-
"temperature": 1
|
|
62
|
-
"mode": "subagent"
|
|
63
|
-
},
|
|
64
|
-
"strategist": {
|
|
65
|
-
"description": "Expert in system design, architecture decisions, and technical roadmaps",
|
|
66
|
-
"temperature": 1.0,
|
|
69
|
+
"temperature": 1,
|
|
67
70
|
"mode": "subagent"
|
|
68
71
|
},
|
|
69
72
|
"backend-engineer": {
|
|
70
73
|
"description": "Expert in REST/GraphQL APIs, microservices, authentication, server architecture, and backend performance",
|
|
71
|
-
"temperature": 1
|
|
74
|
+
"temperature": 1,
|
|
72
75
|
"mode": "subagent"
|
|
73
76
|
},
|
|
74
77
|
"frontend-engineer": {
|
|
75
78
|
"description": "Expert in React, Vue, Angular, responsive design, and frontend performance",
|
|
76
|
-
"temperature": 1
|
|
79
|
+
"temperature": 1,
|
|
77
80
|
"mode": "subagent"
|
|
78
81
|
},
|
|
79
82
|
"frontend-ui-ux-engineer": {
|
|
80
83
|
"description": "Expert in visual design, CSS systems, accessibility, and user experience",
|
|
81
|
-
"temperature": 1
|
|
84
|
+
"temperature": 1,
|
|
82
85
|
"mode": "subagent"
|
|
83
86
|
},
|
|
84
87
|
"database-engineer": {
|
|
85
88
|
"description": "Expert in SQL/NoSQL databases, query optimization, data modeling, and database performance",
|
|
86
|
-
"temperature": 1
|
|
89
|
+
"temperature": 1,
|
|
87
90
|
"mode": "subagent"
|
|
88
91
|
},
|
|
89
92
|
"devops-engineer": {
|
|
90
93
|
"description": "Expert in CI/CD pipelines, infrastructure as code, containerization, and deployment automation",
|
|
91
|
-
"temperature": 1
|
|
94
|
+
"temperature": 1,
|
|
92
95
|
"mode": "subagent"
|
|
93
96
|
},
|
|
94
97
|
"mobile-developer": {
|
|
95
98
|
"description": "Expert in iOS, Android, React Native, and Flutter development",
|
|
96
|
-
"temperature": 1
|
|
99
|
+
"temperature": 1,
|
|
97
100
|
"mode": "subagent"
|
|
98
101
|
},
|
|
99
102
|
"performance-engineer": {
|
|
100
103
|
"description": "Expert in profiling, benchmarking, load testing, and optimization",
|
|
101
|
-
"temperature": 1
|
|
104
|
+
"temperature": 1,
|
|
102
105
|
"mode": "subagent"
|
|
103
106
|
},
|
|
104
107
|
"content-creator": {
|
|
105
108
|
"description": "Expert in creating marketing copy, technical documentation, blog posts, and social media content",
|
|
106
|
-
"temperature": 1
|
|
109
|
+
"temperature": 1,
|
|
107
110
|
"mode": "subagent"
|
|
108
111
|
},
|
|
109
112
|
"growth-strategist": {
|
|
110
113
|
"description": "Expert in growth hacking, user acquisition, conversion optimization, and analytics",
|
|
111
|
-
"temperature": 1
|
|
114
|
+
"temperature": 1,
|
|
112
115
|
"mode": "subagent"
|
|
113
116
|
},
|
|
114
117
|
"seo-consultant": {
|
|
115
118
|
"description": "Expert in search engine optimization, keyword research, and organic traffic growth",
|
|
116
|
-
"temperature": 1
|
|
119
|
+
"temperature": 1,
|
|
117
120
|
"mode": "subagent"
|
|
118
121
|
},
|
|
119
122
|
"tech-writer": {
|
|
120
123
|
"description": "Expert in API documentation, README files, guides, and developer experience",
|
|
121
|
-
"temperature": 1
|
|
124
|
+
"temperature": 1,
|
|
122
125
|
"mode": "subagent"
|
|
123
126
|
},
|
|
124
127
|
"librarian-agents-updater": {
|
|
125
128
|
"description": "Agent for updating and synchronizing agent definitions",
|
|
126
|
-
"temperature": 1
|
|
129
|
+
"temperature": 1,
|
|
127
130
|
"mode": "subagent"
|
|
128
131
|
},
|
|
129
132
|
"multimodal-looker": {
|
|
130
133
|
"description": "Media file analysis and interpretation specialist for images, diagrams, PDFs, and visual content",
|
|
131
|
-
"temperature": 1
|
|
134
|
+
"temperature": 1,
|
|
132
135
|
"mode": "subagent"
|
|
133
136
|
},
|
|
134
137
|
"code-analyzer": {
|
|
135
138
|
"description": "Code analyzer for metrics",
|
|
136
|
-
"temperature": 1
|
|
139
|
+
"temperature": 1,
|
|
137
140
|
"mode": "subagent"
|
|
138
141
|
},
|
|
139
142
|
"hermes-agent": {
|
|
140
143
|
"description": "Hermes Agent native plugin for 0xRay CLI integration",
|
|
141
|
-
"temperature": 1
|
|
144
|
+
"temperature": 1,
|
|
142
145
|
"mode": "subagent"
|
|
143
146
|
},
|
|
144
147
|
"inference-improve": {
|
|
145
148
|
"description": "Autonomous inference improvement through collaborative agent analysis",
|
|
146
|
-
"temperature": 1
|
|
149
|
+
"temperature": 1,
|
|
147
150
|
"mode": "subagent"
|
|
148
151
|
},
|
|
149
152
|
"session-management": {
|
|
150
153
|
"description": "Manage user sessions and persistent state",
|
|
151
|
-
"temperature": 1
|
|
154
|
+
"temperature": 1,
|
|
152
155
|
"mode": "subagent"
|
|
153
156
|
},
|
|
154
157
|
"storyteller": {
|
|
155
158
|
"description": "Write deep narrative reflections, sagas, journeys, and technical stories",
|
|
156
|
-
"temperature": 1
|
|
159
|
+
"temperature": 1,
|
|
157
160
|
"mode": "subagent"
|
|
158
161
|
},
|
|
159
162
|
"auto-format": {
|
|
160
163
|
"description": "Automated code formatting and style consistency",
|
|
161
|
-
"temperature": 1
|
|
164
|
+
"temperature": 1,
|
|
162
165
|
"mode": "subagent"
|
|
163
166
|
},
|
|
164
167
|
"boot-orchestrator": {
|
|
165
168
|
"description": "Framework initialization and boot orchestration",
|
|
166
|
-
"temperature": 1
|
|
169
|
+
"temperature": 1,
|
|
167
170
|
"mode": "subagent"
|
|
168
171
|
},
|
|
169
172
|
"framework-compliance-audit": {
|
|
170
173
|
"description": "Framework compliance auditing and validation",
|
|
171
|
-
"temperature": 1
|
|
174
|
+
"temperature": 1,
|
|
172
175
|
"mode": "subagent"
|
|
173
176
|
},
|
|
174
177
|
"lint": {
|
|
175
178
|
"description": "Code linting and static analysis",
|
|
176
|
-
"temperature": 1
|
|
179
|
+
"temperature": 1,
|
|
177
180
|
"mode": "subagent"
|
|
178
181
|
},
|
|
179
182
|
"performance-analysis": {
|
|
180
183
|
"description": "System performance analysis and optimization",
|
|
181
|
-
"temperature": 1
|
|
184
|
+
"temperature": 1,
|
|
182
185
|
"mode": "subagent"
|
|
183
186
|
},
|
|
184
187
|
"security-scan": {
|
|
185
188
|
"description": "Security vulnerability scanning and assessment",
|
|
186
|
-
"temperature": 1
|
|
189
|
+
"temperature": 1,
|
|
187
190
|
"mode": "subagent"
|
|
188
191
|
},
|
|
189
192
|
"state-manager": {
|
|
190
193
|
"description": "Application state management and persistence",
|
|
191
|
-
"temperature": 1
|
|
194
|
+
"temperature": 1,
|
|
192
195
|
"mode": "subagent"
|
|
193
196
|
},
|
|
194
197
|
"processor-pipeline": {
|
|
195
198
|
"description": "Data processing pipeline management",
|
|
196
|
-
"temperature": 1
|
|
199
|
+
"temperature": 1,
|
|
197
200
|
"mode": "subagent"
|
|
198
201
|
},
|
|
199
202
|
"model-health-check": {
|
|
200
203
|
"description": "AI model health monitoring and diagnostics",
|
|
201
|
-
"temperature": 1
|
|
204
|
+
"temperature": 1,
|
|
202
205
|
"mode": "subagent"
|
|
203
206
|
},
|
|
204
207
|
"estimation": {
|
|
205
208
|
"description": "Effort estimation and project sizing",
|
|
206
|
-
"temperature": 1
|
|
209
|
+
"temperature": 1,
|
|
207
210
|
"mode": "subagent"
|
|
208
211
|
},
|
|
209
212
|
"api-design": {
|
|
210
213
|
"description": "RESTful API design and validation",
|
|
211
|
-
"temperature": 1
|
|
214
|
+
"temperature": 1,
|
|
212
215
|
"mode": "subagent"
|
|
213
216
|
},
|
|
214
217
|
"architecture-patterns": {
|
|
215
218
|
"description": "Software architecture patterns and best practices",
|
|
216
|
-
"temperature": 1
|
|
219
|
+
"temperature": 1,
|
|
217
220
|
"mode": "subagent"
|
|
218
221
|
},
|
|
219
222
|
"git-workflow": {
|
|
220
223
|
"description": "Git workflow management and collaboration tools",
|
|
221
|
-
"temperature": 1
|
|
224
|
+
"temperature": 1,
|
|
222
225
|
"mode": "subagent"
|
|
223
226
|
},
|
|
224
227
|
"performance-optimization": {
|
|
225
228
|
"description": "Application performance optimization and tuning",
|
|
226
|
-
"temperature": 1
|
|
229
|
+
"temperature": 1,
|
|
227
230
|
"mode": "subagent"
|
|
228
231
|
},
|
|
229
232
|
"project-analysis": {
|
|
230
233
|
"description": "Analyze project structure, complexity, and health metrics",
|
|
231
|
-
"temperature": 1
|
|
234
|
+
"temperature": 1,
|
|
232
235
|
"mode": "subagent"
|
|
233
236
|
},
|
|
234
237
|
"ui-ux-design": {
|
|
235
238
|
"description": "User interface and user experience design with mobile-first approach, cognitive simplicity, and accessibility-first principles",
|
|
236
|
-
"temperature": 1
|
|
239
|
+
"temperature": 1,
|
|
237
240
|
"mode": "subagent"
|
|
238
241
|
},
|
|
239
|
-
"sisyphus": {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
"
|
|
242
|
+
"sisyphus": {
|
|
243
|
+
"description": "Sisyphus task agent",
|
|
244
|
+
"disable": true
|
|
245
|
+
},
|
|
246
|
+
"Planner-Sisyphus": {
|
|
247
|
+
"description": "Planner Sisyphus",
|
|
248
|
+
"disable": true
|
|
249
|
+
},
|
|
250
|
+
"OpenCode-Builder": {
|
|
251
|
+
"description": "OpenCode Builder",
|
|
252
|
+
"disable": true
|
|
253
|
+
},
|
|
254
|
+
"build": {
|
|
255
|
+
"description": "Build agent",
|
|
256
|
+
"disable": true
|
|
257
|
+
},
|
|
258
|
+
"plan": {
|
|
259
|
+
"description": "Plan agent",
|
|
260
|
+
"disable": true
|
|
261
|
+
}
|
|
244
262
|
}
|
|
245
|
-
}
|
|
263
|
+
}
|
package/package.json
CHANGED
|
@@ -49,12 +49,11 @@ const MERGE_FILES = [
|
|
|
49
49
|
// Special handling for root-level opencode.json
|
|
50
50
|
const ROOT_OPENCODE_JSON = path.join(packageRoot, 'opencode.json');
|
|
51
51
|
|
|
52
|
-
// Detect if Hermes Agent is present
|
|
53
|
-
// Hermes consumers don't need .opencode/ - they use .strray/ natively
|
|
54
|
-
//
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
fs.lstatSync(path.join(consumerHomeDir, '.hermes')).isDirectory();
|
|
52
|
+
// Detect if Hermes Agent is present in the TARGET directory
|
|
53
|
+
// Hermes consumers don't need .opencode/ - they use .strray/ natively
|
|
54
|
+
// NOTE: We check targetDir NOT HOME (HOME might have .hermes globally)
|
|
55
|
+
const hasHermes = fs.existsSync(path.join(targetDir, '.hermes')) &&
|
|
56
|
+
fs.lstatSync(path.join(targetDir, '.hermes')).isDirectory();
|
|
58
57
|
|
|
59
58
|
if (hasHermes) {
|
|
60
59
|
console.log('🔍 Hermes Agent present — using .strray/ (skipping .opencode/ setup)');
|