FarmOS Observations
AI-powered quick capture system — field observations, photos, voice notes, and issue reports.
When to Use This
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.
Data Completeness
- The
/api/integration/dashboard endpoint is for summary stats only — observation counts and pending reviews. Do NOT use it to list individual observations.
- For listing observations, use
GET /api/observations with appropriate filters. This endpoint is paginated — use limit parameter and note the total.
- Always state the count: "Found 7 observations this week in field 12" — not just a list without context.
- If results seem low, flag it: "Only seeing 2 observations this week — that may be incomplete, or the observations service may be having issues."
- If the service is down, say so plainly. Don't present empty results as "no observations."
API Base
http://100.102.77.110:8008
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.
Integration Endpoints (No Auth)
Dashboard
GET /api/integration/dashboard
Returns: Observation counts, recent activity, pending reviews.
Authenticated Endpoints (JWT Required)
Authentication
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.
List Observations
GET /api/observations?limit=10&field_id=12
Authorization: Bearer {token}
Observation Detail
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).
Create Observation
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, other
description (required) — Text description of what was observed
severity (optional) — low, medium, high (default: medium)
field_id (optional) — Numeric field ID
equipment_id (optional) — Numeric equipment ID
photo (optional) — Image file attachment
Example 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.
Usage Notes
- Observations include urgency scores (1-10). Flag anything 7+ immediately.
- AI processing classifies type and extracts equipment/field/crop references.
- Observations may create tasks (via Task Manager) or maintenance records (via Equipment).
- If the service is down, let the user know and suggest they log the observation manually.
- The observation intake system is designed for photos from the field — the bot should be ready to accept image messages and route them here.
- Proactive observation creation: When crew mentions issues in channel conversations ("got a bunch of weeds in field 12", "header making a weird noise"), offer to log it as an observation. Don't create silently — ask first.
- Equipment observations: If the observation involves equipment, include
equipment_id when creating. This helps track equipment-specific recurring issues.
Smart Observation Detection
When a user reports something that sounds like a field observation, auto-detect as much as you can from the message before asking questions.
What to Detect
Field identification:
- Explicit: "field 12", "F12", "the 12"
- By name: "the Byrd farm", "Kruckeberg", "home place" -- match to known field names
- From channel context: if the conversation was already about a specific field, carry that forward
- From user location: if they mention "the field I am in" or "out here", check recent context
Observation type -- see the Observation Type Detection table below.
Severity -- see the Severity Detection table below.
Specific pest/disease/weed identification:
- Common Indiana pests: western corn rootworm, Japanese beetle, corn earworm, soybean aphid, bean leaf beetle, armyworm, black cutworm, stink bug
- Common diseases: tar spot, gray leaf spot, northern leaf blight, sudden death syndrome, white mold, frogeye leaf spot, Goss wilt, anthracnose
- Common weeds: waterhemp, marestail (horseweed), giant ragweed, common ragweed, Palmer amaranth, lambsquarters, foxtail, velvetleaf, morningglory
- If the reporter uses a colloquial name, map it: "buttonweed" -> common buttonweed, "volunteer corn" -> note as weed/volunteer
Equipment reference:
- By name/number: "the 8250", "the Kinze", "the planter", "sprayer"
- By implication: "header won't raise" implies the combine (likely 8250)
Location within field:
- Cardinal directions: "northeast corner", "south end"
- Landmarks: "near the waterway", "along the tree line", "by the road", "headlands", "terrace"
- Coverage: "whole field", "scattered", "in patches", "one spot"
Observation Type Detection
| 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?"
Severity Detection
| 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.
Follow-Up Questions (Smart)
When the report is sparse, ask targeted follow-up questions. Maximum 2-3 questions per interaction -- do not interrogate.
Question Bank (pick the most useful ones)
- Scope: "How widespread is it? Just that spot or across the field?"
- Adjacent fields: "Have you seen this in adjacent fields?"
- Percentage: "Roughly what percentage of the field is affected?"
- Photos: "Any photos? A picture would help me nail down exactly what this is."
- Treatment history: "Was this field treated with anything recently?"
- Recurrence: "Is this the same issue you reported on [date]?" (only if a similar recent observation exists -- check observation history first)
- Timing: "When did you first notice this?"
- Trend: "Is it getting worse or holding steady?"
Which Questions to Ask
| 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]?" |
Reporter-Adaptive Behavior
Detailed Reporters (agronomists, Brian, experienced crew)
- They will say things like "Found western corn rootworm beetle damage in field 22, northeast corner, about 15% of the rows affected, adult count was 8 per plant"
- Auto-detect everything. Confirm the details. Create the observation.
- Skip redundant questions -- they have already given you what you need
- Example response: "Got it -- rootworm beetle damage in F22, northeast corner, ~15% of rows, 8 adults/plant. Severity: high. Creating the observation now."
Sparse Reporters (field crew, seasonal workers)
- They will say things like "something's wrong with field 12" or "beans look bad"
- Ask 2-3 targeted follow-up questions. Do NOT interrogate.
- Pick the highest-value questions for the situation
- After 2-3 questions, create the observation with whatever you have
- Example exchange:
- Crew: "Beans look rough in 12"
- Bot: "What are you seeing -- weeds, bugs, disease, or just the crop looking off? And is it the whole field or just a section?"
- Crew: "Weeds. Northeast side mostly."
- Bot: "Got it. Creating an observation -- weed pressure in field 12, northeast section, medium severity. Want me to create a scouting work order for it too?"
Key Rules
- Always offer before creating: "Want me to create an observation for this?" Do NOT create silently -- unless the user has explicitly asked you to create one.
- Exception: If the user directly says "Log this" or "Create an observation for...", that IS explicit permission -- go ahead and create.
- Never ask more than 3 follow-up questions. After 3, create with what you have and note what was unknown.
Post-Creation Actions
After successfully creating an observation, offer related actions:
- Work order: "Want me to create a work order for this?" (especially for weed/pest/equipment issues that need action)
- Adjacent field check: "Should I check if adjacent fields have the same issue?" (useful for pest/disease/weed spread)
- Scouting task: "Want me to schedule a follow-up scouting trip?" (for observations that need monitoring)
- Equipment maintenance: If equipment_issue type, "Want me to log this against the equipment maintenance record?"
Only offer 1-2 of the most relevant follow-up actions. Do not overwhelm the reporter with options.
Urgency Escalation
Flag the operator immediately (in addition to creating the observation) for:
- Crop damage at high severity -- potential yield loss, Brian needs to know
- Equipment safety -- hydraulic leak, structural failure, anything that could injure someone
- Chemical exposure -- drift, spill, re-entry violation, any chemical safety concern
- Pest/disease outbreak -- high severity pest or disease that could spread rapidly (tar spot, sudden death syndrome, heavy rootworm pressure)
- Weather damage at high severity -- hail, flood, significant storm damage
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).
Cross-Module Context
After creating or reviewing observations, connect to other modules:
Observations → Pattern Detection:
- When a new observation is created, check for similar recent observations (same type, nearby fields, same week): "This is the third waterhemp observation this week across three different fields. Might be time for a blanket spray program rather than spot treatments."
- When listing observations, group by pattern when multiple share type/field/timeframe: "3 disease observations this week, all in the east fields. Could be spreading."
- Track escalation: "First report was low severity last Tuesday, now we're at high severity across 4 fields. This is moving fast."
Observations → Tasks:
- After creating an observation, check farmos-tasks for existing work orders related to this field or issue: "There's already a scouting task open for field 22 from yesterday — want me to add this observation to it?"
- If no related task exists and the observation is actionable (pest, disease, weed at medium+ severity), offer to create one.
- Connect observation patterns to task suggestions: "Third waterhemp sighting this week — want me to create a blanket spray task?"
Observations → Weather:
- Connect recent weather to observation context: "3 disease observations after last week's rain — moisture likely drove this."
- When a weather_damage observation is created, pull the actual weather data: "You're reporting hail damage in field 14. Records show we got 1.2 inches with possible hail Tuesday evening."
- Flag ongoing weather risk: "With more rain coming Thursday, expect this fungal pressure to continue."
Observations → Equipment:
- If an observation leads to a task that requires specific equipment, check equipment availability: "If you're going to spray for this waterhemp, the sprayer is available — 153 hours, no maintenance due."
- For equipment_issue observations, cross-reference with farmos-equipment for that machine's maintenance history.
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.
Image Understanding
When a photo accompanies an observation (the image description will appear in your context as [Image] Description: ...), use it to enhance the observation record.
Photo-Enhanced Detection
Use the image description to refine type and severity:
- Photo of lesions on leaves -- identify disease characteristics (shape, color, pattern, location on leaf) -- refine observation_type to "disease" and attempt specific ID
- Photo of insects or insect damage -- identify species or damage pattern -- refine observation_type to "pest"
- Photo of weeds -- identify species from leaf shape, growth habit, flower/seed head -- refine observation_type to "weed"
- Photo of equipment in the field -- note the machine and any visible issues -- set observation_type to "equipment_issue" and include equipment_id
- Photo of crop conditions -- note growth stage, color, stand count, uniformity -- refine observation_type to "crop_condition"
- Photo of weather damage -- note damage pattern (hail bruising, wind lodging, flood line) -- set observation_type to "weather_damage"
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."
Photo Quality Handling
- Clear photo: Use it confidently to refine detection. State what you see and your assessment.
- Unclear/blurry/dark photo: Say so honestly: "I can make out [what you can see] but the photo is too blurry/dark for a confident ID. Can you get a closer shot, or describe what you are seeing?"
- Photo does not match description: If the photo shows something different from what the reporter described, mention it: "You mentioned weeds but the photo looks like it might be disease lesions -- can you clarify?"
- Multiple issues visible: Note all of them: "I can see both waterhemp and what looks like tar spot lesions in this photo. Want me to create observations for both?"
Photo Prompt for Sparse Reports
When a reporter sends a text-only observation about something visual (pest, disease, weed, damage), and has NOT included a photo:
- "Any photos? A picture would help me nail down exactly what this is." (already in the follow-up question bank)
- Do NOT demand photos. A text description is always enough to create an observation.
Attaching Photos to Observations
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.
1---2name: farmos-observations3description: Query and create field observations and AI-processed captures. Photos, voice notes, and text notes from the field.4---5
6# FarmOS Observations
7
8AI-powered quick capture system — field observations, photos, voice notes, and issue reports.
9
10## When to Use This
11
12**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.
13
14**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?"
15
16**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).
17
18**Minimum viable input:** Any mention of something observed in the field. "Beans look bad" is enough -- the bot will ask smart follow-ups.
19
20## Data Completeness
21
221. **The `/api/integration/dashboard` endpoint is for summary stats only** — observation counts and pending reviews. Do NOT use it to list individual observations.
232. **For listing observations**, use `GET /api/observations` with appropriate filters. This endpoint is paginated — use `limit` parameter and note the total.
243. **Always state the count**: "Found 7 observations this week in field 12" — not just a list without context.
254. **If results seem low**, flag it: "Only seeing 2 observations this week — that may be incomplete, or the observations service may be having issues."
265. **If the service is down**, say so plainly. Don't present empty results as "no observations."
27
28## API Base
29
30http://100.102.77.110:8008
31
32**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.
33
34## Integration Endpoints (No Auth)
35
36### Dashboard
37GET /api/integration/dashboard
38
39Returns: Observation counts, recent activity, pending reviews.
40
41## Authenticated Endpoints (JWT Required)
42
43### Authentication
44
45This skill accesses protected FarmOS endpoints that require a JWT token.
46
47**To get a token:**
48```bash
49TOKEN=$(~/clawd/scripts/farmos-auth.sh manager)
50```
51
52**To use the token:**
53```bash
54curl -H "Authorization: Bearer $TOKEN" http://100.102.77.110:8008/api/endpoint
55```
56
57**Token expiry:** Tokens last 15 minutes. If you get a 401 response, request a new token.
58
59### List Observations
60GET /api/observations?limit=10&field_id=12
61Authorization: Bearer {token}
62
63### Observation Detail
64GET /api/observations/{id}
65Authorization: Bearer {token}
66
67Returns: Full observation with AI analysis results, extracted entities, urgency score, and any created actions (tasks, maintenance records).
68
69### Create Observation
70POST /api/observations
71Authorization: Bearer {token}
72Content-Type: multipart/form-data
73
74Form fields:
75- `observation_type` (required) — pest, disease, weed, weather_damage, equipment_issue, soil, crop_condition, other
76- `description` (required) — Text description of what was observed
77- `severity` (optional) — low, medium, high (default: medium)
78- `field_id` (optional) — Numeric field ID
79- `equipment_id` (optional) — Numeric equipment ID
80- `photo` (optional) — Image file attachment
81
82Example using curl:
83```bash
84curl -X POST http://100.102.77.110:8008/api/observations \
85 -H "Authorization: Bearer $TOKEN" \
86 -F "observation_type=weed" \
87 -F "description=Found waterhemp in northeast corner near waterway" \
88 -F "severity=high" \
89 -F "field_id=22" \
90 -F "photo=@/path/to/photo.jpg"
91```
92
93**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.
94
95## Usage Notes
96
97- Observations include urgency scores (1-10). Flag anything 7+ immediately.
98- AI processing classifies type and extracts equipment/field/crop references.
99- Observations may create tasks (via Task Manager) or maintenance records (via Equipment).
100- If the service is down, let the user know and suggest they log the observation manually.
101- The observation intake system is designed for photos from the field — the bot should be ready to accept image messages and route them here.
102- **Proactive observation creation:** When crew mentions issues in channel conversations ("got a bunch of weeds in field 12", "header making a weird noise"), offer to log it as an observation. Don't create silently — ask first.
103- **Equipment observations:** If the observation involves equipment, include `equipment_id` when creating. This helps track equipment-specific recurring issues.
104
105
106---
107
108## Smart Observation Detection
109
110When a user reports something that sounds like a field observation, auto-detect as much as you can from the message before asking questions.
111
112### What to Detect
113
114**Field identification:**
115- Explicit: "field 12", "F12", "the 12"
116- By name: "the Byrd farm", "Kruckeberg", "home place" -- match to known field names
117- From channel context: if the conversation was already about a specific field, carry that forward
118- From user location: if they mention "the field I am in" or "out here", check recent context
119
120**Observation type** -- see the Observation Type Detection table below.
121
122**Severity** -- see the Severity Detection table below.
123
124**Specific pest/disease/weed identification:**
125- Common Indiana pests: western corn rootworm, Japanese beetle, corn earworm, soybean aphid, bean leaf beetle, armyworm, black cutworm, stink bug
126- Common diseases: tar spot, gray leaf spot, northern leaf blight, sudden death syndrome, white mold, frogeye leaf spot, Goss wilt, anthracnose
127- Common weeds: waterhemp, marestail (horseweed), giant ragweed, common ragweed, Palmer amaranth, lambsquarters, foxtail, velvetleaf, morningglory
128- If the reporter uses a colloquial name, map it: "buttonweed" -> common buttonweed, "volunteer corn" -> note as weed/volunteer
129
130**Equipment reference:**
131- By name/number: "the 8250", "the Kinze", "the planter", "sprayer"
132- By implication: "header won't raise" implies the combine (likely 8250)
133
134**Location within field:**
135- Cardinal directions: "northeast corner", "south end"
136- Landmarks: "near the waterway", "along the tree line", "by the road", "headlands", "terrace"
137- Coverage: "whole field", "scattered", "in patches", "one spot"
138
139---
140
141## Observation Type Detection
142
143| Keywords / Signals | Observation Type |
144|--------------------|-----------------|
145| bug, insect, aphid, rootworm, armyworm, beetle, cutworm, earworm, stink bug, larva, grub | pest |
146| tar spot, gray leaf spot, northern leaf blight, rust, rot, blight, lesion, spots on leaves, mold, wilt, SDS, anthracnose, frogeye | disease |
147| waterhemp, marestail, ragweed, foxtail, lambsquarters, Palmer, volunteer corn, weeds, escapes, resistance | weed |
148| hail, wind damage, flood, frost, drought stress, storm, ice, lightning, washout, ponding | weather_damage |
149| broken, leaking, stuck, noise, won't start, overheating, vibration, warning light, hydraulic, flat tire | equipment_issue |
150| compaction, erosion, drainage, wet spots, tile, washout, ruts, soil test, pH | soil |
151| stand count, emergence, color, lodging, population, uneven, stunted, yellowing, purpling, canopy | crop_condition |
152
153**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?"
154
155---
156
157## Severity Detection
158
159| Language Signals | Severity |
160|-----------------|----------|
161| "bad", "terrible", "everywhere", "whole field", "never seen this before", "worst I have seen", "out of control", "lost cause" | high |
162| "some", "moderate", "spreading", "getting worse", "more than last week", "quite a bit", "a lot of" | medium |
163| "a few", "small patch", "just noticed", "isolated", "one spot", "not too bad", "just starting" | low |
164
165**Default to medium** if the language is neutral or you cannot determine severity. Never guess high -- ask.
166
167---
168
169## Follow-Up Questions (Smart)
170
171When the report is sparse, ask targeted follow-up questions. **Maximum 2-3 questions per interaction -- do not interrogate.**
172
173### Question Bank (pick the most useful ones)
174
175- **Scope:** "How widespread is it? Just that spot or across the field?"
176- **Adjacent fields:** "Have you seen this in adjacent fields?"
177- **Percentage:** "Roughly what percentage of the field is affected?"
178- **Photos:** "Any photos? A picture would help me nail down exactly what this is."
179- **Treatment history:** "Was this field treated with anything recently?"
180- **Recurrence:** "Is this the same issue you reported on [date]?" (only if a similar recent observation exists -- check observation history first)
181- **Timing:** "When did you first notice this?"
182- **Trend:** "Is it getting worse or holding steady?"
183
184### Which Questions to Ask
185
186| Missing Info | Ask |
187|-------------|-----|
188| No field identified | "Which field are you in?" (always ask this -- cannot create without a field) |
189| No type identifiable | "What are you seeing exactly? Weeds? Bugs? Crop damage? Equipment problem?" |
190| Has type but no scope | "How widespread is it?" |
191| Weed/pest report | "Any photos?" (visual ID is high value for these) |
192| Sounds like recurring issue | "Is this the same issue from [date]?" |
193
194---
195
196## Reporter-Adaptive Behavior
197
198### Detailed Reporters (agronomists, Brian, experienced crew)
199- They will say things like "Found western corn rootworm beetle damage in field 22, northeast corner, about 15% of the rows affected, adult count was 8 per plant"
200- **Auto-detect everything. Confirm the details. Create the observation.**
201- Skip redundant questions -- they have already given you what you need
202- Example response: "Got it -- rootworm beetle damage in F22, northeast corner, ~15% of rows, 8 adults/plant. Severity: high. Creating the observation now."
203
204### Sparse Reporters (field crew, seasonal workers)
205- They will say things like "something's wrong with field 12" or "beans look bad"
206- **Ask 2-3 targeted follow-up questions. Do NOT interrogate.**
207- Pick the highest-value questions for the situation
208- After 2-3 questions, create the observation with whatever you have
209- Example exchange:
210 - Crew: "Beans look rough in 12"
211 - Bot: "What are you seeing -- weeds, bugs, disease, or just the crop looking off? And is it the whole field or just a section?"
212 - Crew: "Weeds. Northeast side mostly."
213 - Bot: "Got it. Creating an observation -- weed pressure in field 12, northeast section, medium severity. Want me to create a scouting work order for it too?"
214
215### Key Rules
216- **Always offer before creating:** "Want me to create an observation for this?" Do NOT create silently -- unless the user has explicitly asked you to create one.
217- **Exception:** If the user directly says "Log this" or "Create an observation for...", that IS explicit permission -- go ahead and create.
218- **Never ask more than 3 follow-up questions.** After 3, create with what you have and note what was unknown.
219
220---
221
222## Post-Creation Actions
223
224After successfully creating an observation, offer related actions:
225
226- **Work order:** "Want me to create a work order for this?" (especially for weed/pest/equipment issues that need action)
227- **Adjacent field check:** "Should I check if adjacent fields have the same issue?" (useful for pest/disease/weed spread)
228- **Scouting task:** "Want me to schedule a follow-up scouting trip?" (for observations that need monitoring)
229- **Equipment maintenance:** If equipment_issue type, "Want me to log this against the equipment maintenance record?"
230
231Only offer 1-2 of the most relevant follow-up actions. Do not overwhelm the reporter with options.
232
233---
234
235## Urgency Escalation
236
237**Flag the operator immediately** (in addition to creating the observation) for:
238
239- **Crop damage** at high severity -- potential yield loss, Brian needs to know
240- **Equipment safety** -- hydraulic leak, structural failure, anything that could injure someone
241- **Chemical exposure** -- drift, spill, re-entry violation, any chemical safety concern
242- **Pest/disease outbreak** -- high severity pest or disease that could spread rapidly (tar spot, sudden death syndrome, heavy rootworm pressure)
243- **Weather damage** at high severity -- hail, flood, significant storm damage
244
245When escalating, send a concise alert: "URGENT: [type] reported in field [X] -- [one-line summary]. Severity: high. Observation #[id] created."
246
247Do NOT escalate routine observations (low/medium severity, isolated issues, normal scouting finds).
248
249
250---
251
252## Cross-Module Context
253
254After creating or reviewing observations, connect to other modules:
255
256**Observations → Pattern Detection:**
257- When a new observation is created, check for similar recent observations (same type, nearby fields, same week): "This is the third waterhemp observation this week across three different fields. Might be time for a blanket spray program rather than spot treatments."
258- When listing observations, group by pattern when multiple share type/field/timeframe: "3 disease observations this week, all in the east fields. Could be spreading."
259- Track escalation: "First report was low severity last Tuesday, now we're at high severity across 4 fields. This is moving fast."
260
261**Observations → Tasks:**
262- After creating an observation, check farmos-tasks for existing work orders related to this field or issue: "There's already a scouting task open for field 22 from yesterday — want me to add this observation to it?"
263- If no related task exists and the observation is actionable (pest, disease, weed at medium+ severity), offer to create one.
264- Connect observation patterns to task suggestions: "Third waterhemp sighting this week — want me to create a blanket spray task?"
265
266**Observations → Weather:**
267- Connect recent weather to observation context: "3 disease observations after last week's rain — moisture likely drove this."
268- When a weather_damage observation is created, pull the actual weather data: "You're reporting hail damage in field 14. Records show we got 1.2 inches with possible hail Tuesday evening."
269- Flag ongoing weather risk: "With more rain coming Thursday, expect this fungal pressure to continue."
270
271**Observations → Equipment:**
272- If an observation leads to a task that requires specific equipment, check equipment availability: "If you're going to spray for this waterhemp, the sprayer is available — 153 hours, no maintenance due."
273- For equipment_issue observations, cross-reference with farmos-equipment for that machine's maintenance history.
274
275Cross-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.
276
277## Image Understanding
278
279When a photo accompanies an observation (the image description will appear in your context as `[Image] Description: ...`), use it to enhance the observation record.
280
281### Photo-Enhanced Detection
282
283**Use the image description to refine type and severity:**
284- Photo of lesions on leaves -- identify disease characteristics (shape, color, pattern, location on leaf) -- refine observation_type to "disease" and attempt specific ID
285- Photo of insects or insect damage -- identify species or damage pattern -- refine observation_type to "pest"
286- Photo of weeds -- identify species from leaf shape, growth habit, flower/seed head -- refine observation_type to "weed"
287- Photo of equipment in the field -- note the machine and any visible issues -- set observation_type to "equipment_issue" and include equipment_id
288- Photo of crop conditions -- note growth stage, color, stand count, uniformity -- refine observation_type to "crop_condition"
289- Photo of weather damage -- note damage pattern (hail bruising, wind lodging, flood line) -- set observation_type to "weather_damage"
290
291**Always include the image description in the observation `description` field.** Combine what the reporter said with what the photo shows:
292> "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."
293
294### Photo Quality Handling
295
296- **Clear photo:** Use it confidently to refine detection. State what you see and your assessment.
297- **Unclear/blurry/dark photo:** Say so honestly: "I can make out [what you can see] but the photo is too blurry/dark for a confident ID. Can you get a closer shot, or describe what you are seeing?"
298- **Photo does not match description:** If the photo shows something different from what the reporter described, mention it: "You mentioned weeds but the photo looks like it might be disease lesions -- can you clarify?"
299- **Multiple issues visible:** Note all of them: "I can see both waterhemp and what looks like tar spot lesions in this photo. Want me to create observations for both?"
300
301### Photo Prompt for Sparse Reports
302
303When a reporter sends a text-only observation about something visual (pest, disease, weed, damage), and has NOT included a photo:
304- "Any photos? A picture would help me nail down exactly what this is." (already in the follow-up question bank)
305- Do NOT demand photos. A text description is always enough to create an observation.
306
307### Attaching Photos to Observations
308
309When 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.