🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Tick-Coord: Multi-Agent Task Coordination

by @cryptoreumd

Multi-agent task coordination via Git-backed Markdown (tick-md). Use when coordinating work across avatars or agents, managing tasks, tracking dependencies,...

Versionv1.0.0
Downloads446
TERMINAL
clawhub install tick-coord

πŸ“– About This Skill


name: tick-coord description: "Multi-agent task coordination via Git-backed Markdown (tick-md). Use when coordinating work across avatars or agents, managing tasks, tracking dependencies, or running multi-agent workflows with TICK.md files." license: MIT

Tick Multi-Agent Coordination

Coordinate work across human and AI agents using structured Markdown files. Users interact naturally with you, and you maintain tasks transparently in TICK.md.

> Source: Built and linked from ~/clawd/projects/tick-md/cli. To rebuild after changes: cd ~/clawd/projects/tick-md/cli && npm run build

Installation

Prerequisites: The Tick CLI and MCP server should already be installed and configured by your environment.

First time setup? See INSTALL.md for editor-specific installation instructions.

Quick Check:

# Verify CLI is available
tick --version

Check if TICK.md exists in project

ls TICK.md

If not, initialize

tick init

Core Concept

Tick Protocol = Git-based task coordination via TICK.md files

  • Human-readable: Standard Markdown with YAML
  • Machine-parseable: Structured for tools
  • Git-backed: Full version control and audit trail
  • Local-first: No cloud required
  • Quick Start

    Check if Tick is initialized

    ls TICK.md
    

    If not initialized

    tick init
    

    Get current status

    tick status
    

    Common Workflows

    1. User Asks You to Do Something

    User: "Can you refactor the authentication system?"

    Your Actions:

    # 1. Create task
    tick add "Refactor authentication system" --priority high --tags backend,security

    2. Register yourself (first time only)

    tick agent register @your-name --type bot --roles "engineer,refactoring"

    3. Claim the task

    tick claim TASK-XXX @your-name

    4. Work on it (do the actual work)

    5. Add progress comments

    tick comment TASK-XXX @your-name --note "Analyzing current auth flow" tick comment TASK-XXX @your-name --note "Refactored to use JWT tokens"

    6. Mark complete

    tick done TASK-XXX @your-name

    2. User Asks About Project Status

    User: "What tasks are we working on?"

    # Get comprehensive status
    tick status

    Or filter and list tasks

    tick list --status in_progress tick list --claimed-by @bot-name

    Summarize the output naturally for the user.

    3. Coordination with Other Agents

    User: "Have the other agents finished their tasks?"

    # Check overall status
    tick status

    List agents and their work

    tick agent list --verbose

    Validate the project

    tick validate

    4. Breaking Down Complex Work

    User: "Build a user dashboard with charts and data export"

    Your Actions:

    # Create parent task
    tick add "Build user dashboard" --priority high --tags frontend

    Create subtasks with dependencies

    tick add "Design dashboard layout" --priority high --tags frontend,design tick add "Implement data charts" --priority medium --tags frontend,charts --depends-on TASK-XXX tick add "Add CSV export" --priority low --tags frontend,export --depends-on TASK-XXX

    Visualize dependencies

    tick graph

    Command Reference

    Project Management

    tick init                          # Initialize new project
    tick status                        # View project overview
    tick list                          # List tasks with filters
    tick graph                         # Visualize dependencies
    tick watch                         # Monitor changes in real-time
    tick validate                      # Check for errors
    tick sync --push                   # Commit and push to git
    

    Task Operations

    tick add "Task title" \
      --priority high \                # urgent|high|medium|low
      --tags backend,api \             # Comma-separated tags
      --assigned-to @agent \           # Assign to agent
      --depends-on TASK-001 \          # Dependencies
      --estimated-hours 4              # Time estimate

    tick claim TASK-001 @agent # Claim task (sets in_progress) tick release TASK-001 @agent # Release task (back to todo) tick done TASK-001 @agent # Complete task tick reopen TASK-001 @agent # Reopen completed task tick delete TASK-001 # Delete a task tick comment TASK-001 @agent \ # Add note --note "Progress update" tick edit TASK-001 \ # Direct field edit --title "New title" \ --priority high \ --status in_progress

    Corrections & Recovery

    tick reopen TASK-001 @agent        # Reopen completed task
    tick reopen TASK-001 @agent \      # Reopen and re-block dependents
      --re-block

    tick delete TASK-001 # Delete task, cleans up deps tick delete TASK-001 --force # Delete even if has dependents

    tick edit TASK-001 --title "X" # Change title tick edit TASK-001 --priority high # Change priority tick edit TASK-001 --status todo # Change status directly tick edit TASK-001 --tags a,b,c # Replace tags tick edit TASK-001 --add-tag new # Add tag tick edit TASK-001 --remove-tag old # Remove tag tick edit TASK-001 \ # Edit dependencies --depends-on TASK-002,TASK-003

    tick undo # Undo last tick operation tick undo --dry-run # Preview what would be undone

    Bulk Operations

    tick import tasks.yaml             # Import tasks from YAML file
    tick import - < tasks.yaml         # Import from stdin
    tick import tasks.yaml --dry-run   # Preview import

    tick batch start # Begin batch mode (no auto-commit) tick batch status # Check batch status tick batch commit # Commit all batched changes tick batch abort # Discard batched changes

    Advanced Task Listing

    tick list                          # All tasks, grouped by status
    tick list --status blocked         # Only blocked tasks
    tick list --priority urgent        # High-priority tasks
    tick list --assigned-to @alice     # Tasks for specific agent
    tick list --tag backend            # Tasks with tag
    tick list --json                   # JSON output for scripts
    

    Dependency Visualization

    tick graph                         # ASCII dependency tree
    tick graph --format mermaid        # Mermaid flowchart
    tick graph --show-done             # Include completed tasks
    

    Real-time Monitoring

    tick watch                         # Watch for changes
    tick watch --interval 10           # Custom polling interval
    tick watch --filter in_progress    # Only show specific status
    

    Agent Management

    tick agent register @name \        # Register new agent
      --type bot \                     # human|bot
      --roles "dev,qa" \               # Comma-separated roles
      --status idle                    # working|idle|offline

    tick agent list # List all agents tick agent list --verbose # Detailed info tick agent list --type bot # Filter by type tick agent list --status working # Filter by status

    MCP Tools (Alternative to CLI)

    If using Model Context Protocol, use these tools instead of CLI commands:

    Status and Inspection

  • tick_status - Get project status (agents, tasks, progress)
  • tick_validate - Validate TICK.md structure
  • tick_agent_list - List agents with optional filters
  • Task Management

  • tick_add - Create new task
  • tick_claim - Claim task for agent
  • tick_release - Release claimed task
  • tick_done - Complete task (auto-unblocks dependents)
  • tick_comment - Add note to task
  • Corrections & Recovery

  • tick_reopen - Reopen completed task
  • tick_delete - Delete a task
  • tick_edit - Direct field edit (bypasses state machine)
  • tick_undo - Undo last tick operation
  • Agent Operations

  • tick_agent_register - Register new agent
  • MCP Example:

    // Create task via MCP
    await tick_add({
      title: "Refactor authentication",
      priority: "high",
      tags: ["backend", "security"],
      assignedTo: "@bot-name"
    })

    // Claim it await tick_claim({ taskId: "TASK-023", agent: "@bot-name" })

    Best Practices

    1. Natural Conversation First

    βœ… Good: User says "refactor the auth", you create task automatically ❌ Bad: Making user explicitly create tasks

    2. Always Use Your Agent Name

    Register once:

    tick agent register @your-bot-name --type bot --roles "engineer"
    

    Then use consistently:

    tick claim TASK-001 @your-bot-name
    tick done TASK-001 @your-bot-name
    

    3. Provide Context in Comments

    # βœ… Good - explains what and why
    tick comment TASK-005 @bot --note "Switched from REST to GraphQL for better type safety and reduced over-fetching"

    ❌ Bad - too vague

    tick comment TASK-005 @bot --note "Updated API"

    4. Break Down Large Tasks

    Create subtasks with dependencies:

    tick add "Set up CI/CD pipeline" --priority high
    tick add "Configure GitHub Actions" --depends-on TASK-010
    tick add "Add deployment scripts" --depends-on TASK-011
    tick add "Set up staging environment" --depends-on TASK-011
    

    5. Check Status Before Claiming

    # Make sure task exists and isn't claimed
    tick status

    Then claim

    tick claim TASK-XXX @your-name

    Understanding TICK.md Structure

    The file has three sections:

    1. Frontmatter (YAML): Project metadata 2. Agents Table (Markdown): Who's working on what 3. Task Blocks (YAML + Markdown): Individual tasks with history

    Example:

    ---
    project: my-app
    schema_version: "1.0"
    next_id: 5
    

    Agents

    | Name | Type | Roles | Status | Working On | |------|------|-------|--------|------------| | @alice | human | owner | working | TASK-003 | | @bot | bot | engineer | idle | - |

    Tasks

    \

    yaml id: TASK-001 title: Build authentication status: done priority: high claimed_by: null

    ... more fields

    history: - ts: 2026-02-07T10:00:00Z who: @bot action: created - ts: 2026-02-07T14:00:00Z who: @bot action: done \
    
    Implemented JWT-based authentication with token refresh...
    

    Advanced Features

    Automatic Dependency Unblocking

    When you complete a task, dependent tasks automatically unblock:

    # TASK-002 depends on TASK-001
    

    TASK-002 status: blocked

    tick done TASK-001 @bot

    TASK-002 automatically changes to: todo

    Circular Dependency Detection

    Validation catches circular dependencies:

    tick validate
    

    Error: Circular dependency detected: TASK-001 β†’ TASK-002 β†’ TASK-003 β†’ TASK-001

    Smart Commit Messages

    tick sync --push
    

    Automatically generates: "feat: complete TASK-001, TASK-002; update TASK-003"

    Reopening Completed Tasks

    If a task was marked done prematurely:

    tick reopen TASK-001 @bot
    

    Sets status back to in_progress, records in history

    tick reopen TASK-001 @bot --re-block

    Also re-blocks any tasks that depend on this one

    Fixing Mistakes

    # Undo the last tick operation
    tick undo

    Preview what would be undone first

    tick undo --dry-run

    Direct field edits (bypasses state machine)

    tick edit TASK-001 --status todo --priority urgent

    Batch Operations

    For multiple changes without individual commits:

    tick batch start
    

    Now make multiple changes...

    tick add "Task 1" --priority high tick add "Task 2" --priority medium tick claim TASK-001 @bot

    ...

    tick batch commit # Single commit for all changes

    Or: tick batch abort # Discard all changes

    Real-time Monitoring

    tick watch
    

    [10:23:45] βœ“ Added: TASK-015 - Implement user search

    [10:24:12] πŸ”’ TASK-015 claimed by @bot

    [10:26:33] ⟳ TASK-015: in_progress β†’ done

    Quick Reference Card

    Workflow:      init β†’ add β†’ claim β†’ work β†’ comment β†’ done β†’ sync
    Essential:     status | add | claim | done | list | graph
    Corrections:   reopen | delete | edit | undo
    Bulk:          import | batch start/commit/abort
    Coordination:  agent register | agent list | validate | watch
    Git:           sync --pull | sync --push
    

    Key Reminders

    1. Users interact with YOU, not with Tick directly 2. YOU maintain the TICK.md transparently 3. Dashboard is for inspection, not primary interaction 4. Always use your agent name consistently 5. Comment frequently to show progress 6. Validate before syncing 7. Check status before claiming 8. Break down complex work into subtasks

    Project Board (Web Dashboard)

    The tick-coord skill includes a built-in web dashboard for visualizing task state. It's an on-demand Astro + React app that reads from the Convex API, similar to how Prisma Studio or Drizzle Studio work. Spin it up when you need to inspect the board, stop it when you're done.

    Launch Project Board

    When the user says "launch project board", "launch kanban", "show me the board", "open dashboard", or similar:

    # SKILL_DIR should resolve to wherever tick-coord is installed
    SKILL_DIR=""

    Start the dashboard

    bash "$SKILL_DIR/scripts/tick-board.sh" start

    Check if it's running

    bash "$SKILL_DIR/scripts/tick-board.sh" status

    Stop when done

    bash "$SKILL_DIR/scripts/tick-board.sh" stop

    Default port is 3000. Override with TICK_BOARD_PORT=8080.

    The board fetches live data from the Convex deployment and auto-refreshes every 30 seconds.

    Running the Dev Server (Important)

    The dashboard dev server must run as a detached background process to avoid being killed by exec tool timeouts. The tick-board.sh script handles this automatically using setsid and a PID file, but if you need to start it manually:

    # CORRECT β€” detached, survives exec timeout
    cd "$SKILL_DIR/web"
    setsid pnpm dev --port 3000 --host 0.0.0.0  /tmp/tick-board.log 2>&1 &
    echo $! > /tmp/tick-board.pid

    WRONG β€” will be killed when exec times out

    pnpm dev --port 3000 --host 0.0.0.0

    Always use the script or the setsid pattern. Never run the dev server as a foreground exec command.

    Accessing the Dashboard

    The dev server binds to 0.0.0.0, making it available on all network interfaces:

    | Access method | URL | When to use | |--------------|-----|-------------| | Local | http://localhost:3000/ | Same machine | | LAN | http://:3000/ | Devices on same network | | Tailscale | http://:3000/ | Remote access via Tailnet |

    To find available IPs, check the dev server output or run hostname -I.

    For Tailscale users: Use the Tailscale IP (usually 100.x.x.x) to access from any device on your Tailnet. Run tailscale ip to find it.

    #### πŸ”’ Security Notice

    The dev server is a development tool with no built-in authentication or encryption. When exposing it on a network:

  • LAN access exposes the dashboard to anyone on your local network
  • Tailscale is the recommended remote access method (encrypted, authenticated by default)
  • Do not expose the dev server to the public internet (no port forwarding, no 0.0.0.0 on public-facing machines without a reverse proxy + auth)
  • The dashboard is read-only (no write operations), but task data may contain sensitive project information
  • For production/team use, deploy to Cloudflare Pages (or similar) with proper auth instead of running the dev server
  • This is a development inspection tool, not a production server. Use it like you'd use Prisma Studio: locally, temporarily, on trusted networks. We provide this as-is for convenience; securing your network and access is your responsibility.

    Syncing Tasks to the Dashboard

    After adding/updating tasks in TICK.md, sync to Convex so the dashboard reflects current state:

    CONVEX_SITE_URL=https://.convex.site \
    TICK_SYNC_KEY= \
    bash "$SKILL_DIR/scripts/tick-sync.sh"
    

    Dashboard Features

  • Project list with task counts
  • Kanban board with status columns (Backlog β†’ Todo β†’ In Progress β†’ Review β†’ Done)
  • Task detail slide-out with full history timeline
  • Priority and tag filters
  • Regen/Dark/Light theme toggle
  • Auto-refresh every 30s
  • Resources

  • Source (local): ~/clawd/projects/tick-md
  • GitHub (upstream): https://github.com/Purple-Horizons/tick-md
  • CLI npm: https://npmjs.com/package/tick-md
  • MCP Server npm: https://npmjs.com/package/tick-mcp-server

  • Tag Conventions

    For multi-agent setups, use structured tag conventions to enable domain ownership and project tracking:

  • Project tags: project: β€” group tickets under efforts
  • Category tags: category: β€” classify by domain (tech, product, marketing, sales, founder, community, ops)
  • See docs/tag-conventions.md for full details, usage examples, and migration guide.


    Multi-Avatar Coordination (OpenClaw)

    This section covers patterns for multi-avatar deployments where one OpenClaw instance runs multiple agents (e.g., CEO + CTO) sharing task state via TICK.md.

    Agent Identity

    Each avatar uses a consistent @agent-name for all tick operations. This is set per-avatar in their workspace:

  • Register on first use: tick agent register @your-name --type bot --roles "your,roles"
  • Use the same @name in every command: tick claim TASK-XXX @your-name
  • Never use another avatar's name
  • If your workspace has TICK_AGENT_ID set in environment or defined in AGENTS.md, use that as your identity.

    TICK.md Location

    Each project has its own TICK.md in its root directory. Before running tick commands, cd into the correct project:

    cd ~/path/to/project && tick status
    

    If TICK.md doesn't exist yet, initialize: tick init

    Handoff Protocol

    When you complete a task that unblocks work for another avatar:

    1. Complete your task with a descriptive comment:

       tick done TASK-001 @cto
       tick comment TASK-001 @cto --note "Auth system built with JWT. Endpoint: /api/auth. CTO handoff: ready for product review."
       

    2. The completing agent's comment should include: - What was done (brief summary) - Any decisions made and why - What the next avatar needs to know to pick up dependent work

    3. Dependent tasks auto-unblock when blockers complete. The next avatar checks:

       tick list --status todo --assigned-to @their-name
       

    Orchestrator Pattern (CEO β†’ Specialist)

    The main/CEO avatar delegates work by:

    1. Creating tasks with assignments:

       tick add "Design database schema" --priority high --assigned-to @cto --tags engineering
       

    2. Spawning the specialist via OpenClaw:

       sessions_spawn(agentId: "cto", task: "Check TICK.md for assigned tasks. Claim, complete, and comment on each.")
       

    3. The specialist avatar: - Runs tick list --assigned-to @cto to find work - Claims each task before starting - Comments with progress on longer tasks - Marks done when complete - Its completion summary announces back to the orchestrator's session

    4. The orchestrator checks results:

       tick status
       

    Conflict Prevention

  • OpenClaw serializes agent sessions (maxConcurrent controls parallelism)
  • tick-md uses file locking (.tick/lock) to prevent simultaneous writes
  • If a lock conflict occurs, retry after a brief pause
  • Use tick validate to check for structural issues after any unexpected state
  • What NOT to Do

  • Don't claim tasks assigned to other avatars without explicit delegation
  • Don't modify another avatar's comments or history
  • Don't run tick init in a project that already has TICK.md
  • Don't skip the comment when completing β€” future context depends on it
  • License

    MIT

    πŸ’‘ Examples

    Check if Tick is initialized

    ls TICK.md
    

    If not initialized

    tick init
    

    Get current status

    tick status
    

    πŸ“‹ Tips & Best Practices

    1. Natural Conversation First

    βœ… Good: User says "refactor the auth", you create task automatically ❌ Bad: Making user explicitly create tasks

    2. Always Use Your Agent Name

    Register once:

    tick agent register @your-bot-name --type bot --roles "engineer"
    

    Then use consistently:

    tick claim TASK-001 @your-bot-name
    tick done TASK-001 @your-bot-name
    

    3. Provide Context in Comments

    # βœ… Good - explains what and why
    tick comment TASK-005 @bot --note "Switched from REST to GraphQL for better type safety and reduced over-fetching"

    ❌ Bad - too vague

    tick comment TASK-005 @bot --note "Updated API"

    4. Break Down Large Tasks

    Create subtasks with dependencies:

    tick add "Set up CI/CD pipeline" --priority high
    tick add "Configure GitHub Actions" --depends-on TASK-010
    tick add "Add deployment scripts" --depends-on TASK-011
    tick add "Set up staging environment" --depends-on TASK-011
    

    5. Check Status Before Claiming

    # Make sure task exists and isn't claimed
    tick status

    Then claim

    tick claim TASK-XXX @your-name