← Back to Skills Marketplace
tmchow

HZL

by Trevin · GitHub ↗ · v3.1.0 · MIT-0
cross-platform ✓ Security Clean
4053
Downloads
8
Stars
8
Active Installs
26
Versions
Install in OpenClaw
/install hzl
Description
Persistent task ledger for agent coordination. Plan multi-step work, checkpoint progress across session boundaries, and coordinate across multiple agents wit...
README (SKILL.md)

HZL: Persistent task ledger for agents

HZL (https://hzl-tasks.com) is a local-first task ledger that agents use to:

  • Plan multi-step work into projects + tasks
  • Checkpoint progress so work survives session boundaries
  • Route work to the right agent via project pools
  • Coordinate across multiple agents with leases and dependencies

This skill teaches an agent how to use the hzl CLI.

When to use HZL

OpenClaw has no native task tracking. Unlike Claude Code (which has TodoWrite) or Codex (which has update_plan), OpenClaw relies on memory and markdown files for tracking work. HZL fills this gap.

Use HZL for:

  • Multi-step projects with real sequencing or handoffs
  • Work that may outlive this session or involve multiple agents
  • Anything where "resume exactly where we left off" matters
  • Delegating work to another agent and needing recovery if they fail

Skip HZL for:

  • Truly trivial one-step tasks you will complete immediately
  • Time-based reminders (use OpenClaw Cron instead)
  • Longform notes or knowledge capture (use memory files)

Rule of thumb: If you feel tempted to make a multi-step plan, or there is any chance you will not finish in this session, use HZL.


⚠️ DESTRUCTIVE COMMANDS — READ FIRST

Command Effect
hzl init --force DELETES ALL DATA. Prompts for confirmation.
hzl init --force --yes DELETES ALL DATA WITHOUT CONFIRMATION.
hzl task prune ... --yes PERMANENTLY DELETES old done/archived tasks and history.

Never run these unless the user explicitly asks you to delete data. There is no undo.


Core concepts

  • Project: container for tasks. In single-agent setups, use one shared project. In multi-agent setups, use one project per agent role (pool routing).
  • Task: top-level work item. Use parent tasks for multi-step initiatives.
  • Subtask: breakdown of a task (--parent \x3Cid>). Max 1 level of nesting. Parent tasks are never returned by hzl task claim --next.
  • Checkpoint: short progress snapshot for session recovery.
  • Lease: time-limited claim that enables stuck detection in multi-agent flows.

Project setup

Single-agent setup

Use one shared project. Requests and initiatives become parent tasks, not new projects.

hzl project list                    # Check first — only create if missing
hzl project create openclaw

Everything goes into openclaw. hzl task claim --next -P openclaw always works.

Multi-agent setup (pool routing)

Use one project per agent role. Tasks assigned to a project (not a specific agent) can be claimed by any agent monitoring that pool. This is the correct pattern when a role may scale to multiple agents.

hzl project create research
hzl project create writing
hzl project create coding
hzl project create marketing
hzl project create coordination    # for cross-agent work

Pool routing rule: assign tasks to a project without --agent. Any eligible agent claims with --next.

# Assigning work to the research pool (no --agent)
hzl task add "Research competitor pricing" -P research -s ready

# Kenji (or any researcher) claims it
hzl task claim --next -P research --agent kenji

Agent routing: when --agent is set at task creation, only that agent (or agents with no assignment) can claim it via --next. Tasks with no agent are available to everyone.

# Pre-route a task to a specific agent
hzl task add "Review Clara's PR" -P coding -s ready --agent kenji

# Kenji claims it (matches agent)
hzl task claim --next -P coding --agent kenji   # ✓ returns it

# Ada tries — skipped because it's assigned to kenji
hzl task claim --next -P coding --agent ada     # ✗ skips it

Use --agent on task creation when you specifically want one person. Omit it when any eligible agent in the pool should pick it up.


Session start (primary workflow)

With workflow commands (HZL v2+)

hzl workflow run start --agent \x3Cagent-id> --project \x3Cproject> --json

--project is required — agents must scope to their assigned pool. Use --any-project to intentionally scan all projects (e.g. coordination agents).

This handles expired-lease recovery and new-task claiming in one command. If a task is returned, work on it. If nothing is returned, the queue is empty. Agent routing applies: tasks assigned to other agents are skipped.

Without workflow commands (fallback)

hzl agent status                           # Who's active? What's running?
hzl task list -P \x3Cproject> --available     # What's ready?
hzl task stuck                             # Any expired leases?
hzl task stuck --stale                     # Also check for stale tasks (no checkpoints)

# If stuck tasks exist, read their state before claiming
hzl task show \x3Cstuck-id> --view standard --json
hzl task steal \x3Cstuck-id> --if-expired --agent \x3Cagent-id> --lease 30
hzl task show \x3Cstuck-id> --view standard --json | jq '.checkpoints[-1]'

# Otherwise claim next available
hzl task claim --next -P \x3Cproject> --agent \x3Cagent-id>

Core workflows

Adding work

hzl task add "Feature X" -P openclaw -s ready              # Single-agent
hzl task add "Research topic Y" -P research -s ready        # Pool-routed (multi-agent)
hzl task add "Subtask A" --parent \x3Cid>                      # Subtask
hzl task add "Subtask B" --parent \x3Cid> --depends-on \x3Ca-id>  # With dependency

Working a task

hzl task claim \x3Cid>                          # Claim specific task
hzl task claim --next -P \x3Cproject>           # Claim next available
hzl task checkpoint \x3Cid> "milestone X"       # Checkpoint progress
hzl task complete \x3Cid>                       # Finish

Status transitions

hzl task set-status \x3Cid> ready               # Make claimable
hzl task set-status \x3Cid> backlog             # Move back to planning
hzl task block \x3Cid> --comment "reason"       # Block with reason
hzl task unblock \x3Cid>                        # Unblock

Statuses: backlogreadyin_progressdone (or blocked)

Finishing subtasks

hzl task complete \x3Csubtask-id>
hzl task show \x3Cparent-id> --view summary --json   # Any subtasks remaining?
hzl task complete \x3Cparent-id>               # Complete parent if all done

Delegating and handing off work

Workflow commands (HZL v2+)

# Hand off to another agent or pool — complete current, create follow-on atomically
hzl workflow run handoff \
  --from \x3Ctask-id> \
  --title "\x3Cnew task title>" \
  --project \x3Cpool>              # --agent if specific person; --project for pool

# Delegate a subtask — creates dependency edge by default
hzl workflow run delegate \
  --from \x3Ctask-id> \
  --title "\x3Cdelegated task>" \
  --project \x3Cpool> \
  --pause-parent                # Block parent until delegated task is done

--agent and --project guardrail: at least one is required on handoff. Omitting --agent creates a pool-routed task; --project is then required to define which pool.

Manual delegation (fallback)

hzl task add "\x3Cdelegated title>" -P \x3Cpool> -s ready --depends-on \x3Cparent-id>
hzl task checkpoint \x3Cparent-id> "Delegated X to \x3Cpool> pool. Waiting on \x3Ctask-id>."
hzl task block \x3Cparent-id> --comment "Waiting for \x3Cdelegated-task-id>"

Dependencies

# Add dependency at creation
hzl task add "\x3Ctitle>" -P \x3Cproject> --depends-on \x3Cother-id>

# Add dependency after creation
hzl task add-dep \x3Ctask-id> \x3Cdepends-on-id>

# Query dependencies
hzl dep list --agent \x3Cid> --blocking-only          # What's blocking me?
hzl dep list --from-agent \x3Cid> --blocking-only     # What's blocking work I created?
hzl dep list --project \x3Cp> --blocking-only         # What's blocking in a pool?
hzl dep list --cross-project-only                  # Cross-agent blockers

# Validate no cycles
hzl validate

Cross-project dependencies are supported by default. Use hzl dep list --cross-project-only to inspect cross-project edges.


Checkpointing

Checkpoint at notable milestones or before pausing. A good checkpoint answers: "if this session died right now, could another agent resume from here?"

When to checkpoint:

  • Before any tool call that might fail
  • Before spawning a sub-agent
  • After completing a meaningful unit of work
  • Before handing off or pausing
hzl task checkpoint \x3Cid> "Implemented login flow. Next: add token refresh." --progress 50
hzl task checkpoint \x3Cid> "Token refresh done. Testing complete." --progress 100
hzl task progress \x3Cid> 75          # Set progress without a checkpoint

Lifecycle hooks

HZL sends targeted notifications for high-value transitions — currently only on_done. Other lifecycle events (stuck detection, blocking, progress) require polling. This is deliberate: hooks signal when something meaningful happens, agents and orchestrators poll for everything else.

Hooks are configured during installation (see docs-site for setup). As an agent, here's what you need to know operationally:

  • Only on_done fires. When you task complete, HZL queues a webhook. For stuck detection, stale detection, blocking changes, or progress — poll with hzl task stuck --stale or hzl task list.
  • Delivery is not instant. hzl hook drain runs on a cron schedule (typically every 2–5 minutes). Your completion is recorded immediately, but the notification reaches the gateway on the next drain cycle.
  • Payloads include context. Each notification carries agent, project, and full event details. The gateway handles per-agent routing — HZL sends the same payload to one URL regardless of which agent completed the task.
  • If hooks seem broken, check hzl hook drain --json for delivery failures and last_error details.

Multi-agent coordination with leases

# Claim with lease (prevents orphaned work)
hzl task claim \x3Cid> --agent \x3Cagent-id> --lease 30       # 30-minute lease

# Fleet status: who's active, what they're working on, how long
hzl agent status                                        # All agents
hzl agent status --agent \x3Cname>                         # Single agent
hzl agent status --stats                                # Include task count breakdowns

# Agent activity history
hzl agent log \x3Cagent>                                   # Recent events for an agent

# Monitor for stuck tasks
hzl task stuck

# Monitor for stuck AND stale tasks (no checkpoints for 10+ min)
hzl task stuck --stale
hzl task stuck --stale --stale-threshold 15               # Custom threshold

# Recover an abandoned task (steal + set new lease atomically)
hzl task show \x3Cstuck-id> --view standard --json         # Read last checkpoint first
hzl task steal \x3Cstuck-id> --if-expired --agent \x3Cagent-id> --lease 30

Use distinct --agent IDs per agent (e.g. henry, clara, kenji) so authorship is traceable.


Sizing tasks and projects

The completability test: "I finished [task]" should describe a real outcome.

  • ✓ "Finished installing garage motion sensors"
  • ✗ "Finished home automation" (open-ended domain, never done)

Split into multiple tasks when: parts deliver independent value or solve distinct problems.

Adding context:

hzl task add "Install sensors" -P openclaw \
  -d "Mount at 7ft height per spec." \
  -l docs/sensor-spec.md,https://example.com/wiring-guide

Don't duplicate specs into descriptions — reference docs instead to avoid drift.


Extended reference

# Setup
hzl init                                      # Initialize (safe, won't overwrite)
hzl status                                    # Database mode, paths, sync state
hzl doctor                                    # Health check

# List and find
hzl task list -P \x3Cproject> --available        # Ready tasks with met dependencies
hzl task list --parent \x3Cid>                   # Subtasks of a parent
hzl task list --root                          # Top-level tasks only
hzl task list -P \x3Cproject> --tags \x3Ccsv>       # Filter by tags

# Create with options
hzl task add "\x3Ctitle>" -P \x3Cproject> --priority 2 --tags backend,auth
hzl task add "\x3Ctitle>" -P \x3Cproject> -s in_progress --agent \x3Cname>
hzl task add "\x3Ctitle>" -P \x3Cproject> --stale-after 2h
hzl task update \x3Cid> --stale-after 30m
hzl task update \x3Cid> --clear-stale-after

# Agent fleet status
hzl agent status                              # Active/idle agents, current tasks, lease state
hzl agent status --agent \x3Cname>               # Single agent
hzl agent status --stats                      # With task count breakdowns
hzl agent log \x3Cagent>                         # Activity history for an agent

# Web dashboard
hzl serve                                     # Start on port 3456
hzl serve --host 127.0.0.1                    # Restrict to localhost
hzl serve --background                        # Fork to background
hzl serve --status / --stop
hzl serve --gateway-url ws://host:18789       # Connect to OpenClaw gateway
hzl serve --gateway-token \x3Ctoken>             # Gateway auth token
# Or set gateway once in config.json: { "gateway": { "url": "...", "token": "..." } }

# Raw reporting surfaces
hzl events                                    # NDJSON event feed
hzl events --follow
hzl events --from 0 > events.jsonl
hzl stats --window 1h

# Authorship
hzl task claim \x3Cid> --agent alice
hzl task checkpoint \x3Cid> "note" --author bob  # Records who did the action
hzl task claim \x3Cid> --agent "Claude" --agent-id "session-abc123"

# Cloud sync (optional)
hzl init --sync-url libsql://\x3Cdb>.turso.io --auth-token \x3Ctoken>
hzl sync

Web dashboard (always-on, Linux)

hzl serve --print-systemd > ~/.config/systemd/user/hzl-web.service
systemctl --user daemon-reload
systemctl --user enable --now hzl-web
loginctl enable-linger $USER

Available at http://\x3Cyour-box>:3456 (accessible over Tailscale). macOS: use hzl serve --background instead.


What HZL does not do

  • No orchestration — does not spawn agents or assign work automatically
  • No task decomposition — does not break down tasks automatically
  • No smart scheduling — uses simple priority + FIFO ordering

These belong in your orchestration layer, not the task ledger.


Notes

  • Run hzl via the exec tool.
  • Check TOOLS.md for your identity string, which projects to monitor, and the commands relevant to your role.
  • Use distinct --agent IDs per agent and rely on leases to avoid collisions in shared databases.
  • hzl workflow run commands require HZL v2+. If unavailable, use the manual fallback patterns documented above.
Usage Guidance
This skill is a helper for the hzl CLI and looks coherent. Before installing, verify you trust the hzl Homebrew or npm package source (check the GitHub repo linked in the skill). If you allow the agent to invoke skills autonomously, require explicit user confirmation for destructive commands (hzl init --force, task prune --yes) because the skill documents commands that permanently delete data. If you prefer extra safety, install the hzl binary manually and only enable the skill when you want agents to interact with your task ledger.
Capability Analysis
Type: OpenClaw Skill Name: hzl Version: 3.1.0 The hzl skill bundle provides instructions and workflows for an agent to use the HZL CLI, a legitimate local-first task ledger for agent coordination. The documentation in SKILL.md includes appropriate safety warnings regarding destructive commands (e.g., hzl init --force) and focuses on standard task management features like project routing, leases, and checkpoints. No evidence of malicious intent, data exfiltration, or unauthorized persistence was found.
Capability Assessment
Purpose & Capability
Name and description describe a local-first task ledger; the skill only requires the hzl binary and provides brew/npm install options for that binary. No unrelated credentials, binaries, or config paths are requested.
Instruction Scope
SKILL.md is an instruction-only guide that tells the agent to run hzl CLI commands (listing, creating, claiming, checkpointing tasks). All referenced commands and paths are directly related to task ledger operations. The doc explicitly documents destructive commands (hzl init --force, task prune --yes) and warns about them; follow-up guidance should ensure the agent never runs those without explicit user approval.
Install Mechanism
Installers are Homebrew and npm (hzl / hzl-cli), both common public package mechanisms. No ad-hoc download URLs or archive extractions are present.
Credentials
The skill declares no required environment variables, credentials, or config paths. Runtime parameters like --agent and --project are normal operational inputs and not secrets.
Persistence & Privilege
always:false (normal) and the skill allows autonomous invocation (default). While this is expected, an autonomously-invoking agent with this skill could run destructive hzl commands if not instructed to ask for confirmation. Consider enforcing explicit confirmation before any destructive action.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install hzl
  3. After installation, invoke the skill by name or use /hzl
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v3.1.0
- Added support for OpenClaw gateway url and token to support new cron job crud in web dashboard
v2.10.0
- Documentation updated in SKILL.md with minor edits. - No changes to features or functionality; content and CLI usage remain the same. - All core instructions and workflows are unchanged for this release.
v2.9.0-1
**Expanded agent routing and project scoping for multi-agent workflows:** - Documented agent-scoped task claiming: tasks with `--agent` are claimable only by that agent; otherwise, any eligible agent in the project can claim. - Updated multi-agent setup guides to clarify use of `--agent` vs. pool routing. - Added examples showing how agent assignment affects task claiming behavior. - Noted that `hzl workflow run start` now requires `--project` to scope agents to their pool (or `--any-project` for coordination agents). - Included new guidance on handling stale tasks with `hzl task stuck --stale`. - No code or file changes; documentation and workflow update only.
v2.9.0
- Clarified task claiming behavior: emphasized using --agent only when a specific agent should receive the task, and using --project for general pool routing. - Removed detailed agent routing logic and examples, streamlining the multi-agent setup section for clarity. - Simplified session start instructions and removed references to agent-level routing in workflow commands. - Added missing dependency management commands and examples. - Improved organization for easier reference in multi-agent and dependency scenarios.
v2.8.1-skill.1
- Added instructions for checking stale tasks in the "Session start" fallback workflow using `hzl task stuck --stale`. - No other content changes; documentation otherwise unchanged.
v2.8.1
**Changelog for hzl 2.8.1** - Updated agent routing documentation, clarifying that when `--agent` is set at task creation, only that agent can claim the task via `--next`. - Added explicit examples illustrating both pool-based and agent-specific routing, including behavior when multiple agents attempt to claim tasks. - Noted that `--project` is required in `workflow run start` commands and clarified agent assignment/claiming rules. - Improved instructions on when to use or omit the `--agent` flag for more precise task assignment control.
v2.7.0
- Added documentation for the new agent status command: `hzl agent status` now shown in session start guidance. - Updated session start workflow to recommend checking active agents and running tasks before listing available tasks or stuck leases. - Minor clarifications to command examples and checkpoint advice in session start section.
v2.4.0
- Added explicit recommendation to use --lease 30 with hzl task steal to specify lease duration when recovering expired tasks. - Minor update in fallback session start instructions for clarity and best practices. - No breaking changes; documentation improved for safety and clarity.
v2.2.0-skill.1
- Updated recommended CLI usage for stuck task inspection: replaced `hzl task show <id> --json` with `hzl task show <id> --view standard --json`. - Updated recommended CLI usage for parent task inspection: replaced `hzl task show <parent-id> --json` with `hzl task show <parent-id> --view summary --json`. - No changes to APIs or core features; this update is limited to CLI command recommendations in the documentation.
v2.2.0
hzl 2.2.0 - No user-facing file changes detected in this version. - All documentation and workflow instructions remain unchanged. - Existing multi-agent and task management workflows are unmodified.
v2.1.0
**Summary:** Major documentation update, clarifying multi-agent workflows, project pooling, and new workflow commands for HZL v2. - Added guidance for multi-agent setups, including project pool routing and pool-based task claiming. - Documented new workflow commands (`hzl workflow run start`, `handoff`, and `delegate`) for improved task handoffs and delegation. - Clarified destructive command warnings and added explicit “never run unless user asks” reminders. - Simplified separation between single-agent and multi-agent usage patterns. - Added code examples for new multi-agent and pool-routing flows; reorganized for clarity and easier reference. - Removed repetitive/legacy explanations and focused on core, current HZL concepts and workflows.
v1.33.0
Better support for delegated multi-agent workflows where one agent can assign work to another, while still preserving who performed each action.
v1.24.3
- Skill rewritten: now documents the "hzl" persistent task database for OpenClaw agents. - Guides agents to use hzl for multi-step task tracking, checkpoints, sub-agent coordination, and status recovery. - Promotes a single-project pattern ("openclaw" project) to avoid project sprawl and simplify queries. - Warns against destructive commands—details how to avoid data loss. - Provides detailed usage guidelines, workflow examples, best practices for task nesting and scope, and anti-patterns to avoid. - No code or file changes detected; this is a documentation and usage overhaul.
v1.24.2
- Major change: Replaces hzl task database skill with telegram-compose for rich Telegram messaging. - Skill now formats and sends structured Telegram messages with HTML via direct API. - Auto-invoked for substantial Telegram outputs; small replies use the standard message tool. - Enforces explicit bot account selection for credentials, never auto-selecting. - Details formatting standards, credential sourcing, structured data patterns, message size splitting, and mobile-friendly display. - Adds clear sub-agent spawning contract and error handling expectations.
v1.24.1
Version 1.24.1 - Expanded guidelines for when to use HZL, emphasizing use even for single-agent, multi-step work. - Added “Rule of thumb” section to clarify default usage triggers for HZL. - Updated examples for adding tasks with context, promoting use of references instead of duplicating specs in descriptions. - Clarified recommended usage of description and links fields. - Added sample commands and detailed best practices to the “Core Workflows” section.
v1.0.10
- Drastic improvements for guidance on claiming, blocking and tasks state - Quick reference expanded with new task creation status options (`-s ready`, `-s in_progress`) and assignee support. - Improved clarity and accuracy in CLI usage instructions and examples.
v1.0.9
- Improved guidance on how to use projects and tasks vs subtasks for improved organization and execution - Expanded documentation with anti-patterns and proper usage examples for organizing work.
v1.0.8
- Added information about how to run the web dashboard in the background and setting up a service to allow OpenClaw to do it on its own
v1.0.7
- Improve guidance on when to use or skip HZL - Expanded the destructive commands section to include `hzl task prune ... --yes` and provided stronger warnings for agents.
v1.0.6
- Added support for tracking progress on tasks via `--progress` flag for checkpoints and a new `hzl task progress <id> <percent>` command. - Introduced explicit commands for blocking and unblocking tasks: `hzl task block <id> --reason` and `hzl task unblock <id>`.
Metadata
Slug hzl
Version 3.1.0
License MIT-0
All-time Installs 8
Active Installs 8
Total Versions 26
Frequently Asked Questions

What is HZL?

Persistent task ledger for agent coordination. Plan multi-step work, checkpoint progress across session boundaries, and coordinate across multiple agents wit... It is an AI Agent Skill for Claude Code / OpenClaw, with 4053 downloads so far.

How do I install HZL?

Run "/install hzl" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is HZL free?

Yes, HZL is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does HZL support?

HZL is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created HZL?

It is built and maintained by Trevin (@tmchow); the current version is v3.1.0.

💬 Comments