Repository navigation
Buzz Interactions
In the loop: 4. Get shit done. Where reminders arrive and where you answer them.
Telegram is an incoming inbox. Text, photos, voice and supported audio/video files
still enter Thinking/Daily/ or Inbox/Links/. All receipts, failures, questions,
previews and approvals go to Buzz. The Telegram API helper permits only
getUpdates and getFile; old commands and callback buttons cannot apply changes.
| Output | Buzz channel |
|---|---|
| Capture receipts and media errors | #inbox |
| Today queue, commitments, meeting briefs | #tasks |
| Weekly thinking question and previews | #thinking |
| Watchdog, power, unit failures, updates | #ops |
| Relationship radar, thinker digest | #radar |
| Content suggestions | #content |
| Morning briefing, evening closeout | #daily |
| CRM snapshot | #crm |
| Link and concept proposals | #dreaming |
Reply inside the relevant thread. Today supports apply, edit, defer and
dismiss, plus the owner's language equivalents. Defer asks for a date, dismiss
for a reason. Apply must be a direct reply to the latest displayed preview.
Weekly thinking supports apply, cancel and skip in its own thread. These
bounded workflows are the only automatic paths that can write approved human
notes. Source changes invalidate approval. Repeated events do not apply twice.
Other owner replies receive a read-only, source-grounded answer in the same
thread and a .wiki/digests/queries/ receipt. Explicit @mentions remain with the
existing Asistan/persona harnesses; the polling assistant does not also answer.
The existing #research and #dialectic harnesses are unchanged.
tools/buzz_delivery.py persists outgoing messages in
.agents/state/buzz_outbox.sqlite3 before sending them. A failed send stays queued.
The outbox records the relay event id, not just the CLI exit code. If an
acknowledgement is lost, it looks for the exact message marker and author in relay
history before retrying. An incomplete history read retains the cursor.
tools/buzz_interactions.py stores incoming owner replies and advances the channel
cursor in one transaction. A failed reply remains pending; subsequent replies in
that channel wait so an apply cannot overtake its draft. Other channels continue.
It also drains the outbox. buzz_post.sh now reports queued as, which means
persisted locally; it does not claim remote delivery.
Telegram raw updates are journaled in .agents/state/telegram_pending/ before
advancing the polling offset. Failed processing retains the input and reports to
Buzz. Successful captures use a stable timestamp/message-id filename on retries.
State, owner keys and pending inputs stay outside git export.
Buzz outages do not re-enable Telegram messages. Pending counts and the last
completed poll are recorded in buzz_interactions_status.json; watchdog and health
checks surface a stalled worker. If the relay and worker are both unavailable,
there is no real-time notification channel until service recovers.
Requirements: the existing Buzz channels, named keys and owner pubkey must already
exist on the worker in ~/.config/brainless/buzz/. No keys are created or printed
by the interaction worker. It reuses the keys configured for existing channels.
- Back up
today_queue.json,thinking_loop.jsonand any existing Buzz outbox. - Deploy the code and run
python3 -B -m unittest discover -s tools/tests. - Install
brainless-buzz-interactions.serviceand.timerfrom.agents/systemd/into the user's systemd directory; run daemon-reload. - Run
python3 tools/today_queue.py --sendonce to migrate pending Today items. Running the interaction worker migrates an existing weekly question and preview without choosing a new question. Old Telegram message ids no longer authorize writes; the preview must be approved again in Buzz. - Enable
brainless-buzz-interactions.timer. It runs two minutes after the previous poll completes. The existing Sunday thinking timer and daily Today timer use Buzz automatically. - Verify the saved previews in
#tasksand#thinking, an inbox receipt, andbuzz_interactions_status.json. Confirm no active code calls TelegramsendMessageoranswerCallbackQuery.
To pause replies, stop the interaction timer and service. Messages remain queued. Rollback must preserve the capture-only Telegram boundary; it must not silently restore Telegram as an outgoing channel.
brainless · not a second brain, zero brain. Collect everything, think it through, decide, then do it. Engine repo · MIT. This wiki mirrors the repo's docs/; the repo is the source of truth.
The loop
1. Gather information
2. Think deeper and clearer
3. Decide
4. Get shit done
Keep it yours
Run it
- Install
- Lite
- Configuration
- What it runs on
- Reference Deployment
- Syncing across devices
- The AI Shed
- Localization
Addons
Reference
- Scripts Reference
- FAQ
- References
- Changelog · every release, newest first
- Design · the kilim brain, the palette, the logo files, the terminal colours
