voyage-context-enricherlisted
Install: claude install-skill VictorGjn/agent-skills
# voyage-context-enricher (Syroco-flavored v0.1)
> Reads scribe events, looks up the voyage / deal / speaker context
> they didn't have at extract time, emits enriched events. Stable
> facts only — no interpretation.
## Why this exists
Syroco's customer signals fragment across three timelines:
1. **Slack thread** ("captain reports ETA off by 4h") — has a timestamp + author + channel
2. **Voyage system** — has the actual voyage that was running when the captain spoke
3. **HubSpot** — has the deal stage / fleet-extension milestone at that moment
A captain signal without the voyage is half a signal. A deal-stage move
without a Granola call within ±48h is missing the "why." Today these
get hand-stitched in CSM heads.
This enricher does the joining ONCE per event, at ingestion time,
freezing the cross-source link as a stable fact. Every consumer
downstream (fleet-radar-skill, opportunity-builder-skill, pre-call
brief) gets the linkage for free.
## What it does (per cron tick)
1. Read events emitted since `last_processed_at` from the brain's
`events/<date>.jsonl` files.
2. Filter to events in `enricher_syroco.customer_scope_filter` scopes
(skip internal / competitor / default events — no vessel/deal
context to add).
3. For each event:
a. **Speaker → captain lookup** (HubSpot Captain custom object):
if `source_type=slack` and the event has a Slack `author` user_id,
query HubSpot custom-object `captain` filtered by
`slack_user_id=<author>`. Hit →