farmos-observationsQuery and create field observations and AI-processed captures. Photos, voice notes, and text notes from the field.
Install via ClawdBot CLI:
clawdbot install brianppetty/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.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.
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.
Generated Mar 1, 2026
Farmers or agronomists use the skill to report pest sightings like western corn rootworm in specific fields. The AI processes photos and voice notes to classify the pest type and urgency, enabling quick response decisions. This helps in early intervention and reduces crop damage.
During routine field checks, users log observations of crop stress, such as discoloration or stunted growth, using text notes and images. The skill analyzes these inputs to identify potential diseases like tar spot and suggests follow-up actions, improving yield management.
Field operators report equipment problems, such as a malfunctioning header, through voice notes or photos while on-site. The skill captures details like equipment ID and severity, creating maintenance records and tasks to minimize downtime and prevent further damage.
After storms or extreme weather, users document damage like hail impact or flooding in fields using the skill. It processes observations to assess severity and urgency, aiding in insurance claims and recovery planning for affected crops.
Crew members identify and report weed outbreaks, such as waterhemp, in specific field areas with photos and descriptions. The skill logs these observations, tracks recurring issues, and helps plan targeted herbicide applications to control spread.
Offer the skill as part of a paid subscription service for farms, providing AI-powered observation analysis and integration with other farm management tools. Revenue comes from monthly or annual fees per user or field, scaled by farm size and feature access.
Provide basic observation logging for free to attract small farms, while charging for advanced features like AI analysis, priority support, and integration with equipment or task systems. Revenue is generated through upgrades and add-on services.
License the skill to large agricultural corporations or cooperatives for use across multiple farms, with custom integrations and dedicated support. Revenue is based on enterprise contracts, including setup fees and ongoing maintenance costs.
💬 Integration Tip
Ensure JWT tokens are refreshed every 15 minutes to avoid authentication failures, and monitor service stability as the observations backend may experience restart loops.
Transcribe audio via OpenAI Audio Transcriptions API (Whisper).
Local speech-to-text with the Whisper CLI (no API key).
ElevenLabs text-to-speech with mac-style say UX.
Text-to-speech conversion using node-edge-tts npm package for generating audio from text. Supports multiple voices, languages, speed adjustment, pitch control, and subtitle generation. Use when: (1) User requests audio/voice output with the "tts" trigger or keyword. (2) Content needs to be spoken rather than read (multitasking, accessibility, driving, cooking). (3) User wants a specific voice, speed, pitch, or format for TTS output.
End-to-end encrypted agent-to-agent private messaging via Moltbook dead drops. Use when agents need to communicate privately, exchange secrets, or coordinate without human visibility.
Text-to-speech via OpenAI Audio Speech API.