@questionbase/deskfree 0.3.0-alpha.21 → 0.3.0-alpha.23
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/README.md +36 -16
- package/dist/index.d.ts +107 -38
- package/dist/index.js +646 -597
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/skills/deskfree/SKILL.md +276 -396
- package/skills/deskfree/references/tools.md +43 -40
package/skills/deskfree/SKILL.md
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
name: deskfree
|
|
3
3
|
description: >
|
|
4
4
|
DeskFree task management and human-AI collaboration workflows.
|
|
5
|
-
Use when: creating tasks, managing work items, updating
|
|
5
|
+
Use when: creating tasks, managing work items, updating files,
|
|
6
6
|
communicating with humans through DeskFree, checking workspace state,
|
|
7
7
|
handling task lifecycle (start → work → complete → review),
|
|
8
8
|
evaluating completed tasks, updating ways of working, managing initiatives.
|
|
9
9
|
Do NOT use for: general project management advice without DeskFree tools,
|
|
10
10
|
OpenClaw configuration or gateway setup, non-DeskFree platforms (Jira, Asana, etc.),
|
|
11
11
|
direct file/code operations (use standard tools for those, create DeskFree tasks for tracking).
|
|
12
|
-
version:
|
|
12
|
+
version: 9.0.0
|
|
13
13
|
metadata: { 'openclaw': { 'emoji': '🏠' } }
|
|
14
14
|
---
|
|
15
15
|
|
|
@@ -21,11 +21,11 @@ metadata: { 'openclaw': { 'emoji': '🏠' } }
|
|
|
21
21
|
|
|
22
22
|
```
|
|
23
23
|
🎯 Initiative lifecycle
|
|
24
|
-
|
|
25
|
-
+
|
|
26
|
-
|
|
24
|
+
deskfree_propose ───────────────────────────────────────────────────────────────┐
|
|
25
|
+
+ initiative → [human approves initiative in modal] → active │
|
|
26
|
+
[human rejects] → nothing created │
|
|
27
27
|
│
|
|
28
|
-
|
|
28
|
+
deskfree_propose → [human approves in modal] → bot → [start_task] → bot (is_working)
|
|
29
29
|
↑ │ │
|
|
30
30
|
| human approves/declines │ │
|
|
31
31
|
└──────────────────────────────────────────┘ │
|
|
@@ -42,56 +42,217 @@ suggest_tasks → [human approves] → bot → [start_task] → bot (is_working)
|
|
|
42
42
|
+ initiative updated (if task has initiative_id)
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
-
|
|
45
|
+
- Proposals live as metadata on a single message — **NO database rows until human approves**
|
|
46
|
+
- Human reviews everything in one modal: can edit titles, instructions, toggle substeps
|
|
47
|
+
- `complete_task` outcome `done` = work complete (summary required)
|
|
46
48
|
- `complete_task` outcome `blocked` = need human input (send message FIRST explaining why)
|
|
47
49
|
- Both outcomes move to `human` — the human triages from there
|
|
48
|
-
- When human approves (`done`), a pending evaluation is created for ways-of-working update
|
|
49
50
|
|
|
50
51
|
### The Work Loop
|
|
51
52
|
|
|
52
53
|
```
|
|
53
|
-
1. Check state → deskfree_state — see tasks, active initiatives, pending evaluations
|
|
54
|
-
2.
|
|
55
|
-
3. Claim a task → deskfree_start_task — read instructions + parent context
|
|
56
|
-
4. Do the work →
|
|
57
|
-
5.
|
|
58
|
-
6. Complete →
|
|
54
|
+
1. Check state → deskfree_state — see tasks, active initiatives, files, pending evaluations
|
|
55
|
+
2. Propose plan → deskfree_propose — propose work for human approval (one initiative per call)
|
|
56
|
+
3. Claim a task → deskfree_start_task — read instructions + parent context + fileContext
|
|
57
|
+
4. Do the work → deskfree_update_file — build linked file incrementally
|
|
58
|
+
5. Propose follow-ups → if work reveals more to do, propose them via deskfree_propose
|
|
59
|
+
6. Complete → deskfree_complete_task — summary required for "done"
|
|
59
60
|
7. Evaluate → if approved tasks have pending WoW evaluation (update globalWoW + initiative)
|
|
60
61
|
```
|
|
61
62
|
|
|
62
63
|
### Three Rules That Break Everything If Ignored
|
|
63
64
|
|
|
64
|
-
1. **Always
|
|
65
|
-
2. **Always check state first.** Call `deskfree_state` before
|
|
66
|
-
3. **Always complete tasks.** Never leave a task in `bot` (is_working=true). End with `
|
|
65
|
+
1. **Always propose first.** Use `deskfree_propose` before starting ANY work. Nothing is created until human approves. No exceptions.
|
|
66
|
+
2. **Always check state first.** Call `deskfree_state` before proposing. Prevents duplicates, shows active initiatives and files.
|
|
67
|
+
3. **Always complete tasks.** Never leave a task in `bot` (is_working=true). End with `deskfree_complete_task` — outcome `done` or `blocked`.
|
|
67
68
|
|
|
68
|
-
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Proposing Plans with `deskfree_propose`
|
|
72
|
+
|
|
73
|
+
**This tool replaces the old `deskfree_suggest_tasks`.** Plans are stored as proposals in message metadata — no tasks, files, or initiatives are created until the human explicitly approves them in a review modal.
|
|
74
|
+
|
|
75
|
+
### When to Propose vs Just Doing Work
|
|
76
|
+
|
|
77
|
+
- **Always propose first.** Even quick fixes need a proposal. The human approves what gets created.
|
|
78
|
+
- **Exception:** If you're already working on an approved task, you can create files directly with `deskfree_create_file` during that task.
|
|
79
|
+
|
|
80
|
+
### One Initiative Per Proposal
|
|
81
|
+
|
|
82
|
+
Each `deskfree_propose` call handles **one initiative** (existing or new) or no initiative at all. If you need to propose tasks under multiple initiatives, make separate calls.
|
|
83
|
+
|
|
84
|
+
### How Substeps Work
|
|
85
|
+
|
|
86
|
+
Substeps are **human-reviewable checklist items** within a task. The human can toggle each one on/off before approving:
|
|
87
|
+
|
|
88
|
+
```javascript
|
|
89
|
+
deskfree_propose({
|
|
90
|
+
tasks: [{
|
|
91
|
+
title: "Audit auth endpoints",
|
|
92
|
+
instructions: "Review all authentication endpoints for security issues...",
|
|
93
|
+
substeps: [
|
|
94
|
+
"Review session management",
|
|
95
|
+
"Check CSRF protection",
|
|
96
|
+
"Verify rate limiting",
|
|
97
|
+
"Test token expiration handling"
|
|
98
|
+
]
|
|
99
|
+
}]
|
|
100
|
+
})
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
In the review modal, the human sees:
|
|
104
|
+
```
|
|
105
|
+
☑ Task: Audit auth endpoints
|
|
106
|
+
☑ Review session management
|
|
107
|
+
☑ Check CSRF protection
|
|
108
|
+
☐ Verify rate limiting ← human unchecked this
|
|
109
|
+
☑ Test token expiration handling
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Only checked substeps become part of the approved task.
|
|
113
|
+
|
|
114
|
+
### File Linking (Existing vs New)
|
|
115
|
+
|
|
116
|
+
```javascript
|
|
117
|
+
// Link an existing file — bot receives its content when claiming the task
|
|
118
|
+
deskfree_propose({
|
|
119
|
+
tasks: [{
|
|
120
|
+
title: "Update API docs",
|
|
121
|
+
instructions: "...",
|
|
122
|
+
file: { existingId: "FILE_abc123" }
|
|
123
|
+
}]
|
|
124
|
+
})
|
|
125
|
+
|
|
126
|
+
// Create a new file on approval — for tasks that produce documents
|
|
127
|
+
deskfree_propose({
|
|
128
|
+
tasks: [{
|
|
129
|
+
title: "Write deployment runbook",
|
|
130
|
+
instructions: "...",
|
|
131
|
+
file: { name: "Deployment Runbook", description: "Step-by-step deployment guide" }
|
|
132
|
+
}]
|
|
133
|
+
})
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
New files are created atomically when the human approves — no orphaned files if rejected.
|
|
137
|
+
|
|
138
|
+
### Examples of Good Proposals
|
|
139
|
+
|
|
140
|
+
**Research with file output:**
|
|
141
|
+
```javascript
|
|
142
|
+
deskfree_propose({
|
|
143
|
+
initiative: { title: "Competitor Analysis", content: "# Competitor Analysis\n\nSystematic review of key competitors..." },
|
|
144
|
+
context: "User asked for competitive landscape overview — proposing structured analysis.",
|
|
145
|
+
tasks: [
|
|
146
|
+
{
|
|
147
|
+
title: "Analyze HumanLayer positioning",
|
|
148
|
+
instructions: "Research HumanLayer's product, pricing, and market position vs DeskFree...",
|
|
149
|
+
substeps: ["Review public docs and pricing", "Analyze feature comparison", "Draft positioning summary"],
|
|
150
|
+
file: { name: "HumanLayer Analysis", description: "Competitive analysis report" },
|
|
151
|
+
estimatedTokens: 20000
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
title: "Analyze CrewAI positioning",
|
|
155
|
+
instructions: "Research CrewAI's product and market position...",
|
|
156
|
+
substeps: ["Review public docs", "Analyze use cases", "Compare approach"],
|
|
157
|
+
file: { name: "CrewAI Analysis", description: "Competitive analysis report" },
|
|
158
|
+
estimatedTokens: 15000
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
})
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**Quick fix under existing initiative:**
|
|
165
|
+
```javascript
|
|
166
|
+
deskfree_propose({
|
|
167
|
+
initiative: "INI_abc123", // existing initiative ID
|
|
168
|
+
context: "Found during audit — session fixation vulnerability in /auth/login",
|
|
169
|
+
tasks: [{
|
|
170
|
+
title: "Fix session fixation in auth endpoint",
|
|
171
|
+
instructions: "Regenerate session ID after successful authentication...",
|
|
172
|
+
substeps: ["Add session regeneration", "Add regression test", "Verify in staging"],
|
|
173
|
+
estimatedTokens: 10000
|
|
174
|
+
}]
|
|
175
|
+
})
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
**Scheduled/recurring work:**
|
|
179
|
+
```javascript
|
|
180
|
+
deskfree_propose({
|
|
181
|
+
context: "Setting up weekly metrics report",
|
|
182
|
+
tasks: [{
|
|
183
|
+
title: "Weekly metrics report",
|
|
184
|
+
instructions: "Generate weekly performance metrics. This recurs weekly on Mondays. When completing, propose the next occurrence.",
|
|
185
|
+
substeps: ["Pull metrics from dashboard", "Generate summary", "Flag anomalies"],
|
|
186
|
+
file: { name: "Weekly Metrics", description: "Recurring weekly metrics report" },
|
|
187
|
+
scheduledFor: "2026-03-02T14:00:00Z"
|
|
188
|
+
}]
|
|
189
|
+
})
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Writing Great Instructions
|
|
69
195
|
|
|
70
196
|
Write instructions as if briefing a contractor who has never seen the codebase. Include:
|
|
71
197
|
- **What to do** — specific, actionable steps
|
|
72
|
-
- **Why** — referencing parent findings or
|
|
198
|
+
- **Why** — referencing parent findings or file content when applicable
|
|
73
199
|
- **What "done" looks like** — clear acceptance criteria
|
|
74
200
|
- **Known constraints** — gotchas, dependencies, things to avoid
|
|
75
201
|
|
|
76
|
-
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
## Working with Files
|
|
205
|
+
|
|
206
|
+
Files are persistent documents owned by a bot that live across tasks.
|
|
77
207
|
|
|
78
|
-
|
|
208
|
+
```
|
|
209
|
+
deskfree_state() → shows files: [{fileId, name, description, version, updatedAt}, ...]
|
|
79
210
|
|
|
80
|
-
|
|
211
|
+
deskfree_start_task(taskId) → if task.fileId, returns fileContext: {
|
|
212
|
+
fileId, name, description, content, contentFormat, version
|
|
213
|
+
}
|
|
214
|
+
```
|
|
81
215
|
|
|
82
|
-
|
|
216
|
+
### Creating Files
|
|
83
217
|
|
|
84
|
-
|
|
218
|
+
```javascript
|
|
219
|
+
// Option 1: Pre-create when proposing a task (created on approval)
|
|
220
|
+
deskfree_propose({
|
|
221
|
+
tasks: [{
|
|
222
|
+
title: "Write API documentation",
|
|
223
|
+
instructions: "...",
|
|
224
|
+
file: { name: "API Reference", description: "Full API reference documentation" }
|
|
225
|
+
}]
|
|
226
|
+
})
|
|
85
227
|
|
|
86
|
-
|
|
228
|
+
// Option 2: Create a file directly during work
|
|
229
|
+
deskfree_create_file({
|
|
230
|
+
name: "Deployment Runbook",
|
|
231
|
+
description: "Step-by-step deployment guide",
|
|
232
|
+
content: "# Deployment Runbook\n\n...",
|
|
233
|
+
contentFormat: "markdown"
|
|
234
|
+
})
|
|
235
|
+
```
|
|
87
236
|
|
|
88
|
-
|
|
237
|
+
### Updating Files
|
|
89
238
|
|
|
90
|
-
|
|
239
|
+
```javascript
|
|
240
|
+
// Always send the full current content — each call replaces the previous version
|
|
241
|
+
deskfree_update_file({
|
|
242
|
+
fileId: "F_abc123",
|
|
243
|
+
content: "# Full document...",
|
|
244
|
+
contentFormat: "markdown" // or "html"
|
|
245
|
+
})
|
|
246
|
+
```
|
|
91
247
|
|
|
92
|
-
|
|
248
|
+
**Build incrementally** — update the file early and often. A half-complete file is infinitely better than none if you're interrupted.
|
|
93
249
|
|
|
94
|
-
|
|
250
|
+
### File Format Choice
|
|
251
|
+
|
|
252
|
+
| Format | Use when |
|
|
253
|
+
|---|---|
|
|
254
|
+
| `markdown` (default) | Text reports, specs, documentation, analysis, code snippets |
|
|
255
|
+
| `html` | Rich web content: dashboards, styled reports, interactive tables |
|
|
95
256
|
|
|
96
257
|
---
|
|
97
258
|
|
|
@@ -99,62 +260,37 @@ The task sidebar is your human's window into your work — every message appears
|
|
|
99
260
|
|
|
100
261
|
Initiatives answer **"what are we working on and why"** while Ways of Working answers **"how do we work."**
|
|
101
262
|
|
|
102
|
-
| Concept | What it is |
|
|
103
|
-
|---|---|
|
|
104
|
-
| **Initiative** | A persistent area of focus (e.g. "Auth Hardening", "Performance Sprint") |
|
|
105
|
-
| **Initiative Content** | A versioned markdown doc — current state, approach, next priorities |
|
|
106
|
-
| **Task → Initiative link** | Set `initiativeId` on suggestions to link tasks to an initiative |
|
|
107
|
-
|
|
108
263
|
### When to Propose a New Initiative
|
|
109
264
|
|
|
110
265
|
```
|
|
111
|
-
On every
|
|
266
|
+
On every deskfree_propose call, ask yourself:
|
|
112
267
|
|
|
113
268
|
"Does an active initiative exist that this work belongs to?"
|
|
114
|
-
→ Yes:
|
|
115
|
-
→ No, but this is part of a bigger theme:
|
|
116
|
-
→ No, and it's a one-off task:
|
|
269
|
+
→ Yes: pass the initiative ID as a string
|
|
270
|
+
→ No, but this is part of a bigger theme: pass { title, content } to create new
|
|
271
|
+
→ No, and it's a one-off task: omit initiative (defaults to General)
|
|
117
272
|
```
|
|
118
273
|
|
|
119
|
-
###
|
|
274
|
+
### Examples
|
|
120
275
|
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
{ title: "Add rate limiting", estimatedTokens: 15000 }
|
|
128
|
-
],
|
|
129
|
-
initiativeSuggestions: [
|
|
130
|
-
{
|
|
131
|
-
title: "Auth Hardening",
|
|
132
|
-
content: "# Auth Hardening\n\n## Current State\nNeed to improve auth security.\n\n## Approach\nTBD — start with audit.\n\n## Next Priorities\n1. Audit all auth endpoints\n2. Address findings",
|
|
133
|
-
taskRefs: [0, 1] // auto-links tasks at index 0 and 1 when approved
|
|
134
|
-
}
|
|
135
|
-
]
|
|
136
|
-
})
|
|
137
|
-
|
|
138
|
-
Human sees:
|
|
139
|
-
🎯 New Initiative: "Auth Hardening" [Approve] [Reject]
|
|
140
|
-
📋 Task: "Audit auth endpoints..." [Approve] [Reject]
|
|
141
|
-
📋 Task: "Add rate limiting..." [Approve] [Reject]
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
### Linking Tasks to Existing Initiatives
|
|
276
|
+
```javascript
|
|
277
|
+
// Link to existing initiative
|
|
278
|
+
deskfree_propose({
|
|
279
|
+
initiative: "INI_abc123",
|
|
280
|
+
tasks: [{ title: "Implement CSRF protection", instructions: "..." }]
|
|
281
|
+
})
|
|
145
282
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
}
|
|
283
|
+
// Create new initiative with tasks
|
|
284
|
+
deskfree_propose({
|
|
285
|
+
initiative: {
|
|
286
|
+
title: "Auth Hardening",
|
|
287
|
+
content: "# Auth Hardening\n\n## Current State\nNeed to improve auth security.\n\n## Next Priorities\n1. Audit all endpoints\n2. Address findings"
|
|
288
|
+
},
|
|
289
|
+
context: "Starting security improvement initiative based on recent audit findings.",
|
|
290
|
+
tasks: [
|
|
291
|
+
{ title: "Audit auth endpoints", instructions: "...", estimatedTokens: 20000 },
|
|
292
|
+
{ title: "Add rate limiting", instructions: "...", estimatedTokens: 15000 }
|
|
156
293
|
]
|
|
157
|
-
// no initiativeSuggestions needed — initiative already exists
|
|
158
294
|
})
|
|
159
295
|
```
|
|
160
296
|
|
|
@@ -162,81 +298,25 @@ deskfree_suggest_tasks({
|
|
|
162
298
|
|
|
163
299
|
## Ways of Working — The Evolving Playbook
|
|
164
300
|
|
|
165
|
-
Ways of Working is a **single versioned markdown document** per bot that evolves as you complete tasks.
|
|
166
|
-
|
|
167
|
-
**Key properties:**
|
|
168
|
-
- Injected automatically via `deskfree_state` (the `waysOfWorking` field)
|
|
169
|
-
- Read it before starting work to understand established patterns
|
|
170
|
-
- Updated after task approval via the evaluation flow (never manually during work)
|
|
171
|
-
- Each update creates a new immutable version — full history preserved
|
|
301
|
+
Ways of Working is a **single versioned markdown document** per bot that evolves as you complete tasks.
|
|
172
302
|
|
|
173
303
|
### Evaluation Flow — Dual Output
|
|
174
304
|
|
|
175
|
-
When a human approves a task, it enters `pendingEvaluations
|
|
305
|
+
When a human approves a task, it enters `pendingEvaluations`. Evaluation has **two independent outputs**:
|
|
176
306
|
|
|
177
307
|
```
|
|
178
308
|
1. deskfree_claim_evaluation(taskId)
|
|
179
309
|
→ returns: task + messages + waysOfWorking + initiative (if task has initiative_id)
|
|
180
310
|
|
|
181
|
-
2.
|
|
311
|
+
2. Review the task summary, messages, and any file output
|
|
182
312
|
|
|
183
313
|
3. Ask yourself:
|
|
184
314
|
"Did I learn something about HOW we work that applies everywhere?"
|
|
185
315
|
→ Yes: update globalWoW
|
|
186
|
-
|
|
187
|
-
"Did I learn something about WHERE this initiative stands or
|
|
188
|
-
HOW to approach this specific area?"
|
|
316
|
+
"Did I learn something about WHERE this initiative stands?"
|
|
189
317
|
→ Yes: update initiative content
|
|
190
318
|
|
|
191
|
-
|
|
192
|
-
Neither? → hasChanges: false for both
|
|
193
|
-
|
|
194
|
-
4. deskfree_submit_evaluation({
|
|
195
|
-
taskId,
|
|
196
|
-
reasoning: "...",
|
|
197
|
-
globalWoW: { hasChanges: true, updatedContent: "..." },
|
|
198
|
-
initiative: { hasChanges: false }
|
|
199
|
-
})
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
**globalWoW** — patterns that apply to all work everywhere. Examples:
|
|
203
|
-
- A better approach to error handling you discovered
|
|
204
|
-
- A recurring mistake to avoid
|
|
205
|
-
- A tool or service pattern that's universally useful
|
|
206
|
-
|
|
207
|
-
**initiative content** — what was learned about this specific area of focus. Examples:
|
|
208
|
-
- Current state of the initiative has changed (task completed a major piece)
|
|
209
|
-
- New findings shifted the approach
|
|
210
|
-
- Next priorities should be reordered
|
|
211
|
-
|
|
212
|
-
**When NOT to update either:** One-off tasks with no transferable learnings, standard work that matched existing patterns.
|
|
213
|
-
|
|
214
|
-
### Example Evaluation
|
|
215
|
-
|
|
216
|
-
```
|
|
217
|
-
Task "Audit auth endpoints" (linked to "Auth Hardening" initiative) is approved.
|
|
218
|
-
|
|
219
|
-
claim_evaluation → returns:
|
|
220
|
-
task (with deliverable showing 3 critical issues found)
|
|
221
|
-
waysOfWorking: "..."
|
|
222
|
-
initiative: { id: "init_abc", title: "Auth Hardening", content: "No audit done yet." }
|
|
223
|
-
|
|
224
|
-
Analysis:
|
|
225
|
-
- Gateway has built-in rate limiting (just needs config) → applies everywhere → update globalWoW
|
|
226
|
-
- Audit found 3 critical issues → initiative content needs update → update initiative
|
|
227
|
-
|
|
228
|
-
submit_evaluation({
|
|
229
|
-
taskId: "audit-task",
|
|
230
|
-
reasoning: "Audit found 3 issues. Gateway has rate limiting built in — updated both.",
|
|
231
|
-
globalWoW: {
|
|
232
|
-
hasChanges: true,
|
|
233
|
-
updatedContent: "...## Infrastructure\n- Always check AWS API Gateway config before building custom middleware\n..."
|
|
234
|
-
},
|
|
235
|
-
initiative: {
|
|
236
|
-
hasChanges: true,
|
|
237
|
-
updatedContent: "# Auth Hardening\n\n## Current State\nAudit complete. Found 3 critical issues:\n1. Session fixation\n2. No rate limiting (gateway supports it — just needs config)\n3. Weak CSRF\n\n## Next Priorities\n1. Configure gateway rate limiting (quick win)\n2. Fix session fixation\n3. Implement CSRF tokens"
|
|
238
|
-
}
|
|
239
|
-
})
|
|
319
|
+
4. deskfree_submit_evaluation({ taskId, reasoning, globalWoW, initiative })
|
|
240
320
|
```
|
|
241
321
|
|
|
242
322
|
---
|
|
@@ -245,29 +325,29 @@ submit_evaluation({
|
|
|
245
325
|
|
|
246
326
|
### Pre-Flight (before ANY work)
|
|
247
327
|
|
|
248
|
-
- [ ] Called `deskfree_state` — confirmed it returned data
|
|
328
|
+
- [ ] Called `deskfree_state` — confirmed it returned data
|
|
249
329
|
- [ ] Read `waysOfWorking` if present — apply established patterns
|
|
250
|
-
- [ ] Read `initiatives` if present — check for active initiatives
|
|
330
|
+
- [ ] Read `initiatives` if present — check for active initiatives
|
|
331
|
+
- [ ] Checked `files` list — know what persistent files already exist
|
|
251
332
|
- [ ] Checked for existing tasks that match intent — no duplicates
|
|
252
|
-
- [ ]
|
|
333
|
+
- [ ] Proposed via `deskfree_propose` — with initiative, substeps, file links as appropriate
|
|
253
334
|
- [ ] Once approved: called `deskfree_start_task` — confirmed task moved to `bot` (is_working=true)
|
|
335
|
+
- [ ] If task has `fileContext` — read the existing file content before starting work
|
|
254
336
|
|
|
255
337
|
### Mid-Work
|
|
256
338
|
|
|
257
|
-
- [ ]
|
|
258
|
-
- [ ] `deskfree_update_deliverable` succeeded (no error response)
|
|
339
|
+
- [ ] File updated immediately after starting task (not waiting until end)
|
|
259
340
|
- [ ] If blocked: sent message explaining WHY before calling `complete_task` with `blocked`
|
|
260
341
|
|
|
261
342
|
### Pre-Completion
|
|
262
343
|
|
|
263
|
-
- [ ]
|
|
264
|
-
- [ ]
|
|
265
|
-
- [ ] Called `deskfree_complete_task` — confirmed task moved to `human`
|
|
344
|
+
- [ ] File content is non-empty and meaningful (if task produces a file)
|
|
345
|
+
- [ ] Called `deskfree_complete_task` with a clear `summary`
|
|
266
346
|
- [ ] If sub-agent: terminated after completion (one task per sub-agent)
|
|
267
347
|
|
|
268
348
|
### Heartbeat Evaluation Check
|
|
269
349
|
|
|
270
|
-
- [ ] Any `pendingEvaluations` in state? → claim and evaluate each one
|
|
350
|
+
- [ ] Any `pendingEvaluations` in state? → claim and evaluate each one
|
|
271
351
|
|
|
272
352
|
---
|
|
273
353
|
|
|
@@ -276,137 +356,82 @@ submit_evaluation({
|
|
|
276
356
|
### Orchestrator Flow (main session)
|
|
277
357
|
|
|
278
358
|
```
|
|
279
|
-
1. deskfree_state → assess workspace
|
|
280
|
-
2.
|
|
281
|
-
3. deskfree_start_task → claim approved task
|
|
282
|
-
4.
|
|
283
|
-
5.
|
|
359
|
+
1. deskfree_state → assess workspace
|
|
360
|
+
2. deskfree_propose → propose plan (one initiative per call)
|
|
361
|
+
3. deskfree_start_task → claim approved task
|
|
362
|
+
4. deskfree_update_file → build linked file incrementally
|
|
363
|
+
5. deskfree_propose → propose follow-ups if needed
|
|
364
|
+
6. deskfree_complete_task → complete with outcome done or blocked
|
|
284
365
|
```
|
|
285
366
|
|
|
286
|
-
### Sub-Agent Flow
|
|
367
|
+
### Sub-Agent Flow
|
|
287
368
|
|
|
288
369
|
```
|
|
289
|
-
Orchestrator:
|
|
290
|
-
Sub-agent:
|
|
370
|
+
Orchestrator: deskfree_propose → (human approves) → deskfree_start_task → spawn sub-agent
|
|
371
|
+
Sub-agent: deskfree_update_file → deskfree_propose (follow-ups) → deskfree_complete_task → terminate
|
|
291
372
|
```
|
|
292
373
|
|
|
293
|
-
Sub-agents have **
|
|
374
|
+
Sub-agents have **7 tools:** `deskfree_update_file`, `deskfree_create_file`, `deskfree_complete_task`, `deskfree_send_message`, `deskfree_propose`, `deskfree_claim_evaluation`, `deskfree_submit_evaluation`.
|
|
294
375
|
|
|
295
|
-
|
|
376
|
+
---
|
|
296
377
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
| Interactive/back-and-forth | Code development, debugging |
|
|
301
|
-
| Urgent fixes | Long operations (> 10 min) |
|
|
302
|
-
| | Background work while human may message |
|
|
378
|
+
## Recurrence — Natural Language + scheduledFor
|
|
379
|
+
|
|
380
|
+
Recurrence is handled through task instructions + `scheduledFor`. Document the pattern in instructions, set the first occurrence, propagate on completion by proposing the next occurrence.
|
|
303
381
|
|
|
304
382
|
---
|
|
305
383
|
|
|
306
384
|
## Messaging
|
|
307
385
|
|
|
308
|
-
**Normal replies:** Just respond — the channel handles routing automatically.
|
|
386
|
+
**Normal replies:** Just respond — the channel handles routing automatically.
|
|
309
387
|
|
|
310
388
|
**Use `deskfree_send_message` only for:**
|
|
311
389
|
- Progress updates during task execution
|
|
312
390
|
- Questions needing human input mid-task
|
|
313
391
|
- Status reports for long-running tasks
|
|
314
392
|
|
|
315
|
-
**Never use it for:** Normal conversation replies (channel handles those).
|
|
316
|
-
|
|
317
393
|
---
|
|
318
394
|
|
|
319
395
|
## Decision Tree
|
|
320
396
|
|
|
321
397
|
### Heartbeat / Proactive Check
|
|
322
398
|
|
|
323
|
-
1. `deskfree_state` → get workspace snapshot
|
|
324
|
-
2. `pendingEvaluations`? →
|
|
399
|
+
1. `deskfree_state` → get workspace snapshot
|
|
400
|
+
2. `pendingEvaluations`? → claim and evaluate
|
|
325
401
|
3. `bot` tasks? → `deskfree_start_task` + spawn sub-agents
|
|
326
402
|
4. `bot` (is_working=true) with no active sub-agent? → Complete as blocked or resume
|
|
327
403
|
|
|
328
404
|
### Human Gives You Work
|
|
329
405
|
|
|
330
|
-
1. `deskfree_state` → check existing tasks +
|
|
331
|
-
2. Does this work belong to an active initiative? →
|
|
332
|
-
OR is this starting a new area
|
|
333
|
-
3. `
|
|
334
|
-
4. [human approves] → `deskfree_start_task` → claim it
|
|
335
|
-
5. Work → `
|
|
336
|
-
6. `deskfree_complete_task` → outcome `done` or `blocked`
|
|
406
|
+
1. `deskfree_state` → check existing tasks + initiatives + files
|
|
407
|
+
2. Does this work belong to an active initiative? → pass its ID
|
|
408
|
+
OR is this starting a new area? → pass { title, content }
|
|
409
|
+
3. `deskfree_propose` → propose with context, substeps, file links
|
|
410
|
+
4. [human approves in modal] → `deskfree_start_task` → claim it
|
|
411
|
+
5. Work → `deskfree_update_file` incrementally
|
|
412
|
+
6. `deskfree_complete_task` → outcome `done` (with summary) or `blocked`
|
|
337
413
|
|
|
338
414
|
---
|
|
339
415
|
|
|
340
416
|
## Tools Reference
|
|
341
417
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
### Orchestrator (10 tools)
|
|
418
|
+
### Orchestrator (9 tools)
|
|
345
419
|
|
|
346
420
|
| Tool | What it does |
|
|
347
421
|
|---|---|
|
|
348
|
-
| `deskfree_state` | Full workspace snapshot — tasks,
|
|
349
|
-
| `
|
|
350
|
-
| `deskfree_start_task` | Claim task → `bot` (is_working=true), returns full context +
|
|
351
|
-
| `
|
|
352
|
-
| `
|
|
353
|
-
| `
|
|
422
|
+
| `deskfree_state` | Full workspace snapshot — tasks, done tasks, ways of working, initiatives, files, pending evaluations |
|
|
423
|
+
| `deskfree_propose` | Propose a plan for human approval — one initiative per call, with substeps and file links |
|
|
424
|
+
| `deskfree_start_task` | Claim task → `bot` (is_working=true), returns full context + fileContext |
|
|
425
|
+
| `deskfree_update_file` | Update a linked file's content incrementally |
|
|
426
|
+
| `deskfree_create_file` | Create a new persistent file |
|
|
427
|
+
| `deskfree_complete_task` | Mark done (summary required) or blocked → `human` |
|
|
354
428
|
| `deskfree_send_message` | Message in task thread |
|
|
355
|
-
| `deskfree_claim_evaluation` | Claim a pending evaluation
|
|
356
|
-
| `deskfree_submit_evaluation` | Submit evaluation with
|
|
429
|
+
| `deskfree_claim_evaluation` | Claim a pending evaluation |
|
|
430
|
+
| `deskfree_submit_evaluation` | Submit evaluation with globalWoW + initiative outputs |
|
|
357
431
|
|
|
358
|
-
### Worker (
|
|
432
|
+
### Worker (7 tools — sub-agents only)
|
|
359
433
|
|
|
360
|
-
`
|
|
361
|
-
|
|
362
|
-
---
|
|
363
|
-
|
|
364
|
-
## Deliverable Best Practices
|
|
365
|
-
|
|
366
|
-
### Choosing a format
|
|
367
|
-
|
|
368
|
-
`deskfree_update_deliverable` accepts an optional `format` parameter:
|
|
369
|
-
|
|
370
|
-
| Format | Use when |
|
|
371
|
-
|---|---|
|
|
372
|
-
| `markdown` (default) | Text reports, analysis, documentation, code — anything prose-based |
|
|
373
|
-
| `html` | Rich web content: dashboards, styled reports, interactive tables, data visualizations |
|
|
374
|
-
|
|
375
|
-
HTML deliverables are rendered in a **sandboxed iframe** (no access to parent page). Use `format="html"` when layout and styling matter for the human's review. Use `format="markdown"` for everything else.
|
|
376
|
-
|
|
377
|
-
### Markdown deliverables
|
|
378
|
-
|
|
379
|
-
Structure as **standalone markdown documents:**
|
|
380
|
-
|
|
381
|
-
```markdown
|
|
382
|
-
# Task Title
|
|
383
|
-
|
|
384
|
-
## Summary
|
|
385
|
-
Brief overview of what was accomplished.
|
|
386
|
-
|
|
387
|
-
## Key Findings / Results
|
|
388
|
-
- Main points with supporting detail
|
|
389
|
-
|
|
390
|
-
## Details
|
|
391
|
-
Detailed analysis, implementation notes, etc.
|
|
392
|
-
|
|
393
|
-
## Next Steps (if applicable)
|
|
394
|
-
- Follow-up actions, outstanding questions
|
|
395
|
-
```
|
|
396
|
-
|
|
397
|
-
### HTML deliverables
|
|
398
|
-
|
|
399
|
-
Pass a complete, self-contained HTML document (or fragment — a wrapper `<html>` is injected automatically):
|
|
400
|
-
|
|
401
|
-
```html
|
|
402
|
-
<h1>Report Title</h1>
|
|
403
|
-
<table>
|
|
404
|
-
<tr><th>Metric</th><th>Value</th></tr>
|
|
405
|
-
<tr><td>Users</td><td>1,234</td></tr>
|
|
406
|
-
</table>
|
|
407
|
-
```
|
|
408
|
-
|
|
409
|
-
**Build incrementally** — start with outline immediately after `deskfree_start_task`, fill sections as you go, polish before completing. A half-complete deliverable is infinitely better than none.
|
|
434
|
+
`deskfree_update_file`, `deskfree_create_file`, `deskfree_complete_task`, `deskfree_send_message`, `deskfree_propose`, `deskfree_claim_evaluation`, `deskfree_submit_evaluation`
|
|
410
435
|
|
|
411
436
|
---
|
|
412
437
|
|
|
@@ -416,187 +441,42 @@ Pass a complete, self-contained HTML document (or fragment — a wrapper `<html>
|
|
|
416
441
|
|---|---|---|
|
|
417
442
|
| `deskfree_state` returns empty | No tasks exist | Create a task if appropriate. **Do NOT retry in a loop.** |
|
|
418
443
|
| 404 on `deskfree_start_task` | Task not `bot` or doesn't exist | Another bot claimed it. Call `deskfree_state`, try a different task. |
|
|
419
|
-
|
|
|
420
|
-
|
|
|
421
|
-
| 401 Unauthorized | Bot token invalid or expired | Check channel configuration. Do not retry. |
|
|
422
|
-
| `deskfree_update_deliverable` fails | Task not in `bot` (is_working=true) or network error | Verify task state with `deskfree_state`. If task was released, re-claim or abort. |
|
|
423
|
-
| `deskfree_claim_evaluation` returns null | Already claimed by another process | No action needed. Move to next pending evaluation. |
|
|
424
|
-
| Sub-agent spawn fails | Resource limits, config error | Complete task as `blocked` with explanation. Do not leave in `bot` (is_working=true). |
|
|
425
|
-
| WebSocket disconnected | Network issue | Plugin auto-reconnects with backoff. Messages fall back to HTTP polling. No action needed. |
|
|
444
|
+
| 409 on `deskfree_start_task` | Race condition | Call `deskfree_state`, pick a different task. |
|
|
445
|
+
| 401 Unauthorized | Bot token invalid | Check channel configuration. Do not retry. |
|
|
426
446
|
|
|
427
447
|
### Recovery Pattern
|
|
428
448
|
|
|
429
449
|
If anything goes wrong mid-task:
|
|
430
450
|
1. Send a message explaining what happened (`deskfree_send_message`)
|
|
431
|
-
2. Save whatever partial
|
|
451
|
+
2. Save whatever partial file content you have (`deskfree_update_file`)
|
|
432
452
|
3. Complete as `blocked` (`deskfree_complete_task` with outcome `blocked`)
|
|
433
453
|
4. **Never leave a task stranded in `bot` (is_working=true)**
|
|
434
454
|
|
|
435
|
-
### Edge Cases & Advanced Scenarios
|
|
436
|
-
|
|
437
|
-
| Scenario | Guidance |
|
|
438
|
-
|---|---|
|
|
439
|
-
| **Concurrent task access** | If multiple bots try to claim the same task, one will get 409 Conflict. The winner proceeds, losers should call `deskfree_state` and pick different tasks. |
|
|
440
|
-
| **Long-running operations** | For tasks >10 minutes, send periodic progress updates via `deskfree_send_message` so humans know you're still working. Update deliverable incrementally. |
|
|
441
|
-
| **Partial deliverable recovery** | If interrupted mid-work, `deskfree_start_task` returns the current deliverable content. Resume from where you left off, don't start over. |
|
|
442
|
-
| **Network timeouts during updates** | If `deskfree_update_deliverable` times out, retry once. If it fails again, complete as `blocked` with the timeout explanation. |
|
|
443
|
-
| **Empty or corrupt deliverables** | Always validate deliverable content before calling `deskfree_update_deliverable`. Minimum viable content is better than empty/corrupted content. |
|
|
444
|
-
| **Sub-agent coordination** | Only one sub-agent per task. If a sub-agent fails to start, the main session should resume the task directly. Don't spawn multiple sub-agents for the same task. |
|
|
445
|
-
| **Evaluation claim conflicts** | `deskfree_claim_evaluation` returns `null` if another process claimed it first. This is normal - move to the next pending evaluation or complete your heartbeat. |
|
|
446
|
-
| **Ways of working too large** | If ways of working content becomes very large (>50KB), consider archiving old sections. Focus updates on recent patterns and current best practices. |
|
|
447
|
-
|
|
448
|
-
### Troubleshooting Common Issues
|
|
449
|
-
|
|
450
|
-
#### "Task not found" (404) Errors
|
|
451
|
-
- **Cause**: Task was claimed by another bot, completed, or deleted
|
|
452
|
-
- **Solution**: Always call `deskfree_state` first to see available tasks
|
|
453
|
-
- **Prevention**: Check task status in state before attempting operations
|
|
454
|
-
|
|
455
|
-
#### Auto-threading Not Working
|
|
456
|
-
- **Cause**: No active task context, or called `deskfree_complete_task` already
|
|
457
|
-
- **Solution**: Pass explicit `taskId` to `deskfree_send_message`
|
|
458
|
-
- **Debug**: Check that `deskfree_start_task` was called and returned successfully
|
|
459
|
-
|
|
460
|
-
#### Deliverable Updates Failing
|
|
461
|
-
- **Common causes**:
|
|
462
|
-
- Task was released by another process → call `deskfree_state` to verify task status
|
|
463
|
-
- Deliverable content is malformed (invalid markdown, control characters)
|
|
464
|
-
- Network timeout → retry once, then complete as blocked if persistent
|
|
465
|
-
- **Solution**: Validate markdown content before sending, handle network errors gracefully
|
|
466
|
-
|
|
467
|
-
#### Sub-agent Spawn Failures
|
|
468
|
-
- **Common causes**: Resource limits, configuration errors, invalid task context
|
|
469
|
-
- **Immediate action**: Main session should resume the task directly
|
|
470
|
-
- **Recovery**: Complete task as `blocked` only if you cannot resume the work yourself
|
|
471
|
-
|
|
472
|
-
#### Ways of Working Updates Not Applying
|
|
473
|
-
- **Cause**: Another evaluation process updated it first, or `hasChanges=false` was sent
|
|
474
|
-
- **Check**: Ensure `hasChanges=true` and `updatedContent` is provided when you intend to update
|
|
475
|
-
- **Conflict resolution**: If content conflicts occur, the last successful submission wins
|
|
476
|
-
|
|
477
|
-
#### "State returns empty" Issues
|
|
478
|
-
- **Not an error**: Empty state means no tasks exist - this is normal
|
|
479
|
-
- **Action**: Create a task if you have work to do, otherwise return `HEARTBEAT_OK`
|
|
480
|
-
- **Don't**: Retry `deskfree_state` in a loop - it's not broken
|
|
481
|
-
|
|
482
455
|
---
|
|
483
456
|
|
|
484
|
-
## Common Workflow Patterns
|
|
485
|
-
|
|
486
|
-
### Pattern 1: Research & Analysis (Sub-agent Recommended)
|
|
487
|
-
|
|
488
|
-
```
|
|
489
|
-
Main Session:
|
|
490
|
-
1. deskfree_state() → check workspace
|
|
491
|
-
2. deskfree_suggest_tasks([{
|
|
492
|
-
title: "Research competitor HumanLayer",
|
|
493
|
-
instructions: "Analyze their product, pricing, and positioning vs DeskFree"
|
|
494
|
-
}])
|
|
495
|
-
3. [human approves task]
|
|
496
|
-
4. deskfree_start_task(taskId) → get task context
|
|
497
|
-
4. spawn_subagent(research_prompt) → background research
|
|
498
|
-
|
|
499
|
-
Sub-agent:
|
|
500
|
-
1. deskfree_update_deliverable() → initial outline
|
|
501
|
-
2. [research work...]
|
|
502
|
-
3. deskfree_update_deliverable() → interim findings
|
|
503
|
-
4. [more research...]
|
|
504
|
-
5. deskfree_update_deliverable() → final report
|
|
505
|
-
6. deskfree_complete_task(taskId, "done")
|
|
506
|
-
```
|
|
507
|
-
|
|
508
|
-
### Pattern 2: Quick Fix (Main Session)
|
|
509
|
-
|
|
510
|
-
```
|
|
511
|
-
1. deskfree_state() → check current state
|
|
512
|
-
2. deskfree_suggest_tasks([{
|
|
513
|
-
title: "Fix broken login endpoint",
|
|
514
|
-
instructions: "Apply hotfix for 500 error in /auth/login"
|
|
515
|
-
}])
|
|
516
|
-
3. [human approves task]
|
|
517
|
-
4. deskfree_start_task(taskId) → claim the work
|
|
518
|
-
4. deskfree_update_deliverable() → "Investigating issue..."
|
|
519
|
-
5. [fix the code...]
|
|
520
|
-
6. deskfree_update_deliverable() → "Applied fix, testing..."
|
|
521
|
-
7. [verify fix...]
|
|
522
|
-
8. deskfree_update_deliverable() → "Fix verified and deployed"
|
|
523
|
-
9. deskfree_complete_task(taskId, "done")
|
|
524
|
-
```
|
|
525
|
-
|
|
526
|
-
### Pattern 3: Blocked Task with Human Input
|
|
527
|
-
|
|
528
|
-
```
|
|
529
|
-
1-5. [normal task startup...]
|
|
530
|
-
6. [encounter blocker - need API key]
|
|
531
|
-
7. deskfree_send_message("Need the new Stripe API key to complete this integration. Where can I find it?")
|
|
532
|
-
8. deskfree_update_deliverable() → save partial progress
|
|
533
|
-
9. deskfree_complete_task(taskId, "blocked") → hand off to human
|
|
534
|
-
```
|
|
535
|
-
|
|
536
|
-
### Pattern 4: Ways of Working Evaluation
|
|
537
|
-
|
|
538
|
-
```
|
|
539
|
-
Heartbeat check:
|
|
540
|
-
1. deskfree_state() → shows pendingEvaluations: [{taskId: "abc", ...}]
|
|
541
|
-
2. deskfree_claim_evaluation("abc") → get evaluation context
|
|
542
|
-
3. [analyze task, messages, current ways of working...]
|
|
543
|
-
4. deskfree_submit_evaluation({
|
|
544
|
-
taskId: "abc",
|
|
545
|
-
reasoning: "Found a new pattern for API error handling...",
|
|
546
|
-
hasChanges: true,
|
|
547
|
-
updatedContent: "# Ways of Working\n\n## API Integration\n[new section]..."
|
|
548
|
-
})
|
|
549
|
-
```
|
|
550
|
-
|
|
551
457
|
## Task Title Examples
|
|
552
458
|
|
|
553
|
-
**Good
|
|
554
|
-
- "Research competitor HumanLayer"
|
|
555
|
-
- "Deploy staging hotfix"
|
|
556
|
-
- "Write API docs for /users endpoint"
|
|
557
|
-
- "Debug memory leak in worker process"
|
|
558
|
-
- "Review Q3 performance metrics"
|
|
459
|
+
**Good:** "Research competitor HumanLayer", "Fix auth timeout in Safari", "Write API docs for /users"
|
|
559
460
|
|
|
560
|
-
**Bad
|
|
561
|
-
- "Do some research on a competitor called HumanLayer and write up findings"
|
|
562
|
-
- "There's a bug in staging that needs fixing"
|
|
563
|
-
- "I need to check on some performance stuff for the quarterly review"
|
|
461
|
+
**Bad:** "Do some research on a competitor", "There's a bug that needs fixing"
|
|
564
462
|
|
|
565
463
|
---
|
|
566
464
|
|
|
567
|
-
## Best Practices
|
|
465
|
+
## Best Practices
|
|
568
466
|
|
|
569
467
|
### ✅ Do This
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
| **Send progress messages for long tasks** | Humans know you're working | "25% complete - analyzed 3 of 12 competitor features" |
|
|
576
|
-
| **Complete blocked tasks with explanation** | Clear handoff to humans | Message: "Need AWS credentials", then complete as blocked |
|
|
577
|
-
| **Start with template deliverables** | Consistent structure, never empty | Use the markdown template every time |
|
|
578
|
-
| **Handle 404/409 gracefully** | Race conditions are normal | Check state and pick different task, don't retry same task |
|
|
468
|
+
- Update files early and often — shows progress, survives interruptions
|
|
469
|
+
- Use descriptive commit-style titles
|
|
470
|
+
- Send progress messages for long tasks
|
|
471
|
+
- Provide meaningful summary on done
|
|
472
|
+
- Include substeps for multi-step tasks — gives human granular control
|
|
579
473
|
|
|
580
474
|
### ❌ Don't Do This
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
| **Start multiple sub-agents per task** | Creates confusion, race conditions | One sub-agent per task maximum |
|
|
587
|
-
| **Update deliverable only at the end** | Progress lost if interrupted | Update incrementally throughout work |
|
|
588
|
-
| **Ignore 409 conflicts on task claims** | Causes infinite retry loops | Accept conflict, check state, pick different task |
|
|
589
|
-
| **Create tasks without clear actions** | Unclear what needs doing | Use imperative verbs: "research X", "fix Y", "analyze Z" |
|
|
590
|
-
| **Send messages instead of completing blocked** | Task stays in limbo | Send message explaining blocker, then complete as blocked |
|
|
591
|
-
|
|
592
|
-
### Common Gotchas
|
|
593
|
-
|
|
594
|
-
- **Auto-threading stops after `deskfree_complete_task`** → Pass explicit `taskId` for post-completion messages
|
|
595
|
-
- **Empty deliverable content is rejected** → Always provide meaningful content, even if just an outline
|
|
596
|
-
- **Sub-agents can't create tasks** → Only orchestrator (main session) can create and claim tasks
|
|
597
|
-
- **Ways of working updates require `hasChanges=true`** → Explicitly set flag when submitting changes
|
|
598
|
-
- **Task titles are visible to humans** → Make them professional and descriptive
|
|
599
|
-
- **Evaluation reasoning is important** → Explain your analysis even if no changes are made
|
|
475
|
+
- Leave tasks in `bot` (is_working=true)
|
|
476
|
+
- Retry `deskfree_state` in loops
|
|
477
|
+
- Start multiple sub-agents per task
|
|
478
|
+
- Update file only at the end
|
|
479
|
+
- Skip the context field in proposals — explain your reasoning
|
|
600
480
|
|
|
601
481
|
## Human Review Outcomes
|
|
602
482
|
|