Sibling to journal/, implements the Community Organizer spec
(docs/community-organizer-spec.md) over maubot:
!add <text> freeform inbox capture; rules classify
!task <text> [#tag…] explicit task
!sidequest [#tag…] optional / passion-project item
!remind in <N>(s|m|h|d) <text> chat-side timed reminder
!done <id> close task or sidequest
!list [type] query open items
!setup add/remove per-room shortcut config
One @command.passive dispatcher routes universal verbs to handlers
and unknown verbs through the per-room shortcut table. Avoids the
multi-line @command.new footgun (per ~/dev/CLAUDE.md) and lets
shortcuts coexist with universal verbs without decorator priority
games.
Rules classifier (classify.py) is intentionally conservative — only
buckets on clear shapes (buy keywords, past-tense markers, todo
intent, remind prefixes); ambiguous capture lands in `!list inbox`.
LLM fallback is Phase 2b on a dedicated inference node.
Reminders (scheduler.py) replay from DB on bot start so restarts
don't lose pending timers; missed-while-down stay open for query.
`nostr_event_id` column reserved for Phase 2a — Matrix-local only
for now.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>