Install
openclaw skills install farmos-observationsQuery and create field observations and AI-processed captures. Photos, voice notes, and text notes from the field.
openclaw skills install farmos-observationsAI-powered quick capture system — field observations, photos, voice notes, and issue reports.
What this skill handles: Field observations -- pest/disease/weed reports, crop condition notes, weather damage, soil issues, equipment problems spotted in the field, and photo-based scouting captures.
Trigger phrases: "found [pest/weed/disease] in field X", "beans look rough", "something is wrong with field 12", "create an observation", "log this problem", "any observations today?", "what has been reported in field X?"
What this does NOT handle: Equipment maintenance scheduling or fleet status (use farmos-equipment), task/work order creation (use farmos-tasks -- but the bot will offer to create a work order after logging an observation), weather forecasts or spray conditions (use farmos-weather).
Minimum viable input: Any mention of something observed in the field. "Beans look bad" is enough -- the bot will ask smart follow-ups.
/api/integration/dashboard endpoint is for summary stats only — observation counts and pending reviews. Do NOT use it to list individual observations.GET /api/observations with appropriate filters. This endpoint is paginated — use limit parameter and note the total.Note: The observations backend may have stability issues (restart loops reported). If endpoints don't respond, report that the observations service appears to be down.
GET /api/integration/dashboard
Returns: Observation counts, recent activity, pending reviews.
This skill accesses protected FarmOS endpoints that require a JWT token.
To get a token:
TOKEN=$(~/clawd/scripts/farmos-auth.sh manager)
To use the token:
curl -H "Authorization: Bearer $TOKEN" http://100.102.77.110:8008/api/endpoint
Token expiry: Tokens last 15 minutes. If you get a 401 response, request a new token.
GET /api/observations?limit=10&field_id=12 Authorization: Bearer {token}
GET /api/observations/{id} Authorization: Bearer {token}
Returns: Full observation with AI analysis results, extracted entities, urgency score, and any created actions (tasks, maintenance records).
POST /api/observations Authorization: Bearer {token} Content-Type: multipart/form-data
Form fields:
observation_type (required) — pest, disease, weed, weather_damage, equipment_issue, soil, crop_condition, otherdescription (required) — Text description of what was observedseverity (optional) — low, medium, high (default: medium)field_id (optional) — Numeric field IDequipment_id (optional) — Numeric equipment IDphoto (optional) — Image file attachmentExample using curl:
curl -X POST http://100.102.77.110:8008/api/observations \
-H "Authorization: Bearer $TOKEN" \
-F "observation_type=weed" \
-F "description=Found waterhemp in northeast corner near waterway" \
-F "severity=high" \
-F "field_id=22" \
-F "photo=@/path/to/photo.jpg"
When crew reports a problem in #field-support or #field-ops, offer to create an observation. Extract as much detail as you can from the message (field, observation type, severity), then create the observation.
equipment_id when creating. This helps track equipment-specific recurring issues.When a user reports something that sounds like a field observation, auto-detect as much as you can from the message before asking questions.
Field identification:
Observation type -- see the Observation Type Detection table below.
Severity -- see the Severity Detection table below.
Specific pest/disease/weed identification:
Equipment reference:
Location within field:
| Keywords / Signals | Observation Type |
|---|---|
| bug, insect, aphid, rootworm, armyworm, beetle, cutworm, earworm, stink bug, larva, grub | pest |
| tar spot, gray leaf spot, northern leaf blight, rust, rot, blight, lesion, spots on leaves, mold, wilt, SDS, anthracnose, frogeye | disease |
| waterhemp, marestail, ragweed, foxtail, lambsquarters, Palmer, volunteer corn, weeds, escapes, resistance | weed |
| hail, wind damage, flood, frost, drought stress, storm, ice, lightning, washout, ponding | weather_damage |
| broken, leaking, stuck, noise, won't start, overheating, vibration, warning light, hydraulic, flat tire | equipment_issue |
| compaction, erosion, drainage, wet spots, tile, washout, ruts, soil test, pH | soil |
| stand count, emergence, color, lodging, population, uneven, stunted, yellowing, purpling, canopy | crop_condition |
If multiple types match (e.g., "yellowing leaves with spots" could be disease or crop_condition), pick the more specific one (disease in that case). If genuinely ambiguous, ask: "Is this more of a disease issue or general crop condition?"
| Language Signals | Severity |
|---|---|
| "bad", "terrible", "everywhere", "whole field", "never seen this before", "worst I have seen", "out of control", "lost cause" | high |
| "some", "moderate", "spreading", "getting worse", "more than last week", "quite a bit", "a lot of" | medium |
| "a few", "small patch", "just noticed", "isolated", "one spot", "not too bad", "just starting" | low |
Default to medium if the language is neutral or you cannot determine severity. Never guess high -- ask.
When the report is sparse, ask targeted follow-up questions. Maximum 2-3 questions per interaction -- do not interrogate.
| Missing Info | Ask |
|---|---|
| No field identified | "Which field are you in?" (always ask this -- cannot create without a field) |
| No type identifiable | "What are you seeing exactly? Weeds? Bugs? Crop damage? Equipment problem?" |
| Has type but no scope | "How widespread is it?" |
| Weed/pest report | "Any photos?" (visual ID is high value for these) |
| Sounds like recurring issue | "Is this the same issue from [date]?" |
After successfully creating an observation, offer related actions:
Only offer 1-2 of the most relevant follow-up actions. Do not overwhelm the reporter with options.
Flag the operator immediately (in addition to creating the observation) for:
When escalating, send a concise alert: "URGENT: [type] reported in field [X] -- [one-line summary]. Severity: high. Observation #[id] created."
Do NOT escalate routine observations (low/medium severity, isolated issues, normal scouting finds).
After creating or reviewing observations, connect to other modules:
Observations → Pattern Detection:
Observations → Tasks:
Observations → Weather:
Observations → Equipment:
Cross-reference when it adds context. A simple "log this observation" doesn't need a full cross-module sweep. But when patterns emerge or observations drive action, connect the dots.
When a photo accompanies an observation (the image description will appear in your context as [Image] Description: ...), use it to enhance the observation record.
Use the image description to refine type and severity:
Always include the image description in the observation description field. Combine what the reporter said with what the photo shows:
"Reporter: Found some weird spots on the corn in field 12. Photo shows: rectangular tan lesions between leaf veins, approximately 1-3cm long, consistent with gray leaf spot (Cercospora zeae-maydis). Northeast section of field."
When a reporter sends a text-only observation about something visual (pest, disease, weed, damage), and has NOT included a photo:
When creating an observation via POST /api/observations, include the photo as the photo form field if a MediaPath is available in your context. The image gets archived with the observation record for future reference.