Repository navigation
feat(bestie): hourly check-ins from your Bestie - #2037
rileycrane wants to merge 3 commits into
Conversation
A Check-ins group under Remembers you has one row, Every hour, off by default and unavailable while memory is off. On adds the Hourly upkeep section to the agent's instructions, an Interest and an hourly Attention timer delivered to the owner's 1:1 DM with the agent, and turns the agent's Attention on, all in one save. Off, and turning memory off, remove the section and the timer and leave Attention as it is. The Bestie plugin now controls Attention, so the timer runs with Watching off. The upkeep text is the Hourly upkeep of prompt.ts, woken by the timer and using the local tools. Features can require another and carry a timer, so another check-in kind is one more entry in the feature list. A service test shows that an hourly timer runs once after the computer sleeps through several hours, then an hour later. Co-authored-by: eggboy <3986e5374b8c11a274f4a53fa9a68e1e18b53e712f8aa5218add2485bf5a2b09@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Riley Crane <rileycrane@squareup.com>
Save the timer before the instructions, so a failed second save leaves a state that reads as off and toggles cleanly. Let one save run at a time across the tab's switches, keep a check-in left on without memory switchable off, and stop the upkeep steps from treating upkeep wakes as messages to ignore. Co-authored-by: eggboy <3986e5374b8c11a274f4a53fa9a68e1e18b53e712f8aa5218add2485bf5a2b09@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Riley Crane <rileycrane@squareup.com>
Bestie no longer calls controlAttention(), which turned Attention on for every agent while Watching was off. Check-ins now run while the Watching plugin is on, and the row says it is paused while watches aren't running. Co-authored-by: eggboy <3986e5374b8c11a274f4a53fa9a68e1e18b53e712f8aa5218add2485bf5a2b09@buzz.block.builderlab.xyz> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Riley Crane <rileycrane@squareup.com>
43efb9f to
f688371
Compare
47c3bb1 to
0ae3227
Compare
wesbillman
left a comment
There was a problem hiding this comment.
🤖 Star Lord’s automated source review via Wes’s account, integrating independent Rocket, Mantis and Groot lanes.
Reviewed head 0ae322732ddc6cb87733dbd22e2ea9d2b204fbec against base f68837125121e8dfb1360086b40cc7b8fdf5d1dd. Two P2 findings are inline: failed enable leaves a live timer behind an unchecked switch, and a timer paused individually in Attention still appears to be running in Bestie.
Optional: exercise keyboard focus during pending saves and error/retry. docs/design-system.md documents read-only, focusable pending switches; this tab disables all switches during a save. Actual Base UI/browser focus behavior was not verified, so this is a validation suggestion, not an asserted focus-loss defect.
Scope: all five changed files and relevant save, timer, wake, DM and shared-control consumers; public description (no image attachments) and three commit messages. No concrete public-material disclosure finding. The existing Attention owner is reused and the change is bounded; the two state/recovery defects prevent a clean correctness verdict.
Source-only: no tests, builds, app launches or PR code execution. Rendered themes/layout, keyboard/assistive-technology behavior, native wake delivery and human acceptance remain unverified. One hosted-check snapshot shows the later CI-required failure with WebKit 2/14 failing, after an earlier successful run; annotations only report exit 1, so cause and relation to this patch are unestablished. Windows validation was skipped. Added test execution cost was not measured. This COMMENT is not approval or merge authorization.
| // Its timer runs only while the agent's Attention is on. Off leaves | ||
| // it on: the agent's other watches may need it. | ||
| ...(timer && { attentionEnabled: true }), | ||
| }); |
There was a problem hiding this comment.
🤖 P2 — Do not leave an enabled timer after the instruction save fails. This first save commits the hourly timer and enables the agent’s Attention before the following config save. A rejected/conflicting instruction revision leaves those effects in place, but featureOn reports unchecked because the Hourly upkeep section is absent. The scheduler (runner.ts:2012–2074) admits the saved timer independently of that section, so, with Watching on and destination membership confirmed, the failed enable can keep consuming tokens hourly. Clicking the unchecked switch retries On; it does not remove the live timer. Preserve the intended timer-first ordering by keeping staged work disabled until instructions are confirmed, or compensate the owned timer on failure and expose explicit partial-state cleanup. Do not enable unrelated watches until the operation succeeds. Cover instruction rejection and both retry/cancel recovery; reporting unchecked alone is not a safe recovery state.
| blocked && required && !checked | ||
| ? `Turn on ${required.title} first.` | ||
| : // Attention reads off while no plugin shows it, as when the | ||
| // Watching plugin is off, or while the agent's switch is off. |
There was a problem hiding this comment.
🤖 P2 — Reflect a timer paused individually in Attention. After a successful setup, pause bestie-hourly-check-in using the existing Attention tab. That writes the timer’s value.enabled = false while leaving its object and agent.attentionEnabled present/true (watching/Tab.tsx:439–452). Here featureOn checks only existence, and this paused branch checks only agent-wide Attention, so Bestie still shows Every hour checked with the normal hourly-running description although the scheduler skips the timer. Include the individual timer’s enabled state in the status and give usable rearm guidance. Preserve a way to remove a paused timer; simply treating it as absent can hide Off. Add coverage for pausing in Attention and returning to Bestie.
The Bestie tab gets Check-ins → Every hour. Turned on, it wakes your Bestie in your DM once an hour.
Why a local timer: a Bestie on this device is woken by a timer on this device, using the same Attention timers as the Watching plugin.
What changes
buzz:bestie/checkin.hourly) to the instructions.watch/bestie-hourly-check-in, throughagents.save; the timer wakes Bestie in your DM.Design decisions
controlAttention(). Turning Watching off still stops every agent's Attention, so Bestie doesn't take over a control the user can see. Rejected: having the plugin turn Attention on throughcontrolAttention().Try it (
just dev, local Bestie with Remembers you on)watch/bestie-hourly-check-in, and Instructions has the Hourly upkeep section.Stack: each PR is based on the one before it: #2034 Bestie tab → #2035 Remembers you → #2036 private channels → #2037 check-ins (this PR) → #2039 Former Bestie → #2041 Remove as Bestie → #2047 Choose your bestie. #2040 (recent notes in Claude Code prompts) is separate and based on main.
Overlap: #1716 also changes
features/agents/service.tsandtabs.tsx. Whichever lands second will rebase onto the other.🤖 Generated with Claude Code
buzz-review-completed