FarmOS Observations
name: farmos-observations
by brianppetty · published 2026-03-22
$ claw add gh:brianppetty/brianppetty-farmos-observations---
name: farmos-observations
description: Query and create field observations and AI-processed captures. Photos, voice notes, and text notes from the field.
tags: [farming, observations, field-reports]
---
# 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
1. **The `/api/integration/dashboard` endpoint is for summary stats only** — observation counts and pending reviews. Do NOT use it to list individual observations.
2. **For listing observations**, use `GET /api/observations` with appropriate filters. This endpoint is paginated — use `limit` parameter and note the total.
3. **Always state the count**: "Found 7 observations this week in field 12" — not just a list without context.
4. **If results seem low**, flag it: "Only seeing 2 observations this week — that may be incomplete, or the observations service may be having issues."
5. **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:
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
---
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:**
**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:**
---
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)
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)
Sparse Reporters (field crew, seasonal workers)
- 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
---
Post-Creation Actions
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.
---
Urgency Escalation
**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).
---
Cross-Module Context
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.
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:**
**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
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:
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.
More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...