v3/docs/adr/ADR-319-company-announcements-surface.md
companyAnnouncements settingsClaude Code exposes a companyAnnouncements key in ~/.claude/settings.json — a string array shown at Claude Code startup, cycled at random if multiple entries exist:
{
"companyAnnouncements": [
"Welcome to Acme Corp! Review our code guidelines at docs.acme.com"
]
}
This is higher-attention than the spinner row (shown once per session, prominently) and lower-frequency (once per Claude Code launch vs. every processing pause). Different volume, different placement, different economics — but the same architectural pattern as ADR-318's spinner-verbs surface.
The request that motivated this ADR was "can we include tip text also?" — asking about the "Tip: Double-tap esc…" hint text. That specific hint isn't documented as customizable, but companyAnnouncements is the closest documented surface and covers the same "give ruflo a place to speak" intent.
Add a ruflo announcements enable/disable/list/reset subcommand that appends ruflo's curated pool to ~/.claude/settings.json's companyAnnouncements array. Ships in the same PR as ADR-318 (per product decision) with the identical guarantees.
.bak-YYYYMMDD-HHMMSS pattern as ADR-318.disable strips only ruflo entries.Neutral (product tips, ~85%):
ruflo intelligence stats to see progress."ruflo funnel status to manage."ruflo daemon start to enable."ruflo memory search --query \"...\""ruflo doctor --fix if something feels off."ruflo spinner list to see the pool."ruflo security scan --depth full."ruflo daemon status."ruflo cost report for details."Cognitum-tagged (~15%):
ruflo proxy status."v1 (deferred): serve from funnel.ruv.io/v1/messages?class=announcement — same infra as ADR-311. Cache TTL 24h.
src/commands/announcements.ts)Mirror of commands/spinner.ts:
ruflo announcements list [--json] — pool + installed + user-authoredruflo announcements enable [--yes] — preview + write (requires --yes to actually write)ruflo announcements disable — strip ruflo entries onlyruflo announcements reset --yes — restore most recent settings.json backupNew consent domain company-announcements — separate from spinner-verbs because they're different surfaces the user might reasonably want independently.
Positive
commands/spinner.ts. Ships with confidence.Negative
commands/spinner.ts — both files handle backup + append + marker-based removal identically. Worth refactoring to a shared funnel/settings-append.ts helper after both are stable.Neutral