hzl-cli 1.26.0 → 1.27.0
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
CHANGED
|
@@ -1,127 +1,38 @@
|
|
|
1
1
|
# HZL (Hazel)
|
|
2
2
|
|
|
3
|
-
**External task ledger for coding agents
|
|
3
|
+
**External task ledger for coding agents.**
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
HZL is for when work outlives a single session: days-long projects, switching between Claude Code and Codex, OpenClaw juggling parallel workstreams.
|
|
8
|
-
|
|
9
|
-
📚 **[Full Documentation](https://www.hzl-tasks.com)** — Concepts, scenarios, and tutorials
|
|
10
|
-
|
|
11
|
-
**Coding agents (Claude Code, Codex, Gemini)**
|
|
12
|
-
|
|
13
|
-
You're working across several projects over days or weeks. You switch between agents. Each has its own task tracking (or none).
|
|
14
|
-
|
|
15
|
-
HZL is the shared ledger underneath. Claim a task in Claude Code, pick it up in Codex tomorrow. One source of truth across tools and sessions.
|
|
16
|
-
|
|
17
|
-
**OpenClaw**
|
|
18
|
-
|
|
19
|
-
OpenClaw has tools for user memory—context, preferences, past chats. It doesn't have a tool for tracking task execution state: workstreams, dependencies, checkpoints.
|
|
20
|
-
|
|
21
|
-
That all lives in-context today. It burns space. It fragments when chats compact.
|
|
22
|
-
|
|
23
|
-
HZL fills that gap. Say you ask OpenClaw to plan a family vacation—flights, hotels, activities, reservations. That's multiple tasks with dependencies (can't book hotels until you know the dates). Instead of tracking all of it in the chat, OpenClaw creates tasks in HZL:
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
hzl task list --project family-vacation --available --json
|
|
27
|
-
{"tasks":[{"task_id":"t_abc123","title":"Book hotel","project":"family-vacation","status":"ready","priority":3,"created_at":"2025-01-15T10:00:00.000Z"}],"total":1}
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
OpenClaw queries HZL, sees what's unblocked, and picks up the next task—without reconstructing state from a compacted chat. If you ever run multiple OpenClaw instances, they coordinate through the same ledger.
|
|
31
|
-
|
|
32
|
-
**Local-first with built-in cloud sync**
|
|
33
|
-
|
|
34
|
-
Fast reads and writes to local SQLite. Enable sync to [Turso](https://turso.tech) with one command (`hzl init --sync-url ...`) for automatic backup and multi-device access.
|
|
35
|
-
|
|
36
|
-
**Also**
|
|
37
|
-
|
|
38
|
-
- Leases: time-limited claims that expire, so callers can find and reclaim stuck work
|
|
39
|
-
- Checkpoints: save progress notes so work can resume after interruption
|
|
40
|
-
- Event history: full audit trail of what happened
|
|
41
|
-
|
|
42
|
-
Using OpenClaw? Start here: [OpenClaw integration](#openclaw-integration)
|
|
43
|
-
|
|
44
|
-
Using Claude Code, Codex, or Gemini? See: [Using HZL with coding agents](#using-hzl-with-claude-code-codex-gemini-cli-or-any-coding-agent)
|
|
45
|
-
|
|
46
|
-
Data is stored in SQLite. Default location: `$XDG_DATA_HOME/hzl/` (fallback `~/.local/share/hzl/`); Windows: `%LOCALAPPDATA%\\hzl\\`. Contains `events.db` (source of truth) and `cache.db` (projections).
|
|
5
|
+
📚 **[Full Documentation](https://www.hzl-tasks.com)** — Concepts, workflows, and CLI reference
|
|
47
6
|
|
|
48
7
|
---
|
|
49
8
|
|
|
50
|
-
## Why
|
|
9
|
+
## Why HZL?
|
|
51
10
|
|
|
52
|
-
|
|
11
|
+
Most task trackers are built for humans. HZL is built for agents:
|
|
53
12
|
|
|
54
|
-
|
|
13
|
+
- **Backend-first** — Task database with a CLI, not another Trello
|
|
14
|
+
- **Model-agnostic** — Tasks live outside any vendor's memory
|
|
15
|
+
- **Multi-agent safe** — Atomic claiming prevents duplicate work
|
|
16
|
+
- **Resumable** — Checkpoints let work survive session boundaries
|
|
55
17
|
|
|
56
|
-
|
|
57
|
-
- It is model-agnostic. Your tasks live outside any one vendor's memory or chat history.
|
|
58
|
-
- It is multi-agent safe. Leases prevent orphaned work and enable clean handoffs.
|
|
59
|
-
- It is resumable. Checkpoints let an agent crash, reboot, or swap models and keep going.
|
|
18
|
+
If you already have a favorite human todo app, keep it. HZL is for shared task state that multiple agents can read and write.
|
|
60
19
|
|
|
61
|
-
|
|
62
|
-
If you need a shared task state that multiple agents can read/write, that is HZL.
|
|
20
|
+
## When to Use HZL
|
|
63
21
|
|
|
64
|
-
|
|
22
|
+
HZL is for when work outlives a single session:
|
|
65
23
|
|
|
66
|
-
|
|
24
|
+
- **Cross-agent workflows** — Claude Code, Codex, Gemini sharing one task board
|
|
25
|
+
- **Session persistence** — Pick up where you left off tomorrow
|
|
26
|
+
- **Orchestration** — One agent delegates to another with clean handoffs
|
|
27
|
+
- **Backup** — Cloud sync keeps task state safe
|
|
67
28
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
```mermaid
|
|
71
|
-
flowchart LR
|
|
72
|
-
You[You] --> OC["OpenClaw (orchestrator)"]
|
|
73
|
-
OC --> Tools["OpenClaw tools<br/>(browser, exec, email, etc.)"]
|
|
74
|
-
OC <--> HZL[(HZL task ledger)]
|
|
75
|
-
OC --> S1[Claude Code]
|
|
76
|
-
OC --> S2[Codex / other]
|
|
77
|
-
S1 <--> HZL
|
|
78
|
-
S2 <--> HZL
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
OpenClaw coordinates the work. HZL is the shared, durable task board that OpenClaw and its sub-agents can use across sessions.
|
|
82
|
-
|
|
83
|
-
### 2) Any multi-agent system (no OpenClaw required)
|
|
84
|
-
|
|
85
|
-
```mermaid
|
|
86
|
-
flowchart LR
|
|
87
|
-
U[You] --> O["Orchestrator (human or agent)"]
|
|
88
|
-
O <--> HZL[(HZL)]
|
|
89
|
-
O --> C[Claude Code]
|
|
90
|
-
O --> X[Codex]
|
|
91
|
-
O --> G[Gemini]
|
|
92
|
-
C <--> HZL
|
|
93
|
-
X <--> HZL
|
|
94
|
-
G <--> HZL
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
Same idea: once you are switching tools/models, you need a shared ledger.
|
|
98
|
-
|
|
99
|
-
### 3) One agent, many sessions
|
|
100
|
-
|
|
101
|
-
```mermaid
|
|
102
|
-
flowchart LR
|
|
103
|
-
U[You] --> A["Coding agent<br>(Claude Code, Codex, etc)"]
|
|
104
|
-
A <--> HZL
|
|
105
|
-
A --> R[Repo / files]
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
Use HZL to persist "what's next" and "what changed" between sessions.
|
|
109
|
-
|
|
110
|
-
### 4) HZL as the backend for your own UI
|
|
111
|
-
|
|
112
|
-
```mermaid
|
|
113
|
-
flowchart LR
|
|
114
|
-
UI[Lightweight web app] --> HZL
|
|
115
|
-
Agents[Agents + scripts] --> HZL
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
HZL includes a basic [Kanban dashboard](#web-dashboard) for human visibility. For richer interfaces, build your own frontend using `hzl-core` directly—HZL stays the durable backend that both humans and agents can use.
|
|
29
|
+
If you only use one agent and never need persistence, the built-in tracker is fine. Once you need durability or coordination, reach for HZL.
|
|
119
30
|
|
|
120
31
|
---
|
|
121
32
|
|
|
122
33
|
## Quickstart
|
|
123
34
|
|
|
124
|
-
### 1. Install
|
|
35
|
+
### 1. Install
|
|
125
36
|
|
|
126
37
|
Requires Node.js 22.14+.
|
|
127
38
|
|
|
@@ -129,548 +40,102 @@ Requires Node.js 22.14+.
|
|
|
129
40
|
curl -fsSL "https://raw.githubusercontent.com/tmchow/hzl/main/scripts/install.sh?$(date +%s)" | bash
|
|
130
41
|
```
|
|
131
42
|
|
|
132
|
-
This installs the CLI, initializes the database, and sets up Claude Code/Codex integrations (if detected).
|
|
133
|
-
|
|
134
43
|
<details>
|
|
135
44
|
<summary>Alternative install methods</summary>
|
|
136
45
|
|
|
137
|
-
**
|
|
46
|
+
**Homebrew (macOS/Linux):**
|
|
138
47
|
```bash
|
|
139
48
|
brew tap tmchow/hzl && brew install hzl && hzl init
|
|
140
49
|
```
|
|
141
50
|
|
|
142
|
-
**
|
|
51
|
+
**NPM:**
|
|
143
52
|
```bash
|
|
144
53
|
npm install -g hzl-cli && hzl init
|
|
145
54
|
```
|
|
146
|
-
|
|
147
|
-
**Then set up agent integrations:**
|
|
148
|
-
|
|
149
|
-
*Claude Code (run in Claude Code):*
|
|
150
|
-
```
|
|
151
|
-
/plugin marketplace add tmchow/hzl
|
|
152
|
-
/plugin install hzl@hzl
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
*Codex:*
|
|
156
|
-
```bash
|
|
157
|
-
mkdir -p ~/.codex/skills/hzl
|
|
158
|
-
curl -fsSL https://raw.githubusercontent.com/tmchow/hzl/main/skills/hzl/SKILL.md -o ~/.codex/skills/hzl/SKILL.md
|
|
159
|
-
```
|
|
160
|
-
|
|
161
55
|
</details>
|
|
162
56
|
|
|
163
|
-
### 2. Add
|
|
57
|
+
### 2. Add to Your Project
|
|
164
58
|
|
|
165
|
-
|
|
59
|
+
Append the agent policy to your repo so agents know when to use HZL:
|
|
166
60
|
|
|
167
61
|
```bash
|
|
168
62
|
curl -fsSL https://raw.githubusercontent.com/tmchow/hzl/main/snippets/AGENT-POLICY.md >> AGENTS.md
|
|
169
63
|
```
|
|
170
64
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
### Enable Cloud Sync (Optional)
|
|
174
|
-
|
|
175
|
-
Sync with a Turso database for multi-device/multi-agent access:
|
|
65
|
+
### 3. Create Tasks and Work
|
|
176
66
|
|
|
177
67
|
```bash
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
```bash
|
|
184
|
-
hzl project create portland-trip
|
|
185
|
-
|
|
186
|
-
hzl task add "Check calendars for March weekends" -P portland-trip --priority 5
|
|
187
|
-
hzl task add "Research neighborhoods + activities" -P portland-trip --priority 4
|
|
188
|
-
hzl task add "Shortlist 2-3 weekend options" -P portland-trip --priority 3 \
|
|
189
|
-
--depends-on <calendar-task-id> --depends-on <research-task-id>
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
### Work with checkpoints
|
|
68
|
+
# Create a project and tasks
|
|
69
|
+
hzl project create my-feature
|
|
70
|
+
hzl task add "Design the API" -P my-feature
|
|
71
|
+
hzl task add "Implement endpoints" -P my-feature --depends-on 1
|
|
193
72
|
|
|
194
|
-
|
|
195
|
-
hzl task claim
|
|
196
|
-
hzl task checkpoint
|
|
197
|
-
hzl task complete
|
|
198
|
-
```
|
|
199
|
-
|
|
200
|
-
### Link to supporting documents
|
|
201
|
-
|
|
202
|
-
Tasks stay lightweight. Use `--links` to reference design docs, brainstorms, or specs:
|
|
203
|
-
|
|
204
|
-
```bash
|
|
205
|
-
# Create a task that links to context documents
|
|
206
|
-
hzl task add "Implement auth flow per design" -P myapp --priority 3 \
|
|
207
|
-
--links docs/designs/auth-flow.md,docs/brainstorm/2026-01-auth-options.md
|
|
73
|
+
# Claim and work
|
|
74
|
+
hzl task claim 1 --assignee claude-code
|
|
75
|
+
hzl task checkpoint 1 "API design complete"
|
|
76
|
+
hzl task complete 1
|
|
208
77
|
|
|
209
|
-
#
|
|
210
|
-
hzl
|
|
211
|
-
# → { "links": ["docs/designs/auth-flow.md", "https://somedomain/resource.md"], ... }
|
|
78
|
+
# View progress
|
|
79
|
+
hzl serve # Opens web dashboard at localhost:3456
|
|
212
80
|
```
|
|
213
81
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
### Use JSON output when scripting
|
|
82
|
+
### Enable Cloud Sync (Optional)
|
|
217
83
|
|
|
218
84
|
```bash
|
|
219
|
-
hzl
|
|
220
|
-
hzl task next --project portland-trip --json
|
|
85
|
+
hzl init --sync-url libsql://<db>.turso.io --auth-token <token>
|
|
221
86
|
```
|
|
222
87
|
|
|
223
88
|
---
|
|
224
89
|
|
|
225
|
-
##
|
|
226
|
-
|
|
227
|
-
### Tasks are units of work, not reminders
|
|
228
|
-
|
|
229
|
-
HZL is optimized for "do work, report progress, unblock the next step."
|
|
230
|
-
|
|
231
|
-
If you need time-based reminders, pair HZL with a scheduler (cron, OpenClaw cron, etc.).
|
|
232
|
-
|
|
233
|
-
### Checkpoints are progress snapshots
|
|
234
|
-
|
|
235
|
-
A checkpoint is a compact, durable record of what happened:
|
|
236
|
-
|
|
237
|
-
- what you tried
|
|
238
|
-
- what you found
|
|
239
|
-
- what's still missing
|
|
240
|
-
- links, commands, or file paths needed to resume
|
|
241
|
-
|
|
242
|
-
### Dependencies encode ordering
|
|
243
|
-
|
|
244
|
-
Dependencies are how an agent avoids premature work:
|
|
245
|
-
|
|
246
|
-
- "Don't search flights before you know dates."
|
|
247
|
-
- "Don't open a PR before tests pass."
|
|
248
|
-
|
|
249
|
-
### Leases make multi-agent handoffs reliable
|
|
90
|
+
## Documentation
|
|
250
91
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
-
|
|
255
|
-
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
HZL uses a **local-first** architecture. You always read/write to a fast local database. Sync happens in the background via Turso/libSQL.
|
|
260
|
-
|
|
261
|
-
```mermaid
|
|
262
|
-
flowchart TD
|
|
263
|
-
CLI[User / Agent CLI]
|
|
264
|
-
subgraph Local["Local Machine"]
|
|
265
|
-
Cache[(cache.db<br/>Reads)]
|
|
266
|
-
Events[(events.db<br/>Writes)]
|
|
267
|
-
Sync[Sync Engine]
|
|
268
|
-
end
|
|
269
|
-
Cloud[(Turso / Cloud)]
|
|
270
|
-
|
|
271
|
-
CLI -->|Read| Cache
|
|
272
|
-
CLI -->|Write| Events
|
|
273
|
-
Events -->|Rebuild| Cache
|
|
274
|
-
Events <-->|Sync| Sync
|
|
275
|
-
Sync <-->|Replication| Cloud
|
|
276
|
-
```
|
|
92
|
+
| Section | What's There |
|
|
93
|
+
|---------|-------------|
|
|
94
|
+
| [Getting Started](https://www.hzl-tasks.com/getting-started/) | Installation, quickstart, agent setup |
|
|
95
|
+
| [Concepts](https://www.hzl-tasks.com/concepts/) | Projects, tasks, dependencies, checkpoints, leases |
|
|
96
|
+
| [Workflows](https://www.hzl-tasks.com/workflows/) | Single-agent, multi-agent, handoffs, breakdown patterns |
|
|
97
|
+
| [CLI Reference](https://www.hzl-tasks.com/reference/cli) | Complete command documentation |
|
|
98
|
+
| [Web Dashboard](https://www.hzl-tasks.com/dashboard) | Kanban board setup and usage |
|
|
99
|
+
| [Troubleshooting](https://www.hzl-tasks.com/troubleshooting) | Common issues and fixes |
|
|
277
100
|
|
|
278
101
|
---
|
|
279
102
|
|
|
280
|
-
##
|
|
281
|
-
|
|
282
|
-
### Pattern: Multi-agent backlog (recommended)
|
|
283
|
-
|
|
284
|
-
Conventions that help:
|
|
285
|
-
|
|
286
|
-
- Use consistent author IDs: `openclaw`, `claude-code`, `codex`, `gemini`, etc.
|
|
287
|
-
- Claim tasks before work.
|
|
288
|
-
- Checkpoint whenever you learn something that would be painful to rediscover.
|
|
289
|
-
|
|
290
|
-
Example handoff:
|
|
291
|
-
|
|
292
|
-
```bash
|
|
293
|
-
# Orchestrator creates task
|
|
294
|
-
hzl task add "Implement REST API endpoints" -P myapp --priority 2
|
|
295
|
-
TASK_ID=<id>
|
|
296
|
-
|
|
297
|
-
# Worker agent claims with a lease
|
|
298
|
-
hzl task claim "$TASK_ID" --assignee claude-code --lease 30
|
|
299
|
-
hzl task checkpoint "$TASK_ID" "Endpoints scaffolded; next: auth middleware"
|
|
300
|
-
hzl task complete "$TASK_ID"
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
### Pattern: Breaking down work with subtasks
|
|
304
|
-
|
|
305
|
-
HZL supports one level of parent/subtask hierarchy for organizing related work.
|
|
103
|
+
## Agent Setup
|
|
306
104
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
When you call `hzl task next`, only leaf tasks (tasks without children) are returned. Parent tasks are never returned because they represent the umbrella—work happens on the subtasks.
|
|
310
|
-
|
|
311
|
-
```bash
|
|
312
|
-
# Create parent task
|
|
313
|
-
hzl task add "Implement user authentication" -P myapp --priority 2
|
|
314
|
-
# → Created task abc123
|
|
315
|
-
|
|
316
|
-
# Create subtasks (project inherited automatically from parent)
|
|
317
|
-
hzl task add "Add login endpoint" --parent abc123
|
|
318
|
-
hzl task add "Add logout endpoint" --parent abc123
|
|
319
|
-
hzl task add "Add session management" --parent abc123
|
|
320
|
-
|
|
321
|
-
# View the breakdown
|
|
322
|
-
hzl task show abc123
|
|
323
|
-
# Shows task details plus list of subtasks
|
|
324
|
-
|
|
325
|
-
# Get next available subtask (parent is never returned)
|
|
326
|
-
hzl task next --project myapp
|
|
327
|
-
# → [def456] Add login endpoint
|
|
328
|
-
|
|
329
|
-
# Scope work to a specific parent's subtasks
|
|
330
|
-
hzl task next --parent abc123
|
|
331
|
-
# → [def456] Add login endpoint
|
|
332
|
-
|
|
333
|
-
# When all subtasks done, manually complete the parent
|
|
334
|
-
hzl task complete abc123
|
|
335
|
-
```
|
|
336
|
-
|
|
337
|
-
**Constraints:**
|
|
338
|
-
- Maximum 1 level of nesting (subtasks cannot have their own subtasks)
|
|
339
|
-
- Subtasks are always in the same project as parent (auto-inherited)
|
|
340
|
-
- Moving a parent moves all subtasks atomically
|
|
341
|
-
|
|
342
|
-
**Filtering:**
|
|
343
|
-
```bash
|
|
344
|
-
# See all subtasks of a task
|
|
345
|
-
hzl task list --parent abc123
|
|
346
|
-
|
|
347
|
-
# See only top-level tasks (no parent)
|
|
348
|
-
hzl task list --root
|
|
349
|
-
|
|
350
|
-
# Combine with other filters
|
|
351
|
-
hzl task list --root --status ready
|
|
352
|
-
```
|
|
353
|
-
|
|
354
|
-
**Archiving:**
|
|
355
|
-
```bash
|
|
356
|
-
# Archive parent with all subtasks
|
|
357
|
-
hzl task archive abc123 --cascade
|
|
358
|
-
|
|
359
|
-
# Archive parent only (subtasks promoted to top-level)
|
|
360
|
-
hzl task archive abc123 --orphan
|
|
361
|
-
```
|
|
362
|
-
|
|
363
|
-
### Pattern: Personal todo list (it works, but bring your own UI)
|
|
364
|
-
|
|
365
|
-
HZL can track personal tasks and has the advantage of centralizing agent and personal tasks.
|
|
366
|
-
This enables scenarios like OpenClaw assigning you tasks without needing to sync with other todo systems.
|
|
367
|
-
|
|
368
|
-
HZL itself is not trying to be a polished, human-first todo app. You bring other pieces for that.
|
|
369
|
-
|
|
370
|
-
If you want a todo app, build or use a UI:
|
|
371
|
-
|
|
372
|
-
- a tiny web app
|
|
373
|
-
- a TUI wrapper
|
|
374
|
-
- a menu bar widget
|
|
375
|
-
|
|
376
|
-
HZL stays the storage layer and concurrency-safe ledger underneath.
|
|
377
|
-
|
|
378
|
-
---
|
|
379
|
-
|
|
380
|
-
## Using HZL with Claude Code, Codex, Gemini CLI, or any coding agent
|
|
381
|
-
|
|
382
|
-
**Why HZL when your agent already has task tracking?**
|
|
383
|
-
|
|
384
|
-
Many coding agents (like Claude Code) have built-in task management. HZL complements rather than replaces it:
|
|
385
|
-
|
|
386
|
-
- **Cross-agent workflows**: If you use Claude Code *and* Codex *and* Gemini, each has its own task system. HZL is the shared ledger they can all read/write.
|
|
387
|
-
- **Session persistence**: Built-in task trackers often reset between sessions. HZL persists to disk (and optionally to cloud).
|
|
388
|
-
- **Orchestration**: When one agent delegates to another, HZL provides the handoff mechanism (claim, checkpoint, complete).
|
|
389
|
-
- **Backup**: With cloud sync enabled, your task state survives machine failures.
|
|
390
|
-
|
|
391
|
-
If you only ever use one agent and never need cross-session persistence, the built-in tracker is fine. Once you need durability or multi-agent coordination, reach for HZL.
|
|
392
|
-
|
|
393
|
-
If your coding agent supports an instruction file (for example `CLAUDE.md`, `AGENTS.md`, `GEMINI.md`, etc.), add a short policy so the agent reaches for HZL consistently.
|
|
394
|
-
|
|
395
|
-
### Drop-in policy snippet
|
|
396
|
-
|
|
397
|
-
<!-- START [code:md] snippets/AGENT-POLICY.md -->
|
|
398
|
-
<!-- ⚠️ DO NOT EDIT - Auto-generated from snippets/AGENT-POLICY.md -->
|
|
399
|
-
````md
|
|
400
|
-
### HZL task ledger
|
|
401
|
-
|
|
402
|
-
This project uses HZL for external task tracking.
|
|
403
|
-
|
|
404
|
-
**IMPORTANT - Task tracking:** When starting work that is multi-step, may span sessions, or needs coordination, run `hzl guide` to learn how this project tracks tasks.
|
|
405
|
-
|
|
406
|
-
**When delegating to sub-agents:** Include "use HZL for task tracking" in the sub-agent's instructions.
|
|
407
|
-
|
|
408
|
-
**Use HZL when:**
|
|
409
|
-
- Work has multiple steps or may not finish this session
|
|
410
|
-
- Durable record of progress or ownership needed
|
|
411
|
-
- Handoff or review expected
|
|
412
|
-
- Task is non-trivial (~30+ min or risky changes)
|
|
413
|
-
|
|
414
|
-
**Skip HZL when:**
|
|
415
|
-
- Small, clearly scoped work completed immediately
|
|
416
|
-
- Quick one-off answer or tiny change
|
|
417
|
-
|
|
418
|
-
**Rule of thumb:** If you're tempted to make a multi-step plan, use HZL.
|
|
419
|
-
````
|
|
420
|
-
<!-- END [code:md] snippets/AGENT-POLICY.md -->
|
|
421
|
-
|
|
422
|
-
That snippet is intentionally concise. The goal is clear triggers and structure, not ceremony.
|
|
423
|
-
|
|
424
|
-
<!-- START snippets/AGENT-SKILLS-INSTALL.md -->
|
|
425
|
-
<!-- ⚠️ DO NOT EDIT - Auto-generated from snippets/AGENT-SKILLS-INSTALL.md -->
|
|
426
|
-
### Claude Code skill (optional)
|
|
427
|
-
|
|
428
|
-
HZL includes a Claude Code skill that helps agents work effectively with HZL.
|
|
105
|
+
### Claude Code
|
|
429
106
|
|
|
430
107
|
```bash
|
|
431
108
|
/plugin marketplace add tmchow/hzl
|
|
432
109
|
/plugin install hzl@hzl
|
|
433
110
|
```
|
|
434
111
|
|
|
435
|
-
|
|
436
|
-
<summary>Migrating from older versions?</summary>
|
|
437
|
-
|
|
438
|
-
If you previously installed `hzl@hzl-marketplace`, uninstall it first:
|
|
439
|
-
|
|
440
|
-
```bash
|
|
441
|
-
/plugin uninstall hzl@hzl-marketplace
|
|
442
|
-
/plugin marketplace remove hzl-marketplace
|
|
443
|
-
```
|
|
444
|
-
|
|
445
|
-
Then install the new version using the commands above.
|
|
446
|
-
</details>
|
|
447
|
-
|
|
448
|
-
### OpenAI Codex skill (optional)
|
|
449
|
-
|
|
450
|
-
HZL also supports [OpenAI Codex CLI](https://github.com/openai/codex). The skill uses the same `SKILL.md` format.
|
|
451
|
-
|
|
452
|
-
**Option A: Quick install (prompt injection)**
|
|
453
|
-
|
|
454
|
-
Tell Codex:
|
|
455
|
-
> Fetch and follow instructions from https://raw.githubusercontent.com/tmchow/hzl/main/.codex/INSTALL.md
|
|
456
|
-
|
|
457
|
-
Codex will download the skill and ask whether to add HZL guidance user-wide or project-specific.
|
|
458
|
-
|
|
459
|
-
**Security note:** This uses prompt injection—Codex will modify files on your system. Review [`.codex/INSTALL.md`](https://github.com/tmchow/hzl/blob/main/.codex/INSTALL.md) to see exactly what steps Codex will follow, or use Option B for manual control.
|
|
460
|
-
|
|
461
|
-
**Option B: Manual install**
|
|
462
|
-
|
|
463
|
-
Follow the steps in [`.codex/INSTALL.md`](https://github.com/tmchow/hzl/blob/main/.codex/INSTALL.md) yourself.
|
|
464
|
-
<!-- END snippets/AGENT-SKILLS-INSTALL.md -->
|
|
465
|
-
|
|
466
|
-
---
|
|
467
|
-
|
|
468
|
-
## OpenClaw integration
|
|
469
|
-
|
|
470
|
-
OpenClaw is a self-hosted AI assistant that can coordinate tools and sub-agents.
|
|
471
|
-
HZL fits well as the task ledger that OpenClaw (and its sub-agents) can share.
|
|
472
|
-
|
|
473
|
-
### Quick start (recommended)
|
|
474
|
-
|
|
475
|
-
Copy/paste this into an OpenClaw chat (single prompt):
|
|
476
|
-
|
|
477
|
-
<!-- START [code:txt] snippets/OPENCLAW-SETUP-PROMPT.md -->
|
|
478
|
-
<!-- ⚠️ DO NOT EDIT - Auto-generated from snippets/OPENCLAW-SETUP-PROMPT.md -->
|
|
479
|
-
````txt
|
|
480
|
-
Install HZL from https://github.com/tmchow/hzl and run hzl init. Install the HZL skill from https://www.clawhub.ai/tmchow/hzl. Then append the HZL policy from https://raw.githubusercontent.com/tmchow/hzl/main/openclaw/OPENCLAW-TOOLS-PROMPT.md to my TOOLS.md.
|
|
481
|
-
````
|
|
482
|
-
<!-- END [code:txt] snippets/OPENCLAW-SETUP-PROMPT.md -->
|
|
483
|
-
|
|
484
|
-
### Manual setup
|
|
485
|
-
|
|
486
|
-
1) Install HZL on the machine running OpenClaw:
|
|
487
|
-
|
|
488
|
-
```bash
|
|
489
|
-
npm install -g hzl-cli
|
|
490
|
-
hzl init
|
|
491
|
-
```
|
|
492
|
-
|
|
493
|
-
2) Install the HZL skill from https://www.clawhub.ai/tmchow/hzl
|
|
494
|
-
Skill source (for reference only): **[`openclaw/skills/hzl/SKILL.md`](./openclaw/skills/hzl/SKILL.md)**
|
|
495
|
-
|
|
496
|
-
3) Teach OpenClaw when to use HZL (important):
|
|
497
|
-
- Copy/paste from: **[`openclaw/OPENCLAW-TOOLS-PROMPT.md`](./openclaw/OPENCLAW-TOOLS-PROMPT.md)**
|
|
498
|
-
- Or tell OpenClaw to add this policy to `TOOLS.md`:
|
|
499
|
-
|
|
500
|
-
```
|
|
501
|
-
HZL is a tool available to you for task management in certain cases. I want you to add this information to your TOOLS.md in the right way so you remember how to use it:
|
|
502
|
-
https://raw.githubusercontent.com/tmchow/hzl/main/openclaw/OPENCLAW-TOOLS-PROMPT.md
|
|
503
|
-
```
|
|
504
|
-
|
|
505
|
-
### Upgrading HZL
|
|
506
|
-
|
|
507
|
-
To keep both the HZL CLI and your OpenClaw skill up to date, copy/paste this prompt into an OpenClaw chat. It creates a script you can reuse:
|
|
508
|
-
|
|
509
|
-
<!-- START [code:txt] snippets/UPGRADE-HZL-PROMPT.md -->
|
|
510
|
-
<!-- ⚠️ DO NOT EDIT - Auto-generated from snippets/UPGRADE-HZL-PROMPT.md -->
|
|
511
|
-
````txt
|
|
512
|
-
Create a script at scripts/upgrade-hzl.sh (in your workspace) that upgrades both the hzl-cli npm package and the hzl skill from ClawHub. The script should:
|
|
513
|
-
|
|
514
|
-
1. Run `npm install -g hzl-cli@latest`
|
|
515
|
-
2. Run `npx clawhub update hzl` from the workspace directory
|
|
516
|
-
3. Print the installed version after each step
|
|
517
|
-
|
|
518
|
-
Make it executable. In the future when I say "upgrade hzl", run this script.
|
|
519
|
-
````
|
|
520
|
-
<!-- END [code:txt] snippets/UPGRADE-HZL-PROMPT.md -->
|
|
521
|
-
|
|
522
|
-
After running this once, just say "upgrade hzl" to OpenClaw to run the script. Consider adding a cron job to have OpenClaw run the upgrade automatically on a schedule.
|
|
523
|
-
|
|
524
|
-
---
|
|
525
|
-
|
|
526
|
-
## When to use HZL (and when not to)
|
|
527
|
-
|
|
528
|
-
### Use HZL when:
|
|
529
|
-
|
|
530
|
-
- work has multiple steps and you want explicit sequencing
|
|
531
|
-
- work spans multiple sessions (resume tomorrow with confidence)
|
|
532
|
-
- you are coordinating multiple agents or model providers
|
|
533
|
-
- you need durable status reporting (done / in progress / blocked / next)
|
|
534
|
-
- you want a task ledger your own UI can sit on top of
|
|
535
|
-
|
|
536
|
-
### Consider something else when:
|
|
537
|
-
|
|
538
|
-
- you need time-based reminders or notifications (use a scheduler + a notifier)
|
|
539
|
-
- you need rich human workflow features (due dates, recurring tasks, calendar views)
|
|
540
|
-
- you are tracking an org-wide backlog (GitHub/Jira/etc. may be a better fit)
|
|
541
|
-
|
|
542
|
-
---
|
|
543
|
-
|
|
544
|
-
## CLI reference (short)
|
|
545
|
-
|
|
546
|
-
```bash
|
|
547
|
-
# Setup
|
|
548
|
-
hzl init # Initialize database (add --sync-url for cloud)
|
|
549
|
-
hzl init --reset-config # Reset config to default database location
|
|
550
|
-
|
|
551
|
-
# Projects
|
|
552
|
-
hzl project create <name> # Create a project
|
|
553
|
-
hzl project list # List all projects
|
|
554
|
-
|
|
555
|
-
# Tasks
|
|
556
|
-
hzl task add "<title>" -P <project> # Create task (--depends-on, --links, --priority)
|
|
557
|
-
hzl task list --project <project> # List tasks (--available for claimable only)
|
|
558
|
-
hzl task next --project <project> # Get highest priority available task
|
|
559
|
-
|
|
560
|
-
# Working
|
|
561
|
-
hzl task claim <id> --assignee <name> # Claim task (or: hzl task start <id>)
|
|
562
|
-
hzl task claim <id> --agent-id <id> # --lease <minutes> for expiry
|
|
563
|
-
hzl task checkpoint <id> "<message>" # Save progress snapshot
|
|
564
|
-
hzl task progress <id> <value> # Set progress (0-100)
|
|
565
|
-
hzl task complete <id> # Mark done
|
|
566
|
-
|
|
567
|
-
# Status management
|
|
568
|
-
hzl task block <id> --comment "<context>" # Mark task as blocked
|
|
569
|
-
hzl task unblock <id> # Unblock a task (returns to in_progress)
|
|
570
|
-
|
|
571
|
-
# Coordination
|
|
572
|
-
hzl task stuck # Find expired leases
|
|
573
|
-
hzl task steal <id> --if-expired # Take over abandoned task
|
|
574
|
-
hzl task show <id> --json # Task details (--json for scripting)
|
|
575
|
-
|
|
576
|
-
# Subtasks (organization)
|
|
577
|
-
hzl task add "<title>" --parent <id> # Create subtask (inherits project)
|
|
578
|
-
hzl task list --parent <id> # List subtasks of a task
|
|
579
|
-
hzl task list --root # List only top-level tasks
|
|
580
|
-
hzl task next --parent <id> # Next available subtask
|
|
581
|
-
hzl task show <id> # Shows subtasks inline
|
|
582
|
-
hzl task archive <id> --cascade # Archive parent and all subtasks
|
|
583
|
-
hzl task archive <id> --orphan # Archive parent, promote subtasks
|
|
584
|
-
|
|
585
|
-
# Cleanup
|
|
586
|
-
hzl task prune --project <project> --older-than 30d # Preview tasks eligible for deletion
|
|
587
|
-
hzl task prune --project <project> --older-than 30d --dry-run # Preview without deleting
|
|
588
|
-
hzl task prune --project <project> --older-than 30d --yes # Permanently delete (no confirmation)
|
|
589
|
-
hzl task prune --all --older-than 30d --yes # Prune all projects
|
|
590
|
-
|
|
591
|
-
# Diagnostics
|
|
592
|
-
hzl sync # Sync with cloud (if configured)
|
|
593
|
-
hzl status # Show database and sync state
|
|
594
|
-
hzl doctor # Health checks
|
|
595
|
-
|
|
596
|
-
# ⚠️ DESTRUCTIVE - permanent deletion
|
|
597
|
-
hzl task prune --project <project> --older-than 30d --yes # Permanently deletes old tasks
|
|
598
|
-
hzl init --force # Prompts for confirmation before deleting all data
|
|
599
|
-
hzl init --force --yes # Deletes all data WITHOUT confirmation (dangerous)
|
|
600
|
-
|
|
601
|
-
# Web Dashboard
|
|
602
|
-
hzl serve # Start dashboard (network accessible)
|
|
603
|
-
hzl serve --port 8080 # Custom port
|
|
604
|
-
hzl serve --host 127.0.0.1 # Restrict to localhost only
|
|
605
|
-
hzl serve --background # Fork to background
|
|
606
|
-
hzl serve --stop # Stop background server
|
|
607
|
-
hzl serve --status # Check if running
|
|
608
|
-
```
|
|
609
|
-
|
|
610
|
-
---
|
|
611
|
-
|
|
612
|
-
## Web Dashboard
|
|
613
|
-
|
|
614
|
-
HZL includes a lightweight Kanban dashboard for monitoring tasks in near real-time.
|
|
112
|
+
### OpenAI Codex
|
|
615
113
|
|
|
616
114
|
```bash
|
|
617
|
-
|
|
618
|
-
|
|
115
|
+
mkdir -p ~/.codex/skills/hzl
|
|
116
|
+
curl -fsSL https://raw.githubusercontent.com/tmchow/hzl/main/skills/hzl/SKILL.md -o ~/.codex/skills/hzl/SKILL.md
|
|
619
117
|
```
|
|
620
118
|
|
|
621
|
-
|
|
119
|
+
### OpenClaw
|
|
622
120
|
|
|
623
|
-
|
|
624
|
-
- **Date filtering**: Today, Last 3d, 7d, 14d, 30d
|
|
625
|
-
- **Project filtering**: Focus on a single project
|
|
626
|
-
- **Task details**: Click any card to see description, comments, and checkpoints
|
|
627
|
-
- **Activity panel**: Recent status changes and events
|
|
628
|
-
- **Mobile support**: Tabs layout on smaller screens
|
|
121
|
+
Copy/paste into an OpenClaw chat:
|
|
629
122
|
|
|
630
|
-
The dashboard polls automatically (configurable 1-30s interval) and pauses when the tab is hidden.
|
|
631
|
-
|
|
632
|
-
### Background mode
|
|
633
|
-
|
|
634
|
-
Run the dashboard as a background process:
|
|
635
|
-
|
|
636
|
-
```bash
|
|
637
|
-
hzl serve --background # Fork to background, write PID
|
|
638
|
-
hzl serve --status # Check if running
|
|
639
|
-
hzl serve --stop # Stop the background server
|
|
640
123
|
```
|
|
641
|
-
|
|
642
|
-
### Running as a service (systemd)
|
|
643
|
-
|
|
644
|
-
For always-on access (e.g., on an OpenClaw box via Tailscale). Linux only.
|
|
645
|
-
|
|
646
|
-
```bash
|
|
647
|
-
mkdir -p ~/.config/systemd/user
|
|
648
|
-
hzl serve --print-systemd > ~/.config/systemd/user/hzl-web.service
|
|
649
|
-
systemctl --user daemon-reload
|
|
650
|
-
systemctl --user enable --now hzl-web
|
|
651
|
-
|
|
652
|
-
# Enable lingering so the service runs even when logged out
|
|
653
|
-
loginctl enable-linger $USER
|
|
124
|
+
Install HZL from https://github.com/tmchow/hzl and run hzl init. Install the HZL skill from https://www.clawhub.ai/tmchow/hzl. Then append the HZL policy from https://raw.githubusercontent.com/tmchow/hzl/main/openclaw/OPENCLAW-TOOLS-PROMPT.md to my TOOLS.md.
|
|
654
125
|
```
|
|
655
126
|
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
**macOS:** systemd is not available. Use `hzl serve --background` or create a launchd plist.
|
|
127
|
+
See [Coding Agents Setup](https://www.hzl-tasks.com/getting-started/coding-agents) for full details.
|
|
659
128
|
|
|
660
129
|
---
|
|
661
130
|
|
|
662
131
|
## Packages
|
|
663
132
|
|
|
664
|
-
HZL is a monorepo with three packages:
|
|
665
|
-
|
|
666
133
|
| Package | Description | Install |
|
|
667
134
|
|---------|-------------|---------|
|
|
668
|
-
| [`hzl-cli`](https://www.npmjs.com/package/hzl-cli) | CLI for task management
|
|
135
|
+
| [`hzl-cli`](https://www.npmjs.com/package/hzl-cli) | CLI for task management | `npm install -g hzl-cli` |
|
|
669
136
|
| [`hzl-core`](https://www.npmjs.com/package/hzl-core) | Core library for programmatic use | `npm install hzl-core` |
|
|
670
137
|
| [`hzl-web`](https://www.npmjs.com/package/hzl-web) | Web server and Kanban dashboard | `npm install hzl-web` |
|
|
671
138
|
|
|
672
|
-
Most users should install `hzl-cli`. Use `hzl-core` or `hzl-web` directly if you're building your own tooling or UI on top of HZL.
|
|
673
|
-
|
|
674
139
|
---
|
|
675
140
|
|
|
676
141
|
## License
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const GUIDE_CONTENT = "### HZL task ledger (external task tracking)\n\
|
|
1
|
+
export declare const GUIDE_CONTENT = "### HZL task ledger (external task tracking)\n\nThis project uses HZL for task tracking. Use it when tracking helps clarity, handoff, or auditability.\n\n**Use HZL when:**\n- Work has multiple steps or may not finish this session\n- You want durable record of progress or ownership\n- Handoff or review expected\n- Task is non-trivial (~30+ min or risky changes)\n\n**Skip HZL when:**\n- Small, clearly scoped work completed immediately\n- Quick one-off answer or tiny change\n\n**Rule of thumb:** If you're tempted to make a multi-step plan, use HZL.\n\n**Structure:**\n- **Project** = repo name. One per repo. Always `hzl project list` first.\n- **Task** = feature or work item.\n- **Subtask** = breakdown (`--parent <id>`). Max 1 level.\n\n**Anti-pattern: project sprawl**\n```bash\nhzl project create \"query-perf\" # Wrong: feature is not a project\n```\nFeatures are parent tasks:\n```bash\nhzl task add \"Query perf\" -P myrepo # Parent task\nhzl task add \"Fix N+1\" --parent <parent-id> # Subtask\n```\n\n---\n\n**Setup:**\n```bash\nhzl project list # Always check first\nhzl project create <repo-name> # Only if needed\n```\n\n**Adding work:**\n```bash\nhzl task add \"Feature X\" -P myrepo -s ready # Ready to claim\nhzl task add \"Subtask A\" --parent <id> # Subtask\nhzl task add \"Subtask B\" --parent <id> --depends-on <subtask-a-id> # With dependency\n```\n\n**Task context:** Use `-d` for details, `-l` for reference docs:\n```bash\nhzl task add \"Add rate limiting\" -P myrepo -s ready \\\n -d \"Per linked spec. Use RateLimiter from src/middleware/.\" \\\n -l docs/rate-limit-spec.md\n```\nIf docs exist, reference them (don't duplicate\u2014avoids drift). If no docs, include enough detail to complete the task. Description supports markdown/multiline.\n\n**Working on a task:**\n```bash\nhzl task next -P myrepo # Next available task\nhzl task next --parent <id> # Next subtask of parent\nhzl task next -P myrepo --claim # Find and claim in one step\nhzl task claim <id> # Claim specific task\nhzl task checkpoint <id> \"milestone X\" # Notable progress or before pausing\n```\n\n**Changing status:**\n```bash\nhzl task set-status <id> ready # Make claimable (from backlog)\nhzl task set-status <id> backlog # Move back to planning\n```\nStatuses: `backlog` \u2192 `ready` \u2192 `in_progress` \u2192 `done` (or `blocked`)\n\n**When blocked:**\n```bash\nhzl task block <id> --comment \"Waiting for API keys from DevOps\"\nhzl task unblock <id> # When resolved\n```\n\n**Finishing work:**\n```bash\nhzl task comment <id> \"Implemented X, tested Y\" # Optional: final notes\nhzl task complete <id>\n\n# After completing a subtask, check parent:\nhzl task show <parent-id> --json # Any subtasks left?\nhzl task complete <parent-id> # If all done, complete parent\n```\n\n**Troubleshooting:**\n| Error | Fix |\n|-------|-----|\n| \"not claimable (status: backlog)\" | `hzl task set-status <id> ready` |\n| \"Cannot complete: status is X\" | Claim first: `hzl task claim <id>` |\n\n---\n\n**DESTRUCTIVE - Never run without explicit user request:**\n- `hzl task prune` \u2014 **PERMANENTLY DELETES** old done/archived tasks. No undo.";
|
|
2
2
|
//# sourceMappingURL=guide-content.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guide-content.d.ts","sourceRoot":"","sources":["../../src/commands/guide-content.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"guide-content.d.ts","sourceRoot":"","sources":["../../src/commands/guide-content.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,ywGA+FuD,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Do not edit directly - edit the source snippet instead
|
|
3
3
|
export const GUIDE_CONTENT = `### HZL task ledger (external task tracking)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
This project uses HZL for task tracking. Use it when tracking helps clarity, handoff, or auditability.
|
|
6
6
|
|
|
7
7
|
**Use HZL when:**
|
|
8
8
|
- Work has multiple steps or may not finish this session
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hzl-cli",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.27.0",
|
|
4
4
|
"description": "CLI for HZL - External task ledger for coding agents and OpenClaw.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -60,8 +60,8 @@
|
|
|
60
60
|
"libsql": "^0.5.0",
|
|
61
61
|
"commander": "^14.0.0",
|
|
62
62
|
"zod": "^3.23.8",
|
|
63
|
-
"hzl-core": "1.
|
|
64
|
-
"hzl-web": "1.
|
|
63
|
+
"hzl-core": "1.27.0",
|
|
64
|
+
"hzl-web": "1.27.0"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
67
|
"@types/better-sqlite3": "^7.6.13",
|