test-repo/skills/gantt-tasks/SKILL.md

8.1 KiB

name description
gantt-tasks Full CRUD operations for Gantt Board tasks including comments, attachments, and sprint management. Uses Gantt Board API with machine token authentication.

gantt-tasks

Module Skill - Complete task management for Gantt Board via API.

Purpose

Provides all operations needed to work with Gantt Board tasks: create, read, update, delete, comments, attachments, and sprint queries. Used by orchestrator skills and agents.

Authentication

Uses machine token for server-to-server API calls:

export GANTT_MACHINE_TOKEN="50cd5e8fe3f895353f97c9ee64052c0b689b4eedf79259746413734d0a163cf8"
export GANTT_API_URL="https://gantt-board.twisteddevices.com/api"

Architecture: Skills → API (with machine token) → Database

This follows the API-centric pattern where all business logic lives in API routes.

Usage

source ~/.agents/skills/gantt-tasks/lib/tasks.sh

# Create task
TASK_ID=$(task_create --title "Fix bug" --project "Gantt Board" --sprint current)

# Add comment
task_add_comment "$TASK_ID" "Starting work on this"

# Attach file
task_attach_file "$TASK_ID" "/path/to/file.md"

Functions

Task CRUD

task_create([options])

Create a new task.

Options:

  • --title - Task title (required)
  • --description - Task description (optional)
  • --type - Task type: feature, bug, research, task (default: task)
  • --status - Status: open, todo, in-progress, review, done (default: open)
  • --priority - Priority: low, medium, high, critical (default: medium)
  • --project - Project name or ID (optional, auto-detects "current")
  • --sprint - Sprint name or ID, or "current" for current sprint (optional)
  • --assignee - Assignee name or ID (default: Max)
  • --due-date - Due date YYYY-MM-DD (optional)
  • --tags - Tags as comma-separated string (optional)

Returns: Task ID on success

Example:

TASK_ID=$(task_create \
    --title "Research API options" \
    --description "Compare REST vs GraphQL" \
    --type research \
    --priority high \
    --sprint current \
    --tags "api,research")

task_get(TASK_ID)

Get full task details including comments.

Parameters:

  • TASK_ID - Task UUID

Returns: Task JSON

Example:

task=$(task_get "a1b2c3d4-...")
echo "$task" | jq -r '.title'

task_update(TASK_ID, [options])

Update task fields.

Parameters:

  • TASK_ID - Task UUID
  • Options same as task_create (except project/sprint usually fixed)

Example:

task_update "$TASK_ID" --status in-progress --priority critical

task_delete(TASK_ID)

Delete a task (permanent).

Example:

task_delete "$TASK_ID"

task_list([filters])

List tasks with optional filters.

Filters:

  • --status - Filter by status (comma-separated: open,todo,in-progress)
  • --project - Filter by project name/ID
  • --sprint - Filter by sprint name/ID or "current"
  • --assignee - Filter by assignee
  • --priority - Filter by priority
  • --json - Output as JSON

Example:

# List current sprint tasks
task_list --sprint current --status open,todo,in-progress

# List my high priority tasks
task_list --assignee Max --priority high

Comments

task_add_comment(TASK_ID, TEXT, [OPTIONS])

Add a comment to a task.

Parameters:

  • TASK_ID - Task UUID
  • TEXT - Comment text (supports markdown)
  • --checklist - Include checklist format automatically
  • --status - Add status prefix (in-progress, review, etc.)

Example:

# Simple comment
task_add_comment "$TASK_ID" "Found the issue in line 42"

# Checklist comment with status
task_add_comment "$TASK_ID" \
    "Fixed the bug\n\nNow testing..." \
    --checklist \
    --status in-progress

task_update_comment(TASK_ID, COMMENT_ID, TEXT)

Update an existing comment (for progress tracking).

Parameters:

  • TASK_ID - Task UUID
  • COMMENT_ID - Comment UUID to update
  • TEXT - New comment text

Example:

# Update progress comment
COMMENT_ID=$(echo "$TASK" | jq -r '.comments[-1].id')

task_update_comment "$TASK_ID" "$COMMENT_ID" \
    "## $(date +%Y-%m-%d) 🔄 In Progress\n\n### ✅ Completed\n- [x] Phase 1\n\n### 🔄 In Progress\n- [ ] Phase 2"

