You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 335972d
Browse filesBrowse the repository at this point in the historyBrowse files
feat(app): calendar in Connections, today's events in the Feed, .ics as a card
- Connections → Calendar: add a feed by name and private .ics link or file
path (with a note on where Google, Outlook, iCloud and Fastmail hide the
link), see each feed's event count / last read / error, remove it, set the
working hours used for free time, re-read every feed. Also in first-run
setup next to email.
- Feed: a Today block with the day's events (tomorrow's once today is done),
place and time, muted once over; refreshes when a feed is re-read.
- An .ics the agent drafts opens as an event card — title, when, where,
notes — with an Add to calendar button; artifact cards and the Library
call it an Event. The viewer's small RFC 5545 reader is unit-tested.
- Models that HTML-escape their arguments ("Alex & Alice") no longer
put entities on the calendar: draft unescapes title, place and notes.
- settings.connectors.calendar and the avatar menu hint; zh-CN strings;
docs (configuration, app, cli, example config, READMEs) and CHANGELOG.
- Static bundle rebuilt.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,6 +6,7 @@ All notable changes to OpenMuse. The format follows [Keep a Changelog](https://k
6
6
7
7
### Added
8
8
9
+
-**Calendar connector.** Any calendar with a private iCalendar link — Google, Outlook, iCloud, Fastmail, Nextcloud — or an `.ics` file on disk, added from *Connections → Calendar* (the screen says where each provider hides the link) or `openmuse calendar add NAME URL`; the link is kept in the vault. Feeds are read on the spot and refreshed in the background; recurring events, exceptions and moved instances are expanded per RFC 5545. The agent gets a `calendar` tool — agenda, search, free time inside working hours — and *draft*: an event it proposes is written as an `.ics` file and shown as a card with *Add to calendar*; it never writes to the calendar itself. Today's and tomorrow's events are in the system prompt; the Feed shows them under *Today*. `openmuse calendar agenda | free | feeds | add | remove`; `openmuse doctor` reports the feeds.
9
10
-**Memory that stays tidy.** A fact that changed is updated in place (`remember` takes `replaces=<id>`, and a line that says the same thing in other words replaces the old one on its own) instead of piling up next to the old version. A periodic tidy-up — after every eight new lines or weekly, and *Memory → Tidy up* on demand, `openmuse memory tidy [--dry-run]` from the CLI — merges lines that say the same thing, keeps the newer fact when two contradict, and drops one-off requests that were never facts about the user. The model proposes; OpenMuse checks: a merged line may add no words that were not there (checked by character for Chinese), nothing the user wrote themselves is dropped, at most a fifth of the store changes per pass. Every merge, drop and update is logged with the text it replaced — *Memory → Recent changes* and `openmuse memory changes` show them, each with an undo (`memory restore <id>`). A tidy-up that changed something is one line in the Feed and the chat.
10
11
- Recall weighs rare words: a word that is in half the memories no longer decides which one is meant.
Copy file name to clipboardExpand all lines: README.md
+7-6Lines changed: 7 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -39,7 +39,7 @@
39
39
| Use it from the terminal instead |[CLI](docs/cli.md)|
40
40
| Point it at DeepSeek, OpenAI, Ollama, or an internal gateway |[Models](#models) · [Configuration](docs/configuration.md)|
41
41
| Understand what it will and won't do without asking |[Sentinel](#sentinel) · [docs/sentinel.md](docs/sentinel.md)|
42
-
| Connect email, a browser, or MCP servers |[Configuration → Connectors](docs/configuration.md#connectors)|
42
+
| Connect email, a calendar, a browser, or MCP servers |[Configuration → Connectors](docs/configuration.md#connectors)|
43
43
| Read the code |[Architecture](#architecture) · [docs/architecture.md](docs/architecture.md)|
44
44
| Run it in Docker |[Deployment](docs/deployment.md)|
45
45
| See it as an app on a (simulated) phone, notifications included |[demo/mobilegym](demo/mobilegym/README.md)|
@@ -54,7 +54,7 @@ Meta's Muse is an agent that does things rather than answering questions: it res
54
54
- Ideas: suggested next actions based on your goals, memory and recent conversations.
55
55
- Memory you can read and edit. Durable facts about you are saved by the agent and shown in a tab; anything can be forgotten with one tap. When a fact changes, the line is updated rather than doubled, and a periodic tidy-up merges what says the same thing and drops what was never a fact — every change listed with an undo.
56
56
- A Sentinel, a credential vault, taint tracking and an append-only audit log. See [Sentinel](#sentinel).
57
-
- Tools: files, shell, Python, web search and fetch, email (with one-time codes scrubbed before the model sees them), an optional Playwright browser, and any [MCP](https://modelcontextprotocol.io) server.
57
+
- Tools: files, shell, Python, web search and fetch, email (with one-time codes scrubbed before the model sees them), your calendar (read from its private `.ics` link; events it proposes arrive as a card you add with a tap), an optional Playwright browser, and any [MCP](https://modelcontextprotocol.io) server.
58
58
- Runs on any OpenAI-compatible model. DeepSeek, OpenAI, OpenRouter, Ollama, vLLM, or a company gateway with custom headers.
59
59
60
60
## Why OpenMuse
@@ -119,9 +119,9 @@ Prefer a terminal? `openmuse chat` gives you the same agent with approvals in th
119
119
| Reminders | "Remind me at six to call mum" — one message at that time, in the chat you said it in. "Every weekday at 07:30, a one-line weather check for my ride" — a routine: the agent does the work then and reports. Kept whatever the proactivity level or quiet hours; listed under *Upcoming* and in the terminal. |
120
120
| Library | Everything the agent made — pages, documents, trackers, images — opened in the app. Pages render in a sandbox that cannot reach your token or the API. |
121
121
| Avatar | The menu: the approvals queue across all chats, the activity log, permissions you granted (revoke any one), what is upcoming (background work, check-ins, reminders), memory, connections, and settings (name, avatar, personality, Sentinel mode, background work, language). |
122
-
| Connections | Plug things in from the phone: the model (provider presets, key straight into the vault, one-tap test), your mailbox (read and send, with a sign-in check), the browser, MCP servers, and the vault itself. Keys and passwords never reach the model. |
122
+
| Connections | Plug things in from the phone: the model (provider presets, key straight into the vault, one-tap test), your mailbox (read and send, with a sign-in check), your calendar (the private `.ics` link of Google / Outlook / iCloud / Fastmail, kept in the vault; today's events show in the Feed), the browser, MCP servers, and the vault itself. Keys and passwords never reach the model. |
123
123
124
-
The first time you open it, a short setup runs instead: your name, your Muse's name and style, the model and key, optionally your mail. Skip it if `config.toml` already says it all.
124
+
The first time you open it, a short setup runs instead: your name, your Muse's name and style, the model and key, optionally your mail and calendar. Skip it if `config.toml` already says it all.
125
125
126
126
Add it to the home screen and turn on notifications (Settings): the phone buzzes when the agent needs an approval, has a question, finished something in the background, or a reminder or check-in is due — standard Web Push through the browser, no account with anyone — and the icon shows how many cards are waiting. Needs `https://` or `localhost`; see [deployment](docs/deployment.md).
127
127
@@ -191,7 +191,7 @@ flowchart LR
191
191
G <--> V[(vault.enc)]
192
192
T --> F[files · shell · python]
193
193
T --> W[web_search · web_fetch · browser]
194
-
T --> E[email]
194
+
T --> E[email · calendar]
195
195
T --> MCP[MCP servers]
196
196
T <--> M[(memory.db)]
197
197
T <--> GO[(goals.db)]
@@ -242,7 +242,8 @@ More in [docs/architecture.md](docs/architecture.md).
242
242
-[x] Browser view: watch the agent browse live, take over for sign-ins
243
243
-[x] Local models (Ollama) with automatic prompt-mode fallback
244
244
-[ ] Triggers for goals: cron, webhooks, new mail
245
-
-[ ] Calendar and contacts connectors (via MCP)
245
+
-[x] Calendar connector: any private `.ics` link or file; agenda, free time, drafted events as *Add to calendar* cards
246
+
-[ ] Contacts connector
246
247
-[x] Memory that stays tidy: rare-word recall, updates instead of duplicates, a periodic tidy-up with undo
247
248
-[ ] Memory recall with embeddings
248
249
-[ ] Per-tool sandboxes for `shell` and `python_execute`
0 commit comments