## Summary
### Article reading
- New `read_article` tool — fetches full text of any URL for the LLM to read
- Removed RSS article content character cap (was 50K)
- Fix: history reconstruction now correctly replays `tool_calls` so tool context survives follow-up questions
- Briefing Discuss button now uses a synthetic tool exchange to inject article content before launching generation
### Quick capture refactor
- Replaced the old intent router (`intent.py`) with native Ollama tool-calling via `stream_chat_with_tools`
- `_should_think` now decides whether extended reasoning is needed (no more hard-coded disable)
- Deleted `intent.py` (~460 lines)
### Settings consistency pass
- **Timezone field** — new section in General tab with text input + Detect button; saves `user_timezone` and immediately live-patches the briefing scheduler
- **Briefing tab** — "Firing in timezone" hint now shows the stored value instead of the live browser API
- **Account tab** — SSO users see an info banner instead of email/password forms (which they can't use)
- **Briefing tab** — removed redundant Office Days section (work days now come from Profile tab)
- **Scheduler** — slot toggles (`briefing_config.slots`) now actually control which jobs are scheduled
- **Scheduler** — morning slot skips non-work days using `profile.work_schedule.days`
- **Settings route** — saving `user_timezone` propagates to the scheduler immediately without requiring a briefing config re-save
### Bug fix
- `backfill_rss_article_content` was importing the removed `CONTENT_MAX_CHARS` constant, causing an `ImportError` on startup
## Test plan
- [ ] Set timezone in General settings → Detect fills browser timezone → Save persists it
- [ ] Briefing tab "Firing in timezone" shows stored value
- [ ] SSO account: Account tab shows info banner, no email/password forms
- [ ] Local account: Account tab shows email/password forms as before
- [ ] Briefing tab: Office Days section is gone
- [ ] Disable morning slot toggle → morning job removed from scheduler
- [ ] Morning slot: doesn't fire on weekend if work days are Mon–Fri
- [ ] Quick capture via Android app still creates correct item types
- [ ] Share a URL in chat → assistant uses `read_article` to read it
- [ ] Briefing Discuss button launches generation with article context
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Article reading
read_articletool — fetches full text of any URL for the LLM to readtool_callsso tool context survives follow-up questionsQuick capture refactor
intent.py) with native Ollama tool-calling viastream_chat_with_tools_should_thinknow decides whether extended reasoning is needed (no more hard-coded disable)intent.py(~460 lines)Settings consistency pass
user_timezoneand immediately live-patches the briefing schedulerbriefing_config.slots) now actually control which jobs are scheduledprofile.work_schedule.daysuser_timezonepropagates to the scheduler immediately without requiring a briefing config re-saveBug fix
backfill_rss_article_contentwas importing the removedCONTENT_MAX_CHARSconstant, causing anImportErroron startupTest plan
read_articleto read it🤖 Generated with Claude Code