@questionbase/deskfree 0.3.0-alpha.20 → 0.3.0-alpha.21
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 +1 -1
- package/dist/index.d.ts +47 -25
- package/dist/index.js +259 -81
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/skills/deskfree/SKILL.md +222 -48
- package/skills/deskfree/references/tools.md +65 -24
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@questionbase/deskfree",
|
|
3
|
-
"version": "0.3.0-alpha.
|
|
3
|
+
"version": "0.3.0-alpha.21",
|
|
4
4
|
"description": "OpenClaw channel plugin for DeskFree — turns DeskFree into a messaging platform for OpenClaw AI agents",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
package/skills/deskfree/SKILL.md
CHANGED
|
@@ -5,11 +5,11 @@ description: >
|
|
|
5
5
|
Use when: creating tasks, managing work items, updating deliverables,
|
|
6
6
|
communicating with humans through DeskFree, checking workspace state,
|
|
7
7
|
handling task lifecycle (start → work → complete → review),
|
|
8
|
-
evaluating completed tasks, updating ways of working.
|
|
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: 7.0.0
|
|
13
13
|
metadata: { 'openclaw': { 'emoji': '🏠' } }
|
|
14
14
|
---
|
|
15
15
|
|
|
@@ -20,12 +20,26 @@ metadata: { 'openclaw': { 'emoji': '🏠' } }
|
|
|
20
20
|
### State Machine (memorize this)
|
|
21
21
|
|
|
22
22
|
```
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
🎯 Initiative lifecycle
|
|
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)
|
|
29
43
|
```
|
|
30
44
|
|
|
31
45
|
- `complete_task` outcome `done` = work complete for review
|
|
@@ -33,11 +47,45 @@ create_task → bot → [start_task] → bot (is_working) → [complete_task]
|
|
|
33
47
|
- Both outcomes move to `human` — the human triages from there
|
|
34
48
|
- When human approves (`done`), a pending evaluation is created for ways-of-working update
|
|
35
49
|
|
|
50
|
+
### The Work Loop
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
1. Check state → deskfree_state — see tasks, active initiatives, pending evaluations
|
|
54
|
+
2. Suggest tasks → deskfree_suggest_tasks — propose work + optional initiative suggestions
|
|
55
|
+
3. Claim a task → deskfree_start_task — read instructions + parent context
|
|
56
|
+
4. Do the work → deskfree_update_deliverable — build incrementally
|
|
57
|
+
5. Suggest follow-ups → if work reveals more to do, suggest them (link to initiative)
|
|
58
|
+
6. Complete → deskfree_complete_and_suggest (or deskfree_complete_task) — deliverable required
|
|
59
|
+
7. Evaluate → if approved tasks have pending WoW evaluation (update globalWoW + initiative)
|
|
60
|
+
```
|
|
61
|
+
|
|
36
62
|
### Three Rules That Break Everything If Ignored
|
|
37
63
|
|
|
38
|
-
1. **Always
|
|
39
|
-
2. **Always check state first.** Call `deskfree_state` before
|
|
40
|
-
3. **Always complete tasks.** Never leave a task in `bot` (is_working=true). End with `deskfree_complete_task` — outcome `done` or `blocked`.
|
|
64
|
+
1. **Always suggest first.** Use `deskfree_suggest_tasks` before starting ANY work. Tasks go through human approval. No exceptions.
|
|
65
|
+
2. **Always check state first.** Call `deskfree_state` before suggesting tasks. Prevents duplicates, shows active initiatives.
|
|
66
|
+
3. **Always complete tasks.** Never leave a task in `bot` (is_working=true). End with `deskfree_complete_and_suggest` or `deskfree_complete_task` — outcome `done` or `blocked`.
|
|
67
|
+
|
|
68
|
+
### Writing Great Instructions
|
|
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 deliverable when applicable
|
|
73
|
+
- **What "done" looks like** — clear acceptance criteria
|
|
74
|
+
- **Known constraints** — gotchas, dependencies, things to avoid
|
|
75
|
+
|
|
76
|
+
### Deliverable Requirements
|
|
77
|
+
|
|
78
|
+
**MUST update deliverable before completing with outcome "done".** Minimum: structured summary of what was found/done, decisions made, and recommendations. An empty or placeholder deliverable will be rejected.
|
|
79
|
+
|
|
80
|
+
### Suggesting Follow-ups
|
|
81
|
+
|
|
82
|
+
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.
|
|
83
|
+
|
|
84
|
+
Use `deskfree_complete_and_suggest` to complete and suggest in one atomic call. Estimate token cost per suggestion — consider how many files to read, how much reasoning, how much output.
|
|
85
|
+
|
|
86
|
+
### Building the Chain
|
|
87
|
+
|
|
88
|
+
You're not just doing tasks — you're building a chain. The instructions you write become someone else's brief. The deliverable you produce becomes someone else's context. Write both with care.
|
|
41
89
|
|
|
42
90
|
### Auto-Threading
|
|
43
91
|
|
|
@@ -47,6 +95,71 @@ The task sidebar is your human's window into your work — every message appears
|
|
|
47
95
|
|
|
48
96
|
---
|
|
49
97
|
|
|
98
|
+
## Initiatives — Long-Lived Areas of Focus
|
|
99
|
+
|
|
100
|
+
Initiatives answer **"what are we working on and why"** while Ways of Working answers **"how do we work."**
|
|
101
|
+
|
|
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
|
+
### When to Propose a New Initiative
|
|
109
|
+
|
|
110
|
+
```
|
|
111
|
+
On every suggest_tasks call, ask yourself:
|
|
112
|
+
|
|
113
|
+
"Does an active initiative exist that this work belongs to?"
|
|
114
|
+
→ Yes: set initiativeId on the relevant suggestions
|
|
115
|
+
→ No, but this is part of a bigger theme: add an initiativeSuggestion
|
|
116
|
+
→ No, and it's a one-off task: no initiative needed
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### Initiative Suggestion Flow
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
1. deskfree_state() → check initiatives[] for existing active ones
|
|
123
|
+
|
|
124
|
+
2. deskfree_suggest_tasks({
|
|
125
|
+
suggestions: [
|
|
126
|
+
{ title: "Audit auth endpoints", estimatedTokens: 20000 },
|
|
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
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
deskfree_state() → sees initiatives: [{ id: "init_abc", title: "Auth Hardening", status: "active" }]
|
|
148
|
+
|
|
149
|
+
deskfree_suggest_tasks({
|
|
150
|
+
suggestions: [
|
|
151
|
+
{ title: "Implement CSRF protection",
|
|
152
|
+
instructions: "...",
|
|
153
|
+
estimatedTokens: 25000,
|
|
154
|
+
initiativeId: "init_abc" // link to existing initiative
|
|
155
|
+
}
|
|
156
|
+
]
|
|
157
|
+
// no initiativeSuggestions needed — initiative already exists
|
|
158
|
+
})
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
50
163
|
## Ways of Working — The Evolving Playbook
|
|
51
164
|
|
|
52
165
|
Ways of Working is a **single versioned markdown document** per bot that evolves as you complete tasks. It's your institutional memory — capturing patterns, preferences, and learnings across all work.
|
|
@@ -57,19 +170,74 @@ Ways of Working is a **single versioned markdown document** per bot that evolves
|
|
|
57
170
|
- Updated after task approval via the evaluation flow (never manually during work)
|
|
58
171
|
- Each update creates a new immutable version — full history preserved
|
|
59
172
|
|
|
60
|
-
### Evaluation Flow
|
|
173
|
+
### Evaluation Flow — Dual Output
|
|
61
174
|
|
|
62
|
-
When a human approves a task, it enters `pendingEvaluations` in state.get
|
|
175
|
+
When a human approves a task, it enters `pendingEvaluations` in state.get. Evaluation now has **two independent outputs**:
|
|
63
176
|
|
|
64
177
|
```
|
|
65
|
-
1. deskfree_claim_evaluation
|
|
66
|
-
|
|
67
|
-
|
|
178
|
+
1. deskfree_claim_evaluation(taskId)
|
|
179
|
+
→ returns: task + messages + waysOfWorking + initiative (if task has initiative_id)
|
|
180
|
+
|
|
181
|
+
2. Read the task deliverable and messages thoroughly
|
|
182
|
+
|
|
183
|
+
3. Ask yourself:
|
|
184
|
+
"Did I learn something about HOW we work that applies everywhere?"
|
|
185
|
+
→ Yes: update globalWoW
|
|
186
|
+
|
|
187
|
+
"Did I learn something about WHERE this initiative stands or
|
|
188
|
+
HOW to approach this specific area?"
|
|
189
|
+
→ Yes: update initiative content
|
|
190
|
+
|
|
191
|
+
Both? → update both
|
|
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
|
+
})
|
|
68
200
|
```
|
|
69
201
|
|
|
70
|
-
**
|
|
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
|
|
71
211
|
|
|
72
|
-
**When NOT to update:** One-off tasks with no transferable learnings, standard work that matched existing patterns.
|
|
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
|
+
})
|
|
240
|
+
```
|
|
73
241
|
|
|
74
242
|
---
|
|
75
243
|
|
|
@@ -79,9 +247,10 @@ When a human approves a task, it enters `pendingEvaluations` in state.get:
|
|
|
79
247
|
|
|
80
248
|
- [ ] Called `deskfree_state` — confirmed it returned data (not empty/error)
|
|
81
249
|
- [ ] Read `waysOfWorking` if present — apply established patterns
|
|
250
|
+
- [ ] Read `initiatives` if present — check for active initiatives this work belongs to
|
|
82
251
|
- [ ] Checked for existing tasks that match intent — no duplicates
|
|
83
|
-
- [ ]
|
|
84
|
-
- [ ]
|
|
252
|
+
- [ ] Suggested a task via `deskfree_suggest_tasks` — with `initiativeId` if linking to existing initiative, or `initiativeSuggestions` if proposing new one
|
|
253
|
+
- [ ] Once approved: called `deskfree_start_task` — confirmed task moved to `bot` (is_working=true)
|
|
85
254
|
|
|
86
255
|
### Mid-Work
|
|
87
256
|
|
|
@@ -98,7 +267,7 @@ When a human approves a task, it enters `pendingEvaluations` in state.get:
|
|
|
98
267
|
|
|
99
268
|
### Heartbeat Evaluation Check
|
|
100
269
|
|
|
101
|
-
- [ ] Any `pendingEvaluations` in state? → claim and evaluate each one
|
|
270
|
+
- [ ] Any `pendingEvaluations` in state? → claim and evaluate each one (submit globalWoW + initiative outputs)
|
|
102
271
|
|
|
103
272
|
---
|
|
104
273
|
|
|
@@ -107,21 +276,21 @@ When a human approves a task, it enters `pendingEvaluations` in state.get:
|
|
|
107
276
|
### Orchestrator Flow (main session)
|
|
108
277
|
|
|
109
278
|
```
|
|
110
|
-
1. deskfree_state
|
|
111
|
-
2.
|
|
112
|
-
3. deskfree_start_task
|
|
113
|
-
4. deskfree_update_deliverable
|
|
114
|
-
5.
|
|
279
|
+
1. deskfree_state → assess workspace + read ways of working + check active initiatives
|
|
280
|
+
2. deskfree_suggest_tasks → suggest tasks (with estimatedTokens, initiativeId, initiativeSuggestions)
|
|
281
|
+
3. deskfree_start_task → claim approved task (returns full context + parent context)
|
|
282
|
+
4. deskfree_update_deliverable → build incrementally as you work
|
|
283
|
+
5. deskfree_complete_and_suggest → complete + suggest follow-ups (or deskfree_complete_task if no follow-ups)
|
|
115
284
|
```
|
|
116
285
|
|
|
117
286
|
### Sub-Agent Flow (recommended for tasks > 5 min)
|
|
118
287
|
|
|
119
288
|
```
|
|
120
|
-
Orchestrator:
|
|
289
|
+
Orchestrator: deskfree_suggest_tasks → (human approves) → deskfree_start_task → spawn sub-agent with full task context
|
|
121
290
|
Sub-agent: deskfree_update_deliverable (incrementally) → deskfree_complete_task → terminate
|
|
122
291
|
```
|
|
123
292
|
|
|
124
|
-
Sub-agents have **4 tools:** `deskfree_update_deliverable`, `deskfree_complete_task`, `deskfree_send_message` (also supports task suggestions), `deskfree_submit_evaluation`. They cannot
|
|
293
|
+
Sub-agents have **4 tools:** `deskfree_update_deliverable`, `deskfree_complete_task`, `deskfree_send_message` (also supports task suggestions), `deskfree_submit_evaluation`. They cannot suggest tasks, read workspace state, or claim evaluations.
|
|
125
294
|
|
|
126
295
|
### When to Use Main vs Sub-Agent
|
|
127
296
|
|
|
@@ -151,18 +320,20 @@ Sub-agents have **4 tools:** `deskfree_update_deliverable`, `deskfree_complete_t
|
|
|
151
320
|
|
|
152
321
|
### Heartbeat / Proactive Check
|
|
153
322
|
|
|
154
|
-
1. `deskfree_state` → get workspace snapshot + check `waysOfWorking` + `pendingEvaluations`
|
|
155
|
-
2. `pendingEvaluations`? → `deskfree_claim_evaluation` → `deskfree_submit_evaluation`
|
|
323
|
+
1. `deskfree_state` → get workspace snapshot + check `waysOfWorking` + `initiatives` + `pendingEvaluations`
|
|
324
|
+
2. `pendingEvaluations`? → `deskfree_claim_evaluation` → `deskfree_submit_evaluation` (with globalWoW + initiative outputs)
|
|
156
325
|
3. `bot` tasks? → `deskfree_start_task` + spawn sub-agents
|
|
157
326
|
4. `bot` (is_working=true) with no active sub-agent? → Complete as blocked or resume
|
|
158
327
|
|
|
159
328
|
### Human Gives You Work
|
|
160
329
|
|
|
161
|
-
1. `deskfree_state` → check existing tasks + read ways of working
|
|
162
|
-
2.
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
330
|
+
1. `deskfree_state` → check existing tasks + read ways of working + check active initiatives
|
|
331
|
+
2. Does this work belong to an active initiative? → set `initiativeId` on suggestions
|
|
332
|
+
OR is this starting a new area of focus? → add `initiativeSuggestions`
|
|
333
|
+
3. `deskfree_suggest_tasks` → suggest with clear title + instructions
|
|
334
|
+
4. [human approves] → `deskfree_start_task` → claim it
|
|
335
|
+
5. Work → `deskfree_update_deliverable` incrementally
|
|
336
|
+
6. `deskfree_complete_task` → outcome `done` or `blocked`
|
|
166
337
|
|
|
167
338
|
---
|
|
168
339
|
|
|
@@ -170,18 +341,19 @@ Sub-agents have **4 tools:** `deskfree_update_deliverable`, `deskfree_complete_t
|
|
|
170
341
|
|
|
171
342
|
> **Full parameter details:** See `references/tools.md`
|
|
172
343
|
|
|
173
|
-
### Orchestrator (
|
|
344
|
+
### Orchestrator (10 tools)
|
|
174
345
|
|
|
175
346
|
| Tool | What it does |
|
|
176
347
|
|---|---|
|
|
177
|
-
| `deskfree_state` | Full workspace snapshot — tasks, recently done, ways of working, pending evaluations |
|
|
178
|
-
| `
|
|
179
|
-
| `deskfree_start_task` | Claim task → `bot` (is_working=true), returns full context |
|
|
348
|
+
| `deskfree_state` | Full workspace snapshot — tasks, recently done, ways of working, active initiatives, pending evaluations |
|
|
349
|
+
| `deskfree_suggest_tasks` | Suggest tasks for human approval (with estimatedTokens, initiativeId, initiativeSuggestions) |
|
|
350
|
+
| `deskfree_start_task` | Claim task → `bot` (is_working=true), returns full context + parent context |
|
|
180
351
|
| `deskfree_update_deliverable` | Build deliverable markdown incrementally |
|
|
181
352
|
| `deskfree_complete_task` | Mark done or blocked → `human` |
|
|
182
|
-
| `
|
|
183
|
-
| `
|
|
184
|
-
| `
|
|
353
|
+
| `deskfree_complete_and_suggest` | Complete current task + suggest follow-ups in one atomic call |
|
|
354
|
+
| `deskfree_send_message` | Message in task thread |
|
|
355
|
+
| `deskfree_claim_evaluation` | Claim a pending evaluation — returns task, messages, globalWoW, and initiative (if applicable) |
|
|
356
|
+
| `deskfree_submit_evaluation` | Submit evaluation with dual output: globalWoW + initiative (each independently updatable) |
|
|
185
357
|
|
|
186
358
|
### Worker (4 tools — sub-agents only)
|
|
187
359
|
|
|
@@ -316,11 +488,12 @@ If anything goes wrong mid-task:
|
|
|
316
488
|
```
|
|
317
489
|
Main Session:
|
|
318
490
|
1. deskfree_state() → check workspace
|
|
319
|
-
2.
|
|
491
|
+
2. deskfree_suggest_tasks([{
|
|
320
492
|
title: "Research competitor HumanLayer",
|
|
321
493
|
instructions: "Analyze their product, pricing, and positioning vs DeskFree"
|
|
322
|
-
})
|
|
323
|
-
3.
|
|
494
|
+
}])
|
|
495
|
+
3. [human approves task]
|
|
496
|
+
4. deskfree_start_task(taskId) → get task context
|
|
324
497
|
4. spawn_subagent(research_prompt) → background research
|
|
325
498
|
|
|
326
499
|
Sub-agent:
|
|
@@ -336,11 +509,12 @@ Sub-agent:
|
|
|
336
509
|
|
|
337
510
|
```
|
|
338
511
|
1. deskfree_state() → check current state
|
|
339
|
-
2.
|
|
512
|
+
2. deskfree_suggest_tasks([{
|
|
340
513
|
title: "Fix broken login endpoint",
|
|
341
514
|
instructions: "Apply hotfix for 500 error in /auth/login"
|
|
342
|
-
})
|
|
343
|
-
3.
|
|
515
|
+
}])
|
|
516
|
+
3. [human approves task]
|
|
517
|
+
4. deskfree_start_task(taskId) → claim the work
|
|
344
518
|
4. deskfree_update_deliverable() → "Investigating issue..."
|
|
345
519
|
5. [fix the code...]
|
|
346
520
|
6. deskfree_update_deliverable() → "Applied fix, testing..."
|
|
@@ -1,25 +1,20 @@
|
|
|
1
1
|
# DeskFree Tools — Full Parameter Reference
|
|
2
2
|
|
|
3
|
-
## Orchestrator Tools (
|
|
3
|
+
## Orchestrator Tools (10)
|
|
4
4
|
|
|
5
5
|
### `deskfree_state`
|
|
6
|
-
Get full workspace snapshot — all tasks, recently done tasks, current ways of working, and pending evaluations.
|
|
6
|
+
Get full workspace snapshot — all tasks, recently done tasks, active initiatives, current ways of working, and pending evaluations.
|
|
7
7
|
|
|
8
8
|
| Parameter | Type | Required | Description |
|
|
9
9
|
|-----------|------|----------|-------------|
|
|
10
10
|
| *(none)* | — | — | — |
|
|
11
11
|
|
|
12
|
-
**Returns:**
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
| Parameter | Type | Required | Description |
|
|
20
|
-
|-----------|------|----------|-------------|
|
|
21
|
-
| `title` | string | Yes | Task title (max 200 chars) |
|
|
22
|
-
| `instructions` | string | No | Detailed instructions for the task |
|
|
12
|
+
**Returns:**
|
|
13
|
+
- `tasks` — active tasks array
|
|
14
|
+
- `recentlyDone` — recently completed tasks
|
|
15
|
+
- `waysOfWorking` — global ways of working (string or null)
|
|
16
|
+
- `pendingEvaluations` — array of `{taskId, taskNumber, title, initiativeId?}`
|
|
17
|
+
- `initiatives` — active initiatives with `{id, title, status, content, contentVersion, taskCount, activeTaskCount}`
|
|
23
18
|
|
|
24
19
|
---
|
|
25
20
|
|
|
@@ -30,7 +25,7 @@ Claim a `bot` task → moves to `bot` (is_working=true). Returns full context.
|
|
|
30
25
|
|-----------|------|----------|-------------|
|
|
31
26
|
| `taskId` | string | Yes | Task UUID to claim |
|
|
32
27
|
|
|
33
|
-
**Returns:** Full task context — instructions, current deliverable, message history. Use this to populate sub-agent spawn prompts.
|
|
28
|
+
**Returns:** Full task context — instructions, current deliverable, message history, and `parentContext` (title, deliverable, instructions of the parent task if this was suggested by another task). Use this to populate sub-agent spawn prompts.
|
|
34
29
|
|
|
35
30
|
**Errors:** 404 if task not `bot` or doesn't exist. 409 if already claimed.
|
|
36
31
|
|
|
@@ -61,38 +56,84 @@ Finish a task → moves to `human`.
|
|
|
61
56
|
---
|
|
62
57
|
|
|
63
58
|
### `deskfree_send_message`
|
|
64
|
-
Send a message in the task thread
|
|
59
|
+
Send a message in the task thread (progress update, question, status report).
|
|
65
60
|
|
|
66
61
|
| Parameter | Type | Required | Description |
|
|
67
62
|
|-----------|------|----------|-------------|
|
|
68
63
|
| `content` | string | No | Message content. Required unless `suggestions` is provided. |
|
|
69
64
|
| `taskId` | string | No | Task UUID (optional — auto-threaded to active task if omitted) |
|
|
70
|
-
| `suggestions` | array | No | List of tasks to suggest for human review (1-10)
|
|
65
|
+
| `suggestions` | array | No | List of tasks to suggest for human review (1-10). Prefer `deskfree_suggest_tasks` for richer suggestions with estimatedTokens and dependencies. |
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
### `deskfree_suggest_tasks`
|
|
70
|
+
Suggest tasks for human approval. Creates tasks with `suggested` status. Can also propose new initiatives.
|
|
71
|
+
|
|
72
|
+
| Parameter | Type | Required | Description |
|
|
73
|
+
|-----------|------|----------|-------------|
|
|
74
|
+
| `suggestions` | array | Yes | Array of task suggestions (1-20) |
|
|
75
|
+
| `suggestions[].title` | string | Yes | Task title — short, action-oriented (max 200 chars) |
|
|
76
|
+
| `suggestions[].instructions` | string | No | Detailed instructions: what to do, why, what done looks like, constraints |
|
|
77
|
+
| `suggestions[].estimatedTokens` | number | No | Estimated token cost for completing this task |
|
|
78
|
+
| `suggestions[].dependsOn` | string[] | No | Task IDs this depends on (blocks claiming until those are done) |
|
|
79
|
+
| `suggestions[].initiativeId` | string | No | Link task to an existing active initiative |
|
|
80
|
+
| `initiativeSuggestions` | array | No | Propose new initiatives (0-5) |
|
|
81
|
+
| `initiativeSuggestions[].title` | string | Yes | Initiative title (max 200 chars) |
|
|
82
|
+
| `initiativeSuggestions[].content` | string | Yes | Initial initiative content (markdown — current state, approach, next priorities) |
|
|
83
|
+
| `initiativeSuggestions[].taskRefs` | number[] | No | Indexes into `suggestions[]` to auto-link when approved |
|
|
84
|
+
| `parentTaskId` | string | No | Parent task ID — set when suggesting follow-ups from within a task |
|
|
85
|
+
|
|
86
|
+
**Returns:** `{ suggestionIds: string[], initiativeSuggestionIds?: string[] }`
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
### `deskfree_complete_and_suggest`
|
|
91
|
+
Complete the current task AND suggest follow-up tasks in one atomic call.
|
|
92
|
+
|
|
93
|
+
| Parameter | Type | Required | Description |
|
|
94
|
+
|-----------|------|----------|-------------|
|
|
95
|
+
| `taskId` | string | Yes | Task UUID to complete |
|
|
96
|
+
| `outcome` | string | Yes | `done` or `blocked` |
|
|
97
|
+
| `suggestions` | array | No | Follow-up task suggestions (0-20) |
|
|
98
|
+
| `suggestions[].title` | string | Yes | Task title (max 200 chars) |
|
|
99
|
+
| `suggestions[].instructions` | string | No | Detailed instructions |
|
|
100
|
+
| `suggestions[].estimatedTokens` | number | No | Estimated token cost |
|
|
101
|
+
| `suggestions[].dependsOnTaskIds` | string[] | No | Task IDs this depends on |
|
|
102
|
+
| `suggestions[].initiativeId` | string | No | Link to existing initiative |
|
|
103
|
+
| `initiativeSuggestions` | array | No | Propose new initiatives (same schema as deskfree_suggest_tasks) |
|
|
104
|
+
|
|
105
|
+
**Returns:** Updated task object + `suggestionIds` array (if suggestions were created) + `initiativeSuggestionIds` (if initiatives were suggested).
|
|
106
|
+
|
|
107
|
+
**Note:** Deliverable required for outcome `done`. Task moves to `human` for review.
|
|
71
108
|
|
|
72
109
|
---
|
|
73
110
|
|
|
74
111
|
### `deskfree_claim_evaluation`
|
|
75
|
-
Claim a pending
|
|
112
|
+
Claim a pending evaluation. Atomically sets `isWorking=true` where `evaluationPending=true` and `isWorking=false`. Returns null if already claimed.
|
|
76
113
|
|
|
77
114
|
| Parameter | Type | Required | Description |
|
|
78
115
|
|-----------|------|----------|-------------|
|
|
79
116
|
| `taskId` | string | Yes | Task UUID from `pendingEvaluations` list |
|
|
80
117
|
|
|
81
|
-
**Returns:** `{ task, waysOfWorking, currentVersion, messages }` — full evaluation context, or `null` if already claimed.
|
|
118
|
+
**Returns:** `{ task, waysOfWorking, currentVersion, messages, initiative? }` — full evaluation context including initiative data (if task is linked to one), or `null` if already claimed.
|
|
82
119
|
|
|
83
120
|
---
|
|
84
121
|
|
|
85
122
|
### `deskfree_submit_evaluation`
|
|
86
|
-
Submit the result of
|
|
123
|
+
Submit the result of an evaluation. Supports dual output: global ways of working + initiative content. Always call this after `deskfree_claim_evaluation`.
|
|
87
124
|
|
|
88
125
|
| Parameter | Type | Required | Description |
|
|
89
126
|
|-----------|------|----------|-------------|
|
|
90
127
|
| `taskId` | string | Yes | Task UUID being evaluated |
|
|
91
|
-
| `reasoning` | string | Yes | Explanation of your analysis — what you learned
|
|
92
|
-
| `
|
|
93
|
-
| `
|
|
128
|
+
| `reasoning` | string | Yes | Explanation of your analysis — what you learned |
|
|
129
|
+
| `globalWoW` | object | Yes | Global ways of working update |
|
|
130
|
+
| `globalWoW.hasChanges` | boolean | Yes | Whether global WoW should be updated |
|
|
131
|
+
| `globalWoW.updatedContent` | string | No | Full updated global WoW markdown (required if hasChanges=true) |
|
|
132
|
+
| `initiative` | object | No | Initiative content update (only if task has initiative_id) |
|
|
133
|
+
| `initiative.hasChanges` | boolean | Yes | Whether initiative content should be updated |
|
|
134
|
+
| `initiative.updatedContent` | string | No | Full updated initiative content markdown (required if hasChanges=true) |
|
|
94
135
|
|
|
95
|
-
**Returns:** `{ success,
|
|
136
|
+
**Returns:** `{ success, globalVersion?, initiativeVersion? }`
|
|
96
137
|
|
|
97
138
|
---
|
|
98
139
|
|
|
@@ -100,4 +141,4 @@ Submit the result of a ways-of-working evaluation. Always call this after `deskf
|
|
|
100
141
|
|
|
101
142
|
Sub-agents receive: `deskfree_update_deliverable`, `deskfree_complete_task`, `deskfree_send_message`, `deskfree_submit_evaluation`
|
|
102
143
|
|
|
103
|
-
They **cannot** use: `deskfree_state`, `
|
|
144
|
+
They **cannot** use: `deskfree_state`, `deskfree_suggest_tasks`, `deskfree_start_task`, `deskfree_claim_evaluation`
|