Auto-format: If --checklist is passed, formats as:

## [YYYY-MM-DD HH:MM] 🔄 [STATUS]

### ✅ Completed
- [x] Previous item

### 🔄 In Progress
- [x] Current item: [TEXT]

### 📋 Remaining
- [ ] Next step

### 📊 Progress: X/Y tasks complete

task_reply_to_comment(TASK_ID, COMMENT_ID, TEXT)

Reply to an existing comment.

Example:

task_reply_to_comment "$TASK_ID" "$COMMENT_ID" "Great point! I'll check that."

Attachments

task_attach_file(TASK_ID, FILE_PATH, [OPTIONS])

Attach a file to a task.

Parameters:

  • TASK_ID - Task UUID
  • FILE_PATH - Path to file
  • --description - Attachment description (optional)

Example:

# Attach markdown file
task_attach_file "$TASK_ID" "/tmp/plan.md" --description "Implementation plan"

# Attach any file type
task_attach_file "$TASK_ID" "/tmp/screenshot.png"

Note: Large files should be stored elsewhere and linked.

Sprint Management

sprint_get_current()

Get the current sprint (contains today's date).

Returns: Sprint ID

Example:

SPRINT_ID=$(sprint_get_current)
echo "Current sprint: $SPRINT_ID"

sprint_list([OPTIONS])

List all sprints.

Options:

  • --active - Only active sprints
  • --project - Filter by project

Example:

sprint_list --active

Project Resolution

resolve_project_id(PROJECT_NAME)

Convert project name to ID.

Example:

PROJECT_ID=$(resolve_project_id "Gantt Board")

resolve_user_id(USER_NAME)

Convert user name to ID.

Example:

USER_ID=$(resolve_user_id "Max")

File Structure

~/.agents/skills/gantt-tasks/
├── SKILL.md              # This documentation
└── lib/
    └── tasks.sh          # All task functions

Integration Example

Complete workflow:

# Set authentication
export GANTT_MACHINE_TOKEN="50cd5e8fe3f895353f97c9ee64052c0b689b4eedf79259746413734d0a163cf8"
export GANTT_API_URL="https://gantt-board.twisteddevices.com/api"

source ~/.agents/skills/gantt-tasks/lib/tasks.sh

# 1. Create task
TASK_ID=$(task_create \
    --title "Research URL extraction options" \
    --type research \
    --priority high \
    --sprint current)

echo "Created task: $TASK_ID"

# 2. Add initial comment
task_add_comment "$TASK_ID" "Starting research phase" --checklist

# 3. Update with progress
task_update "$TASK_ID" --status in-progress
task_add_comment "$TASK_ID" "Evaluated 3 options:\n1. Scrapling\n2. Tavily\n3. web_fetch" \
    --checklist \
    --status in-progress

# 4. Attach recommendation
cat > /tmp/recommendation.md << 'EOF'
## Recommendation

Use Scrapling as primary, Tavily as fallback.

- Scrapling handles JavaScript sites
- Tavily fast for articles
- web_fetch for simple sites
EOF

task_attach_file "$TASK_ID" /tmp/recommendation.md --description "Research findings"

# 5. Mark ready for review
task_update "$TASK_ID" --status review
task_add_comment "$TASK_ID" "Research complete. Recommendation attached." \
    --checklist

echo "Task ready for review: https://gantt-board.twisteddevices.com/tasks/$TASK_ID"

CLI Alternative

For interactive/command-line use, use the Gantt Board CLI:

# Set auth for CLI
export GANTT_MACHINE_TOKEN="50cd5e8fe3f895353f97c9ee64052c0b689b4eedf79259746413734d0a163cf8"
export API_URL="https://gantt-board.twisteddevices.com/api"

cd /Users/mattbruce/Documents/Projects/OpenClaw/Web/gantt-board

# Create task
./scripts/gantt.sh task create "Title" --type research --sprint current

# List tasks
./scripts/gantt.sh task list --sprint current --status in-progress

# Get task
./scripts/gantt.sh task get $TASK_ID

# Update task
./scripts/gantt.sh task update $TASK_ID --status review

Note: The skill library and CLI both use the same API endpoints with machine token authentication.


Note: This is a low-level module skill. Used by orchestrator skills, not directly by users.