mechanicVehicle maintenance tracker and mechanic advisor. Tracks mileage, service intervals, fuel economy, costs, warranties, and recalls. Researches manufacturer schedules, estimates costs, projects service dates, tracks providers, and proactively reminds about upcoming/overdue services. Supports VIN decode and auto-population of vehicle specs, NHTSA recall monitoring, MPG tracking with anomaly detection, warranty expiration alerts, pre-trip/seasonal checklists, mileage projection, service provider history, tax deduction integration, emergency info cards, and cost-per-mile analysis. Use when discussing vehicle maintenance, oil changes, service intervals, mileage tracking, fuel economy, warranties, recalls, RV maintenance, roof sealing, generator service, slide-outs, winterization, or anything mechanic-related. Supports any vehicle type including trucks, cars, motorcycles, dirt bikes, ATVs, RVs, and boats.
Install via ClawdBot CLI:
clawdbot install ScotTFO/mechanicTrack mileage and service intervals for any combination of vehicles — trucks, cars, motorcycles, RVs, dirt bikes, ATVs, boats, and more. Decodes VINs to auto-populate vehicle specs, researches manufacturer-recommended maintenance schedules, tracks service history, estimates costs, monitors recalls, tracks fuel economy, manages warranties, and proactively reminds about upcoming and overdue services.
All user data lives in :
| File | Purpose |
|------|---------|
| state.json | All vehicles: current mileage/hours, history, service records, fuel logs, warranties, providers, emergency info |
| | Per-vehicle service schedule with intervals and cost estimates |
Convention: Skill logic lives in , user data lives in . This keeps data safe when the skill is updated or reinstalled.
If doesn't exist:
/data/mechanic/ directorystate.json with the vehicle entries{
"settings": {
"check_in_tz": "America/Phoenix"
},
"providers": [
{
"id": "jims_diesel",
"name": "Jim's Diesel Repair",
"location": "123 Main St, Mesa, AZ",
"phone": "480-555-1234",
"specialties": ["diesel", "trucks"],
"rating": 5,
"notes": "Great with Power Stroke engines"
}
],
"vehicles": {
"f350": {
"label": "2021 Ford F-350 6.7L Power Stroke",
"schedule_file": "f350-schedule.json",
"check_in_frequency": "monthly",
"current_miles": 61450,
"last_updated": "2026-01-26",
"last_check_in": "2026-01-26",
"vin": "1FT8W3BT0MED12345",
"vin_data": {
"decoded": true,
"decoded_date": "2026-01-26",
"year": 2021,
"make": "Ford",
"model": "F-350",
"trim": "Lariat",
"body_class": "Pickup",
"drive_type": "4WD",
"engine": "6.7L Power Stroke V8 Turbo Diesel",
"displacement_l": 6.7,
"cylinders": 8,
"fuel_type": "Diesel",
"transmission": "10-Speed Automatic",
"doors": 4,
"gvwr_class": "Class 3",
"bed_length": "8 ft",
"wheel_base": "176 in",
"plant_country": "United States",
"plant_city": "Louisville",
"raw_response": {}
},
"business_use": false,
"business_use_percent": 0,
"mileage_history": [
{"date": "2026-01-26", "miles": 61450, "source": "user_reported"}
],
"service_history": [
{
"service_id": "oil_filter",
"date": "2025-11-15",
"miles": 58000,
"hours": null,
"notes": "Full synthetic Motorcraft FL-2051S",
"actual_cost": 125.00,
"provider": {
"id": "jims_diesel",
"name": "Jim's Diesel Repair",
"parts_warranty_months": 12,
"labor_warranty_months": 6
}
}
],
"fuel_history": [
{
"date": "2026-01-20",
"gallons": 32.5,
"cost": 108.55,
"odometer": 61300,
"mpg": 14.2,
"notes": "Regular fill-up"
}
],
"warranties": [
{
"type": "factory_powertrain",
"provider": "Ford",
"start_date": "2021-03-15",
"end_date": "2026-03-15",
"start_miles": 0,
"end_miles": 60000,
"coverage_details": "Engine, transmission, drivetrain components",
"status": "active"
}
],
"recalls": {
"last_checked": "2026-01-26",
"open_recalls": [],
"completed_recalls": []
},
"emergency_info": {
"vin": "1FT8W3BT0MED12345",
"insurance_provider": "State Farm",
"policy_number": "SF-123456789",
"roadside_assistance_phone": "1-800-555-1234",
"tire_size_front": "275/70R18",
"tire_size_rear": "275/70R18",
"tire_pressure_front_psi": 65,
"tire_pressure_rear_psi": 80,
"oil_type": "15W-40 CK-4 Full Synthetic",
"oil_capacity": "15 quarts",
"coolant_type": "Motorcraft Orange VC-3DIL-B",
"def_type": "API certified DEF",
"tow_rating_lbs": 20000,
"gvwr_lbs": 14000,
"gcwr_lbs": 37000,
"key_fob_battery": "CR2450",
"fuel_type": "Diesel (Ultra Low Sulfur)",
"fuel_tank_gallons": 48,
"notes": ""
}
}
},
"last_service_review": "2026-01-26"
}
Top-level fields:
settings — global settings (timezone, etc.)providers — reusable list of service providersvehicles — keyed by short slug (e.g., f350, rv, crf450)last_service_review — date of last full reviewPer-vehicle fields:
label — human-readable vehicle nameschedule_file — path to the service schedule JSONcheck_in_frequency — how often to ask for mileage (weekly/biweekly/monthly/quarterly)current_miles / current_hours — latest known readingslast_updated / last_check_in — date trackingvin — Vehicle Identification Number (for recalls, VIN decode, and emergency info)vin_data — decoded VIN data from NHTSA VPIC API (specs, engine, transmission, etc.)business_use — whether vehicle is used for business (boolean)business_use_percent — percentage of business use (0-100)mileage_history — chronological array of mileage/hours entriesservice_history — chronological array of completed services (with optional actual_cost and provider)fuel_history — chronological array of fuel fill-upswarranties — array of warranty recordsrecalls — recall monitoring state (last checked, open/completed)emergency_info — quick-reference vehicle specs and emergency contactsOn skill load, read:
/data/mechanic/state.json — current state for all vehicles-schedule.json file(s) depending on what's being discussedWhen the user wants to track a new vehicle:
Ask for the VIN first. If the user provides a VIN, run the VIN Decode (see below) to auto-populate year, make, model, engine, transmission, drive type, and other specs. This saves the user from answering questions you can look up automatically.
Ask for:
If the user doesn't have the VIN handy, proceed with manual info and note that VIN can be added later to unlock auto-population and recall monitoring.
Ask about usage to classify the maintenance schedule:
| Usage | Duty Level | Effect |
|-------|-----------|--------|
| Normal commuting | Normal | Standard intervals |
| Towing, hauling | Severe | Shorter intervals (typically 50-75% of normal) |
| Off-road, dusty conditions | Severe | Shorter intervals, more frequent filter changes |
| Extreme temps (hot desert, harsh cold) | Severe | Shorter intervals, fluid/battery concerns |
| Track/racing | Severe+ | Aggressive intervals, specialized fluids |
| Light use, garage kept | Normal | Standard intervals, but watch time-based items |
Most manufacturers publish both "normal" and "severe/special conditions" schedules. Use the one that matches.
Ask how often they want to be asked about this vehicle's mileage/hours:
| Frequency | Best for |
|-----------|----------|
| Weekly | Dirt bikes, race vehicles, commercial/fleet, high-mileage daily drivers |
| Every 2 weeks | Active riders/drivers, vehicles with short service intervals |
| Monthly | Most cars and trucks (recommended default) |
| Quarterly | Seasonal vehicles, low-mileage, garage queens, stored boats |
Suggest a frequency based on the vehicle type and usage pattern, but let the user override.
Look up manufacturer-recommended maintenance intervals for that specific year/make/model/engine:
Create :
{
"vehicle": {
"year": 2021,
"make": "Ford",
"model": "F-350",
"type": "truck",
"engine": "6.7L Power Stroke V8 Turbo Diesel",
"transmission": "10R140 10-Speed Automatic",
"duty": "severe",
"notes": "Tows fifth wheel RV"
},
"services": [
{
"id": "oil_filter",
"name": "Engine Oil & Filter Change",
"interval_miles": 7500,
"interval_months": 6,
"details": "Specific oil type, filter part number, capacity, and any special instructions.",
"priority": "critical",
"cost_diy": "$XX-XX",
"cost_shop": "$XX-XX",
"cost_dealer": "$XX-XX",
"cost_note": "Optional note about related expensive repairs"
}
]
}
Required for every service item:
id — unique snake_case identifiername — human-readable nameinterval_miles, interval_months, interval_hours, or interval_ridesdetails — specific parts, fluids, capacities, and any warningspriority — critical, high, medium, or lowcost_diy, cost_shop, cost_dealer — estimated cost rangesResearch costs:
cost_note for items where failure/repair is significantly more expensive than maintenanceAdd the vehicle to state.json under the vehicles object:
{
"<key>": {
"label": "2021 Ford F-350 6.7L Power Stroke",
"schedule_file": "<key>-schedule.json",
"check_in_frequency": "monthly",
"current_miles": 61450,
"current_hours": null,
"last_updated": "2026-01-26",
"last_check_in": "2026-01-26",
"vin": null,
"vin_data": {
"decoded": false
},
"business_use": false,
"business_use_percent": 0,
"mileage_history": [
{"date": "2026-01-26", "miles": 61450, "source": "user_reported"}
],
"service_history": [],
"fuel_history": [],
"warranties": [],
"recalls": {
"last_checked": null,
"open_recalls": [],
"completed_recalls": []
},
"emergency_info": {
"vin": null,
"insurance_provider": null,
"policy_number": null,
"roadside_assistance_phone": null,
"tire_size_front": null,
"tire_size_rear": null,
"tire_pressure_front_psi": null,
"tire_pressure_rear_psi": null,
"oil_type": null,
"oil_capacity": null,
"coolant_type": null,
"tow_rating_lbs": null,
"gvwr_lbs": null,
"key_fob_battery": null,
"fuel_type": null,
"fuel_tank_gallons": null,
"notes": ""
}
}
}
Key naming: Use a short, memorable slug — f350, civic, r1, rv, crf450, harley, bass_boat, etc.
Update the cron job prompt to include the new vehicle. If this vehicle's frequency is higher than the current cron schedule, update the cron to fire at the higher frequency.
If a VIN was provided, run the VIN Decode to auto-populate vehicle specs, emergency info fields, and the schedule file's vehicle section. Present the decoded info to the user for confirmation.
If a VIN was provided, immediately check for open recalls (see NHTSA Recall Monitoring). If no VIN, check by make/model/year.
| Type | Track | Key Maintenance Items |
|------|-------|----------------------|
| Car | Miles | Oil, filters, brakes, tires, transmission, coolant |
| Truck | Miles | Same as car + diff fluids, transfer case (4WD), heavier brake wear if towing |
| Motorcycle | Miles | Oil, chain/sprockets, valve clearance, fork oil, brake fluid, coolant (liquid-cooled), tires (wear faster) |
| Dirt Bike | Hours + rides | Air filter (every ride!), oil (very frequent), valve clearance, suspension service, chain, coolant |
| ATV/UTV | Hours + miles | Similar to dirt bike + CV boots, belt (CVT), winch maintenance |
| RV/Trailer | Miles + months | Roof/sealant inspection, slide-outs, wheel bearings, electric brakes, tires (age-based), water system, generator, winterization |
| Boat | Hours | Oil, impeller, lower unit fluid, zincs/anodes, winterization, trailer bearings |
| Fifth Wheel/Trailer | Miles + months | No engine, but: bearings, brakes, tires, roof, seals, slides, plumbing, LP gas, seasonal prep |
Services can use any combination of:
interval_miles — odometer-basedinterval_hours — engine/usage hours (generators, dirt bikes, boats)interval_months — time-based (everything degrades with age)interval_rides — per-use (e.g., dirt bike air filter = every ride)Whichever interval is reached first triggers the service.
When a user provides a VIN (during vehicle setup or later), decode it using the free NHTSA VPIC API to automatically look up and store vehicle specifications.
Endpoint: https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVinValues/{VIN}?format=json
No API key required. Free and unlimited.
Example:
GET https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVinValues/1FT8W3BT0MED12345?format=json
The API returns a Results array with one object containing ~140+ fields. Extract and map these:
| VPIC Field | Maps To | Notes |
|------------|---------|-------|
| ModelYear | vin_data.year | Vehicle year |
| Make | vin_data.make | Manufacturer |
| Model | vin_data.model | Model name |
| Trim | vin_data.trim | Trim level (Lariat, XLT, etc.) |
| BodyClass | vin_data.body_class | Pickup, SUV, Motorcycle, etc. |
| DriveType | vin_data.drive_type | 4WD, AWD, RWD, FWD |
| DisplacementL | vin_data.displacement_l | Engine displacement in liters |
| EngineCylinders | vin_data.cylinders | Number of cylinders |
| FuelTypePrimary | vin_data.fuel_type | Gasoline, Diesel, Electric, etc. |
| EngineModel | vin_data.engine | Combine with displacement for label |
| TransmissionStyle | vin_data.transmission | Automatic, Manual, CVT |
| TransmissionSpeeds | (append to transmission) | "10-Speed Automatic" |
| Doors | vin_data.doors | Number of doors |
| GVWR | vin_data.gvwr_class | Gross Vehicle Weight Rating class |
| WheelBaseShort | vin_data.wheel_base | Wheelbase in inches |
| BedLengthIN | vin_data.bed_length | Truck bed length (if applicable) |
| PlantCountry | vin_data.plant_country | Assembly country |
| PlantCity | vin_data.plant_city | Assembly city |
Note: Many fields return empty strings "" if not applicable. Only store non-empty values.
Store decoded data in the vehicle's vin_data object in state.json:
{
"vin_data": {
"decoded": true,
"decoded_date": "2026-01-27",
"year": 2021,
"make": "Ford",
"model": "F-350",
"trim": "Lariat",
"body_class": "Pickup",
"drive_type": "4WD",
"engine": "6.7L Power Stroke V8 Turbo Diesel",
"displacement_l": 6.7,
"cylinders": 8,
"fuel_type": "Diesel",
"transmission": "10-Speed Automatic",
"doors": 4,
"gvwr_class": "Class 3",
"bed_length": "8 ft",
"wheel_base": "176 in",
"plant_country": "United States",
"plant_city": "Louisville",
"raw_response": {}
}
}
Store raw_response as the full VPIC result object for reference — it contains additional fields that may be useful later (e.g., AirBagLocFront, SeatBeltsAll, TPMS, ActiveSafetySysNote, etc.).
If vin_data.decoded is false or missing, the VIN hasn't been decoded yet.
When a VIN is decoded:
vin_data — store all decoded fieldslabel — build from decoded year/make/model/engine (e.g., "2021 Ford F-350 6.7L Power Stroke")emergency_info — auto-fill fields that can be derived:fuel_type from FuelTypePrimarygvwr_lbs from GVWR (parse weight class to approximate lbs)vehicle section with decoded specs| Trigger | Action |
|---------|--------|
| New vehicle added with VIN | Decode immediately, auto-populate |
| User provides VIN for existing vehicle | Decode, backfill vin_data and any empty fields |
| User says "look up my VIN" | Decode and display specs |
| User changes/corrects VIN | Re-decode and update |
If a vehicle was added without a VIN and the user provides one later:
vin_datavin fieldemergency_info fieldslabel if the decoded info is more specificWhen presenting decoded VIN data to the user:
🔍 VIN Decoded — [VIN]
━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 Vehicle
Year: [year] | Make: [make] | Model: [model]
Trim: [trim] | Body: [body_class]
Drive: [drive_type] | Doors: [doors]
🔧 Powertrain
Engine: [engine] ([displacement]L, [cylinders] cyl)
Fuel: [fuel_type]
Transmission: [transmission]
📏 Specs
GVWR: [gvwr_class]
Wheel Base: [wheel_base]
Bed Length: [bed_length] (if truck)
🏭 Built in [plant_city], [plant_country]
━━━━━━━━━━━━━━━━━━━━━━━━━━━
Monitor for open recalls on all tracked vehicles using the free NHTSA API (no API key required).
https://api.nhtsa.dot.gov/recalls/recallsByVehicle?make=Ford&model=F-350&modelYear=2021https://api.nhtsa.dot.gov/recalls/recallsByVin?vin=XXXXXIf a VIN is stored, prefer the VIN-based lookup. Otherwise fall back to make/model/year.
Per vehicle in state.json:
{
"recalls": {
"last_checked": "2026-01-26",
"open_recalls": [
{
"nhtsa_id": "26V-123",
"component": "FUEL SYSTEM",
"summary": "Fuel line may crack under pressure",
"consequence": "Fuel leak, fire risk",
"remedy": "Dealer will replace fuel line at no cost",
"date_reported": "2025-12-01",
"status": "open"
}
],
"completed_recalls": [
{
"nhtsa_id": "24V-456",
"component": "ELECTRICAL",
"summary": "Battery cable may corrode",
"date_completed": "2025-06-15",
"notes": "Done at dealer"
}
]
}
}
Include in service review output:
⚠️ OPEN RECALLS
- [NHTSA ID] — [Component]: [Summary]
Remedy: [What the dealer will do]
⚡ Contact your dealer to schedule this recall service (free)
When a user reports completing a recall, move it from open_recalls to completed_recalls with the completion date.
Track fuel fill-ups to monitor fuel economy, detect mechanical issues early, and track fuel spending.
When user says "filled up", "got gas/diesel", or reports a fill-up:
(current_odometer - previous_odometer) / gallonsfuel_history array{
"date": "2026-01-20",
"gallons": 32.5,
"cost": 108.55,
"price_per_gallon": 3.34,
"odometer": 61300,
"mpg": 14.2,
"partial_fill": false,
"notes": ""
}
(current_odometer - previous_fill_odometer) / gallons (skip if previous fill was partial)If a fill-up MPG is more than 15% below the rolling average, flag it:
⚠️ MPG Alert — [Vehicle]
Last fill-up: 10.5 MPG (your average is 14.2 MPG)
26% below your rolling average — this could indicate:
- Tire pressure issues
- Air filter needs replacement
- Fuel system issue
- Change in driving conditions (heavy towing, headwinds)
- Mechanical problem developing
Check tire pressures first, then review recent driving conditions.
When asked "how's my fuel economy?" or "MPG report":
⛽ Fuel Report — [Vehicle]
Last fill-up: [X] MPG on [date]
Rolling average: [X] MPG (last 10 fills)
Trend: [improving/stable/declining]
Total fuel cost (YTD): $[X]
Total gallons (YTD): [X]
Average cost per gallon: $[X]
If the user didn't fill up completely, mark partial_fill: true. Skip that entry for MPG calculation (the math won't be accurate), but still track cost and gallons.
Track what the user actually pays for maintenance to build accurate spending records.
When a user logs a completed service:
actual_cost in the service_history entry{
"service_id": "oil_filter",
"date": "2025-11-15",
"miles": 58000,
"hours": null,
"notes": "Full synthetic, Motorcraft filter",
"actual_cost": 125.00,
"cost_type": "shop",
"provider": {
"id": "jims_diesel",
"name": "Jim's Diesel Repair"
}
}
cost_type values: diy, shop, dealer, warranty, recall (free)
Track and report on request:
actual_cost to the schedule's cost estimatesWhen asked or at year-end:
💰 [Year] Maintenance Summary — [Vehicle]
Total spent: $[X]
Services performed: [count]
Biggest expense: [service] — $[X]
Average cost per service: $[X]
vs. Estimated: $[X] ([over/under] by [X]%)
Track warranties to know what's covered and get alerts before they expire.
{
"type": "factory_powertrain",
"provider": "Ford",
"start_date": "2021-03-15",
"end_date": "2026-03-15",
"start_miles": 0,
"end_miles": 60000,
"coverage_details": "Engine, transmission, transfer case, driveshaft, axle assemblies",
"status": "active",
"contact_phone": "1-800-392-3673",
"claim_number": null,
"notes": ""
}
| Type | Typical Coverage |
|------|-----------------|
| factory_bumper_to_bumper | Everything except wear items, shortest duration |
| factory_powertrain | Engine, transmission, drivetrain — longer duration |
| factory_corrosion | Body rust-through — usually 5+ years |
| factory_emissions | Emissions components — federally mandated 8yr/80k for major components |
| extended | Third-party or manufacturer extended warranty |
| parts_warranty | Specific parts from a shop/dealer (e.g., "new alternator, 2yr warranty") |
| labor_warranty | Shop's labor guarantee on a specific repair |
Check warranties during every service review. Alert when:
Alert format:
⚠️ WARRANTY EXPIRING SOON
[Vehicle] — [Warranty type] from [Provider]
Expires: [date] or [miles] miles (whichever first)
Remaining: ~[X] months / ~[X] miles
Coverage: [details]
💡 Schedule any warranty-covered concerns before expiration!
When user asks "is this covered under warranty?" or when flagging a due service:
active — currently in effectexpiring_soon — within alert thresholdexpired — past end date or end milesclaimed — warranty claim was filedGenerate vehicle-specific checklists when a trip or seasonal change is mentioned.
Activate when user says things like:
Build the checklist by combining:
🚛 Pre-Tow Checklist — [Truck] + [Trailer/RV]
TRUCK:
□ Engine oil level
□ Coolant level
□ DEF level (diesel)
□ Tire pressures (loaded spec: front [X] psi, rear [X] psi)
□ Brake controller connected and tested
□ Transmission temp gauge working
□ All lights working
□ Mirrors adjusted for towing
HITCH/CONNECTION:
□ Fifth wheel / gooseneck / ball mount secured
□ Pin box / kingpin locked (verify with tug test)
□ Safety chains crossed under tongue
□ Breakaway cable attached
□ 7-pin connector — test all lights (brake, turn, running, reverse)
□ Breakaway battery charged
TRAILER/RV:
□ Tire pressures (spec: [X] psi) — check age on sidewall
□ Wheel lug torque (spec: [X] ft-lbs)
□ Slides fully retracted and locked
□ Awning secured
□ Fridge set to travel mode (or propane off)
□ All compartments latched
□ Stabilizer jacks fully up
□ Roof vents closed
□ TV antenna down
□ Water heater bypass (if applicable)
□ LP gas tank valve position (check local laws for travel)
□ Cargo secured inside (open fridge, cabinets after arrival)
OVERDUE/DUE SERVICES:
[List any from service review]
Pre-Winter / Winterization:
Pre-Summer / De-Winterization:
Pre-Trip (General):
Calculate driving pace and project when future services will come due.
Requires 2+ data points in mileage_history at least 14 days apart.
average_miles_per_month = (latest_miles - earliest_miles) / months_between_readings
Use the full history for a stable average, but weight recent data more heavily if there's a significant change in driving pattern.
For each service:
next_due_miles - current_milesmiles_remaining / average_miles_per_monthtoday + projected_monthsInclude in service review:
📅 Projected Service Dates
- Oil Change: ~[Month Year] (at ~[X] miles)
- Fuel Filters: ~[Month Year] (at ~[X] miles)
- Trans Fluid: ~[Month Year] (at ~[X] miles)
When asked or included in reviews:
💰 Next 6-Month Budget Forecast — [Vehicle]
At [X] miles/month, expect:
- Oil change (~[Month]): $[X]
- Fuel filters (~[Month]): $[X]
- Cabin air filter (~[Month]): $[X]
Total estimated: $[X]
If fewer than 2 data points or readings are too close together:
Track where services are performed for easy reference and provider management.
When logging a completed service, optionally ask:
Don't make this burdensome — if they just say "got my oil changed", log the service first, then casually ask where. Skip if they seem uninterested.
Providers are stored in two places:
providers array in state.json root — reusable across vehicles:{
"id": "jims_diesel",
"name": "Jim's Diesel Repair",
"location": "123 Main St, Mesa, AZ",
"phone": "480-555-1234",
"specialties": ["diesel", "trucks"],
"rating": 5,
"notes": "Great with Power Stroke engines"
}
id plus any service-specific warranty:{
"provider": {
"id": "jims_diesel",
"name": "Jim's Diesel Repair",
"parts_warranty_months": 12,
"labor_warranty_months": 6
}
}
Handle questions like:
For vehicles flagged as business-use, help track deductible maintenance expenses.
Per vehicle in state.json:
{
"business_use": true,
"business_use_percent": 50
}
If business_use is true and no percentage is set, assume 100%.
When a service is completed with an actual_cost on a business-use vehicle:
actual_cost × (business_use_percent / 100)
💼 Tax Note: This $450 trans fluid service is 50% business use.
Deductible amount: $225.00 (vehicle maintenance expense)
Want me to log this to your tax deductions?
→ $225.00 as vehicle maintenance expense
If the user confirms, reference skills/tax-professional/SKILL.md and log to data/tax-professional/YYYY-expenses.json:
{
"date": "2026-01-15",
"category": "vehicle_maintenance",
"description": "Trans fluid service — F-350 (50% business use)",
"amount": 225.00,
"vehicle": "f350",
"full_cost": 450.00,
"business_percent": 50,
"receipt": false
}
On request or at tax time:
💼 [Year] Business Vehicle Deductions — [Vehicle]
Total maintenance costs: $[X]
Business use: [X]%
Deductible amount: $[X]
Services included: [count] services
Store and quickly retrieve critical vehicle information for roadside emergencies, parts lookup, or quick reference.
Per vehicle in state.json:
{
"emergency_info": {
"vin": "1FT8W3BT0MED12345",
"insurance_provider": "State Farm",
"policy_number": "SF-123456789",
"roadside_assistance_phone": "1-800-555-1234",
"tire_size_front": "275/70R18",
"tire_size_rear": "275/70R18",
"tire_pressure_front_psi": 65,
"tire_pressure_rear_psi": 80,
"oil_type": "15W-40 CK-4 Full Synthetic",
"oil_capacity": "15 quarts",
"coolant_type": "Motorcraft Orange VC-3DIL-B",
"def_type": "API certified DEF",
"trans_fluid": "Motorcraft Mercon ULV",
"tow_rating_lbs": 20000,
"gvwr_lbs": 14000,
"gcwr_lbs": 37000,
"payload_lbs": 4300,
"key_fob_battery": "CR2450",
"fuel_type": "Diesel (Ultra Low Sulfur)",
"fuel_tank_gallons": 48,
"lug_nut_torque_ft_lbs": 165,
"jack_points": "Frame rails, front and rear",
"notes": ""
}
}
Respond instantly to:
When asked for "emergency info" or "vehicle card":
🚨 Emergency Info — [Vehicle Label]
━━━━━━━━━━━━━━━━━━━━━━━━━━━
VIN: [vin]
Insurance: [provider] — Policy #[number]
Roadside: [phone]
🔧 Specs
Tires: F:[size] R:[size]
Pressure: F:[X]psi R:[X]psi
Oil: [type] ([capacity])
Coolant: [type]
Fuel: [type] ([tank] gal)
Key fob battery: [type]
📏 Ratings
Tow: [X] lbs | GVWR: [X] lbs
GCWR: [X] lbs | Payload: [X] lbs
Lug torque: [X] ft-lbs
━━━━━━━━━━━━━━━━━━━━━━━━━━━
When adding a new vehicle, collect what's available. Many specs can be researched from the year/make/model. Let the user fill in personal info (insurance, roadside number) over time. Fields can be null until populated.
Calculate total cost of vehicle ownership on a per-mile basis.
Requires mileage history with at least 2 data points.
total_miles_driven = latest_miles - earliest_miles (from mileage_history)
Maintenance cost per mile = total_actual_costs / total_miles_driven
Fuel cost per mile = total_fuel_cost / total_miles_driven
Total operating cost per mile = (total_actual_costs + total_fuel_cost) / total_miles_driven
When asked "cost per mile" or "operating cost":
📊 Cost Per Mile — [Vehicle]
Period: [earliest date] to [latest date] ([X] miles driven)
Maintenance only: $[X.XX]/mile
Fuel only: $[X.XX]/mile (if fuel tracking active)
Total operating: $[X.XX]/mile
💡 National averages (approximate):
Cars: ~$0.10/mi maintenance, ~$0.12/mi fuel
Trucks: ~$0.14/mi maintenance, ~$0.20/mi fuel (diesel)
Heavy-duty diesel (towing): ~$0.18/mi maintenance, ~$0.25/mi fuel
If tracking multiple vehicles, show a comparison:
📊 Fleet Cost Per Mile
[Vehicle 1]: $[X.XX]/mi (maintenance) | $[X.XX]/mi (total)
[Vehicle 2]: $[X.XX]/mi (maintenance) | $[X.XX]/mi (total)
Fleet average: $[X.XX]/mi
actual_cost recorded (skip nulls)A single cron job runs weekly (the highest possible frequency) and checks which vehicles are due for a check-in based on their individual check_in_frequency and last_check_in date. It also performs monthly recall checks.
Prompt: "Mechanic skill: mileage check"
When this fires:
/data/mechanic/state.json last_check_in date against check_in_frequencyrecalls.last_checked, fetch latest recalls from NHTSA API and update stateHEARTBEAT_OK (skip silently)last_check_in when they respondCreate a single cron job that runs weekly. It will internally filter which vehicles are due. Check for timezone.
Cron expression: 0 17 0 (every Sunday at 5pm in user's timezone)
Cron job config:
data/mechanic/state.json. Check each vehicle's check_in_frequency and last_check_in to determine which are due. Also check recalls if 30+ days since last recall check. If none are due and no new recalls, reply HEARTBEAT_OK. Otherwise, ask for current readings on the due vehicles only, report any new recalls, then run a service review with costs, warranty alerts, and projections. Be conversational.The user can change frequency per vehicle at any time:
check_in_frequencyUpdate the vehicle's check_in_frequency in state.json and confirm the change.
When the user reports mileage or hours (in any context, not just monthly):
current_miles and/or current_hourslast_updated to todaymileage_history:{"date": "YYYY-MM-DD", "miles": <value>, "source": "user_reported"}
After any mileage/hours update, analyze all services from the vehicle's schedule file.
service_history (match by service_id)miles_since_service vs interval_milesmonths_since_service vs interval_monthshours_since_service vs interval_hoursFull report (when issues found):
🔧 Vehicle Service Report
━━━ [Vehicle Label] @ [miles] mi ━━━
⚠️ OPEN RECALLS
- [NHTSA ID] — [Component]: [Summary]
Remedy: [description] (FREE at dealer)
⚠️ WARRANTY ALERTS
- [Warranty type] from [Provider] — expires [date] or [miles] mi
[X] months / [X] miles remaining
🔴 OVERDUE
- [service] — [X] miles/months overdue
💰 DIY: $X | Shop: $X | Dealer: $X
[💼 [X]% deductible] (if business use)
🟡 DUE SOON
- [service] — due in ~[X] miles/months
💰 DIY: $X | Shop: $X | Dealer: $X
📅 PROJECTED SCHEDULE (next 6 months)
- [service] — ~[Month Year] at ~[X] mi ($[X] est.)
- [service] — ~[Month Year] at ~[X] mi ($[X] est.)
Total upcoming (6mo): ~$[X]
⛽ FUEL ECONOMY
Current: [X] MPG | Average: [X] MPG | Trend: [stable/improving/declining]
[⚠️ MPG Alert if applicable]
💰 SPENDING (YTD)
Maintenance: $[X] | Fuel: $[X] | Total: $[X]
Cost per mile: $[X.XX]
[Repeat for each vehicle]
🟢 [count] services current across all vehicles
All clear (brief):
🔧 All vehicles current ✅
[Vehicle] @ [mi] — next: [soonest service] at ~[miles] (~[Month])
No open recalls | Warranties current
When multiple services are due at once, provide a bundled total estimate and suggest combining them in one shop visit.
Only include sections that have relevant data:
When the user says they've done a service (e.g., "just got my oil changed", "did the fuel filters at 65k"):
service_history:{
"service_id": "<matching id>",
"date": "YYYY-MM-DD",
"miles": <mileage_at_service>,
"hours": <hours_if_applicable>,
"notes": "<any details the user mentions>",
"actual_cost": <amount_or_null>,
"cost_type": "shop",
"provider": {
"id": "<provider_id>",
"name": "<provider_name>",
"parts_warranty_months": null,
"labor_warranty_months": null
}
}
Handle questions about any tracked vehicle. If ambiguous, ask which vehicle.
Examples:
Check for the user's location and use it to tailor advice:
Hot climates (desert, southern states):
Cold climates (northern states, mountains):
Dusty/off-road environments:
Coastal/marine environments:
Always include cost estimates when flagging overdue or due-soon services:
Include any cost_note warnings about expensive failure scenarios.
When presenting a batch of services, provide a total estimate for bundling them in one shop visit.
Generated Feb 25, 2026
A small business with multiple delivery or service vehicles uses the skill to track maintenance schedules, fuel economy, and service costs across its fleet. It ensures timely oil changes, tire rotations, and recall monitoring to minimize downtime and reduce operational expenses through proactive maintenance planning.
An RV or boat owner utilizes the skill to manage seasonal tasks like winterization, roof sealing, and generator servicing. It tracks service intervals based on usage hours, monitors warranties, and provides pre-trip checklists to ensure safety and reliability during travel or boating seasons.
An individual tracks multiple personal vehicles (e.g., car, motorcycle, ATV) for maintenance history, fuel efficiency, and tax deduction integration. The skill alerts for overdue services, estimates repair costs, and analyzes cost-per-mile to optimize budgeting and resale value.
A repair shop employs the skill to maintain detailed service records for clients' vehicles, including VIN-decoded specs and provider history. It generates reminders for upcoming appointments, tracks warranty expirations, and provides emergency info cards to enhance customer trust and retention.
A trucking company uses the skill to monitor mileage, service intervals, and recalls for heavy-duty trucks. It ensures compliance with manufacturer schedules, projects maintenance dates to avoid disruptions, and integrates with tax deductions for business use, improving fleet efficiency and regulatory adherence.
Offer a monthly subscription to businesses for fleet management, including automated maintenance tracking, recall alerts, and cost analysis. Revenue is generated through tiered plans based on the number of vehicles, with add-ons for advanced features like NHTSA integration or tax reporting tools.
Develop a mobile app with a free tier for basic vehicle tracking and reminders, and a premium tier offering VIN decode, detailed analytics, and warranty management. Revenue comes from in-app purchases, annual subscriptions, and partnerships with service providers for referral commissions.
License the skill to automotive repair shops as a white-label solution for customer relationship management. It includes service history tracking, appointment reminders, and emergency info generation. Revenue is generated through one-time setup fees and ongoing support contracts.
💬 Integration Tip
Integrate with calendar APIs for automated reminders and use webhooks to sync with external databases like NHTSA for real-time recall updates.
Work with Obsidian vaults (plain Markdown notes) and automate via obsidian-cli.
Create, search, and manage Bear notes via grizzly CLI.
Track water and sleep with JSON file storage
Notion API for creating and managing pages, databases, and blocks.
Smart ClawdBot documentation access with local search index, cached snippets, and on-demand fetch. Token-efficient and freshness-aware.
Work with Obsidian vaults as a knowledge base. Features: fuzzy/phonetic search across all notes, auto-folder detection for new notes, create/read/edit notes with frontmatter, manage tags and wikilinks. Use when: querying knowledge base, saving notes/documents, editing existing notes by user instructions.