Travel assistant for NanoClaw: byAir flight notifications (delay, gate, connection risk, inbound aircraft delay, time-to-leave, arrival logistics), traffic-aware drive planning for in-person meetings (auto drive blocks + leave-by traffic rechecks), travel-booking gap checks, and nightly TripIt sync. Per-chat overlay plugin.
—
—
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
High
Do not use without reviewing
Process steps in order. Do not skip ahead.
Silence rule: produces NO user-visible output. The precheck delegates wake-payload composition to flight-assist/sync_tripit.py, which emits wake_agent: true only on tracked-flight added/removed events.
precheck.py:_should_sync_now() is the sole authority on whether a 5-min fire becomes a byAir round-trip.flight-assist/sync_tripit.py + flight-assist/state.py.This step fires only when the precheck itself failed to execute. Gate-passed runs forward sync_tripit.py's output directly; gate-failed runs emit silent wake_agent: false. Reaching this skill body means the outer-boundary handler caught an exception and emitted {"wake_agent": false, "data": {"reason": "precheck_internal_error"}}.
Inspect the agent-runner host log for the Python traceback the script wrote to stderr, then match against:
Corrupt state file — flight-assist/state.py raises StateError on JSON corruption or schema-version mismatch. Inspect and remove:
python3 -m json.tool /workspace/state/flight-assist/active-flights.json
ls -la /workspace/state/flight-assist/flight-*.json
# remove any file that fails parse — next sync repopulates from byAir
rm /workspace/state/flight-assist/<bad-file>.jsonMissing flight-assist mount — the precheck imports from the co-shipped flight-assist skill. If only sync-tripit is installed, the precheck raises FileNotFoundError at import. Verify:
ls /home/node/.claude/skills/tessl__flight-assist/sync_tripit.pyIf absent, both skills must be reinstalled from the same plugin (jbaruch/nanoclaw-travel).
byAir subprocess timeout — the precheck enforces a budget on sync_tripit.py (see precheck.py, _SYNC_SUBPROCESS_TIMEOUT constant). Persistent timeouts mean byAir is degraded; the next cadence cycle retries. Check the diagnostic log for the sync_subprocess_timeout reason:
grep sync_subprocess_timeout /workspace/state/flight-assist/precheck.log 2>/dev/null | tail -5Filesystem permissions — read access to /workspace/state/flight-assist/. Verify the mount:
ls -la /workspace/state/flight-assist/Finish here. Verify the fix by waiting for the next 5-min cadence fire and reading the host log for either a clean wake_agent: false (no precheck_internal_error payload) or a successful sync_tripit delegation. Do not retry inline; the next fire retries naturally.
state_dir()active-flights.json and per-flight state shapes.tessl-plugin
skills
check-travel-bookings
drive-engine
flight-assist
references
nightly-travel-sync
sync-tripit
travel-core