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 UUIDTEXT- 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 UUIDCOMMENT_ID- Comment UUID to updateTEXT- 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 UUIDFILE_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.