@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@questionbase/deskfree",
3
- "version": "0.3.0-alpha.20",
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",
@@ -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: 6.0.0
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
- create_task bot → [start_task] → bot (is_working) → [complete_task] → human
24
- ↑ |
25
- | human approves/declines |
26
- └────────────────────────────────────────────────────────────────┘
27
- |
28
- [approve] → done → [evaluate] → ways_of_working updated
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 self-task.** Create a DeskFree task before starting ANY work. Tasks are cheap invisible work is expensive. No exceptions.
39
- 2. **Always check state first.** Call `deskfree_state` before creating tasks. Prevents duplicates, shows what needs attention.
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 → claim the eval, get task + messages + current ways of working
66
- 2. Read the task history → understand what was done and how
67
- 3. deskfree_submit_evaluation → provide reasoning + updated content (or no changes)
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
- **When to update:** New patterns emerged, a better approach was found, recurring mistakes identified, human gave feedback that reveals process improvements.
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
- - [ ] Created a task with clear, action-oriented title (max 200 chars)
84
- - [ ] Called `deskfree_start_task` — confirmed task moved to `bot` (is_working=true)
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 → assess workspace + read ways of working
111
- 2. deskfree_create_task create with clear title + instructions
112
- 3. deskfree_start_task → claim it (returns full context)
113
- 4. deskfree_update_deliverable → build incrementally as you work
114
- 5. deskfree_complete_task outcome "done" or "blocked"
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: deskfree_create_task → deskfree_start_task → spawn sub-agent with full task context
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 create tasks, read workspace state, or claim evaluations.
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. `deskfree_create_task`clear title + instructions
163
- 3. `deskfree_start_task`claim it
164
- 4. Work`deskfree_update_deliverable` incrementally
165
- 5. `deskfree_complete_task`outcome `done` or `blocked`
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 (8 tools)
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
- | `deskfree_create_task` | Create task ( `bot`) |
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
- | `deskfree_send_message` | Message in task thread (also supports task suggestions) |
183
- | `deskfree_claim_evaluation` | Claim a pending ways-of-working evaluation |
184
- | `deskfree_submit_evaluation` | Submit evaluation result with reasoning and optional updated content |
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. deskfree_create_task({
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. deskfree_start_task(taskId) → get task context
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. deskfree_create_task({
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. deskfree_start_task(taskId) → claim the work
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 (8)
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:** Active tasks array, recently completed tasks, `waysOfWorking` (string or null), `pendingEvaluations` (array of `{taskId, taskNumber, title}`).
13
-
14
- ---
15
-
16
- ### `deskfree_create_task`
17
- Create a new task (starts as `bot`).
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. Can also suggest follow-up tasks for human review.
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), each with `title` (required) and `instructions` (optional). Provide this instead of `content`. |
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 ways-of-working evaluation. Atomically sets `isWorking=true` where `evaluationPending=true` and `isWorking=false`. Returns null if already claimed.
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 a ways-of-working evaluation. Always call this after `deskfree_claim_evaluation`.
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 and why you did or did not update ways of working |
92
- | `hasChanges` | boolean | Yes | Whether the ways of working should be updated |
93
- | `updatedContent` | string | No | Full updated ways-of-working markdown (required if `hasChanges=true`) |
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, version }` — version number of the new ways-of-working entry (if hasChanges=true).
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`, `deskfree_create_task`, `deskfree_start_task`, `deskfree_claim_evaluation`
144
+ They **cannot** use: `deskfree_state`, `deskfree_suggest_tasks`, `deskfree_start_task`, `deskfree_claim_evaluation`