Install
openclaw skills install farmos-tasksQuery and manage farm work orders and tasks. View assignments, create tasks, update status. Uses integration endpoints (no auth) for reads and authenticated...
openclaw skills install farmos-tasksWork orders and task management — view assignments, check status, and manage the task workflow.
What this skill handles: Task creation, assignments, status updates, work orders, action items, follow-ups, and restock/procurement requests.
Trigger phrases: "remind me to...", "we need to...", "someone should...", "create a task", "what tasks are assigned to me?", "any overdue tasks?", "mark task X as complete", "we're low on...", "used the last...", "we need more..."
What this does NOT handle: Equipment maintenance tracking (use farmos-equipment), scheduling/time-off/availability (use farmos-workforce), field observations and scouting reports (use farmos-observations).
Minimum viable input: Any description of work that needs to happen. "We need to do something about field 12" is enough.
GET /api/integration/dashboard
Returns: Task widget data — counts by status, priority breakdown, recent activity. Use for summary stats only — not for listing tasks.
GET /api/integration/tasks-summary
Returns: Aggregate counts:
{
"total": 15,
"pending": 3,
"assigned": 5,
"in_progress": 4,
"completed": 3,
"critical": 1,
"high_priority": 2,
"overdue": 1
}
GET /api/integration/tasks?limit=10&status=in_progress&priority=high
Query params: limit, status (pending|assigned|in_progress|completed|cancelled), priority (low|normal|high|critical)
Returns: Simplified task objects with id, title, status, priority, due_date, assignees.
GET /api/integration/tasks/{id}
Returns: Full task detail for integration.
These require JWT auth. See Authentication section below.
This skill accesses protected FarmOS endpoints that require a JWT token.
To get a token: Run the auth helper with the appropriate role:
TOKEN=$(~/clawd/scripts/farmos-auth.sh manager)
To use the token: Include it as a Bearer token:
curl -H "Authorization: Bearer $TOKEN" http://100.102.77.110:8007/api/endpoint
Token expiry: Tokens last 15 minutes. If you get a 401 response, request a new token.
Role mapping: Check the sender's role in ~/.clawdbot/farmos-users.json to determine which auth level to use. If the user's role doesn't have permission for the requested data, tell them they don't have access rather than trying with a higher-privilege token.
GET /api/tasks/mine Authorization: Bearer {token}
Returns: Tasks assigned to the authenticated user.
POST /api/tasks Authorization: Bearer {token} Content-Type: application/json
Body:
{
"title": "Spray north fields - Section 12",
"description": "Apply pre-emerge herbicide per agronomy recommendation",
"priority": "high",
"due_date": "2026-02-20",
"equipment_id": 5,
"estimated_duration_minutes": 180
}
POST /api/tasks/{id}/start — Mark as in_progress POST /api/tasks/{id}/complete — Mark as completed POST /api/tasks/{id}/cancel — Cancel task Authorization: Bearer {token}
POST /api/tasks/{id}/assign Authorization: Bearer {token} Content-Type: application/json
Body:
{
"employee_ids": [3, 4]
}
Employee IDs come from the Workforce module integration endpoint.
GET /api/templates Authorization: Bearer {token}
POST /api/templates/{id}/create-task Authorization: Bearer {token}
Creates a new task pre-filled from the template.
pending → assigned → in_progress → completed
→ cancelled
The bot should recognize when someone describes work that needs to happen and offer to create a task. Do NOT create tasks silently — always offer first.
When someone describes actionable work, extract as much as you can:
| Signal | How to Detect | Example |
|---|---|---|
| Assignee | "tell Jake to..." → Jake. "I need to..." → reporter. Otherwise → unassigned | "Tell Jake to check the tile outlet" → assignee: Jake |
| Priority | "ASAP" / "before it rains" / "right now" → high. "When you get a chance" / "sometime" → low. Default → normal | "We need to spray before it rains" → priority: high |
| Field | Field number, field name, landmark reference | "field 14", "the Byrd farm", "that field by the elevator" |
| Equipment | Machine name, number, type | "the 8370R", "the planter", "combine #2" |
| Deadline | Time references parsed to dates | "by Thursday", "this week", "before planting", "end of month" |
| What They Say | Auto-Detect |
|---|---|
| "We need to spray field 14 before Thursday" | Field: 14, action: spray, deadline: Thursday |
| "Remind me to call the seed rep" | Assignee: reporter, action: call seed rep |
| "Someone should check the tile outlet in field 8" | Field: 8, action: check tile outlet, unassigned |
| "The north fence needs fixed before we turn cows out" | Location: north fence, context: cattle, deadline: before turnout |
| "Jake needs to grease the planter before we start" | Assignee: Jake, equipment: planter, action: grease |
| "We should probably get the combine serviced this month" | Equipment: combine, action: service, deadline: end of month, priority: normal |
Never create a task without confirming. Pattern:
"Creating: 'Spray field 14' — due Thursday, unassigned. Sound right?"
If they say yes, confirm details and POST. If they tweak something ("actually make it high priority"), adjust and confirm again.
Any mention of supply levels should be treated as actionable. The bot captures supply intel that would otherwise be lost.
| What They Say | Action | Priority |
|---|---|---|
| "We're low on hydraulic filters" | Offer restock task (tag: procurement) | normal |
| "Used the last box of seed treatment" | Create restock task (tag: procurement) | high — last one is urgent |
| "We're gonna need more twine before we're done" | Offer restock task (tag: procurement) | normal |
| "Down to 2 hydraulic filters for the planters" | Offer restock task with quantity context | normal |
| "I ordered 5 gallons of Roundup" | Acknowledge — no task needed (already ordered) | — |
| "Where do we keep the grease cartridges?" | Answer question — no task | — |
| "We're out of DEF" | Create restock task (tag: procurement) | high — completely out |
When creating a procurement task:
{
"title": "Restock: hydraulic filters (planters)",
"description": "Crew reports low supply — down to 2 remaining",
"priority": "normal",
"tags": ["procurement"]
}
Tag ALL supply/restock tasks with procurement so they can be filtered and batched for ordering.
For "used the last" or "completely out" situations, set priority to "high".
/tasks endpoint with appropriate filters for listing, not /api/integration/dashboard (which truncates)When working with tasks, connect the dots to other modules:
Tasks → Weather:
Tasks → Equipment:
Tasks → Observations:
Tasks → Marketing (delivery deadlines):
Cross-reference when it adds value. Not every "mark task complete" needs a weather check. Use judgment — the goal is connecting dots the crew might miss, not adding noise to simple operations.