@questionbase/deskfree 0.3.0-alpha.22 → 0.3.0-alpha.24
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 +16 -20
- package/dist/index.d.ts +51 -66
- package/dist/index.js +524 -525
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/skills/deskfree/SKILL.md +135 -625
- package/skills/deskfree/references/tools.md +71 -82
package/skills/deskfree/SKILL.md
CHANGED
|
@@ -4,12 +4,12 @@ description: >
|
|
|
4
4
|
DeskFree task management and human-AI collaboration workflows.
|
|
5
5
|
Use when: creating tasks, managing work items, updating files,
|
|
6
6
|
communicating with humans through DeskFree, checking workspace state,
|
|
7
|
-
handling task lifecycle (
|
|
8
|
-
|
|
7
|
+
handling task lifecycle (pending → active → review → done),
|
|
8
|
+
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: 10.0.0
|
|
13
13
|
metadata: { 'openclaw': { 'emoji': '🏠' } }
|
|
14
14
|
---
|
|
15
15
|
|
|
@@ -17,710 +17,220 @@ metadata: { 'openclaw': { 'emoji': '🏠' } }
|
|
|
17
17
|
|
|
18
18
|
## ⚠️ Critical — Read First
|
|
19
19
|
|
|
20
|
-
###
|
|
20
|
+
### Status Model (memorize this)
|
|
21
21
|
|
|
22
22
|
```
|
|
23
|
-
|
|
24
|
-
suggest_tasks ──────────────────────────────────────────────────────────────────┐
|
|
25
|
-
+ initiativeSuggestions → [human approves initiative] → active │
|
|
26
|
-
[human rejects initiative] → deleted │
|
|
27
|
-
│
|
|
28
|
-
suggest_tasks → [human approves] → bot → [start_task] → bot (is_working) │
|
|
29
|
-
↑ │ │
|
|
30
|
-
| human approves/declines │ │
|
|
31
|
-
└──────────────────────────────────────────┘ │
|
|
32
|
-
│ │
|
|
33
|
-
[complete_task] │
|
|
34
|
-
↓ │
|
|
35
|
-
human │
|
|
36
|
-
│ │
|
|
37
|
-
[approve] │
|
|
38
|
-
↓ │
|
|
39
|
-
done ──→ [evaluate] ──┘
|
|
40
|
-
↓
|
|
41
|
-
globalWoW updated (always)
|
|
42
|
-
+ initiative updated (if task has initiative_id)
|
|
23
|
+
pending → active → review → done
|
|
43
24
|
```
|
|
44
25
|
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
26
|
+
- **pending** — Approved, waiting for bot to claim
|
|
27
|
+
- **active** — Bot claimed, runner working
|
|
28
|
+
- **review** — Bot submitted deliverable, waiting for human feedback
|
|
29
|
+
- **done** — Completed
|
|
49
30
|
|
|
50
31
|
### The Work Loop
|
|
51
32
|
|
|
52
33
|
```
|
|
53
|
-
1. Check state → deskfree_state — see tasks,
|
|
54
|
-
2.
|
|
55
|
-
3. Claim a task → deskfree_start_task — read instructions +
|
|
34
|
+
1. Check state → deskfree_state — see tasks, initiatives, files, ways of working
|
|
35
|
+
2. Propose plan → deskfree_propose — propose work for human approval
|
|
36
|
+
3. Claim a task → deskfree_start_task — read instructions + context + fileContext
|
|
56
37
|
4. Do the work → deskfree_update_file — build linked file incrementally
|
|
57
|
-
5.
|
|
58
|
-
6. Complete → deskfree_complete_task — summary required for "done"
|
|
59
|
-
7. Evaluate → if approved tasks have pending WoW evaluation (update globalWoW + initiative)
|
|
38
|
+
5. Complete → deskfree_complete_task — with outcome + summary + learnings
|
|
60
39
|
```
|
|
61
40
|
|
|
62
|
-
### Three Rules
|
|
41
|
+
### Three Rules
|
|
63
42
|
|
|
64
|
-
1. **Always
|
|
65
|
-
2. **Always check state first.** Call `deskfree_state` before
|
|
66
|
-
3. **Always complete tasks.** Never leave a task in `
|
|
43
|
+
1. **Always propose first.** Use `deskfree_propose` before starting ANY work. Nothing is created until human approves.
|
|
44
|
+
2. **Always check state first.** Call `deskfree_state` before proposing. Prevents duplicates.
|
|
45
|
+
3. **Always complete tasks.** Never leave a task in `active`. End with `deskfree_complete_task`.
|
|
67
46
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
Write instructions as if briefing a contractor who has never seen the codebase. Include:
|
|
71
|
-
- **What to do** — specific, actionable steps
|
|
72
|
-
- **Why** — referencing parent findings or file content when applicable
|
|
73
|
-
- **What "done" looks like** — clear acceptance criteria
|
|
74
|
-
- **Known constraints** — gotchas, dependencies, things to avoid
|
|
75
|
-
|
|
76
|
-
### File-Based Work Output
|
|
77
|
-
|
|
78
|
-
**Work that produces persistent documents should use files.** A file persists beyond the task — it becomes the lasting artifact of your work.
|
|
79
|
-
|
|
80
|
-
**When to use files:**
|
|
81
|
-
- Writing specs, runbooks, reports, documentation
|
|
82
|
-
- Any output a human will reference after the task closes
|
|
83
|
-
- Output that follow-up tasks will build on
|
|
84
|
-
|
|
85
|
-
**How to link files to tasks:**
|
|
86
|
-
- Use `newFile` in `deskfree_suggest_tasks` to pre-create a file when you know the task will produce one
|
|
87
|
-
- Use `fileId` to link an existing file to a new task
|
|
88
|
-
- When claiming a task with a linked file, its current content is in `fileContext` — read it before starting work
|
|
89
|
-
|
|
90
|
-
**Completing a task:**
|
|
91
|
-
- Provide a clear `summary` of what was accomplished (required for outcome `done`)
|
|
92
|
-
- If the task updated a file, mention the file name/ID in the summary
|
|
93
|
-
|
|
94
|
-
### Suggesting Follow-ups
|
|
95
|
-
|
|
96
|
-
When completing, always consider: does this work reveal follow-up tasks? If yes, suggest them. Your suggestions are strongest at this moment because you have full context.
|
|
97
|
-
|
|
98
|
-
Call `deskfree_suggest_tasks` before or after completing — pass `parentTaskId` to link follow-ups to the current task. Estimate token cost per suggestion — consider how many files to read, how much reasoning, how much output.
|
|
47
|
+
---
|
|
99
48
|
|
|
100
|
-
|
|
49
|
+
## Tools
|
|
101
50
|
|
|
102
|
-
|
|
51
|
+
### Orchestrator (5 tools — main session)
|
|
103
52
|
|
|
104
|
-
|
|
53
|
+
| Tool | What it does |
|
|
54
|
+
|---|---|
|
|
55
|
+
| `deskfree_state` | Full workspace snapshot — tasks, done tasks, ways of working, initiatives, files |
|
|
56
|
+
| `deskfree_propose` | Propose a plan for human approval — tasks, initiatives, file links |
|
|
57
|
+
| `deskfree_send_message` | Message in task thread |
|
|
58
|
+
| `deskfree_reopen_task` | Reopen a done/review task back to pending |
|
|
59
|
+
| `deskfree_update_knowledge` | Update global ways of working or initiative content |
|
|
105
60
|
|
|
106
|
-
|
|
61
|
+
### Worker (5 tools — sub-agents)
|
|
107
62
|
|
|
108
|
-
|
|
63
|
+
| Tool | What it does |
|
|
64
|
+
|---|---|
|
|
65
|
+
| `deskfree_start_task` | Claim a pending task → active. Returns full context |
|
|
66
|
+
| `deskfree_update_file` | Update a linked file's content |
|
|
67
|
+
| `deskfree_complete_task` | Complete task with outcome, summary, and learnings |
|
|
68
|
+
| `deskfree_send_message` | Message in task thread |
|
|
69
|
+
| `deskfree_propose` | Propose follow-up tasks (workers have deepest context) |
|
|
109
70
|
|
|
110
71
|
---
|
|
111
72
|
|
|
112
|
-
##
|
|
73
|
+
## Proposing Plans
|
|
113
74
|
|
|
114
|
-
|
|
75
|
+
Proposals are stored as message metadata — **no tasks, files, or initiatives are created until the human approves**.
|
|
115
76
|
|
|
116
|
-
|
|
117
|
-
deskfree_state() → shows files: [{fileId, name, description, version, updatedAt}, ...]
|
|
77
|
+
### One Initiative Per Proposal
|
|
118
78
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
```
|
|
79
|
+
Each `deskfree_propose` call handles one initiative (existing or new) or no initiative. Separate calls for separate initiatives.
|
|
80
|
+
|
|
81
|
+
### Substeps
|
|
123
82
|
|
|
124
|
-
|
|
83
|
+
Substeps are human-reviewable checklist items. The human can toggle each on/off before approving:
|
|
125
84
|
|
|
126
85
|
```javascript
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
86
|
+
deskfree_propose({
|
|
87
|
+
tasks: [{
|
|
88
|
+
title: "Audit auth endpoints",
|
|
89
|
+
instructions: "Review all authentication endpoints for security issues...",
|
|
90
|
+
substeps: [
|
|
91
|
+
"Review session management",
|
|
92
|
+
"Check CSRF protection",
|
|
93
|
+
"Verify rate limiting"
|
|
94
|
+
]
|
|
136
95
|
}]
|
|
137
96
|
})
|
|
138
|
-
// → file is created and linked to the task
|
|
139
|
-
|
|
140
|
-
// Option 2: Create a file directly during work
|
|
141
|
-
deskfree_create_file({
|
|
142
|
-
name: "Deployment Runbook",
|
|
143
|
-
description: "Step-by-step deployment guide",
|
|
144
|
-
content: "# Deployment Runbook\n\n...",
|
|
145
|
-
contentFormat: "markdown"
|
|
146
|
-
})
|
|
147
97
|
```
|
|
148
98
|
|
|
149
|
-
###
|
|
99
|
+
### File Linking
|
|
150
100
|
|
|
151
101
|
```javascript
|
|
152
|
-
//
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
102
|
+
// Link existing file — bot receives content when claiming
|
|
103
|
+
deskfree_propose({
|
|
104
|
+
tasks: [{
|
|
105
|
+
title: "Update API docs",
|
|
106
|
+
file: { existingId: "FILE_abc123" }
|
|
107
|
+
}]
|
|
157
108
|
})
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
**Build incrementally** — update the file early and often. A half-complete file is infinitely better than none if you're interrupted.
|
|
161
|
-
|
|
162
|
-
### File Format Choice
|
|
163
109
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
---
|
|
172
|
-
|
|
173
|
-
## Initiatives — Long-Lived Areas of Focus
|
|
174
|
-
|
|
175
|
-
Initiatives answer **"what are we working on and why"** while Ways of Working answers **"how do we work."**
|
|
176
|
-
|
|
177
|
-
| Concept | What it is |
|
|
178
|
-
|---|---|
|
|
179
|
-
| **Initiative** | A persistent area of focus (e.g. "Auth Hardening", "Performance Sprint") |
|
|
180
|
-
| **Initiative Content** | A versioned markdown doc — current state, approach, next priorities |
|
|
181
|
-
| **Task → Initiative link** | Set `initiativeId` on suggestions to link tasks to an initiative |
|
|
182
|
-
|
|
183
|
-
**Default initiative:** Every bot has a "General" initiative for uncategorized work. Tasks without an explicit `initiativeId` are automatically linked to it.
|
|
184
|
-
|
|
185
|
-
### When to Propose a New Initiative
|
|
186
|
-
|
|
187
|
-
```
|
|
188
|
-
On every suggest_tasks call, ask yourself:
|
|
189
|
-
|
|
190
|
-
"Does an active initiative exist that this work belongs to?"
|
|
191
|
-
→ Yes: set initiativeId on the relevant suggestions
|
|
192
|
-
→ No, but this is part of a bigger theme: add an initiativeSuggestion
|
|
193
|
-
→ No, and it's a one-off task: no initiative needed (defaults to General)
|
|
110
|
+
// Create new file on approval
|
|
111
|
+
deskfree_propose({
|
|
112
|
+
tasks: [{
|
|
113
|
+
title: "Write deployment runbook",
|
|
114
|
+
file: { name: "Deployment Runbook", description: "Step-by-step guide" }
|
|
115
|
+
}]
|
|
116
|
+
})
|
|
194
117
|
```
|
|
195
118
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
```
|
|
199
|
-
1. deskfree_state() → check initiatives[] for existing active ones
|
|
200
|
-
|
|
201
|
-
2. deskfree_suggest_tasks({
|
|
202
|
-
suggestions: [
|
|
203
|
-
{ title: "Audit auth endpoints", estimatedTokens: 20000 },
|
|
204
|
-
{ title: "Add rate limiting", estimatedTokens: 15000 }
|
|
205
|
-
],
|
|
206
|
-
initiativeSuggestions: [
|
|
207
|
-
{
|
|
208
|
-
title: "Auth Hardening",
|
|
209
|
-
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",
|
|
210
|
-
taskRefs: [0, 1] // auto-links tasks at index 0 and 1 when approved
|
|
211
|
-
}
|
|
212
|
-
]
|
|
213
|
-
})
|
|
214
|
-
|
|
215
|
-
Human sees:
|
|
216
|
-
🎯 New Initiative: "Auth Hardening" [Approve] [Reject]
|
|
217
|
-
📋 Task: "Audit auth endpoints..." [Approve] [Reject]
|
|
218
|
-
📋 Task: "Add rate limiting..." [Approve] [Reject]
|
|
219
|
-
```
|
|
119
|
+
---
|
|
220
120
|
|
|
221
|
-
|
|
121
|
+
## Completing Tasks
|
|
222
122
|
|
|
223
|
-
```
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
instructions: "...",
|
|
230
|
-
estimatedTokens: 25000,
|
|
231
|
-
initiativeId: "init_abc" // link to existing initiative
|
|
232
|
-
}
|
|
233
|
-
]
|
|
234
|
-
// no initiativeSuggestions needed — initiative already exists
|
|
123
|
+
```javascript
|
|
124
|
+
deskfree_complete_task({
|
|
125
|
+
taskId: "T_abc123",
|
|
126
|
+
outcome: "review", // "review" | "done" | "blocked" | "cancelled"
|
|
127
|
+
summary: "Implemented auth hardening across all endpoints",
|
|
128
|
+
learnings: "Found that rate limiting needs to be per-IP, not per-session"
|
|
235
129
|
})
|
|
236
130
|
```
|
|
237
131
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
132
|
+
- **review** — Submit for human feedback. Human responds in thread, bot reads and decides.
|
|
133
|
+
- **done** — Work complete (summary required). Learnings integrated into WoW.
|
|
134
|
+
- **blocked** — Need human input. Send a message explaining WHY first.
|
|
135
|
+
- **cancelled** — Task no longer needed.
|
|
241
136
|
|
|
242
|
-
|
|
137
|
+
**Learnings** are only applied to ways of working when a task reaches `done`, not during `review` (human might reject).
|
|
243
138
|
|
|
244
|
-
|
|
245
|
-
- Injected automatically via `deskfree_state` (the `waysOfWorking` field)
|
|
246
|
-
- Read it before starting work to understand established patterns
|
|
247
|
-
- Updated after task approval via the evaluation flow (never manually during work)
|
|
248
|
-
- Each update creates a new immutable version — full history preserved
|
|
249
|
-
|
|
250
|
-
### Evaluation Flow — Dual Output
|
|
139
|
+
---
|
|
251
140
|
|
|
252
|
-
|
|
141
|
+
## Conversational Review
|
|
253
142
|
|
|
254
|
-
|
|
255
|
-
1. deskfree_claim_evaluation(taskId)
|
|
256
|
-
→ returns: task + messages + waysOfWorking + initiative (if task has initiative_id)
|
|
143
|
+
There are no approve/decline buttons. The flow is:
|
|
257
144
|
|
|
258
|
-
|
|
145
|
+
1. Bot completes task with outcome `review`
|
|
146
|
+
2. Human responds in the task thread with feedback
|
|
147
|
+
3. Bot reads feedback and either:
|
|
148
|
+
- Continues working (task stays active)
|
|
149
|
+
- Completes with outcome `done`
|
|
150
|
+
- Reopens if major rework needed
|
|
259
151
|
|
|
260
|
-
|
|
261
|
-
"Did I learn something about HOW we work that applies everywhere?"
|
|
262
|
-
→ Yes: update globalWoW
|
|
152
|
+
---
|
|
263
153
|
|
|
264
|
-
|
|
265
|
-
HOW to approach this specific area?"
|
|
266
|
-
→ Yes: update initiative content
|
|
154
|
+
## Ways of Working
|
|
267
155
|
|
|
268
|
-
|
|
269
|
-
Neither? → hasChanges: false for both
|
|
156
|
+
A single versioned markdown document per bot. Updated via `deskfree_update_knowledge` (orchestrator only — single writer avoids version conflicts).
|
|
270
157
|
|
|
271
|
-
|
|
272
|
-
taskId,
|
|
273
|
-
reasoning: "...",
|
|
274
|
-
globalWoW: { hasChanges: true, updatedContent: "..." },
|
|
275
|
-
initiative: { hasChanges: false }
|
|
276
|
-
})
|
|
277
|
-
```
|
|
158
|
+
Workers pass `learnings` in `complete_task`. When a task reaches `done`, the orchestrator integrates learnings into WoW via `update_knowledge`.
|
|
278
159
|
|
|
279
|
-
|
|
280
|
-
- A better approach to error handling you discovered
|
|
281
|
-
- A recurring mistake to avoid
|
|
282
|
-
- A tool or service pattern that's universally useful
|
|
160
|
+
---
|
|
283
161
|
|
|
284
|
-
|
|
285
|
-
- Current state of the initiative has changed (task completed a major piece)
|
|
286
|
-
- New findings shifted the approach
|
|
287
|
-
- Next priorities should be reordered
|
|
162
|
+
## Initiatives
|
|
288
163
|
|
|
289
|
-
|
|
164
|
+
Long-lived areas of focus. Proposed via `deskfree_propose`:
|
|
290
165
|
|
|
291
|
-
|
|
166
|
+
```javascript
|
|
167
|
+
// Link to existing
|
|
168
|
+
deskfree_propose({
|
|
169
|
+
initiative: "INI_abc123",
|
|
170
|
+
tasks: [...]
|
|
171
|
+
})
|
|
292
172
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
task (with summary: "Found 3 critical issues: session fixation, weak CSRF, no rate limiting")
|
|
298
|
-
waysOfWorking: "..."
|
|
299
|
-
initiative: { id: "init_abc", title: "Auth Hardening", content: "No audit done yet." }
|
|
300
|
-
|
|
301
|
-
Analysis:
|
|
302
|
-
- Gateway has built-in rate limiting (just needs config) → applies everywhere → update globalWoW
|
|
303
|
-
- Audit found 3 critical issues → initiative content needs update → update initiative
|
|
304
|
-
|
|
305
|
-
submit_evaluation({
|
|
306
|
-
taskId: "audit-task",
|
|
307
|
-
reasoning: "Audit found 3 issues. Gateway has rate limiting built in — updated both.",
|
|
308
|
-
globalWoW: {
|
|
309
|
-
hasChanges: true,
|
|
310
|
-
updatedContent: "...## Infrastructure\n- Always check AWS API Gateway config before building custom middleware\n..."
|
|
311
|
-
},
|
|
312
|
-
initiative: {
|
|
313
|
-
hasChanges: true,
|
|
314
|
-
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"
|
|
315
|
-
}
|
|
173
|
+
// Create new
|
|
174
|
+
deskfree_propose({
|
|
175
|
+
initiative: { title: "Auth Hardening", content: "# Auth Hardening\n\n..." },
|
|
176
|
+
tasks: [...]
|
|
316
177
|
})
|
|
317
178
|
```
|
|
318
179
|
|
|
319
180
|
---
|
|
320
181
|
|
|
321
|
-
##
|
|
322
|
-
|
|
323
|
-
### Pre-Flight (before ANY work)
|
|
324
|
-
|
|
325
|
-
- [ ] Called `deskfree_state` — confirmed it returned data (not empty/error)
|
|
326
|
-
- [ ] Read `waysOfWorking` if present — apply established patterns
|
|
327
|
-
- [ ] Read `initiatives` if present — check for active initiatives this work belongs to
|
|
328
|
-
- [ ] Checked `files` list — know what persistent files already exist
|
|
329
|
-
- [ ] Checked for existing tasks that match intent — no duplicates
|
|
330
|
-
- [ ] Suggested a task via `deskfree_suggest_tasks` — with `initiativeId` if linking to existing initiative, or `initiativeSuggestions` if proposing new one, and `newFile` if task will produce a document
|
|
331
|
-
- [ ] Once approved: called `deskfree_start_task` — confirmed task moved to `bot` (is_working=true)
|
|
332
|
-
- [ ] If task has `fileContext` — read the existing file content before starting work
|
|
333
|
-
|
|
334
|
-
### Mid-Work
|
|
335
|
-
|
|
336
|
-
- [ ] File updated immediately after starting task (not waiting until end)
|
|
337
|
-
- [ ] `deskfree_update_file` succeeded (no error response)
|
|
338
|
-
- [ ] If blocked: sent message explaining WHY before calling `complete_task` with `blocked`
|
|
339
|
-
|
|
340
|
-
### Pre-Completion
|
|
341
|
-
|
|
342
|
-
- [ ] File content is non-empty and meaningful (if task produces a file)
|
|
343
|
-
- [ ] File is well-structured and stands alone as a document
|
|
344
|
-
- [ ] Called `deskfree_complete_task` with a clear `summary` — confirmed task moved to `human`
|
|
345
|
-
- [ ] If sub-agent: terminated after completion (one task per sub-agent)
|
|
182
|
+
## Working with Files
|
|
346
183
|
|
|
347
|
-
|
|
184
|
+
Files are persistent documents owned by a bot.
|
|
348
185
|
|
|
349
|
-
-
|
|
186
|
+
- **Creating:** Via `deskfree_propose` with `file: { name, description }` (created on approval)
|
|
187
|
+
- **Updating:** `deskfree_update_file` — always send full content (replaces previous version)
|
|
188
|
+
- **Formats:** `markdown` (default) or `html` (for rich web content)
|
|
189
|
+
- **Build incrementally** — update early and often. Partial > nothing.
|
|
350
190
|
|
|
351
191
|
---
|
|
352
192
|
|
|
353
|
-
##
|
|
354
|
-
|
|
355
|
-
### Orchestrator Flow (main session)
|
|
356
|
-
|
|
357
|
-
```
|
|
358
|
-
1. deskfree_state → assess workspace + read ways of working + check active initiatives + check files
|
|
359
|
-
2. deskfree_suggest_tasks → suggest tasks (with estimatedTokens, initiativeId, initiativeSuggestions, newFile)
|
|
360
|
-
3. deskfree_start_task → claim approved task (returns full context + parent context + fileContext)
|
|
361
|
-
4. deskfree_update_file → build linked file incrementally as you work
|
|
362
|
-
5. deskfree_suggest_tasks → suggest follow-ups if work reveals more (parentTaskId to link)
|
|
363
|
-
6. deskfree_complete_task → complete with outcome done (+ summary) or blocked
|
|
364
|
-
```
|
|
365
|
-
|
|
366
|
-
### Sub-Agent Flow (recommended for tasks > 5 min)
|
|
193
|
+
## Sub-Agent Pattern
|
|
367
194
|
|
|
368
195
|
```
|
|
369
|
-
Orchestrator:
|
|
370
|
-
Sub-agent:
|
|
196
|
+
Orchestrator: deskfree_state → deskfree_propose → (human approves) → spawn sub-agent
|
|
197
|
+
Sub-agent: deskfree_start_task → deskfree_update_file → deskfree_complete_task → terminate
|
|
371
198
|
```
|
|
372
199
|
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
### When to Use Main vs Sub-Agent
|
|
378
|
-
|
|
379
|
-
| Main session | Sub-agent |
|
|
380
|
-
|---|---|
|
|
381
|
-
| Quick tasks (< 5 min) | Research, reports, analysis |
|
|
382
|
-
| Interactive/back-and-forth | Code development, debugging |
|
|
383
|
-
| Urgent fixes | Long operations (> 10 min) |
|
|
384
|
-
| | Background work while human may message |
|
|
385
|
-
|
|
386
|
-
---
|
|
387
|
-
|
|
388
|
-
## Recurrence — Natural Language + scheduledFor
|
|
389
|
-
|
|
390
|
-
**Recurrence is handled through task instructions, NOT through special fields.** DeskFree uses a simple suggest → complete → suggest cycle for recurring work.
|
|
391
|
-
|
|
392
|
-
### How Recurrence Works
|
|
393
|
-
|
|
394
|
-
1. **Document the pattern** in task instructions using natural language:
|
|
395
|
-
- "This task recurs weekly on Mondays. When completing, suggest the next occurrence with scheduledFor set to next Monday."
|
|
396
|
-
- "Monthly report — recurs on the 1st of each month. Schedule next occurrence for first day of next month."
|
|
397
|
-
|
|
398
|
-
2. **Set the first occurrence** using `scheduledFor` in your suggestion:
|
|
399
|
-
```javascript
|
|
400
|
-
deskfree_suggest_tasks({
|
|
401
|
-
suggestions: [{
|
|
402
|
-
title: "Weekly team sync prep",
|
|
403
|
-
instructions: "Prepare agenda for Monday team meeting. This task recurs weekly on Mondays. When completing, suggest the next occurrence with scheduledFor set to next Monday at 9 AM.",
|
|
404
|
-
scheduledFor: "2026-03-03T14:00:00Z" // Next Monday 9 AM EST
|
|
405
|
-
}]
|
|
406
|
-
})
|
|
407
|
-
```
|
|
408
|
-
|
|
409
|
-
3. **Propagate on completion** — when you complete a recurring task, read the instructions and suggest the next occurrence:
|
|
410
|
-
```javascript
|
|
411
|
-
// After completing the task:
|
|
412
|
-
deskfree_suggest_tasks({
|
|
413
|
-
suggestions: [{
|
|
414
|
-
title: "Weekly team sync prep",
|
|
415
|
-
instructions: "Prepare agenda for Monday team meeting. This task recurs weekly on Mondays. When completing, suggest the next occurrence with scheduledFor set to next Monday at 9 AM.",
|
|
416
|
-
scheduledFor: "2026-03-10T14:00:00Z" // Following Monday
|
|
417
|
-
}],
|
|
418
|
-
parentTaskId: "current-task-id"
|
|
419
|
-
})
|
|
420
|
-
```
|
|
421
|
-
|
|
422
|
-
### Key Points
|
|
423
|
-
|
|
424
|
-
- **No special recurrence fields** — it's just natural language in instructions + `scheduledFor`
|
|
425
|
-
- **You are responsible** for reading the recurrence pattern and creating the next occurrence
|
|
426
|
-
- **Use scheduledFor** to control when the task becomes available
|
|
427
|
-
- **Include the recurrence instructions** verbatim in follow-up suggestions so the pattern continues
|
|
428
|
-
- **Be precise with dates** — calculate the next occurrence based on the documented pattern
|
|
429
|
-
|
|
430
|
-
---
|
|
431
|
-
|
|
432
|
-
## Messaging
|
|
433
|
-
|
|
434
|
-
**Normal replies:** Just respond — the channel handles routing automatically. No tool needed.
|
|
435
|
-
|
|
436
|
-
**Use `deskfree_send_message` only for:**
|
|
437
|
-
- Progress updates during task execution
|
|
438
|
-
- Questions needing human input mid-task
|
|
439
|
-
- Status reports for long-running tasks
|
|
440
|
-
|
|
441
|
-
**Never use it for:** Normal conversation replies (channel handles those).
|
|
200
|
+
- One task per sub-agent
|
|
201
|
+
- Sub-agent calls `deskfree_start_task` (enables cost attribution via runnerId)
|
|
202
|
+
- Orchestrator never claims tasks directly
|
|
442
203
|
|
|
443
204
|
---
|
|
444
205
|
|
|
445
206
|
## Decision Tree
|
|
446
207
|
|
|
447
|
-
### Heartbeat
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
3. `bot` tasks? → `deskfree_start_task` + spawn sub-agents
|
|
452
|
-
4. `bot` (is_working=true) with no active sub-agent? → Complete as blocked or resume
|
|
208
|
+
### Heartbeat
|
|
209
|
+
1. `deskfree_state` → get snapshot
|
|
210
|
+
2. `pending` tasks? → spawn sub-agents to claim them
|
|
211
|
+
3. `active` tasks with no active sub-agent? → complete as blocked or resume
|
|
453
212
|
|
|
454
213
|
### Human Gives You Work
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
4. `deskfree_suggest_tasks` → suggest with clear title + instructions
|
|
461
|
-
5. [human approves] → `deskfree_start_task` → claim it + read fileContext if present
|
|
462
|
-
6. Work → `deskfree_update_file` incrementally
|
|
463
|
-
7. `deskfree_complete_task` → outcome `done` (with summary) or `blocked`
|
|
464
|
-
|
|
465
|
-
---
|
|
466
|
-
|
|
467
|
-
## Tools Reference
|
|
468
|
-
|
|
469
|
-
> **Full parameter details:** See `references/tools.md`
|
|
470
|
-
|
|
471
|
-
### Orchestrator (9 tools)
|
|
472
|
-
|
|
473
|
-
| Tool | What it does |
|
|
474
|
-
|---|---|
|
|
475
|
-
| `deskfree_state` | Full workspace snapshot — tasks, recently done, ways of working, active initiatives, files, pending evaluations |
|
|
476
|
-
| `deskfree_suggest_tasks` | Suggest tasks for human approval (with estimatedTokens, initiativeId, initiativeSuggestions, newFile, fileId) |
|
|
477
|
-
| `deskfree_start_task` | Claim task → `bot` (is_working=true), returns full context + parent context + fileContext |
|
|
478
|
-
| `deskfree_update_file` | Update a linked file's content incrementally |
|
|
479
|
-
| `deskfree_create_file` | Create a new persistent file |
|
|
480
|
-
| `deskfree_complete_task` | Mark done (summary required) or blocked → `human` |
|
|
481
|
-
| `deskfree_send_message` | Message in task thread (content required) |
|
|
482
|
-
| `deskfree_claim_evaluation` | Claim a pending evaluation — returns task, messages, globalWoW, and initiative (if applicable) |
|
|
483
|
-
| `deskfree_submit_evaluation` | Submit evaluation with dual output: globalWoW + initiative (each independently updatable) |
|
|
484
|
-
|
|
485
|
-
### Worker (7 tools — sub-agents only)
|
|
486
|
-
|
|
487
|
-
`deskfree_update_file`, `deskfree_create_file`, `deskfree_complete_task`, `deskfree_send_message`, `deskfree_suggest_tasks`, `deskfree_claim_evaluation`, `deskfree_submit_evaluation`
|
|
488
|
-
|
|
489
|
-
Workers receive workspace context at spawn time — use it to understand what else is happening, avoid duplicate suggestions, and link follow-ups to existing initiatives.
|
|
490
|
-
|
|
491
|
-
---
|
|
492
|
-
|
|
493
|
-
## File Best Practices
|
|
494
|
-
|
|
495
|
-
### Markdown files
|
|
496
|
-
|
|
497
|
-
Structure as **standalone markdown documents:**
|
|
498
|
-
|
|
499
|
-
```markdown
|
|
500
|
-
# Document Title
|
|
501
|
-
|
|
502
|
-
## Summary
|
|
503
|
-
Brief overview of what this document covers.
|
|
504
|
-
|
|
505
|
-
## Key Findings / Content
|
|
506
|
-
- Main points with supporting detail
|
|
507
|
-
|
|
508
|
-
## Details
|
|
509
|
-
Detailed analysis, implementation notes, etc.
|
|
510
|
-
|
|
511
|
-
## Next Steps (if applicable)
|
|
512
|
-
- Follow-up actions, outstanding questions
|
|
513
|
-
```
|
|
514
|
-
|
|
515
|
-
### HTML files
|
|
516
|
-
|
|
517
|
-
Pass a complete, self-contained HTML document (or fragment — a wrapper `<html>` is injected automatically):
|
|
518
|
-
|
|
519
|
-
```html
|
|
520
|
-
<h1>Report Title</h1>
|
|
521
|
-
<table>
|
|
522
|
-
<tr><th>Metric</th><th>Value</th></tr>
|
|
523
|
-
<tr><td>Users</td><td>1,234</td></tr>
|
|
524
|
-
</table>
|
|
525
|
-
```
|
|
526
|
-
|
|
527
|
-
**Build incrementally** — start with outline immediately after `deskfree_start_task`, fill sections as you go, polish before completing. A half-complete file is infinitely better than none.
|
|
214
|
+
1. `deskfree_state` → check existing tasks + initiatives + files
|
|
215
|
+
2. `deskfree_propose` → with context, substeps, file links, initiative
|
|
216
|
+
3. Human approves → spawn sub-agent → `deskfree_start_task`
|
|
217
|
+
4. Work → `deskfree_update_file` incrementally
|
|
218
|
+
5. `deskfree_complete_task`
|
|
528
219
|
|
|
529
220
|
---
|
|
530
221
|
|
|
531
222
|
## Error Handling
|
|
532
223
|
|
|
533
|
-
| Error |
|
|
534
|
-
|---|---|---|
|
|
535
|
-
| `deskfree_state` returns empty | No tasks exist | Create a task if appropriate. **Do NOT retry in a loop.** |
|
|
536
|
-
| 404 on `deskfree_start_task` | Task not `bot` or doesn't exist | Another bot claimed it. Call `deskfree_state`, try a different task. |
|
|
537
|
-
| 404 on `deskfree_complete_task` | Task not `bot` (is_working=true) | Already completed or released. Check state. |
|
|
538
|
-
| 409 on `deskfree_start_task` | Race condition — another bot claimed it | Call `deskfree_state`, pick a different task. |
|
|
539
|
-
| 401 Unauthorized | Bot token invalid or expired | Check channel configuration. Do not retry. |
|
|
540
|
-
| `deskfree_update_file` fails | File not found or network error | Verify fileId with `deskfree_state`. If file was deleted, create a new one. |
|
|
541
|
-
| 422 on `deskfree_complete_task` | Missing required `summary` for outcome `done` | Add a meaningful summary of what was accomplished. |
|
|
542
|
-
| `deskfree_claim_evaluation` returns null | Already claimed by another process | No action needed. Move to next pending evaluation. |
|
|
543
|
-
| Sub-agent spawn fails | Resource limits, config error | Complete task as `blocked` with explanation. Do not leave in `bot` (is_working=true). |
|
|
544
|
-
| WebSocket disconnected | Network issue | Plugin auto-reconnects with backoff. Messages fall back to HTTP polling. No action needed. |
|
|
545
|
-
|
|
546
|
-
### Recovery Pattern
|
|
547
|
-
|
|
548
|
-
If anything goes wrong mid-task:
|
|
549
|
-
1. Send a message explaining what happened (`deskfree_send_message`)
|
|
550
|
-
2. Save whatever partial file content you have (`deskfree_update_file`)
|
|
551
|
-
3. Complete as `blocked` (`deskfree_complete_task` with outcome `blocked`)
|
|
552
|
-
4. **Never leave a task stranded in `bot` (is_working=true)**
|
|
553
|
-
|
|
554
|
-
### Edge Cases & Advanced Scenarios
|
|
555
|
-
|
|
556
|
-
| Scenario | Guidance |
|
|
224
|
+
| Error | Action |
|
|
557
225
|
|---|---|
|
|
558
|
-
|
|
|
559
|
-
|
|
|
560
|
-
|
|
|
561
|
-
| **Network timeouts during updates** | If `deskfree_update_file` times out, retry once. If it fails again, complete as `blocked` with the timeout explanation. |
|
|
562
|
-
| **Empty or corrupt file content** | Always validate file content before calling `deskfree_update_file`. Minimum viable content is better than empty/corrupted content. |
|
|
563
|
-
| **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. |
|
|
564
|
-
| **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. |
|
|
565
|
-
| **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. |
|
|
566
|
-
|
|
567
|
-
### Troubleshooting Common Issues
|
|
568
|
-
|
|
569
|
-
#### "Task not found" (404) Errors
|
|
570
|
-
- **Cause**: Task was claimed by another bot, completed, or deleted
|
|
571
|
-
- **Solution**: Always call `deskfree_state` first to see available tasks
|
|
572
|
-
- **Prevention**: Check task status in state before attempting operations
|
|
573
|
-
|
|
574
|
-
#### Auto-threading Not Working
|
|
575
|
-
- **Cause**: No active task context, or called `deskfree_complete_task` already
|
|
576
|
-
- **Solution**: Pass explicit `taskId` to `deskfree_send_message`
|
|
577
|
-
- **Debug**: Check that `deskfree_start_task` was called and returned successfully
|
|
578
|
-
|
|
579
|
-
#### File Updates Failing
|
|
580
|
-
- **Common causes**:
|
|
581
|
-
- File ID is wrong or file was deleted → call `deskfree_state` to see current files
|
|
582
|
-
- File content is malformed (invalid markdown, control characters)
|
|
583
|
-
- Network timeout → retry once, then complete as blocked if persistent
|
|
584
|
-
- **Solution**: Validate content before sending, handle network errors gracefully
|
|
585
|
-
|
|
586
|
-
#### Sub-agent Spawn Failures
|
|
587
|
-
- **Common causes**: Resource limits, configuration errors, invalid task context
|
|
588
|
-
- **Immediate action**: Main session should resume the task directly
|
|
589
|
-
- **Recovery**: Complete task as `blocked` only if you cannot resume the work yourself
|
|
590
|
-
|
|
591
|
-
#### Ways of Working Updates Not Applying
|
|
592
|
-
- **Cause**: Another evaluation process updated it first, or `hasChanges=false` was sent
|
|
593
|
-
- **Check**: Ensure `hasChanges=true` and `updatedContent` is provided when you intend to update
|
|
594
|
-
- **Conflict resolution**: If content conflicts occur, the last successful submission wins
|
|
595
|
-
|
|
596
|
-
#### "State returns empty" Issues
|
|
597
|
-
- **Not an error**: Empty state means no tasks exist - this is normal
|
|
598
|
-
- **Action**: Create a task if you have work to do, otherwise return `HEARTBEAT_OK`
|
|
599
|
-
- **Don't**: Retry `deskfree_state` in a loop - it's not broken
|
|
600
|
-
|
|
601
|
-
---
|
|
602
|
-
|
|
603
|
-
## Common Workflow Patterns
|
|
604
|
-
|
|
605
|
-
### Pattern 1: Research & Analysis with File Output
|
|
606
|
-
|
|
607
|
-
```
|
|
608
|
-
Main Session:
|
|
609
|
-
1. deskfree_state() → check workspace + files
|
|
610
|
-
2. deskfree_suggest_tasks([{
|
|
611
|
-
title: "Research competitor HumanLayer",
|
|
612
|
-
instructions: "Analyze their product, pricing, and positioning vs DeskFree",
|
|
613
|
-
newFile: { name: "HumanLayer Analysis", description: "Competitor analysis report" }
|
|
614
|
-
}])
|
|
615
|
-
3. [human approves task]
|
|
616
|
-
4. deskfree_start_task(taskId) → get task context + fileContext (empty file pre-created)
|
|
617
|
-
5. spawn_subagent(research_prompt) → background research
|
|
618
|
-
|
|
619
|
-
Sub-agent:
|
|
620
|
-
1. deskfree_update_file(fileId, "# HumanLayer Analysis\n\n## Summary\n...") → initial outline
|
|
621
|
-
2. [research work...]
|
|
622
|
-
3. deskfree_update_file(fileId, "...") → interim findings
|
|
623
|
-
4. [more research...]
|
|
624
|
-
5. deskfree_update_file(fileId, "...") → final report
|
|
625
|
-
6. deskfree_complete_task(taskId, "done", summary: "Analysis complete — 3 key differentiators identified, full report in file")
|
|
626
|
-
```
|
|
226
|
+
| 404 on `start_task` | Task not pending or doesn't exist. Call `deskfree_state`, try another. |
|
|
227
|
+
| 409 on `start_task` | Already claimed. Call `deskfree_state`, pick a different task. |
|
|
228
|
+
| Empty `deskfree_state` | No tasks exist. Propose if appropriate. **Don't retry in a loop.** |
|
|
627
229
|
|
|
628
|
-
###
|
|
230
|
+
### Recovery
|
|
629
231
|
|
|
630
|
-
|
|
631
|
-
1.
|
|
632
|
-
2.
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
}])
|
|
636
|
-
3. [human approves task]
|
|
637
|
-
4. deskfree_start_task(taskId) → claim the work
|
|
638
|
-
5. [fix the code...]
|
|
639
|
-
6. deskfree_complete_task(taskId, "done", summary: "Fixed null pointer in auth middleware, deployed to staging")
|
|
640
|
-
```
|
|
641
|
-
|
|
642
|
-
### Pattern 3: Blocked Task with Human Input
|
|
643
|
-
|
|
644
|
-
```
|
|
645
|
-
1-5. [normal task startup...]
|
|
646
|
-
6. [encounter blocker - need API key]
|
|
647
|
-
7. deskfree_send_message("Need the new Stripe API key to complete this integration. Where can I find it?")
|
|
648
|
-
8. deskfree_update_file(fileId, "...") → save partial progress if task has a file
|
|
649
|
-
9. deskfree_complete_task(taskId, "blocked") → hand off to human
|
|
650
|
-
```
|
|
651
|
-
|
|
652
|
-
### Pattern 4: Ways of Working Evaluation
|
|
653
|
-
|
|
654
|
-
```
|
|
655
|
-
Heartbeat check:
|
|
656
|
-
1. deskfree_state() → shows pendingEvaluations: [{taskId: "abc", ...}]
|
|
657
|
-
2. deskfree_claim_evaluation("abc") → get evaluation context (task, messages, waysOfWorking, initiative?)
|
|
658
|
-
3. [analyze task summary, messages, current ways of working, initiative if present...]
|
|
659
|
-
4. deskfree_submit_evaluation({
|
|
660
|
-
taskId: "abc",
|
|
661
|
-
reasoning: "Found a new pattern for API error handling...",
|
|
662
|
-
globalWoW: {
|
|
663
|
-
hasChanges: true,
|
|
664
|
-
updatedContent: "# Ways of Working\n\n## API Integration\n[new section]..."
|
|
665
|
-
},
|
|
666
|
-
initiative: { hasChanges: false }
|
|
667
|
-
})
|
|
668
|
-
```
|
|
669
|
-
|
|
670
|
-
## Task Title Examples
|
|
671
|
-
|
|
672
|
-
**Good (short, scannable, action-oriented):**
|
|
673
|
-
- "Research competitor HumanLayer"
|
|
674
|
-
- "Deploy staging hotfix"
|
|
675
|
-
- "Write API docs for /users endpoint"
|
|
676
|
-
- "Debug memory leak in worker process"
|
|
677
|
-
- "Review Q3 performance metrics"
|
|
678
|
-
|
|
679
|
-
**Bad (verbose, unclear):**
|
|
680
|
-
- "Do some research on a competitor called HumanLayer and write up findings"
|
|
681
|
-
- "There's a bug in staging that needs fixing"
|
|
682
|
-
- "I need to check on some performance stuff for the quarterly review"
|
|
683
|
-
|
|
684
|
-
---
|
|
685
|
-
|
|
686
|
-
## Best Practices & Anti-Patterns
|
|
687
|
-
|
|
688
|
-
### ✅ Do This
|
|
689
|
-
|
|
690
|
-
| Practice | Rationale | Example |
|
|
691
|
-
|---|---|---|
|
|
692
|
-
| **Update file early and often** | Shows progress, survives interruptions | Update outline immediately, add sections as you work |
|
|
693
|
-
| **Use descriptive commit-style titles** | Easy to scan, actionable | "Fix authentication timeout in Safari" |
|
|
694
|
-
| **Send progress messages for long tasks** | Humans know you're working | "25% complete - analyzed 3 of 12 competitor features" |
|
|
695
|
-
| **Complete blocked tasks with explanation** | Clear handoff to humans | Message: "Need AWS credentials", then complete as blocked |
|
|
696
|
-
| **Start with template file structure** | Consistent structure, never empty | Use the markdown template every time |
|
|
697
|
-
| **Handle 404/409 gracefully** | Race conditions are normal | Check state and pick different task, don't retry same task |
|
|
698
|
-
| **Provide meaningful summary on done** | Humans see this first | "Wrote full API docs for /users endpoint — 12 methods documented" |
|
|
699
|
-
|
|
700
|
-
### ❌ Don't Do This
|
|
701
|
-
|
|
702
|
-
| Anti-Pattern | Why It's Bad | Instead |
|
|
703
|
-
|---|---|---|
|
|
704
|
-
| **Leave tasks in `bot` (is_working=true)** | Blocks the workspace indefinitely | Always complete as `done` or `blocked` |
|
|
705
|
-
| **Retry `deskfree_state` in loops** | Wastes resources, indicates logic error | Call once per decision point |
|
|
706
|
-
| **Start multiple sub-agents per task** | Creates confusion, race conditions | One sub-agent per task maximum |
|
|
707
|
-
| **Update file only at the end** | Progress lost if interrupted | Update incrementally throughout work |
|
|
708
|
-
| **Ignore 409 conflicts on task claims** | Causes infinite retry loops | Accept conflict, check state, pick different task |
|
|
709
|
-
| **Create tasks without clear actions** | Unclear what needs doing | Use imperative verbs: "research X", "fix Y", "analyze Z" |
|
|
710
|
-
| **Send messages instead of completing blocked** | Task stays in limbo | Send message explaining blocker, then complete as blocked |
|
|
711
|
-
| **Complete "done" without a summary** | Human can't quickly understand outcome | Always provide a 1-3 sentence summary of what was accomplished |
|
|
712
|
-
|
|
713
|
-
### Common Gotchas
|
|
714
|
-
|
|
715
|
-
- **Auto-threading stops after `deskfree_complete_task`** → Pass explicit `taskId` for post-completion messages
|
|
716
|
-
- **Empty file content is not useful** → Always provide meaningful content, even if just an outline
|
|
717
|
-
- **Sub-agents can't create tasks** → Only orchestrator (main session) can create and claim tasks
|
|
718
|
-
- **Ways of working updates require `hasChanges=true`** → Explicitly set flag when submitting changes
|
|
719
|
-
- **Task titles are visible to humans** → Make them professional and descriptive
|
|
720
|
-
- **Evaluation reasoning is important** → Explain your analysis even if no changes are made
|
|
721
|
-
- **summary is required for outcome "done"** → Plan what you'll write before completing
|
|
722
|
-
|
|
723
|
-
## Human Review Outcomes
|
|
724
|
-
|
|
725
|
-
- **Approve** → task moves to `done`. Creates pending evaluation for ways-of-working update.
|
|
726
|
-
- **Decline / request changes** → task returns to `bot` with feedback. Restart it.
|
|
232
|
+
If anything goes wrong mid-task:
|
|
233
|
+
1. `deskfree_send_message` — explain what happened
|
|
234
|
+
2. `deskfree_update_file` — save partial content
|
|
235
|
+
3. `deskfree_complete_task` with outcome `blocked`
|
|
236
|
+
4. **Never leave a task stranded in `active`**
|