From bcaa8bc018e817aaa6f46141503f25de44dac30a Mon Sep 17 00:00:00 2001 From: Leo Le Bleis Date: Sat, 13 Jun 2026 11:14:14 +0100 Subject: [PATCH] feat(brew): lead profile titles with the grind setting So the user can read the Ode grind straight off the device's profile list when grinding by hand for an analog brew, without re-deriving it. - Profile title rules: format is now " " - Note the leading digit + decimal are in Fellow's allowed charset - Brew-plan template + red flag updated to match Bumps plugin 0.1.0 -> 0.1.1. --- .claude-plugin/marketplace.json | 2 +- skills/brew/SKILL.md | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index 4678e14..afb0a89 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -9,7 +9,7 @@ "name": "brew", "source": "./", "description": "Claude Code skill for brewing coffee on a Fellow Aiden via the brew MCP server — pairs with the MCP server in this repo.", - "version": "0.1.0" + "version": "0.1.1" } ] } diff --git a/skills/brew/SKILL.md b/skills/brew/SKILL.md index aaadec7..3a0ecc8 100644 --- a/skills/brew/SKILL.md +++ b/skills/brew/SKILL.md @@ -135,7 +135,7 @@ Pre-brew checklist ⚠️ Reservoir ≥ ml filled (manual) ⚠️ Wet the paper filter (manual — rinses paper + preheats basket) -Profile: "" (id: <ID>) — synced to Fellow cloud. +Profile: "<GRIND> <TITLE>" (id: <ID>) — synced to Fellow cloud. Title leads with the grind so you can read it off the device. Say `brew now` when ready. ``` @@ -165,13 +165,15 @@ Use `mcp__brew__create_schedule` only for **recurring** schedules (any `days[i]= ## Profile title rules +**Lead with the grind number.** The first token of the title is the Ode grind setting for this brew, e.g. `"6 OJ Brazil"` or `"5.1 Square Mile Sitio da Torre"`. This lets the user read the grind straight off the device's profile list when grinding by hand (analog brews), without re-deriving it. Use the same grind integer (or Drop-range midpoint) surfaced in the brew plan. + Fellow validates server-side: - Max **50 chars**. -- Allowed charset: `A–Z a–z 0–9` and specials `!@#$%&*-+?/.,:)(` (and spaces). +- Allowed charset: `A–Z a–z 0–9` and specials `!@#$%&*-+?/.,:)(` (and spaces) — the leading grind digit and a decimal `.` are both in-charset. - No `_`, no `[]`, no `{}`, no `"`, no `'`, no `~`. -Truncate or sanitize before sending. Prefer `"<Roaster> <Origin>"` or `"<Roaster> <Coffee Name>"`. +Truncate or sanitize before sending. Format: `"<Grind> <Roaster> <Origin>"` or `"<Grind> <Roaster> <Coffee Name>"`. ## Error handling @@ -204,3 +206,4 @@ These are planned for v2 in a `journal` bounded context inside `brew/src/brew/jo - About to recommend a grind below 4 on a light single-serve → **stop**, real-world consensus is 4–6 for light SS. - User said "brew now" and you've not yet called `mcp__brew__brew_now` → **stop**, just call it. - Computing `time_seconds` yourself for a "brew now" request → **stop**, that's `brew_now`'s job. +- Naming a new profile without the grind number as its first token → **stop**, lead with the grind (e.g. `"6 OJ Brazil"`).