← ClaudeAtlas

voyage-context-enricherlisted

First enricher skill for Syroco's company brain. Subscribes to events from granola-scribe, slack-scribe, hubspot-scribe (and any future customer-touching scribe). For events whose entity is a customer with active voyages, looks up the voyage context at the event's timestamp: voyage_id, vessel, route, voyage_phase, deal_state_at_time, speaker_role. Emits enriched events into a parallel enrichment log; consumer skills read both and join. This is the keystone of the 3-layer model in `SKILL_INTEGRATION.md` §2: a captain signal in Slack is barely a signal without knowing which voyage they were referring to. This enricher closes that gap.
VictorGjn/agent-skills · ★ 1 · AI & Automation · score 73
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 →