Desktop Calendar Tauri — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Desktop Calendar Tauri (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<p align="center"> <img src="icons/app-icon-256.png" alt="DayPilot app icon" width="128" height="128"> </p>
DayPilot is a local-first desktop calendar for both humans and AI agents. Humans manage schedules through a lightweight desktop UI, while agents use the built-in local MCP server to read and write the same SQLite calendar database.
http://127.0.0.1:18765/mcp.Human user
-> Tauri desktop window
-> React UI
-> Zustand store
-> Tauri IPC
-> SQLite
AI agent
-> MCP client
-> Local MCP HTTP server
-> MCP tools
-> SQLite
-> db:events_changed
-> React UI refresh| Layer | Technology |
|---|---|
| Desktop shell | Tauri 2 |
| Frontend | React 18, TypeScript, Vite 6 |
| UI | Phosphor Icons, Geist Sans/Mono, CSS variables |
| State | Zustand |
| Database | SQLite, rusqlite |
| Agent protocol | rmcp Streamable HTTP Server, MCP Apps Widgets |
| Tests | Vitest, Cargo test |
| Tool | Description |
|---|---|
list_events | List events in a fixed time range and optionally return an events-list widget. |
get_event | Fetch a single event and optionally return an event-detail widget. |
create_event | Create an event with validation and UI sync. |
update_event | Update an event. Supports clear_fields for nullable fields. |
delete_event | Soft-delete an event. |
get_free_slots | Query free slots for a YYYY-MM-DD date and optionally return a widget. |
MCP time inputs use fixed string formats:
YYYY-MM-DD HH:mmYYYY-MM-DDAsia/ShanghaiStart the desktop app first. The MCP server starts with the app.
{
"mcpServers": {
"desktop-calendar": {
"type": "http",
"url": "http://127.0.0.1:18765/mcp"
}
}
}Health check:
http://127.0.0.1:18765/healthPrerequisites:
Install dependencies:
npm installRun the frontend dev server:
npm run devRun the Tauri desktop app:
npm run tauri devBuild the frontend:
npm run buildRun tests:
npm test
cd src-tauri
cargo testdesktop-calendar-tauri/
├─ src/
│ ├─ components/
│ │ ├─ Calendar/ # Event cards, dialog, tooltip
│ │ ├─ Common/ # Error boundary, toast, diagnostics, status bar
│ │ ├─ WeekView/ # Week grid, header, time line, day columns
│ │ └─ Widget/ # Floating desktop widget
│ ├─ hooks/ # Stateful frontend workflows
│ ├─ services/ # Tauri IPC boundary
│ ├─ stores/ # Zustand global state
│ ├─ utils/ # Pure utilities
│ ├─ constants/ # Shared constants
│ └─ types/ # TypeScript types
├─ src-tauri/
│ ├─ src/
│ │ ├─ commands/ # Tauri IPC commands
│ │ ├─ db/ # SQLite schema, migrations, repositories
│ │ ├─ mcp/ # MCP server, tools, resources, widgets
│ │ └─ models/ # Rust data models
│ └─ tests/ # Rust integration tests
├─ docs/
│ └─ DEVELOPMENT-GUIDELINES.md
└─ README.md| Platform | Status | Notes |
|---|---|---|
| Windows | Verified | Tray, transparent window, bottom-right positioning, single instance, and MCP server are tested. |
| macOS | Expected, not fully verified | Core stack is cross-platform, but menu bar tray icon, Dock behavior, transparent always-on-top windows, signing, and notarization still need validation. |
| Linux | Not verified | Core stack is cross-platform, but tray and transparent-window behavior depend on the desktop environment. |
Project-specific rules live in docs/DEVELOPMENT-GUIDELINES.md.
Key boundaries:
App.tsx is composition only.src/services/tauriCommands.ts, not raw invokeSafe or invokeOrThrow.App.css.MIT
DayPilot 是一个面向人类用户和 AI Agent 的本地优先桌面日历。 人类通过轻量桌面界面管理日程,Agent 通过内置本地 MCP Server 读写同一份 SQLite 日历数据库。
http://127.0.0.1:18765/mcp。人类用户
-> Tauri 桌面窗口
-> React UI
-> Zustand store
-> Tauri IPC
-> SQLite
AI Agent
-> MCP client
-> 本地 MCP HTTP server
-> MCP tools
-> SQLite
-> db:events_changed
-> React UI 刷新| 层级 | 技术 |
|---|---|
| 桌面壳 | Tauri 2 |
| 前端 | React 18, TypeScript, Vite 6 |
| UI | Phosphor Icons, Geist Sans/Mono, CSS variables |
| 状态管理 | Zustand |
| 数据库 | SQLite, rusqlite |
| Agent 协议 | rmcp Streamable HTTP Server, MCP Apps Widgets |
| 测试 | Vitest, Cargo test |
| 工具 | 说明 |
|---|---|
list_events | 按固定时间范围查询事件,可返回事件列表 Widget。 |
get_event | 查询单个事件详情,可返回事件详情 Widget。 |
create_event | 创建事件,并进行参数校验和界面同步。 |
update_event | 更新事件,支持用 clear_fields 清空可空字段。 |
delete_event | 软删除事件。 |
get_free_slots | 按 YYYY-MM-DD 查询空闲时间段,可返回空闲时间 Widget。 |
MCP 时间入参使用固定字符串格式:
YYYY-MM-DD HH:mmYYYY-MM-DDAsia/Shanghai 解读先启动桌面应用,MCP Server 会随应用自动启动。
{
"mcpServers": {
"desktop-calendar": {
"type": "http",
"url": "http://127.0.0.1:18765/mcp"
}
}
}健康检查:
http://127.0.0.1:18765/health前置要求:
安装依赖:
npm install启动前端开发服务:
npm run dev启动 Tauri 桌面应用:
npm run tauri dev构建前端:
npm run build运行测试:
npm test
cd src-tauri
cargo testdesktop-calendar-tauri/
├─ src/
│ ├─ components/
│ │ ├─ Calendar/ # 事件卡片、弹窗、Tooltip
│ │ ├─ Common/ # 错误边界、Toast、诊断面板、状态栏
│ │ ├─ WeekView/ # 周视图网格、头部、时间线、日列
│ │ └─ Widget/ # 悬浮桌面 Widget
│ ├─ hooks/ # 前端状态流程
│ ├─ services/ # Tauri IPC 边界
│ ├─ stores/ # Zustand 全局状态
│ ├─ utils/ # 纯工具函数
│ ├─ constants/ # 共享常量
│ └─ types/ # TypeScript 类型
├─ src-tauri/
│ ├─ src/
│ │ ├─ commands/ # Tauri IPC 命令
│ │ ├─ db/ # SQLite schema、迁移、仓库层
│ │ ├─ mcp/ # MCP server、tools、resources、widgets
│ │ └─ models/ # Rust 数据模型
│ └─ tests/ # Rust 集成测试
├─ docs/
│ └─ DEVELOPMENT-GUIDELINES.md
└─ README.md| 平台 | 状态 | 说明 |
|---|---|---|
| Windows | 已验证 | 托盘、透明窗口、右下角定位、单实例和 MCP Server 均已测试。 |
| macOS | 理论兼容,尚未完整验证 | 核心技术栈跨平台,但菜单栏图标、Dock 行为、透明置顶窗口、签名和 notarization 仍需验证。 |
| Linux | 未验证 | 核心技术栈跨平台,但托盘和透明窗口行为依赖桌面环境。 |
项目专用开发规范见 docs/DEVELOPMENT-GUIDELINES.md。
关键边界:
App.tsx 只做组合,不承载业务细节。src/services/tauriCommands.ts,不直接调用 invokeSafe 或 invokeOrThrow。App.css。MIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.