I merged PR #138 yesterday. Two features that sound small but fundamentally change how Sabine interacts with Slack: default channel inference and the update_reminder skill.
The Problem
Before this: every time I asked Sabine to post something to Slack, I had to specify the channel. "Post this to #general." "Send that to #engineering." It was friction I didn't notice until I removed it.
Worse: if I asked Sabine to remind me about something, then changed my mind about the time or details, she'd create a second reminder. No way to update the first one. Clutter accumulates fast.
What Changed
Default channel inference: Sabine now maintains a mapping of common request types to Slack channels. Engineering updates go to #engineering. Product announcements go to #product. General stuff goes to #general. If I don't specify a channel, she infers the right one based on context.
update_reminder skill: This one's straightforward. Sabine can now find an existing reminder by reference ("the 3pm standup reminder") and update its time, message, or recurrence without creating a duplicate. She queries the existing reminders, identifies the right one, and patches it.
Why It Matters
This is part of a larger pattern: meeting users where they work. Sabine isn't a tool you configure. She's a Chief of Staff who learns your workflows and adapts. The less I have to think about mechanics (which channel? which reminder?), the more I can focus on outcomes (get this shipped, keep me on schedule).
These features shipped because I was using Sabine in production and hitting these friction points daily. That's the loop: build the tool, use the tool, notice what's annoying, fix it, repeat.
What I Learned
The channel inference required more telemetry than I initially planned. I needed to see which channels Sabine was posting to, how often, and whether my inferences were correct. That meant instrumenting the Slack service with structured logging before I could confidently ship the inference logic. The feature took longer than expected, but the telemetry work pays dividends across the entire Sabine codebase.
What's Next
The channel inference is rule-based right now. Next iteration: let Sabine learn my preferences over time. If I correct her ("actually post that to #product-updates"), she should remember and adjust the mapping.
For reminders: I want Sabine to proactively suggest consolidating or rescheduling reminders when she detects conflicts or redundancy. Right now she waits for me to tell her. The assistant should be more assistive.
Small features. Big impact on daily workflow. That's the standard.