test-repo/skills/gantt-tasks/SKILL.md
OpenClaw Bot 22aca2d095 refactor: Update skills to use API endpoints with machine token auth
- gantt-tasks: Replace Supabase REST with API calls using GANTT_MACHINE_TOKEN
- mission-control-docs: Replace Supabase REST with API calls using MC_MACHINE_TOKEN
- Both skills now follow API-centric architecture
- Updated SKILL.md documentation for both

This ensures consistency with the CLI auth pattern and provides
single source of truth through API endpoints.
2026-02-26 09:01:55 -06:00

358 lines
8.0 KiB
Markdown

---
name: gantt-tasks
description: 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:
```bash
export GANTT_MACHINE_TOKEN="50cd5e8fe3f895353f97c9ee64052c0b689b4eedf79259746413734d0a163cf8"
export GANTT_API_URL="https://gantt-board.vercel.app/api"
```
**Architecture:** Skills → API (with machine token) → Database
This follows the API-centric pattern where all business logic lives in API routes.
## Usage
```bash
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:**
```bash
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:**
```bash
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:**
```bash
task_update "$TASK_ID" --status in-progress --priority critical
```
#### `task_delete(TASK_ID)`
Delete a task (permanent).
**Example:**
```bash
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:**
```bash
# 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:**
```bash
# 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:**
```bash
# 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:
```markdown
## [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:**
```bash
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:**
```bash
# 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:**
```bash
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:**
```bash
sprint_list --active
```
### Project Resolution
#### `resolve_project_id(PROJECT_NAME)`
Convert project name to ID.
**Example:**
```bash
PROJECT_ID=$(resolve_project_id "Gantt Board")
```
#### `resolve_user_id(USER_NAME)`
Convert user name to ID.
**Example:**
```bash
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:
```bash
# Set authentication
export GANTT_MACHINE_TOKEN="50cd5e8fe3f895353f97c9ee64052c0b689b4eedf79259746413734d0a163cf8"
export GANTT_API_URL="https://gantt-board.vercel.app/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.vercel.app/tasks/$TASK_ID"
```
## CLI Alternative
For interactive/command-line use, use the Gantt Board CLI:
```bash
# Set auth for CLI
export GANTT_MACHINE_TOKEN="50cd5e8fe3f895353f97c9ee64052c0b689b4eedf79259746413734d0a163cf8"
export API_URL="https://gantt-board.vercel.app/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.